From fba58d76b3bea3a8257f9762eb65fd2db0eccef0 Mon Sep 17 00:00:00 2001 From: Matthew Stanley <1379tech@gmail.com> Date: Sun, 12 Apr 2026 20:29:03 -0700 Subject: [PATCH] Phase 4 interrupt fixes: RFE, GPR save/restore, DMA IRQ edge-trigger Three interrupt delivery bugs fixed that were blocking shell progression: 1. RFE after handler exit: The exception handler's normal exit path (jmpbuf longjmp at 0xBFC10944) does not execute RFE. In our model the handler returns to psx_check_interrupts, not to the WaitEvent caller. Without RFE, IEc stays 0 forever after the first interrupt. Fix: apply RFE in psx_check_interrupts if IEc is still 0 after the handler returns. 2. GPR save/restore around handler dispatch: The handler's jmpbuf exit restores callee-saved registers from the kernel jmpbuf (intended for a non-local jump to WaitEvent's caller). In our model this corrupts the interrupted code's registers. Fix: save all GPRs before handler dispatch and restore them after, matching real hardware where the interrupted code's registers are preserved via TCB save/restore. 3. VBlank tick gated on !in_exception: The handler runs thousands of block leaders, each calling psx_check_interrupts. Without gating, dispatch_count advances inside the handler, firing new VBlanks that stack up and starve the main code. Fix: only increment dispatch_count and fire VBlank/timer ticks when not in exception handling. 4. DMA IRQ edge-triggered: update_master_irq() was level-triggered, re-asserting i_stat bit 3 on every call while master_flag=1. Combined with no BIOS callback to acknowledge DMA IRQs, this caused an interrupt storm. Fix: edge-detect master_flag 0->1 transition, and suppress DMA completion IRQs entirely since transfers are synchronous. Also adds GPU debug diagnostics: GP0 command counters (nop/fill/draw/ env/copy), draw area/offset in gpu_state, vram_peek debug command. Co-Authored-By: Claude Opus 4.6 (1M context) --- HANDOFF.md | 108 + generated/SCPH1001_dispatch.c | 480 +- generated/SCPH1001_full.c | 24030 +++++++++++++++++++- generated/discovery_run.log.json | 1167 +- generated/function_edges.json | 15650 ++++++++++++- generated/function_manifest.json | 8656 ++++++- generated/indirect_jump_classes.json | 18 +- generated/indirect_jumps.json | 4396 +++- generated/skipped_functions.json | 17 +- generated/unsupported_ops.json | 173 +- recompiler/seeds/dispatch_miss_seeds.json | 29 + recompiler/seeds/phase2_ghidra_seeds.json | 314 +- recompiler/src/full_function_emitter.cpp | 66 +- recompiler/src/function_discovery.cpp | 45 + runtime/CMakeLists.txt | 16 + runtime/include/debug_server.h | 125 + runtime/include/dma.h | 34 + runtime/include/gpu.h | 51 + runtime/include/interrupts.h | 8 + runtime/include/memcard.h | 31 + runtime/include/sio.h | 36 + runtime/src/debug_server.c | 1106 + runtime/src/dma.c | 304 + runtime/src/gpu.c | 1275 ++ runtime/src/interrupts.c | 162 +- runtime/src/main.cpp | 188 +- runtime/src/memcard.c | 146 + runtime/src/memory.c | 50 +- runtime/src/sio.c | 527 + runtime/src/traps.c | 189 +- tools/gen_phase2_seeds.py | 79 + 31 files changed, 59124 insertions(+), 352 deletions(-) create mode 100644 HANDOFF.md create mode 100644 recompiler/seeds/dispatch_miss_seeds.json create mode 100644 runtime/include/debug_server.h create mode 100644 runtime/include/dma.h create mode 100644 runtime/include/gpu.h create mode 100644 runtime/include/memcard.h create mode 100644 runtime/include/sio.h create mode 100644 runtime/src/debug_server.c create mode 100644 runtime/src/dma.c create mode 100644 runtime/src/gpu.c create mode 100644 runtime/src/memcard.c create mode 100644 runtime/src/sio.c create mode 100644 tools/gen_phase2_seeds.py diff --git a/HANDOFF.md b/HANDOFF.md new file mode 100644 index 00000000..0fac3998 --- /dev/null +++ b/HANDOFF.md @@ -0,0 +1,108 @@ +# PSXRecomp v4 — Session Handoff (Phase 4, mid-session) + +Read first, in order: + +1. `CLAUDE.md` +2. `PLAN.md` +3. `PRINCIPLES.md` +4. `DEBUG.md` + +Then state exactly: + +`Architecture A is locked. No interpreter. No HLE. No stubs. BIOS first. Game never until Phase 5.` + +--- + +## Current state (DO NOT REDO — all of this is built and working) + +### Infrastructure complete + +| Component | File | Status | +|-----------|------|--------| +| SIO controller state machine | `runtime/src/sio.c` | Ported from v3, audited, wired into memory.c | +| Memory card (SIO protocol) | `runtime/src/memcard.c` | Ported from v3, audited, 128KB .mcd files auto-created | +| SDL keyboard → SIO pad | `runtime/src/main.cpp` | Arrows/XZSA/Enter/RShift mapped to PS1 digital pad | +| TCP debug server | `runtime/src/debug_server.c` | Port 4370, 36K-frame ring buffer, 28 commands | +| GPUSTAT poll-triggered vblank | `runtime/src/gpu.c` | Prevents infinite spin in BIOS VSYNC wait loops | + +### What boots and runs + +- BIOS executes from reset vector (0xBFC00000) +- Sony logo renders (red diamond visible on screen — confirmed via screenshot) +- BIOS reaches shell main loop (confirmed via RA=0xBFC41D18 in diagnostics) +- No dispatch misses, no crashes +- TCP debug server responds to all commands (ping, get_registers, irq_state, read_ram, screenshot, etc.) +- Memory cards initialized with correct PS1 blank format (verified byte-for-byte) +- Controller connected on port 1, keyboard input feeds into SIO + +### Known issue: IEc=0 (interrupts disabled) + +COP0 SR is always 0x00000404 (IEp=1, IEc=0, IM2=1). The BIOS never enables IEc. + +**This blocks:** +- VBlank interrupt delivery → BIOS animation timers don't advance +- The Sony logo → shell transition (which likely needs VBlank counting) +- Any interrupt-driven BIOS behavior (event chain processing) + +**What we know:** +- Exception handler IS installed at 0x80000080: `lui $k0,0 / addiu $k0,0x0C80 / jr $k0 / nop` → handler at RAM 0xC80 (ROM 0xBFC10780), IS in dispatch table +- B0 trampoline IS installed at 0xB0: target 0x5E0 (ROM 0xBFC100E0), IS in dispatch table +- i_mask=0x0000000D (VBLANK+CDROM+DMA enabled) — BIOS DID set up the mask +- i_stat=0x00000009 (VBLANK+DMA pending) — interrupts are pending but never delivered +- ExitCriticalSection (func_1FC0D8C0, syscall $a0=2) exists and is recompiled correctly +- The BIOS never calls ExitCriticalSection during the observed execution + +**Root cause candidates (investigate in order):** +1. The BIOS boot code path that enables IEc may go through a dispatch miss that was silently nop'd (check if `psx_unknown_dispatch` ever fires during early boot by adding a one-time counter) +2. The BIOS may enable IEc via MTC0 inside a function that has an early `return` due to a recompiler bug (e.g., alignment check bailing out) +3. The RFE at 0xBFC10B14 in the exception handler has a `jr $k0` that may not be emitting `cpu->pc = cpu->gpr[26]` in the generated code — check SCPH1001_full.c line 36416 for this + +**Investigation approach (per DEBUG.md):** +1. Use TCP debug server: `{"cmd":"irq_state"}` to confirm IEc +2. Use Ghidra to find the BIOS function that calls ExitCriticalSection during shell init +3. Trace why that function is never reached +4. Fix the root cause (recompiler, dispatch, or traps.c) + +--- + +## Regeneration (idempotent) + +```bash +cd F:/Projects/psxrecomp-v4 +PATH=/c/msys64/mingw64/bin:$PATH + +# Only if recompiler changed: +cd recompiler/build && cmake --build . && cd ../.. + +# Only if seeds changed: +python3 tools/gen_phase2_seeds.py +recompiler/build/psxrecomp-bios.exe bios/SCPH1001.BIN generated/ \ + --emit-full recompiler/seeds/phase2_ghidra_seeds.json + +# Runtime build: +cd runtime/build && cmake --build . && cd ../.. + +# Run (ONE INSTANCE ONLY — always taskkill first): +taskkill //F //IM psx-runtime.exe 2>/dev/null +cd runtime/build && ./psx-runtime.exe ../../bios/SCPH1001.BIN +``` + +--- + +## Hard constraints + +- No HLE behavior anywhere +- No stubs +- No direct BIOS state mutation +- No printf debugging (use TCP debug server) +- No generated C edits +- ONE runtime instance at a time (taskkill before launching) +- Do not touch unrelated systems unless needed for the IEc fix + +--- + +## Next milestone + +Fix IEc=0 so VBlank interrupts fire → BIOS logo animation completes → BIOS shell renders with text → controller input navigates shell → memory card screen works. + +Phase 4 is complete ONLY when all of that works with no fake events. diff --git a/generated/SCPH1001_dispatch.c b/generated/SCPH1001_dispatch.c index ea62b3cc..d5ebf4eb 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: 801 + * Dispatch entries: 1037 */ #include "cpu_state.h" @@ -63,14 +63,17 @@ extern void func_00001958(CPUState* cpu); extern void func_00001990(CPUState* cpu); extern void func_000019C8(CPUState* cpu); extern void func_00001A00(CPUState* cpu); +extern void func_00001A24(CPUState* cpu); extern void func_00001A2C(CPUState* cpu); extern void func_00001A60(CPUState* cpu); extern void func_00001AE8(CPUState* cpu); extern void func_00001AFC(CPUState* cpu); +extern void func_00001B10(CPUState* cpu); extern void func_00001B20(CPUState* cpu); extern void func_00001B44(CPUState* cpu); extern void func_00001C5C(CPUState* cpu); extern void func_00001D00(CPUState* cpu); +extern void func_00001D40(CPUState* cpu); extern void func_00001D70(CPUState* cpu); extern void func_00001D8C(CPUState* cpu); extern void func_00001E1C(CPUState* cpu); @@ -184,9 +187,26 @@ extern void func_0000609C(CPUState* cpu); extern void func_000061C4(CPUState* cpu); extern void func_00006390(CPUState* cpu); extern void func_000063BC(CPUState* cpu); +extern void func_000063F8(CPUState* cpu); extern void func_00006408(CPUState* cpu); extern void func_0000659C(CPUState* cpu); extern void func_00006670(CPUState* cpu); +extern void func_00006A70(CPUState* cpu); +extern void func_00006A80(CPUState* cpu); +extern void func_00006A90(CPUState* cpu); +extern void func_00006AA0(CPUState* cpu); +extern void func_00006AB0(CPUState* cpu); +extern void func_00006AC0(CPUState* cpu); +extern void func_00006AD0(CPUState* cpu); +extern void func_00006AE0(CPUState* cpu); +extern void func_00006AF0(CPUState* cpu); +extern void func_00006B00(CPUState* cpu); +extern void func_00006B10(CPUState* cpu); +extern void func_00006B20(CPUState* cpu); +extern void func_00006B30(CPUState* cpu); +extern void func_00006B40(CPUState* cpu); +extern void func_00006B50(CPUState* cpu); +extern void func_00006B80(CPUState* cpu); extern void func_00006B90(CPUState* cpu); extern void func_00006BA0(CPUState* cpu); extern void func_00006BB0(CPUState* cpu); @@ -483,41 +503,67 @@ extern void func_1FC192E4(CPUState* cpu); extern void func_1FC193C0(CPUState* cpu); extern void func_1FC1952C(CPUState* cpu); extern void func_1FC19630(CPUState* cpu); +extern void func_1FC196C8(CPUState* cpu); extern void func_1FC196D4(CPUState* cpu); extern void func_1FC19A58(CPUState* cpu); extern void func_1FC19DF4(CPUState* cpu); +extern void func_1FC1A11C(CPUState* cpu); extern void func_1FC1A15C(CPUState* cpu); extern void func_1FC1A17C(CPUState* cpu); extern void func_1FC1A19C(CPUState* cpu); +extern void func_1FC1A3B8(CPUState* cpu); +extern void func_1FC1A414(CPUState* cpu); +extern void func_1FC1A420(CPUState* cpu); extern void func_1FC1A430(CPUState* cpu); extern void func_1FC1A5B0(CPUState* cpu); extern void func_1FC1A6EC(CPUState* cpu); extern void func_1FC1AA90(CPUState* cpu); extern void func_1FC1AC68(CPUState* cpu); +extern void func_1FC1AE24(CPUState* cpu); +extern void func_1FC1AE34(CPUState* cpu); extern void func_1FC1AE68(CPUState* cpu); +extern void func_1FC1B6EC(CPUState* cpu); +extern void func_1FC1B784(CPUState* cpu); extern void func_1FC1B7E0(CPUState* cpu); +extern void func_1FC1BD3C(CPUState* cpu); +extern void func_1FC1BD58(CPUState* cpu); extern void func_1FC1BD68(CPUState* cpu); extern void func_1FC1BEE0(CPUState* cpu); extern void func_1FC1BF44(CPUState* cpu); extern void func_1FC1C130(CPUState* cpu); +extern void func_1FC1C1A4(CPUState* cpu); extern void func_1FC1C4C0(CPUState* cpu); extern void func_1FC1C78C(CPUState* cpu); extern void func_1FC1C8EC(CPUState* cpu); +extern void func_1FC1C978(CPUState* cpu); +extern void func_1FC1C988(CPUState* cpu); +extern void func_1FC1C998(CPUState* cpu); +extern void func_1FC1C9A8(CPUState* cpu); extern void func_1FC1C9B4(CPUState* cpu); extern void func_1FC1CAF0(CPUState* cpu); extern void func_1FC1CBAC(CPUState* cpu); +extern void func_1FC1CD40(CPUState* cpu); +extern void func_1FC1CD90(CPUState* cpu); extern void func_1FC1CDD8(CPUState* cpu); +extern void func_1FC1D980(CPUState* cpu); +extern void func_1FC1D9C4(CPUState* cpu); extern void func_1FC1DBF4(CPUState* cpu); extern void func_1FC1DDD8(CPUState* cpu); extern void func_1FC1DF50(CPUState* cpu); extern void func_1FC1E0C4(CPUState* cpu); extern void func_1FC1E10C(CPUState* cpu); +extern void func_1FC1E1CC(CPUState* cpu); +extern void func_1FC1E3AC(CPUState* cpu); extern void func_1FC1E3CC(CPUState* cpu); extern void func_1FC1F6AC(CPUState* cpu); +extern void func_1FC1F778(CPUState* cpu); extern void func_1FC1F980(CPUState* cpu); +extern void func_1FC1FCC8(CPUState* cpu); extern void func_1FC1FFA8(CPUState* cpu); extern void func_1FC20338(CPUState* cpu); extern void func_1FC2069C(CPUState* cpu); +extern void func_1FC20B60(CPUState* cpu); +extern void func_1FC20B9C(CPUState* cpu); extern void func_1FC20BE4(CPUState* cpu); extern void func_1FC20C64(CPUState* cpu); extern void func_1FC20CE4(CPUState* cpu); @@ -538,6 +584,8 @@ extern void func_1FC2125C(CPUState* cpu); extern void func_1FC212C4(CPUState* cpu); extern void func_1FC21320(CPUState* cpu); extern void func_1FC213A4(CPUState* cpu); +extern void func_1FC213E8(CPUState* cpu); +extern void func_1FC213F4(CPUState* cpu); extern void func_1FC213FC(CPUState* cpu); extern void func_1FC214B0(CPUState* cpu); extern void func_1FC218CC(CPUState* cpu); @@ -552,6 +600,7 @@ extern void func_1FC22E90(CPUState* cpu); extern void func_1FC23078(CPUState* cpu); extern void func_1FC230C4(CPUState* cpu); extern void func_1FC2311C(CPUState* cpu); +extern void func_1FC2324C(CPUState* cpu); extern void func_1FC232DC(CPUState* cpu); extern void func_1FC23500(CPUState* cpu); extern void func_1FC23524(CPUState* cpu); @@ -564,14 +613,28 @@ extern void func_1FC24F00(CPUState* cpu); extern void func_1FC251A8(CPUState* cpu); extern void func_1FC25200(CPUState* cpu); extern void func_1FC252BC(CPUState* cpu); +extern void func_1FC25314(CPUState* cpu); extern void func_1FC2531C(CPUState* cpu); extern void func_1FC25390(CPUState* cpu); extern void func_1FC254B0(CPUState* cpu); extern void func_1FC25558(CPUState* cpu); +extern void func_1FC255A0(CPUState* cpu); +extern void func_1FC256D8(CPUState* cpu); extern void func_1FC25754(CPUState* cpu); +extern void func_1FC25884(CPUState* cpu); +extern void func_1FC2592C(CPUState* cpu); +extern void func_1FC259D8(CPUState* cpu); extern void func_1FC25B74(CPUState* cpu); +extern void func_1FC25C74(CPUState* cpu); +extern void func_1FC25C7C(CPUState* cpu); +extern void func_1FC25C84(CPUState* cpu); +extern void func_1FC25C8C(CPUState* cpu); +extern void func_1FC25C94(CPUState* cpu); +extern void func_1FC25CB0(CPUState* cpu); +extern void func_1FC25CB8(CPUState* cpu); extern void func_1FC25CC0(CPUState* cpu); extern void func_1FC25D8C(CPUState* cpu); +extern void func_1FC25E60(CPUState* cpu); extern void func_1FC25E8C(CPUState* cpu); extern void func_1FC25EF8(CPUState* cpu); extern void func_1FC2632C(CPUState* cpu); @@ -580,11 +643,14 @@ extern void func_1FC264A0(CPUState* cpu); extern void func_1FC26550(CPUState* cpu); extern void func_1FC265C0(CPUState* cpu); extern void func_1FC26610(CPUState* cpu); +extern void func_1FC26660(CPUState* cpu); extern void func_1FC26670(CPUState* cpu); extern void func_1FC266B0(CPUState* cpu); extern void func_1FC268EC(CPUState* cpu); +extern void func_1FC26AF8(CPUState* cpu); extern void func_1FC26C10(CPUState* cpu); extern void func_1FC26E64(CPUState* cpu); +extern void func_1FC26EF8(CPUState* cpu); extern void func_1FC27190(CPUState* cpu); extern void func_1FC273E4(CPUState* cpu); extern void func_1FC27868(CPUState* cpu); @@ -593,24 +659,43 @@ extern void func_1FC27A2C(CPUState* cpu); extern void func_1FC27B24(CPUState* cpu); extern void func_1FC27BDC(CPUState* cpu); extern void func_1FC27CC8(CPUState* cpu); +extern void func_1FC27D2C(CPUState* cpu); extern void func_1FC27DB0(CPUState* cpu); extern void func_1FC27E68(CPUState* cpu); extern void func_1FC27E88(CPUState* cpu); extern void func_1FC27EB4(CPUState* cpu); +extern void func_1FC27FB0(CPUState* cpu); extern void func_1FC28064(CPUState* cpu); +extern void func_1FC282E8(CPUState* cpu); +extern void func_1FC28370(CPUState* cpu); +extern void func_1FC283F0(CPUState* cpu); extern void func_1FC28490(CPUState* cpu); extern void func_1FC284F0(CPUState* cpu); extern void func_1FC2886C(CPUState* cpu); extern void func_1FC28B84(CPUState* cpu); +extern void func_1FC291C4(CPUState* cpu); extern void func_1FC29770(CPUState* cpu); extern void func_1FC29AE0(CPUState* cpu); extern void func_1FC29FE8(CPUState* cpu); extern void func_1FC2A31C(CPUState* cpu); +extern void func_1FC2A4E0(CPUState* cpu); extern void func_1FC2ACD0(CPUState* cpu); +extern void func_1FC2B0A8(CPUState* cpu); +extern void func_1FC2B1FC(CPUState* cpu); +extern void func_1FC2B22C(CPUState* cpu); +extern void func_1FC2B260(CPUState* cpu); +extern void func_1FC2BF00(CPUState* cpu); +extern void func_1FC2BF10(CPUState* cpu); extern void func_1FC2BF1C(CPUState* cpu); extern void func_1FC2BF74(CPUState* cpu); +extern void func_1FC2C1C4(CPUState* cpu); extern void func_1FC2C2F0(CPUState* cpu); extern void func_1FC2C3E0(CPUState* cpu); +extern void func_1FC2C7F4(CPUState* cpu); +extern void func_1FC2C8A8(CPUState* cpu); +extern void func_1FC2C988(CPUState* cpu); +extern void func_1FC2CA50(CPUState* cpu); +extern void func_1FC2CA58(CPUState* cpu); extern void func_1FC2CA9C(CPUState* cpu); extern void func_1FC2CAE0(CPUState* cpu); extern void func_1FC2CB24(CPUState* cpu); @@ -619,22 +704,41 @@ extern void func_1FC2CC10(CPUState* cpu); extern void func_1FC2CCC4(CPUState* cpu); extern void func_1FC2CE08(CPUState* cpu); extern void func_1FC2CF54(CPUState* cpu); +extern void func_1FC2D0A4(CPUState* cpu); extern void func_1FC2D0E0(CPUState* cpu); extern void func_1FC2E44C(CPUState* cpu); +extern void func_1FC2E4D0(CPUState* cpu); +extern void func_1FC2E544(CPUState* cpu); +extern void func_1FC2E574(CPUState* cpu); +extern void func_1FC2E5B4(CPUState* cpu); +extern void func_1FC2E5C0(CPUState* cpu); extern void func_1FC2E600(CPUState* cpu); extern void func_1FC2E65C(CPUState* cpu); +extern void func_1FC2E6B8(CPUState* cpu); +extern void func_1FC2E8CC(CPUState* cpu); +extern void func_1FC2EA94(CPUState* cpu); +extern void func_1FC2EC90(CPUState* cpu); +extern void func_1FC2ECD8(CPUState* cpu); extern void func_1FC2ED1C(CPUState* cpu); extern void func_1FC2EE6C(CPUState* cpu); +extern void func_1FC2EEC0(CPUState* cpu); +extern void func_1FC2EF00(CPUState* cpu); extern void func_1FC2EF40(CPUState* cpu); +extern void func_1FC2F1D4(CPUState* cpu); extern void func_1FC2F210(CPUState* cpu); extern void func_1FC2F618(CPUState* cpu); extern void func_1FC2F65C(CPUState* cpu); +extern void func_1FC2F6A0(CPUState* cpu); extern void func_1FC2F718(CPUState* cpu); +extern void func_1FC2F79C(CPUState* cpu); extern void func_1FC2F808(CPUState* cpu); extern void func_1FC2F85C(CPUState* cpu); extern void func_1FC2F8AC(CPUState* cpu); +extern void func_1FC2FA78(CPUState* cpu); +extern void func_1FC2FC10(CPUState* cpu); extern void func_1FC2FCC4(CPUState* cpu); extern void func_1FC2FE6C(CPUState* cpu); +extern void func_1FC2FF34(CPUState* cpu); extern void func_1FC3010C(CPUState* cpu); extern void func_1FC3015C(CPUState* cpu); extern void func_1FC301AC(CPUState* cpu); @@ -643,6 +747,20 @@ extern void func_1FC3029C(CPUState* cpu); extern void func_1FC302BC(CPUState* cpu); extern void func_1FC3031C(CPUState* cpu); extern void func_1FC30350(CPUState* cpu); +extern void func_1FC303A4(CPUState* cpu); +extern void func_1FC3041C(CPUState* cpu); +extern void func_1FC3045C(CPUState* cpu); +extern void func_1FC30470(CPUState* cpu); +extern void func_1FC30484(CPUState* cpu); +extern void func_1FC30498(CPUState* cpu); +extern void func_1FC304B4(CPUState* cpu); +extern void func_1FC30514(CPUState* cpu); +extern void func_1FC30554(CPUState* cpu); +extern void func_1FC30560(CPUState* cpu); +extern void func_1FC3056C(CPUState* cpu); +extern void func_1FC30578(CPUState* cpu); +extern void func_1FC3058C(CPUState* cpu); +extern void func_1FC30670(CPUState* cpu); extern void func_1FC3079C(CPUState* cpu); extern void func_1FC30868(CPUState* cpu); extern void func_1FC30960(CPUState* cpu); @@ -656,35 +774,71 @@ extern void func_1FC31580(CPUState* cpu); extern void func_1FC31638(CPUState* cpu); extern void func_1FC317D0(CPUState* cpu); extern void func_1FC31968(CPUState* cpu); +extern void func_1FC319EC(CPUState* cpu); extern void func_1FC31C64(CPUState* cpu); extern void func_1FC31D14(CPUState* cpu); extern void func_1FC31DC4(CPUState* cpu); extern void func_1FC31E74(CPUState* cpu); +extern void func_1FC32010(CPUState* cpu); +extern void func_1FC32040(CPUState* cpu); +extern void func_1FC32078(CPUState* cpu); +extern void func_1FC320B4(CPUState* cpu); +extern void func_1FC32100(CPUState* cpu); +extern void func_1FC321F0(CPUState* cpu); extern void func_1FC322E4(CPUState* cpu); +extern void func_1FC32368(CPUState* cpu); extern void func_1FC32410(CPUState* cpu); extern void func_1FC32450(CPUState* cpu); extern void func_1FC3255C(CPUState* cpu); +extern void func_1FC32710(CPUState* cpu); extern void func_1FC32724(CPUState* cpu); extern void func_1FC32820(CPUState* cpu); extern void func_1FC328F4(CPUState* cpu); +extern void func_1FC32944(CPUState* cpu); extern void func_1FC329F0(CPUState* cpu); extern void func_1FC32CCC(CPUState* cpu); extern void func_1FC33138(CPUState* cpu); extern void func_1FC331A0(CPUState* cpu); 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_1FC339F0(CPUState* cpu); +extern void func_1FC33C98(CPUState* cpu); extern void func_1FC33CC0(CPUState* cpu); +extern void func_1FC33F00(CPUState* cpu); +extern void func_1FC33F20(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_1FC34160(CPUState* cpu); extern void func_1FC34304(CPUState* cpu); extern void func_1FC344A4(CPUState* cpu); 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_1FC349B8(CPUState* cpu); +extern void func_1FC34AF0(CPUState* cpu); extern void func_1FC34B58(CPUState* cpu); +extern void func_1FC3586C(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_1FC36068(CPUState* cpu); +extern void func_1FC362D0(CPUState* cpu); +extern void func_1FC36740(CPUState* cpu); extern void func_1FC36CF0(CPUState* cpu); extern void func_1FC36D1C(CPUState* cpu); +extern void func_1FC36D48(CPUState* cpu); +extern void func_1FC36DD0(CPUState* cpu); +extern void func_1FC36DF8(CPUState* cpu); extern void func_1FC36EC0(CPUState* cpu); extern void func_1FC36F90(CPUState* cpu); +extern void func_1FC36FF0(CPUState* cpu); extern void func_1FC37028(CPUState* cpu); extern void func_1FC37070(CPUState* cpu); extern void func_1FC370A0(CPUState* cpu); @@ -704,52 +858,115 @@ extern void func_1FC37908(CPUState* cpu); extern void func_1FC37998(CPUState* cpu); extern void func_1FC37A4C(CPUState* cpu); extern void func_1FC37AC4(CPUState* cpu); +extern void func_1FC37DC8(CPUState* cpu); +extern void func_1FC37E60(CPUState* cpu); +extern void func_1FC37F4C(CPUState* cpu); +extern void func_1FC38038(CPUState* cpu); +extern void func_1FC38090(CPUState* cpu); +extern void func_1FC38108(CPUState* cpu); extern void func_1FC38204(CPUState* cpu); extern void func_1FC382E0(CPUState* cpu); extern void func_1FC38524(CPUState* cpu); extern void func_1FC387D4(CPUState* cpu); extern void func_1FC38A7C(CPUState* cpu); +extern void func_1FC38AA4(CPUState* cpu); +extern void func_1FC38AD4(CPUState* cpu); +extern void func_1FC38B28(CPUState* cpu); +extern void func_1FC38B80(CPUState* cpu); extern void func_1FC38BE8(CPUState* cpu); extern void func_1FC38C68(CPUState* cpu); extern void func_1FC38DAC(CPUState* cpu); +extern void func_1FC38F8C(CPUState* cpu); extern void func_1FC39080(CPUState* cpu); +extern void func_1FC392E8(CPUState* cpu); +extern void func_1FC39300(CPUState* cpu); +extern void func_1FC393CC(CPUState* cpu); extern void func_1FC39410(CPUState* cpu); extern void func_1FC394EC(CPUState* cpu); extern void func_1FC3954C(CPUState* cpu); +extern void func_1FC395EC(CPUState* cpu); extern void func_1FC39630(CPUState* cpu); +extern void func_1FC396D0(CPUState* cpu); extern void func_1FC396E8(CPUState* cpu); +extern void func_1FC39804(CPUState* cpu); +extern void func_1FC398D4(CPUState* cpu); +extern void func_1FC39910(CPUState* cpu); +extern void func_1FC3994C(CPUState* cpu); +extern void func_1FC3999C(CPUState* cpu); +extern void func_1FC399EC(CPUState* cpu); +extern void func_1FC39A14(CPUState* cpu); +extern void func_1FC39A3C(CPUState* cpu); +extern void func_1FC39ADC(CPUState* cpu); +extern void func_1FC39BA4(CPUState* cpu); +extern void func_1FC39BCC(CPUState* cpu); extern void func_1FC39D38(CPUState* cpu); extern void func_1FC39E84(CPUState* cpu); +extern void func_1FC39F30(CPUState* cpu); +extern void func_1FC39F90(CPUState* cpu); extern void func_1FC39FE4(CPUState* cpu); extern void func_1FC3A094(CPUState* cpu); extern void func_1FC3A228(CPUState* cpu); extern void func_1FC3A2C0(CPUState* cpu); +extern void func_1FC3A44C(CPUState* cpu); +extern void func_1FC3A638(CPUState* cpu); +extern void func_1FC3A95C(CPUState* cpu); +extern void func_1FC3A9EC(CPUState* cpu); extern void func_1FC3AAC4(CPUState* cpu); +extern void func_1FC3AB70(CPUState* cpu); +extern void func_1FC3AC9C(CPUState* cpu); extern void func_1FC3AD68(CPUState* cpu); extern void func_1FC3B054(CPUState* cpu); +extern void func_1FC3B160(CPUState* cpu); extern void func_1FC3B30C(CPUState* cpu); extern void func_1FC3B368(CPUState* cpu); extern void func_1FC3B85C(CPUState* cpu); extern void func_1FC3B93C(CPUState* cpu); +extern void func_1FC3B964(CPUState* cpu); extern void func_1FC3BA74(CPUState* cpu); extern void func_1FC3BD78(CPUState* cpu); extern void func_1FC3BD98(CPUState* cpu); +extern void func_1FC3BDB8(CPUState* cpu); +extern void func_1FC3BE18(CPUState* cpu); extern void func_1FC3BE6C(CPUState* cpu); +extern void func_1FC3BE90(CPUState* cpu); extern void func_1FC3BF10(CPUState* cpu); +extern void func_1FC3BF40(CPUState* cpu); +extern void func_1FC3BFF0(CPUState* cpu); extern void func_1FC3C060(CPUState* cpu); extern void func_1FC3C140(CPUState* cpu); +extern void func_1FC3C19C(CPUState* cpu); +extern void func_1FC3C418(CPUState* cpu); extern void func_1FC3C428(CPUState* cpu); extern void func_1FC3C4E0(CPUState* cpu); extern void func_1FC3C710(CPUState* cpu); +extern void func_1FC3CEC8(CPUState* cpu); +extern void func_1FC3D304(CPUState* cpu); +extern void func_1FC3D65C(CPUState* cpu); extern void func_1FC3D810(CPUState* cpu); +extern void func_1FC3D870(CPUState* cpu); extern void func_1FC3D8C0(CPUState* cpu); +extern void func_1FC3DED0(CPUState* cpu); extern void func_1FC3DF20(CPUState* cpu); +extern void func_1FC3DF90(CPUState* cpu); extern void func_1FC3E020(CPUState* cpu); +extern void func_1FC3E0C0(CPUState* cpu); +extern void func_1FC3E0E8(CPUState* cpu); extern void func_1FC3E110(CPUState* cpu); +extern void func_1FC3E324(CPUState* cpu); +extern void func_1FC3E390(CPUState* cpu); +extern void func_1FC3E634(CPUState* cpu); extern void func_1FC3E980(CPUState* cpu); +extern void func_1FC3ECB8(CPUState* cpu); extern void func_1FC3ED40(CPUState* cpu); extern void func_1FC3EDB4(CPUState* cpu); +extern void func_1FC3EE80(CPUState* cpu); +extern void func_1FC3EEC0(CPUState* cpu); +extern void func_1FC3EEE4(CPUState* cpu); +extern void func_1FC3EF08(CPUState* cpu); +extern void func_1FC3EF7C(CPUState* cpu); extern void func_1FC3EFF0(CPUState* cpu); +extern void func_1FC3F090(CPUState* cpu); +extern void func_1FC3F19C(CPUState* cpu); extern void func_1FC3F1B8(CPUState* cpu); extern void func_1FC3F2B4(CPUState* cpu); extern void func_1FC3F484(CPUState* cpu); @@ -773,10 +990,14 @@ extern void func_1FC400DC(CPUState* cpu); extern void func_1FC40184(CPUState* cpu); extern void func_1FC40260(CPUState* cpu); extern void func_1FC402DC(CPUState* cpu); +extern void func_1FC403C4(CPUState* cpu); +extern void func_1FC40404(CPUState* cpu); extern void func_1FC40484(CPUState* cpu); extern void func_1FC40628(CPUState* cpu); extern void func_1FC406E0(CPUState* cpu); extern void func_1FC40700(CPUState* cpu); +extern void func_1FC40720(CPUState* cpu); +extern void func_1FC40744(CPUState* cpu); extern void func_1FC407B8(CPUState* cpu); extern void func_1FC40B68(CPUState* cpu); extern void func_1FC40DE8(CPUState* cpu); @@ -784,6 +1005,7 @@ extern void func_1FC40F34(CPUState* cpu); extern void func_1FC4102C(CPUState* cpu); extern void func_1FC41200(CPUState* cpu); extern void func_1FC41258(CPUState* cpu); +extern void func_1FC4130C(CPUState* cpu); extern void func_1FC413B0(CPUState* cpu); extern void func_1FC413F4(CPUState* cpu); extern void func_1FC41458(CPUState* cpu); @@ -791,13 +1013,23 @@ extern void func_1FC41520(CPUState* cpu); extern void func_1FC41648(CPUState* cpu); extern void func_1FC41670(CPUState* cpu); extern void func_1FC41708(CPUState* cpu); +extern void func_1FC41788(CPUState* cpu); extern void func_1FC417CC(CPUState* cpu); +extern void func_1FC41804(CPUState* cpu); extern void func_1FC41848(CPUState* cpu); extern void func_1FC418C4(CPUState* cpu); extern void func_1FC4192C(CPUState* cpu); extern void func_1FC41A44(CPUState* cpu); +extern void func_1FC41BA8(CPUState* cpu); +extern void func_1FC41C04(CPUState* cpu); +extern void func_1FC41C0C(CPUState* cpu); extern void func_1FC41C80(CPUState* cpu); extern void func_1FC41DA4(CPUState* cpu); +extern void func_1FC41E30(CPUState* cpu); +extern void func_1FC41ED8(CPUState* cpu); +extern void func_1FC41F10(CPUState* cpu); +extern void func_1FC41F54(CPUState* cpu); +extern void func_1FC41F88(CPUState* cpu); extern void func_1FC42014(CPUState* cpu); extern void func_1FC4203C(CPUState* cpu); extern void func_1FC42060(CPUState* cpu); @@ -806,6 +1038,7 @@ extern void func_1FC420C0(CPUState* cpu); extern void func_1FC420F0(CPUState* cpu); extern void func_1FC42120(CPUState* cpu); extern void func_1FC42160(CPUState* cpu); +extern void func_1FC42380(CPUState* cpu); extern void func_1FC42424(CPUState* cpu); extern void func_1FC424A8(CPUState* cpu); extern void func_1FC42540(CPUState* cpu); @@ -813,6 +1046,9 @@ extern void func_1FC425FC(CPUState* cpu); extern void func_1FC42640(CPUState* cpu); extern void func_1FC426DC(CPUState* cpu); extern void func_1FC4270C(CPUState* cpu); +extern void func_1FC42844(CPUState* cpu); +extern void func_1FC42A10(CPUState* cpu); +extern void func_1FC42A90(CPUState* cpu); typedef void (*PsxRecompFunc)(CPUState*); @@ -821,7 +1057,7 @@ typedef struct { PsxRecompFunc func; } DispatchEntry; -static const DispatchEntry dispatch_table[801] = { +static const DispatchEntry dispatch_table[1037] = { { 0x00000500u, func_00000500 }, { 0x00000510u, func_00000510 }, { 0x00000520u, func_00000520 }, @@ -873,14 +1109,17 @@ static const DispatchEntry dispatch_table[801] = { { 0x00001990u, func_00001990 }, { 0x000019C8u, func_000019C8 }, { 0x00001A00u, func_00001A00 }, + { 0x00001A24u, func_00001A24 }, { 0x00001A2Cu, func_00001A2C }, { 0x00001A60u, func_00001A60 }, { 0x00001AE8u, func_00001AE8 }, { 0x00001AFCu, func_00001AFC }, + { 0x00001B10u, func_00001B10 }, { 0x00001B20u, func_00001B20 }, { 0x00001B44u, func_00001B44 }, { 0x00001C5Cu, func_00001C5C }, { 0x00001D00u, func_00001D00 }, + { 0x00001D40u, func_00001D40 }, { 0x00001D70u, func_00001D70 }, { 0x00001D8Cu, func_00001D8C }, { 0x00001E1Cu, func_00001E1C }, @@ -994,9 +1233,26 @@ static const DispatchEntry dispatch_table[801] = { { 0x000061C4u, func_000061C4 }, { 0x00006390u, func_00006390 }, { 0x000063BCu, func_000063BC }, + { 0x000063F8u, func_000063F8 }, { 0x00006408u, func_00006408 }, { 0x0000659Cu, func_0000659C }, { 0x00006670u, func_00006670 }, + { 0x00006A70u, func_00006A70 }, + { 0x00006A80u, func_00006A80 }, + { 0x00006A90u, func_00006A90 }, + { 0x00006AA0u, func_00006AA0 }, + { 0x00006AB0u, func_00006AB0 }, + { 0x00006AC0u, func_00006AC0 }, + { 0x00006AD0u, func_00006AD0 }, + { 0x00006AE0u, func_00006AE0 }, + { 0x00006AF0u, func_00006AF0 }, + { 0x00006B00u, func_00006B00 }, + { 0x00006B10u, func_00006B10 }, + { 0x00006B20u, func_00006B20 }, + { 0x00006B30u, func_00006B30 }, + { 0x00006B40u, func_00006B40 }, + { 0x00006B50u, func_00006B50 }, + { 0x00006B80u, func_00006B80 }, { 0x00006B90u, func_00006B90 }, { 0x00006BA0u, func_00006BA0 }, { 0x00006BB0u, func_00006BB0 }, @@ -1293,41 +1549,67 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC193C0u, func_1FC193C0 }, { 0x1FC1952Cu, func_1FC1952C }, { 0x1FC19630u, func_1FC19630 }, + { 0x1FC196C8u, func_1FC196C8 }, { 0x1FC196D4u, func_1FC196D4 }, { 0x1FC19A58u, func_1FC19A58 }, { 0x1FC19DF4u, func_1FC19DF4 }, + { 0x1FC1A11Cu, func_1FC1A11C }, { 0x1FC1A15Cu, func_1FC1A15C }, { 0x1FC1A17Cu, func_1FC1A17C }, { 0x1FC1A19Cu, func_1FC1A19C }, + { 0x1FC1A3B8u, func_1FC1A3B8 }, + { 0x1FC1A414u, func_1FC1A414 }, + { 0x1FC1A420u, func_1FC1A420 }, { 0x1FC1A430u, func_1FC1A430 }, { 0x1FC1A5B0u, func_1FC1A5B0 }, { 0x1FC1A6ECu, func_1FC1A6EC }, { 0x1FC1AA90u, func_1FC1AA90 }, { 0x1FC1AC68u, func_1FC1AC68 }, + { 0x1FC1AE24u, func_1FC1AE24 }, + { 0x1FC1AE34u, func_1FC1AE34 }, { 0x1FC1AE68u, func_1FC1AE68 }, + { 0x1FC1B6ECu, func_1FC1B6EC }, + { 0x1FC1B784u, func_1FC1B784 }, { 0x1FC1B7E0u, func_1FC1B7E0 }, + { 0x1FC1BD3Cu, func_1FC1BD3C }, + { 0x1FC1BD58u, func_1FC1BD58 }, { 0x1FC1BD68u, func_1FC1BD68 }, { 0x1FC1BEE0u, func_1FC1BEE0 }, { 0x1FC1BF44u, func_1FC1BF44 }, { 0x1FC1C130u, func_1FC1C130 }, + { 0x1FC1C1A4u, func_1FC1C1A4 }, { 0x1FC1C4C0u, func_1FC1C4C0 }, { 0x1FC1C78Cu, func_1FC1C78C }, { 0x1FC1C8ECu, func_1FC1C8EC }, + { 0x1FC1C978u, func_1FC1C978 }, + { 0x1FC1C988u, func_1FC1C988 }, + { 0x1FC1C998u, func_1FC1C998 }, + { 0x1FC1C9A8u, func_1FC1C9A8 }, { 0x1FC1C9B4u, func_1FC1C9B4 }, { 0x1FC1CAF0u, func_1FC1CAF0 }, { 0x1FC1CBACu, func_1FC1CBAC }, + { 0x1FC1CD40u, func_1FC1CD40 }, + { 0x1FC1CD90u, func_1FC1CD90 }, { 0x1FC1CDD8u, func_1FC1CDD8 }, + { 0x1FC1D980u, func_1FC1D980 }, + { 0x1FC1D9C4u, func_1FC1D9C4 }, { 0x1FC1DBF4u, func_1FC1DBF4 }, { 0x1FC1DDD8u, func_1FC1DDD8 }, { 0x1FC1DF50u, func_1FC1DF50 }, { 0x1FC1E0C4u, func_1FC1E0C4 }, { 0x1FC1E10Cu, func_1FC1E10C }, + { 0x1FC1E1CCu, func_1FC1E1CC }, + { 0x1FC1E3ACu, func_1FC1E3AC }, { 0x1FC1E3CCu, func_1FC1E3CC }, { 0x1FC1F6ACu, func_1FC1F6AC }, + { 0x1FC1F778u, func_1FC1F778 }, { 0x1FC1F980u, func_1FC1F980 }, + { 0x1FC1FCC8u, func_1FC1FCC8 }, { 0x1FC1FFA8u, func_1FC1FFA8 }, { 0x1FC20338u, func_1FC20338 }, { 0x1FC2069Cu, func_1FC2069C }, + { 0x1FC20B60u, func_1FC20B60 }, + { 0x1FC20B9Cu, func_1FC20B9C }, { 0x1FC20BE4u, func_1FC20BE4 }, { 0x1FC20C64u, func_1FC20C64 }, { 0x1FC20CE4u, func_1FC20CE4 }, @@ -1348,6 +1630,8 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC212C4u, func_1FC212C4 }, { 0x1FC21320u, func_1FC21320 }, { 0x1FC213A4u, func_1FC213A4 }, + { 0x1FC213E8u, func_1FC213E8 }, + { 0x1FC213F4u, func_1FC213F4 }, { 0x1FC213FCu, func_1FC213FC }, { 0x1FC214B0u, func_1FC214B0 }, { 0x1FC218CCu, func_1FC218CC }, @@ -1362,6 +1646,7 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC23078u, func_1FC23078 }, { 0x1FC230C4u, func_1FC230C4 }, { 0x1FC2311Cu, func_1FC2311C }, + { 0x1FC2324Cu, func_1FC2324C }, { 0x1FC232DCu, func_1FC232DC }, { 0x1FC23500u, func_1FC23500 }, { 0x1FC23524u, func_1FC23524 }, @@ -1374,14 +1659,28 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC251A8u, func_1FC251A8 }, { 0x1FC25200u, func_1FC25200 }, { 0x1FC252BCu, func_1FC252BC }, + { 0x1FC25314u, func_1FC25314 }, { 0x1FC2531Cu, func_1FC2531C }, { 0x1FC25390u, func_1FC25390 }, { 0x1FC254B0u, func_1FC254B0 }, { 0x1FC25558u, func_1FC25558 }, + { 0x1FC255A0u, func_1FC255A0 }, + { 0x1FC256D8u, func_1FC256D8 }, { 0x1FC25754u, func_1FC25754 }, + { 0x1FC25884u, func_1FC25884 }, + { 0x1FC2592Cu, func_1FC2592C }, + { 0x1FC259D8u, func_1FC259D8 }, { 0x1FC25B74u, func_1FC25B74 }, + { 0x1FC25C74u, func_1FC25C74 }, + { 0x1FC25C7Cu, func_1FC25C7C }, + { 0x1FC25C84u, func_1FC25C84 }, + { 0x1FC25C8Cu, func_1FC25C8C }, + { 0x1FC25C94u, func_1FC25C94 }, + { 0x1FC25CB0u, func_1FC25CB0 }, + { 0x1FC25CB8u, func_1FC25CB8 }, { 0x1FC25CC0u, func_1FC25CC0 }, { 0x1FC25D8Cu, func_1FC25D8C }, + { 0x1FC25E60u, func_1FC25E60 }, { 0x1FC25E8Cu, func_1FC25E8C }, { 0x1FC25EF8u, func_1FC25EF8 }, { 0x1FC2632Cu, func_1FC2632C }, @@ -1390,11 +1689,14 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC26550u, func_1FC26550 }, { 0x1FC265C0u, func_1FC265C0 }, { 0x1FC26610u, func_1FC26610 }, + { 0x1FC26660u, func_1FC26660 }, { 0x1FC26670u, func_1FC26670 }, { 0x1FC266B0u, func_1FC266B0 }, { 0x1FC268ECu, func_1FC268EC }, + { 0x1FC26AF8u, func_1FC26AF8 }, { 0x1FC26C10u, func_1FC26C10 }, { 0x1FC26E64u, func_1FC26E64 }, + { 0x1FC26EF8u, func_1FC26EF8 }, { 0x1FC27190u, func_1FC27190 }, { 0x1FC273E4u, func_1FC273E4 }, { 0x1FC27868u, func_1FC27868 }, @@ -1403,24 +1705,43 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC27B24u, func_1FC27B24 }, { 0x1FC27BDCu, func_1FC27BDC }, { 0x1FC27CC8u, func_1FC27CC8 }, + { 0x1FC27D2Cu, func_1FC27D2C }, { 0x1FC27DB0u, func_1FC27DB0 }, { 0x1FC27E68u, func_1FC27E68 }, { 0x1FC27E88u, func_1FC27E88 }, { 0x1FC27EB4u, func_1FC27EB4 }, + { 0x1FC27FB0u, func_1FC27FB0 }, { 0x1FC28064u, func_1FC28064 }, + { 0x1FC282E8u, func_1FC282E8 }, + { 0x1FC28370u, func_1FC28370 }, + { 0x1FC283F0u, func_1FC283F0 }, { 0x1FC28490u, func_1FC28490 }, { 0x1FC284F0u, func_1FC284F0 }, { 0x1FC2886Cu, func_1FC2886C }, { 0x1FC28B84u, func_1FC28B84 }, + { 0x1FC291C4u, func_1FC291C4 }, { 0x1FC29770u, func_1FC29770 }, { 0x1FC29AE0u, func_1FC29AE0 }, { 0x1FC29FE8u, func_1FC29FE8 }, { 0x1FC2A31Cu, func_1FC2A31C }, + { 0x1FC2A4E0u, func_1FC2A4E0 }, { 0x1FC2ACD0u, func_1FC2ACD0 }, + { 0x1FC2B0A8u, func_1FC2B0A8 }, + { 0x1FC2B1FCu, func_1FC2B1FC }, + { 0x1FC2B22Cu, func_1FC2B22C }, + { 0x1FC2B260u, func_1FC2B260 }, + { 0x1FC2BF00u, func_1FC2BF00 }, + { 0x1FC2BF10u, func_1FC2BF10 }, { 0x1FC2BF1Cu, func_1FC2BF1C }, { 0x1FC2BF74u, func_1FC2BF74 }, + { 0x1FC2C1C4u, func_1FC2C1C4 }, { 0x1FC2C2F0u, func_1FC2C2F0 }, { 0x1FC2C3E0u, func_1FC2C3E0 }, + { 0x1FC2C7F4u, func_1FC2C7F4 }, + { 0x1FC2C8A8u, func_1FC2C8A8 }, + { 0x1FC2C988u, func_1FC2C988 }, + { 0x1FC2CA50u, func_1FC2CA50 }, + { 0x1FC2CA58u, func_1FC2CA58 }, { 0x1FC2CA9Cu, func_1FC2CA9C }, { 0x1FC2CAE0u, func_1FC2CAE0 }, { 0x1FC2CB24u, func_1FC2CB24 }, @@ -1429,22 +1750,41 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC2CCC4u, func_1FC2CCC4 }, { 0x1FC2CE08u, func_1FC2CE08 }, { 0x1FC2CF54u, func_1FC2CF54 }, + { 0x1FC2D0A4u, func_1FC2D0A4 }, { 0x1FC2D0E0u, func_1FC2D0E0 }, { 0x1FC2E44Cu, func_1FC2E44C }, + { 0x1FC2E4D0u, func_1FC2E4D0 }, + { 0x1FC2E544u, func_1FC2E544 }, + { 0x1FC2E574u, func_1FC2E574 }, + { 0x1FC2E5B4u, func_1FC2E5B4 }, + { 0x1FC2E5C0u, func_1FC2E5C0 }, { 0x1FC2E600u, func_1FC2E600 }, { 0x1FC2E65Cu, func_1FC2E65C }, + { 0x1FC2E6B8u, func_1FC2E6B8 }, + { 0x1FC2E8CCu, func_1FC2E8CC }, + { 0x1FC2EA94u, func_1FC2EA94 }, + { 0x1FC2EC90u, func_1FC2EC90 }, + { 0x1FC2ECD8u, func_1FC2ECD8 }, { 0x1FC2ED1Cu, func_1FC2ED1C }, { 0x1FC2EE6Cu, func_1FC2EE6C }, + { 0x1FC2EEC0u, func_1FC2EEC0 }, + { 0x1FC2EF00u, func_1FC2EF00 }, { 0x1FC2EF40u, func_1FC2EF40 }, + { 0x1FC2F1D4u, func_1FC2F1D4 }, { 0x1FC2F210u, func_1FC2F210 }, { 0x1FC2F618u, func_1FC2F618 }, { 0x1FC2F65Cu, func_1FC2F65C }, + { 0x1FC2F6A0u, func_1FC2F6A0 }, { 0x1FC2F718u, func_1FC2F718 }, + { 0x1FC2F79Cu, func_1FC2F79C }, { 0x1FC2F808u, func_1FC2F808 }, { 0x1FC2F85Cu, func_1FC2F85C }, { 0x1FC2F8ACu, func_1FC2F8AC }, + { 0x1FC2FA78u, func_1FC2FA78 }, + { 0x1FC2FC10u, func_1FC2FC10 }, { 0x1FC2FCC4u, func_1FC2FCC4 }, { 0x1FC2FE6Cu, func_1FC2FE6C }, + { 0x1FC2FF34u, func_1FC2FF34 }, { 0x1FC3010Cu, func_1FC3010C }, { 0x1FC3015Cu, func_1FC3015C }, { 0x1FC301ACu, func_1FC301AC }, @@ -1453,6 +1793,20 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC302BCu, func_1FC302BC }, { 0x1FC3031Cu, func_1FC3031C }, { 0x1FC30350u, func_1FC30350 }, + { 0x1FC303A4u, func_1FC303A4 }, + { 0x1FC3041Cu, func_1FC3041C }, + { 0x1FC3045Cu, func_1FC3045C }, + { 0x1FC30470u, func_1FC30470 }, + { 0x1FC30484u, func_1FC30484 }, + { 0x1FC30498u, func_1FC30498 }, + { 0x1FC304B4u, func_1FC304B4 }, + { 0x1FC30514u, func_1FC30514 }, + { 0x1FC30554u, func_1FC30554 }, + { 0x1FC30560u, func_1FC30560 }, + { 0x1FC3056Cu, func_1FC3056C }, + { 0x1FC30578u, func_1FC30578 }, + { 0x1FC3058Cu, func_1FC3058C }, + { 0x1FC30670u, func_1FC30670 }, { 0x1FC3079Cu, func_1FC3079C }, { 0x1FC30868u, func_1FC30868 }, { 0x1FC30960u, func_1FC30960 }, @@ -1466,35 +1820,71 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC31638u, func_1FC31638 }, { 0x1FC317D0u, func_1FC317D0 }, { 0x1FC31968u, func_1FC31968 }, + { 0x1FC319ECu, func_1FC319EC }, { 0x1FC31C64u, func_1FC31C64 }, { 0x1FC31D14u, func_1FC31D14 }, { 0x1FC31DC4u, func_1FC31DC4 }, { 0x1FC31E74u, func_1FC31E74 }, + { 0x1FC32010u, func_1FC32010 }, + { 0x1FC32040u, func_1FC32040 }, + { 0x1FC32078u, func_1FC32078 }, + { 0x1FC320B4u, func_1FC320B4 }, + { 0x1FC32100u, func_1FC32100 }, + { 0x1FC321F0u, func_1FC321F0 }, { 0x1FC322E4u, func_1FC322E4 }, + { 0x1FC32368u, func_1FC32368 }, { 0x1FC32410u, func_1FC32410 }, { 0x1FC32450u, func_1FC32450 }, { 0x1FC3255Cu, func_1FC3255C }, + { 0x1FC32710u, func_1FC32710 }, { 0x1FC32724u, func_1FC32724 }, { 0x1FC32820u, func_1FC32820 }, { 0x1FC328F4u, func_1FC328F4 }, + { 0x1FC32944u, func_1FC32944 }, { 0x1FC329F0u, func_1FC329F0 }, { 0x1FC32CCCu, func_1FC32CCC }, { 0x1FC33138u, func_1FC33138 }, { 0x1FC331A0u, func_1FC331A0 }, { 0x1FC33358u, func_1FC33358 }, { 0x1FC33400u, func_1FC33400 }, + { 0x1FC33538u, func_1FC33538 }, + { 0x1FC336F0u, func_1FC336F0 }, + { 0x1FC339F0u, func_1FC339F0 }, + { 0x1FC33C98u, func_1FC33C98 }, { 0x1FC33CC0u, func_1FC33CC0 }, + { 0x1FC33F00u, func_1FC33F00 }, + { 0x1FC33F20u, func_1FC33F20 }, + { 0x1FC33FB4u, func_1FC33FB4 }, + { 0x1FC33FCCu, func_1FC33FCC }, + { 0x1FC33FD8u, func_1FC33FD8 }, + { 0x1FC33FE4u, func_1FC33FE4 }, { 0x1FC34160u, func_1FC34160 }, { 0x1FC34304u, func_1FC34304 }, { 0x1FC344A4u, func_1FC344A4 }, { 0x1FC345F4u, func_1FC345F4 }, { 0x1FC34748u, func_1FC34748 }, { 0x1FC34898u, func_1FC34898 }, + { 0x1FC348FCu, func_1FC348FC }, + { 0x1FC349B8u, func_1FC349B8 }, + { 0x1FC34AF0u, func_1FC34AF0 }, { 0x1FC34B58u, func_1FC34B58 }, + { 0x1FC3586Cu, func_1FC3586C }, + { 0x1FC359B4u, func_1FC359B4 }, + { 0x1FC35AD8u, func_1FC35AD8 }, + { 0x1FC35B08u, func_1FC35B08 }, + { 0x1FC35B38u, func_1FC35B38 }, + { 0x1FC35B68u, func_1FC35B68 }, + { 0x1FC36068u, func_1FC36068 }, + { 0x1FC362D0u, func_1FC362D0 }, + { 0x1FC36740u, func_1FC36740 }, { 0x1FC36CF0u, func_1FC36CF0 }, { 0x1FC36D1Cu, func_1FC36D1C }, + { 0x1FC36D48u, func_1FC36D48 }, + { 0x1FC36DD0u, func_1FC36DD0 }, + { 0x1FC36DF8u, func_1FC36DF8 }, { 0x1FC36EC0u, func_1FC36EC0 }, { 0x1FC36F90u, func_1FC36F90 }, + { 0x1FC36FF0u, func_1FC36FF0 }, { 0x1FC37028u, func_1FC37028 }, { 0x1FC37070u, func_1FC37070 }, { 0x1FC370A0u, func_1FC370A0 }, @@ -1514,52 +1904,115 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC37998u, func_1FC37998 }, { 0x1FC37A4Cu, func_1FC37A4C }, { 0x1FC37AC4u, func_1FC37AC4 }, + { 0x1FC37DC8u, func_1FC37DC8 }, + { 0x1FC37E60u, func_1FC37E60 }, + { 0x1FC37F4Cu, func_1FC37F4C }, + { 0x1FC38038u, func_1FC38038 }, + { 0x1FC38090u, func_1FC38090 }, + { 0x1FC38108u, func_1FC38108 }, { 0x1FC38204u, func_1FC38204 }, { 0x1FC382E0u, func_1FC382E0 }, { 0x1FC38524u, func_1FC38524 }, { 0x1FC387D4u, func_1FC387D4 }, { 0x1FC38A7Cu, func_1FC38A7C }, + { 0x1FC38AA4u, func_1FC38AA4 }, + { 0x1FC38AD4u, func_1FC38AD4 }, + { 0x1FC38B28u, func_1FC38B28 }, + { 0x1FC38B80u, func_1FC38B80 }, { 0x1FC38BE8u, func_1FC38BE8 }, { 0x1FC38C68u, func_1FC38C68 }, { 0x1FC38DACu, func_1FC38DAC }, + { 0x1FC38F8Cu, func_1FC38F8C }, { 0x1FC39080u, func_1FC39080 }, + { 0x1FC392E8u, func_1FC392E8 }, + { 0x1FC39300u, func_1FC39300 }, + { 0x1FC393CCu, func_1FC393CC }, { 0x1FC39410u, func_1FC39410 }, { 0x1FC394ECu, func_1FC394EC }, { 0x1FC3954Cu, func_1FC3954C }, + { 0x1FC395ECu, func_1FC395EC }, { 0x1FC39630u, func_1FC39630 }, + { 0x1FC396D0u, func_1FC396D0 }, { 0x1FC396E8u, func_1FC396E8 }, + { 0x1FC39804u, func_1FC39804 }, + { 0x1FC398D4u, func_1FC398D4 }, + { 0x1FC39910u, func_1FC39910 }, + { 0x1FC3994Cu, func_1FC3994C }, + { 0x1FC3999Cu, func_1FC3999C }, + { 0x1FC399ECu, func_1FC399EC }, + { 0x1FC39A14u, func_1FC39A14 }, + { 0x1FC39A3Cu, func_1FC39A3C }, + { 0x1FC39ADCu, func_1FC39ADC }, + { 0x1FC39BA4u, func_1FC39BA4 }, + { 0x1FC39BCCu, func_1FC39BCC }, { 0x1FC39D38u, func_1FC39D38 }, { 0x1FC39E84u, func_1FC39E84 }, + { 0x1FC39F30u, func_1FC39F30 }, + { 0x1FC39F90u, func_1FC39F90 }, { 0x1FC39FE4u, func_1FC39FE4 }, { 0x1FC3A094u, func_1FC3A094 }, { 0x1FC3A228u, func_1FC3A228 }, { 0x1FC3A2C0u, func_1FC3A2C0 }, + { 0x1FC3A44Cu, func_1FC3A44C }, + { 0x1FC3A638u, func_1FC3A638 }, + { 0x1FC3A95Cu, func_1FC3A95C }, + { 0x1FC3A9ECu, func_1FC3A9EC }, { 0x1FC3AAC4u, func_1FC3AAC4 }, + { 0x1FC3AB70u, func_1FC3AB70 }, + { 0x1FC3AC9Cu, func_1FC3AC9C }, { 0x1FC3AD68u, func_1FC3AD68 }, { 0x1FC3B054u, func_1FC3B054 }, + { 0x1FC3B160u, func_1FC3B160 }, { 0x1FC3B30Cu, func_1FC3B30C }, { 0x1FC3B368u, func_1FC3B368 }, { 0x1FC3B85Cu, func_1FC3B85C }, { 0x1FC3B93Cu, func_1FC3B93C }, + { 0x1FC3B964u, func_1FC3B964 }, { 0x1FC3BA74u, func_1FC3BA74 }, { 0x1FC3BD78u, func_1FC3BD78 }, { 0x1FC3BD98u, func_1FC3BD98 }, + { 0x1FC3BDB8u, func_1FC3BDB8 }, + { 0x1FC3BE18u, func_1FC3BE18 }, { 0x1FC3BE6Cu, func_1FC3BE6C }, + { 0x1FC3BE90u, func_1FC3BE90 }, { 0x1FC3BF10u, func_1FC3BF10 }, + { 0x1FC3BF40u, func_1FC3BF40 }, + { 0x1FC3BFF0u, func_1FC3BFF0 }, { 0x1FC3C060u, func_1FC3C060 }, { 0x1FC3C140u, func_1FC3C140 }, + { 0x1FC3C19Cu, func_1FC3C19C }, + { 0x1FC3C418u, func_1FC3C418 }, { 0x1FC3C428u, func_1FC3C428 }, { 0x1FC3C4E0u, func_1FC3C4E0 }, { 0x1FC3C710u, func_1FC3C710 }, + { 0x1FC3CEC8u, func_1FC3CEC8 }, + { 0x1FC3D304u, func_1FC3D304 }, + { 0x1FC3D65Cu, func_1FC3D65C }, { 0x1FC3D810u, func_1FC3D810 }, + { 0x1FC3D870u, func_1FC3D870 }, { 0x1FC3D8C0u, func_1FC3D8C0 }, + { 0x1FC3DED0u, func_1FC3DED0 }, { 0x1FC3DF20u, func_1FC3DF20 }, + { 0x1FC3DF90u, func_1FC3DF90 }, { 0x1FC3E020u, func_1FC3E020 }, + { 0x1FC3E0C0u, func_1FC3E0C0 }, + { 0x1FC3E0E8u, func_1FC3E0E8 }, { 0x1FC3E110u, func_1FC3E110 }, + { 0x1FC3E324u, func_1FC3E324 }, + { 0x1FC3E390u, func_1FC3E390 }, + { 0x1FC3E634u, func_1FC3E634 }, { 0x1FC3E980u, func_1FC3E980 }, + { 0x1FC3ECB8u, func_1FC3ECB8 }, { 0x1FC3ED40u, func_1FC3ED40 }, { 0x1FC3EDB4u, func_1FC3EDB4 }, + { 0x1FC3EE80u, func_1FC3EE80 }, + { 0x1FC3EEC0u, func_1FC3EEC0 }, + { 0x1FC3EEE4u, func_1FC3EEE4 }, + { 0x1FC3EF08u, func_1FC3EF08 }, + { 0x1FC3EF7Cu, func_1FC3EF7C }, { 0x1FC3EFF0u, func_1FC3EFF0 }, + { 0x1FC3F090u, func_1FC3F090 }, + { 0x1FC3F19Cu, func_1FC3F19C }, { 0x1FC3F1B8u, func_1FC3F1B8 }, { 0x1FC3F2B4u, func_1FC3F2B4 }, { 0x1FC3F484u, func_1FC3F484 }, @@ -1583,10 +2036,14 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC40184u, func_1FC40184 }, { 0x1FC40260u, func_1FC40260 }, { 0x1FC402DCu, func_1FC402DC }, + { 0x1FC403C4u, func_1FC403C4 }, + { 0x1FC40404u, func_1FC40404 }, { 0x1FC40484u, func_1FC40484 }, { 0x1FC40628u, func_1FC40628 }, { 0x1FC406E0u, func_1FC406E0 }, { 0x1FC40700u, func_1FC40700 }, + { 0x1FC40720u, func_1FC40720 }, + { 0x1FC40744u, func_1FC40744 }, { 0x1FC407B8u, func_1FC407B8 }, { 0x1FC40B68u, func_1FC40B68 }, { 0x1FC40DE8u, func_1FC40DE8 }, @@ -1594,6 +2051,7 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC4102Cu, func_1FC4102C }, { 0x1FC41200u, func_1FC41200 }, { 0x1FC41258u, func_1FC41258 }, + { 0x1FC4130Cu, func_1FC4130C }, { 0x1FC413B0u, func_1FC413B0 }, { 0x1FC413F4u, func_1FC413F4 }, { 0x1FC41458u, func_1FC41458 }, @@ -1601,13 +2059,23 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC41648u, func_1FC41648 }, { 0x1FC41670u, func_1FC41670 }, { 0x1FC41708u, func_1FC41708 }, + { 0x1FC41788u, func_1FC41788 }, { 0x1FC417CCu, func_1FC417CC }, + { 0x1FC41804u, func_1FC41804 }, { 0x1FC41848u, func_1FC41848 }, { 0x1FC418C4u, func_1FC418C4 }, { 0x1FC4192Cu, func_1FC4192C }, { 0x1FC41A44u, func_1FC41A44 }, + { 0x1FC41BA8u, func_1FC41BA8 }, + { 0x1FC41C04u, func_1FC41C04 }, + { 0x1FC41C0Cu, func_1FC41C0C }, { 0x1FC41C80u, func_1FC41C80 }, { 0x1FC41DA4u, func_1FC41DA4 }, + { 0x1FC41E30u, func_1FC41E30 }, + { 0x1FC41ED8u, func_1FC41ED8 }, + { 0x1FC41F10u, func_1FC41F10 }, + { 0x1FC41F54u, func_1FC41F54 }, + { 0x1FC41F88u, func_1FC41F88 }, { 0x1FC42014u, func_1FC42014 }, { 0x1FC4203Cu, func_1FC4203C }, { 0x1FC42060u, func_1FC42060 }, @@ -1616,6 +2084,7 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC420F0u, func_1FC420F0 }, { 0x1FC42120u, func_1FC42120 }, { 0x1FC42160u, func_1FC42160 }, + { 0x1FC42380u, func_1FC42380 }, { 0x1FC42424u, func_1FC42424 }, { 0x1FC424A8u, func_1FC424A8 }, { 0x1FC42540u, func_1FC42540 }, @@ -1623,6 +2092,9 @@ static const DispatchEntry dispatch_table[801] = { { 0x1FC42640u, func_1FC42640 }, { 0x1FC426DCu, func_1FC426DC }, { 0x1FC4270Cu, func_1FC4270C }, + { 0x1FC42844u, func_1FC42844 }, + { 0x1FC42A10u, func_1FC42A10 }, + { 0x1FC42A90u, func_1FC42A90 }, }; static uint32_t normalize(uint32_t addr) { @@ -1631,7 +2103,7 @@ static uint32_t normalize(uint32_t addr) { if (phys >= 0x1FC10000u && phys <= 0x1FC17FFFu) phys = phys - 0x1FC10000u + 0x00000500u; /* Shell: RAM 0x30000+ -> ROM physical 0x1FC18000+ */ - if (phys >= 0x00030000u && phys <= 0x0005A7FFu) + if (phys >= 0x00030000u && phys <= 0x0005AFFFu) phys = phys - 0x00030000u + 0x1FC18000u; return phys; } @@ -1643,7 +2115,7 @@ void psx_dispatch(CPUState* cpu, uint32_t addr) { for (;;) { cpu->pc = 0; uint32_t phys = normalize(addr); - int lo = 0, hi = 801 - 1; + int lo = 0, hi = 1037 - 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 a90c0ab8..4e88b709 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: 801 + * Functions: 1037 */ #include "cpu_state.h" @@ -334,14 +334,17 @@ void func_00001958(CPUState* cpu); void func_00001990(CPUState* cpu); void func_000019C8(CPUState* cpu); void func_00001A00(CPUState* cpu); +void func_00001A24(CPUState* cpu); void func_00001A2C(CPUState* cpu); void func_00001A60(CPUState* cpu); void func_00001AE8(CPUState* cpu); void func_00001AFC(CPUState* cpu); +void func_00001B10(CPUState* cpu); void func_00001B20(CPUState* cpu); void func_00001B44(CPUState* cpu); void func_00001C5C(CPUState* cpu); void func_00001D00(CPUState* cpu); +void func_00001D40(CPUState* cpu); void func_00001D70(CPUState* cpu); void func_00001D8C(CPUState* cpu); void func_00001E1C(CPUState* cpu); @@ -455,9 +458,26 @@ void func_0000609C(CPUState* cpu); void func_000061C4(CPUState* cpu); void func_00006390(CPUState* cpu); void func_000063BC(CPUState* cpu); +void func_000063F8(CPUState* cpu); void func_00006408(CPUState* cpu); void func_0000659C(CPUState* cpu); void func_00006670(CPUState* cpu); +void func_00006A70(CPUState* cpu); +void func_00006A80(CPUState* cpu); +void func_00006A90(CPUState* cpu); +void func_00006AA0(CPUState* cpu); +void func_00006AB0(CPUState* cpu); +void func_00006AC0(CPUState* cpu); +void func_00006AD0(CPUState* cpu); +void func_00006AE0(CPUState* cpu); +void func_00006AF0(CPUState* cpu); +void func_00006B00(CPUState* cpu); +void func_00006B10(CPUState* cpu); +void func_00006B20(CPUState* cpu); +void func_00006B30(CPUState* cpu); +void func_00006B40(CPUState* cpu); +void func_00006B50(CPUState* cpu); +void func_00006B80(CPUState* cpu); void func_00006B90(CPUState* cpu); void func_00006BA0(CPUState* cpu); void func_00006BB0(CPUState* cpu); @@ -481,41 +501,67 @@ void func_1FC192E4(CPUState* cpu); void func_1FC193C0(CPUState* cpu); void func_1FC1952C(CPUState* cpu); void func_1FC19630(CPUState* cpu); +void func_1FC196C8(CPUState* cpu); void func_1FC196D4(CPUState* cpu); void func_1FC19A58(CPUState* cpu); void func_1FC19DF4(CPUState* cpu); +void func_1FC1A11C(CPUState* cpu); void func_1FC1A15C(CPUState* cpu); void func_1FC1A17C(CPUState* cpu); void func_1FC1A19C(CPUState* cpu); +void func_1FC1A3B8(CPUState* cpu); +void func_1FC1A414(CPUState* cpu); +void func_1FC1A420(CPUState* cpu); void func_1FC1A430(CPUState* cpu); void func_1FC1A5B0(CPUState* cpu); void func_1FC1A6EC(CPUState* cpu); void func_1FC1AA90(CPUState* cpu); void func_1FC1AC68(CPUState* cpu); +void func_1FC1AE24(CPUState* cpu); +void func_1FC1AE34(CPUState* cpu); void func_1FC1AE68(CPUState* cpu); +void func_1FC1B6EC(CPUState* cpu); +void func_1FC1B784(CPUState* cpu); void func_1FC1B7E0(CPUState* cpu); +void func_1FC1BD3C(CPUState* cpu); +void func_1FC1BD58(CPUState* cpu); void func_1FC1BD68(CPUState* cpu); void func_1FC1BEE0(CPUState* cpu); void func_1FC1BF44(CPUState* cpu); void func_1FC1C130(CPUState* cpu); +void func_1FC1C1A4(CPUState* cpu); void func_1FC1C4C0(CPUState* cpu); void func_1FC1C78C(CPUState* cpu); void func_1FC1C8EC(CPUState* cpu); +void func_1FC1C978(CPUState* cpu); +void func_1FC1C988(CPUState* cpu); +void func_1FC1C998(CPUState* cpu); +void func_1FC1C9A8(CPUState* cpu); void func_1FC1C9B4(CPUState* cpu); void func_1FC1CAF0(CPUState* cpu); void func_1FC1CBAC(CPUState* cpu); +void func_1FC1CD40(CPUState* cpu); +void func_1FC1CD90(CPUState* cpu); void func_1FC1CDD8(CPUState* cpu); +void func_1FC1D980(CPUState* cpu); +void func_1FC1D9C4(CPUState* cpu); void func_1FC1DBF4(CPUState* cpu); void func_1FC1DDD8(CPUState* cpu); void func_1FC1DF50(CPUState* cpu); void func_1FC1E0C4(CPUState* cpu); void func_1FC1E10C(CPUState* cpu); +void func_1FC1E1CC(CPUState* cpu); +void func_1FC1E3AC(CPUState* cpu); void func_1FC1E3CC(CPUState* cpu); void func_1FC1F6AC(CPUState* cpu); +void func_1FC1F778(CPUState* cpu); void func_1FC1F980(CPUState* cpu); +void func_1FC1FCC8(CPUState* cpu); void func_1FC1FFA8(CPUState* cpu); void func_1FC20338(CPUState* cpu); void func_1FC2069C(CPUState* cpu); +void func_1FC20B60(CPUState* cpu); +void func_1FC20B9C(CPUState* cpu); void func_1FC20BE4(CPUState* cpu); void func_1FC20C64(CPUState* cpu); void func_1FC20CE4(CPUState* cpu); @@ -536,6 +582,8 @@ void func_1FC2125C(CPUState* cpu); void func_1FC212C4(CPUState* cpu); void func_1FC21320(CPUState* cpu); void func_1FC213A4(CPUState* cpu); +void func_1FC213E8(CPUState* cpu); +void func_1FC213F4(CPUState* cpu); void func_1FC213FC(CPUState* cpu); void func_1FC214B0(CPUState* cpu); void func_1FC218CC(CPUState* cpu); @@ -550,6 +598,7 @@ void func_1FC22E90(CPUState* cpu); void func_1FC23078(CPUState* cpu); void func_1FC230C4(CPUState* cpu); void func_1FC2311C(CPUState* cpu); +void func_1FC2324C(CPUState* cpu); void func_1FC232DC(CPUState* cpu); void func_1FC23500(CPUState* cpu); void func_1FC23524(CPUState* cpu); @@ -562,14 +611,28 @@ void func_1FC24F00(CPUState* cpu); void func_1FC251A8(CPUState* cpu); void func_1FC25200(CPUState* cpu); void func_1FC252BC(CPUState* cpu); +void func_1FC25314(CPUState* cpu); void func_1FC2531C(CPUState* cpu); void func_1FC25390(CPUState* cpu); void func_1FC254B0(CPUState* cpu); void func_1FC25558(CPUState* cpu); +void func_1FC255A0(CPUState* cpu); +void func_1FC256D8(CPUState* cpu); void func_1FC25754(CPUState* cpu); +void func_1FC25884(CPUState* cpu); +void func_1FC2592C(CPUState* cpu); +void func_1FC259D8(CPUState* cpu); void func_1FC25B74(CPUState* cpu); +void func_1FC25C74(CPUState* cpu); +void func_1FC25C7C(CPUState* cpu); +void func_1FC25C84(CPUState* cpu); +void func_1FC25C8C(CPUState* cpu); +void func_1FC25C94(CPUState* cpu); +void func_1FC25CB0(CPUState* cpu); +void func_1FC25CB8(CPUState* cpu); void func_1FC25CC0(CPUState* cpu); void func_1FC25D8C(CPUState* cpu); +void func_1FC25E60(CPUState* cpu); void func_1FC25E8C(CPUState* cpu); void func_1FC25EF8(CPUState* cpu); void func_1FC2632C(CPUState* cpu); @@ -578,11 +641,14 @@ void func_1FC264A0(CPUState* cpu); void func_1FC26550(CPUState* cpu); void func_1FC265C0(CPUState* cpu); void func_1FC26610(CPUState* cpu); +void func_1FC26660(CPUState* cpu); void func_1FC26670(CPUState* cpu); void func_1FC266B0(CPUState* cpu); void func_1FC268EC(CPUState* cpu); +void func_1FC26AF8(CPUState* cpu); void func_1FC26C10(CPUState* cpu); void func_1FC26E64(CPUState* cpu); +void func_1FC26EF8(CPUState* cpu); void func_1FC27190(CPUState* cpu); void func_1FC273E4(CPUState* cpu); void func_1FC27868(CPUState* cpu); @@ -591,24 +657,43 @@ void func_1FC27A2C(CPUState* cpu); void func_1FC27B24(CPUState* cpu); void func_1FC27BDC(CPUState* cpu); void func_1FC27CC8(CPUState* cpu); +void func_1FC27D2C(CPUState* cpu); void func_1FC27DB0(CPUState* cpu); void func_1FC27E68(CPUState* cpu); void func_1FC27E88(CPUState* cpu); void func_1FC27EB4(CPUState* cpu); +void func_1FC27FB0(CPUState* cpu); void func_1FC28064(CPUState* cpu); +void func_1FC282E8(CPUState* cpu); +void func_1FC28370(CPUState* cpu); +void func_1FC283F0(CPUState* cpu); void func_1FC28490(CPUState* cpu); void func_1FC284F0(CPUState* cpu); void func_1FC2886C(CPUState* cpu); void func_1FC28B84(CPUState* cpu); +void func_1FC291C4(CPUState* cpu); void func_1FC29770(CPUState* cpu); void func_1FC29AE0(CPUState* cpu); void func_1FC29FE8(CPUState* cpu); void func_1FC2A31C(CPUState* cpu); +void func_1FC2A4E0(CPUState* cpu); void func_1FC2ACD0(CPUState* cpu); +void func_1FC2B0A8(CPUState* cpu); +void func_1FC2B1FC(CPUState* cpu); +void func_1FC2B22C(CPUState* cpu); +void func_1FC2B260(CPUState* cpu); +void func_1FC2BF00(CPUState* cpu); +void func_1FC2BF10(CPUState* cpu); void func_1FC2BF1C(CPUState* cpu); void func_1FC2BF74(CPUState* cpu); +void func_1FC2C1C4(CPUState* cpu); void func_1FC2C2F0(CPUState* cpu); void func_1FC2C3E0(CPUState* cpu); +void func_1FC2C7F4(CPUState* cpu); +void func_1FC2C8A8(CPUState* cpu); +void func_1FC2C988(CPUState* cpu); +void func_1FC2CA50(CPUState* cpu); +void func_1FC2CA58(CPUState* cpu); void func_1FC2CA9C(CPUState* cpu); void func_1FC2CAE0(CPUState* cpu); void func_1FC2CB24(CPUState* cpu); @@ -617,22 +702,41 @@ void func_1FC2CC10(CPUState* cpu); void func_1FC2CCC4(CPUState* cpu); void func_1FC2CE08(CPUState* cpu); void func_1FC2CF54(CPUState* cpu); +void func_1FC2D0A4(CPUState* cpu); void func_1FC2D0E0(CPUState* cpu); void func_1FC2E44C(CPUState* cpu); +void func_1FC2E4D0(CPUState* cpu); +void func_1FC2E544(CPUState* cpu); +void func_1FC2E574(CPUState* cpu); +void func_1FC2E5B4(CPUState* cpu); +void func_1FC2E5C0(CPUState* cpu); void func_1FC2E600(CPUState* cpu); void func_1FC2E65C(CPUState* cpu); +void func_1FC2E6B8(CPUState* cpu); +void func_1FC2E8CC(CPUState* cpu); +void func_1FC2EA94(CPUState* cpu); +void func_1FC2EC90(CPUState* cpu); +void func_1FC2ECD8(CPUState* cpu); void func_1FC2ED1C(CPUState* cpu); void func_1FC2EE6C(CPUState* cpu); +void func_1FC2EEC0(CPUState* cpu); +void func_1FC2EF00(CPUState* cpu); void func_1FC2EF40(CPUState* cpu); +void func_1FC2F1D4(CPUState* cpu); void func_1FC2F210(CPUState* cpu); void func_1FC2F618(CPUState* cpu); void func_1FC2F65C(CPUState* cpu); +void func_1FC2F6A0(CPUState* cpu); void func_1FC2F718(CPUState* cpu); +void func_1FC2F79C(CPUState* cpu); void func_1FC2F808(CPUState* cpu); void func_1FC2F85C(CPUState* cpu); void func_1FC2F8AC(CPUState* cpu); +void func_1FC2FA78(CPUState* cpu); +void func_1FC2FC10(CPUState* cpu); void func_1FC2FCC4(CPUState* cpu); void func_1FC2FE6C(CPUState* cpu); +void func_1FC2FF34(CPUState* cpu); void func_1FC3010C(CPUState* cpu); void func_1FC3015C(CPUState* cpu); void func_1FC301AC(CPUState* cpu); @@ -641,6 +745,20 @@ void func_1FC3029C(CPUState* cpu); void func_1FC302BC(CPUState* cpu); void func_1FC3031C(CPUState* cpu); void func_1FC30350(CPUState* cpu); +void func_1FC303A4(CPUState* cpu); +void func_1FC3041C(CPUState* cpu); +void func_1FC3045C(CPUState* cpu); +void func_1FC30470(CPUState* cpu); +void func_1FC30484(CPUState* cpu); +void func_1FC30498(CPUState* cpu); +void func_1FC304B4(CPUState* cpu); +void func_1FC30514(CPUState* cpu); +void func_1FC30554(CPUState* cpu); +void func_1FC30560(CPUState* cpu); +void func_1FC3056C(CPUState* cpu); +void func_1FC30578(CPUState* cpu); +void func_1FC3058C(CPUState* cpu); +void func_1FC30670(CPUState* cpu); void func_1FC3079C(CPUState* cpu); void func_1FC30868(CPUState* cpu); void func_1FC30960(CPUState* cpu); @@ -654,35 +772,71 @@ void func_1FC31580(CPUState* cpu); void func_1FC31638(CPUState* cpu); void func_1FC317D0(CPUState* cpu); void func_1FC31968(CPUState* cpu); +void func_1FC319EC(CPUState* cpu); void func_1FC31C64(CPUState* cpu); void func_1FC31D14(CPUState* cpu); void func_1FC31DC4(CPUState* cpu); void func_1FC31E74(CPUState* cpu); +void func_1FC32010(CPUState* cpu); +void func_1FC32040(CPUState* cpu); +void func_1FC32078(CPUState* cpu); +void func_1FC320B4(CPUState* cpu); +void func_1FC32100(CPUState* cpu); +void func_1FC321F0(CPUState* cpu); void func_1FC322E4(CPUState* cpu); +void func_1FC32368(CPUState* cpu); void func_1FC32410(CPUState* cpu); void func_1FC32450(CPUState* cpu); void func_1FC3255C(CPUState* cpu); +void func_1FC32710(CPUState* cpu); void func_1FC32724(CPUState* cpu); void func_1FC32820(CPUState* cpu); void func_1FC328F4(CPUState* cpu); +void func_1FC32944(CPUState* cpu); void func_1FC329F0(CPUState* cpu); void func_1FC32CCC(CPUState* cpu); void func_1FC33138(CPUState* cpu); void func_1FC331A0(CPUState* cpu); void func_1FC33358(CPUState* cpu); void func_1FC33400(CPUState* cpu); +void func_1FC33538(CPUState* cpu); +void func_1FC336F0(CPUState* cpu); +void func_1FC339F0(CPUState* cpu); +void func_1FC33C98(CPUState* cpu); void func_1FC33CC0(CPUState* cpu); +void func_1FC33F00(CPUState* cpu); +void func_1FC33F20(CPUState* cpu); +void func_1FC33FB4(CPUState* cpu); +void func_1FC33FCC(CPUState* cpu); +void func_1FC33FD8(CPUState* cpu); +void func_1FC33FE4(CPUState* cpu); void func_1FC34160(CPUState* cpu); void func_1FC34304(CPUState* cpu); void func_1FC344A4(CPUState* cpu); void func_1FC345F4(CPUState* cpu); void func_1FC34748(CPUState* cpu); void func_1FC34898(CPUState* cpu); +void func_1FC348FC(CPUState* cpu); +void func_1FC349B8(CPUState* cpu); +void func_1FC34AF0(CPUState* cpu); void func_1FC34B58(CPUState* cpu); +void func_1FC3586C(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_1FC36068(CPUState* cpu); +void func_1FC362D0(CPUState* cpu); +void func_1FC36740(CPUState* cpu); void func_1FC36CF0(CPUState* cpu); void func_1FC36D1C(CPUState* cpu); +void func_1FC36D48(CPUState* cpu); +void func_1FC36DD0(CPUState* cpu); +void func_1FC36DF8(CPUState* cpu); void func_1FC36EC0(CPUState* cpu); void func_1FC36F90(CPUState* cpu); +void func_1FC36FF0(CPUState* cpu); void func_1FC37028(CPUState* cpu); void func_1FC37070(CPUState* cpu); void func_1FC370A0(CPUState* cpu); @@ -702,52 +856,115 @@ void func_1FC37908(CPUState* cpu); void func_1FC37998(CPUState* cpu); void func_1FC37A4C(CPUState* cpu); void func_1FC37AC4(CPUState* cpu); +void func_1FC37DC8(CPUState* cpu); +void func_1FC37E60(CPUState* cpu); +void func_1FC37F4C(CPUState* cpu); +void func_1FC38038(CPUState* cpu); +void func_1FC38090(CPUState* cpu); +void func_1FC38108(CPUState* cpu); void func_1FC38204(CPUState* cpu); void func_1FC382E0(CPUState* cpu); void func_1FC38524(CPUState* cpu); void func_1FC387D4(CPUState* cpu); void func_1FC38A7C(CPUState* cpu); +void func_1FC38AA4(CPUState* cpu); +void func_1FC38AD4(CPUState* cpu); +void func_1FC38B28(CPUState* cpu); +void func_1FC38B80(CPUState* cpu); void func_1FC38BE8(CPUState* cpu); void func_1FC38C68(CPUState* cpu); void func_1FC38DAC(CPUState* cpu); +void func_1FC38F8C(CPUState* cpu); void func_1FC39080(CPUState* cpu); +void func_1FC392E8(CPUState* cpu); +void func_1FC39300(CPUState* cpu); +void func_1FC393CC(CPUState* cpu); void func_1FC39410(CPUState* cpu); void func_1FC394EC(CPUState* cpu); void func_1FC3954C(CPUState* cpu); +void func_1FC395EC(CPUState* cpu); void func_1FC39630(CPUState* cpu); +void func_1FC396D0(CPUState* cpu); void func_1FC396E8(CPUState* cpu); +void func_1FC39804(CPUState* cpu); +void func_1FC398D4(CPUState* cpu); +void func_1FC39910(CPUState* cpu); +void func_1FC3994C(CPUState* cpu); +void func_1FC3999C(CPUState* cpu); +void func_1FC399EC(CPUState* cpu); +void func_1FC39A14(CPUState* cpu); +void func_1FC39A3C(CPUState* cpu); +void func_1FC39ADC(CPUState* cpu); +void func_1FC39BA4(CPUState* cpu); +void func_1FC39BCC(CPUState* cpu); void func_1FC39D38(CPUState* cpu); void func_1FC39E84(CPUState* cpu); +void func_1FC39F30(CPUState* cpu); +void func_1FC39F90(CPUState* cpu); void func_1FC39FE4(CPUState* cpu); void func_1FC3A094(CPUState* cpu); void func_1FC3A228(CPUState* cpu); void func_1FC3A2C0(CPUState* cpu); +void func_1FC3A44C(CPUState* cpu); +void func_1FC3A638(CPUState* cpu); +void func_1FC3A95C(CPUState* cpu); +void func_1FC3A9EC(CPUState* cpu); void func_1FC3AAC4(CPUState* cpu); +void func_1FC3AB70(CPUState* cpu); +void func_1FC3AC9C(CPUState* cpu); void func_1FC3AD68(CPUState* cpu); void func_1FC3B054(CPUState* cpu); +void func_1FC3B160(CPUState* cpu); void func_1FC3B30C(CPUState* cpu); void func_1FC3B368(CPUState* cpu); void func_1FC3B85C(CPUState* cpu); void func_1FC3B93C(CPUState* cpu); +void func_1FC3B964(CPUState* cpu); void func_1FC3BA74(CPUState* cpu); void func_1FC3BD78(CPUState* cpu); void func_1FC3BD98(CPUState* cpu); +void func_1FC3BDB8(CPUState* cpu); +void func_1FC3BE18(CPUState* cpu); void func_1FC3BE6C(CPUState* cpu); +void func_1FC3BE90(CPUState* cpu); void func_1FC3BF10(CPUState* cpu); +void func_1FC3BF40(CPUState* cpu); +void func_1FC3BFF0(CPUState* cpu); void func_1FC3C060(CPUState* cpu); void func_1FC3C140(CPUState* cpu); +void func_1FC3C19C(CPUState* cpu); +void func_1FC3C418(CPUState* cpu); void func_1FC3C428(CPUState* cpu); void func_1FC3C4E0(CPUState* cpu); void func_1FC3C710(CPUState* cpu); +void func_1FC3CEC8(CPUState* cpu); +void func_1FC3D304(CPUState* cpu); +void func_1FC3D65C(CPUState* cpu); void func_1FC3D810(CPUState* cpu); +void func_1FC3D870(CPUState* cpu); void func_1FC3D8C0(CPUState* cpu); +void func_1FC3DED0(CPUState* cpu); void func_1FC3DF20(CPUState* cpu); +void func_1FC3DF90(CPUState* cpu); void func_1FC3E020(CPUState* cpu); +void func_1FC3E0C0(CPUState* cpu); +void func_1FC3E0E8(CPUState* cpu); void func_1FC3E110(CPUState* cpu); +void func_1FC3E324(CPUState* cpu); +void func_1FC3E390(CPUState* cpu); +void func_1FC3E634(CPUState* cpu); void func_1FC3E980(CPUState* cpu); +void func_1FC3ECB8(CPUState* cpu); void func_1FC3ED40(CPUState* cpu); void func_1FC3EDB4(CPUState* cpu); +void func_1FC3EE80(CPUState* cpu); +void func_1FC3EEC0(CPUState* cpu); +void func_1FC3EEE4(CPUState* cpu); +void func_1FC3EF08(CPUState* cpu); +void func_1FC3EF7C(CPUState* cpu); void func_1FC3EFF0(CPUState* cpu); +void func_1FC3F090(CPUState* cpu); +void func_1FC3F19C(CPUState* cpu); void func_1FC3F1B8(CPUState* cpu); void func_1FC3F2B4(CPUState* cpu); void func_1FC3F484(CPUState* cpu); @@ -771,10 +988,14 @@ void func_1FC400DC(CPUState* cpu); void func_1FC40184(CPUState* cpu); void func_1FC40260(CPUState* cpu); void func_1FC402DC(CPUState* cpu); +void func_1FC403C4(CPUState* cpu); +void func_1FC40404(CPUState* cpu); void func_1FC40484(CPUState* cpu); void func_1FC40628(CPUState* cpu); void func_1FC406E0(CPUState* cpu); void func_1FC40700(CPUState* cpu); +void func_1FC40720(CPUState* cpu); +void func_1FC40744(CPUState* cpu); void func_1FC407B8(CPUState* cpu); void func_1FC40B68(CPUState* cpu); void func_1FC40DE8(CPUState* cpu); @@ -782,6 +1003,7 @@ void func_1FC40F34(CPUState* cpu); void func_1FC4102C(CPUState* cpu); void func_1FC41200(CPUState* cpu); void func_1FC41258(CPUState* cpu); +void func_1FC4130C(CPUState* cpu); void func_1FC413B0(CPUState* cpu); void func_1FC413F4(CPUState* cpu); void func_1FC41458(CPUState* cpu); @@ -789,13 +1011,23 @@ void func_1FC41520(CPUState* cpu); void func_1FC41648(CPUState* cpu); void func_1FC41670(CPUState* cpu); void func_1FC41708(CPUState* cpu); +void func_1FC41788(CPUState* cpu); void func_1FC417CC(CPUState* cpu); +void func_1FC41804(CPUState* cpu); void func_1FC41848(CPUState* cpu); void func_1FC418C4(CPUState* cpu); void func_1FC4192C(CPUState* cpu); void func_1FC41A44(CPUState* cpu); +void func_1FC41BA8(CPUState* cpu); +void func_1FC41C04(CPUState* cpu); +void func_1FC41C0C(CPUState* cpu); void func_1FC41C80(CPUState* cpu); void func_1FC41DA4(CPUState* cpu); +void func_1FC41E30(CPUState* cpu); +void func_1FC41ED8(CPUState* cpu); +void func_1FC41F10(CPUState* cpu); +void func_1FC41F54(CPUState* cpu); +void func_1FC41F88(CPUState* cpu); void func_1FC42014(CPUState* cpu); void func_1FC4203C(CPUState* cpu); void func_1FC42060(CPUState* cpu); @@ -804,6 +1036,7 @@ void func_1FC420C0(CPUState* cpu); void func_1FC420F0(CPUState* cpu); void func_1FC42120(CPUState* cpu); void func_1FC42160(CPUState* cpu); +void func_1FC42380(CPUState* cpu); void func_1FC42424(CPUState* cpu); void func_1FC424A8(CPUState* cpu); void func_1FC42540(CPUState* cpu); @@ -811,6 +1044,9 @@ void func_1FC425FC(CPUState* cpu); void func_1FC42640(CPUState* cpu); void func_1FC426DC(CPUState* cpu); void func_1FC4270C(CPUState* cpu); +void func_1FC42844(CPUState* cpu); +void func_1FC42A10(CPUState* cpu); +void func_1FC42A90(CPUState* cpu); void func_1FC00000(CPUState* cpu) { label_BFC00000: @@ -4865,6 +5101,7 @@ label_BFC01920: /* 0xBFC01934: 0341D025 or $k0, $k0, $at */ cpu->gpr[26] = cpu->gpr[26] | cpu->gpr[1]; /* 0xBFC01938: 03400008 jr $k0 */ + cpu->pc = cpu->gpr[26]; return; } void func_1FC0193C(CPUState* cpu) { @@ -36179,7 +36416,8 @@ label_BFC10A40: /* nop */ /* 0xBFC10B10: 03400008 jr $k0 */ /* 0xBFC10B14: 42000010 rfe */ - { uint32_t sr = cpu->cop0[12]; cpu->cop0[12] = (sr & 0xFFFFFFC0u) | ((sr >> 2) & 0x0Fu); } /* rfe -- slice terminator (per session approval, RFE substitutes for FIRST_MILESTONE.md "ERET" since R3000A has no ERET) */ return; + { uint32_t sr = cpu->cop0[12]; cpu->cop0[12] = (sr & 0xFFFFFFC0u) | ((sr >> 2) & 0x0Fu); } /* rfe */ + cpu->pc = cpu->gpr[26]; return; } void func_00001030(CPUState* cpu) { @@ -38033,6 +38271,9 @@ label_BFC11500: /* 0xBFC11520: 3063003C andi $v1, $v1, 0x3C */ cpu->gpr[3] = cpu->gpr[3] & 0x3Cu; if (psx_taken_BFC1151C) { cpu->pc = 0xBFC115E8u; return; } +} + +void func_00001A24(CPUState* cpu) { label_BFC11524: psx_check_interrupts(cpu); /* 0xBFC11524: 1000003A beq $zero, $zero, 0xBFC11610 */ @@ -38226,6 +38467,9 @@ label_BFC11608: /* nop */ cpu->gpr[31] = 0xBFC11610u; psx_dispatch(cpu, 0x00006A80u); +} + +void func_00001B10(CPUState* cpu) { label_BFC11610: psx_check_interrupts(cpu); /* 0xBFC11610: 8FBF0014 lw $ra, 20($sp) */ @@ -38604,6 +38848,9 @@ label_BFC11800: /* 0xBFC1183C: 00000000 nop */ /* nop */ if (psx_taken_BFC11838) { cpu->pc = 0xBFC11880u; return; } +} + +void func_00001D40(CPUState* cpu) { label_BFC11840: psx_check_interrupts(cpu); /* 0xBFC11840: 8C680004 lw $t0, 4($v1) */ @@ -49143,6 +49390,19 @@ label_BFC15EF0: cpu->pc = 0x00006A70u; return; } +void func_000063F8(CPUState* cpu) { +label_BFC15EF8: + psx_check_interrupts(cpu); + /* 0xBFC15EF8: 3C020000 lui $v0, 0x0 */ + cpu->gpr[2] = 0x00000000u; + /* 0xBFC15EFC: 8C4275C0 lw $v0, 30144($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (30144)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC15EFCu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC15F00: 03E00008 jr $ra */ + /* 0xBFC15F04: 00000000 nop */ + /* nop */ + return; +} + void func_00006408(CPUState* cpu) { label_BFC15F08: psx_check_interrupts(cpu); @@ -49406,7 +49666,8 @@ label_BFC1609C: /* nop */ /* 0xBFC160CC: 03400008 jr $k0 */ /* 0xBFC160D0: 42000010 rfe */ - { uint32_t sr = cpu->cop0[12]; cpu->cop0[12] = (sr & 0xFFFFFFC0u) | ((sr >> 2) & 0x0Fu); } /* rfe -- slice terminator (per session approval, RFE substitutes for FIRST_MILESTONE.md "ERET" since R3000A has no ERET) */ return; + { uint32_t sr = cpu->cop0[12]; cpu->cop0[12] = (sr & 0xFFFFFFC0u) | ((sr >> 2) & 0x0Fu); } /* rfe */ + cpu->pc = cpu->gpr[26]; return; } void func_00006670(CPUState* cpu) { @@ -49531,6 +49792,184 @@ label_BFC16538: return; } +void func_00006A70(CPUState* cpu) { +label_BFC16570: + psx_check_interrupts(cpu); + /* 0xBFC16570: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16574: 01400008 jr $t2 */ + /* 0xBFC16578: 24090044 addiu $t1, $zero, 68 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (68)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006A80(CPUState* cpu) { +label_BFC16580: + psx_check_interrupts(cpu); + /* 0xBFC16580: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16584: 01400008 jr $t2 */ + /* 0xBFC16588: 24090040 addiu $t1, $zero, 64 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006A90(CPUState* cpu) { +label_BFC16590: + psx_check_interrupts(cpu); + /* 0xBFC16590: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16594: 01400008 jr $t2 */ + /* 0xBFC16598: 24090025 addiu $t1, $zero, 37 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (37)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AA0(CPUState* cpu) { +label_BFC165A0: + psx_check_interrupts(cpu); + /* 0xBFC165A0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165A4: 01400008 jr $t2 */ + /* 0xBFC165A8: 24090096 addiu $t1, $zero, 150 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (150)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AB0(CPUState* cpu) { +label_BFC165B0: + psx_check_interrupts(cpu); + /* 0xBFC165B0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165B4: 01400008 jr $t2 */ + /* 0xBFC165B8: 24090097 addiu $t1, $zero, 151 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (151)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AC0(CPUState* cpu) { +label_BFC165C0: + psx_check_interrupts(cpu); + /* 0xBFC165C0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165C4: 01400008 jr $t2 */ + /* 0xBFC165C8: 24090099 addiu $t1, $zero, 153 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (153)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AD0(CPUState* cpu) { +label_BFC165D0: + psx_check_interrupts(cpu); + /* 0xBFC165D0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165D4: 01400008 jr $t2 */ + /* 0xBFC165D8: 24090098 addiu $t1, $zero, 152 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (152)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AE0(CPUState* cpu) { +label_BFC165E0: + psx_check_interrupts(cpu); + /* 0xBFC165E0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165E4: 01400008 jr $t2 */ + /* 0xBFC165E8: 2409003F addiu $t1, $zero, 63 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (63)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006AF0(CPUState* cpu) { +label_BFC165F0: + psx_check_interrupts(cpu); + /* 0xBFC165F0: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC165F4: 01400008 jr $t2 */ + /* 0xBFC165F8: 240900B2 addiu $t1, $zero, 178 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (178)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B00(CPUState* cpu) { +label_BFC16600: + psx_check_interrupts(cpu); + /* 0xBFC16600: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16604: 01400008 jr $t2 */ + /* 0xBFC16608: 2409003A addiu $t1, $zero, 58 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (58)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B10(CPUState* cpu) { +label_BFC16610: + psx_check_interrupts(cpu); + /* 0xBFC16610: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16614: 01400008 jr $t2 */ + /* 0xBFC16618: 24090017 addiu $t1, $zero, 23 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (23)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B20(CPUState* cpu) { +label_BFC16620: + psx_check_interrupts(cpu); + /* 0xBFC16620: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16624: 01400008 jr $t2 */ + /* 0xBFC16628: 2409002A addiu $t1, $zero, 42 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (42)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B30(CPUState* cpu) { +label_BFC16630: + psx_check_interrupts(cpu); + /* 0xBFC16630: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16634: 01400008 jr $t2 */ + /* 0xBFC16638: 240900A7 addiu $t1, $zero, 167 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (167)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B40(CPUState* cpu) { +label_BFC16640: + psx_check_interrupts(cpu); + /* 0xBFC16640: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16644: 01400008 jr $t2 */ + /* 0xBFC16648: 240900A8 addiu $t1, $zero, 168 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (168)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B50(CPUState* cpu) { +label_BFC16650: + psx_check_interrupts(cpu); + /* 0xBFC16650: 240A00A0 addiu $t2, $zero, 160 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (160)); + /* 0xBFC16654: 01400008 jr $t2 */ + /* 0xBFC16658: 240900A9 addiu $t1, $zero, 169 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (169)); + cpu->pc = cpu->gpr[10]; return; +} + +void func_00006B80(CPUState* cpu) { +label_BFC16680: + psx_check_interrupts(cpu); + /* 0xBFC16680: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC16684: 0000000C syscall */ + cpu->pc = 0xBFC16684u; psx_syscall(cpu, cpu->gpr[2]); return; + /* 0xBFC16688: 03E00008 jr $ra */ + /* 0xBFC1668C: 00000000 nop */ + /* nop */ + return; +} + void func_00006B90(CPUState* cpu) { label_BFC16690: psx_check_interrupts(cpu); @@ -53553,6 +53992,17 @@ label_BFC196B8: return; } +void func_1FC196C8(CPUState* cpu) { +label_BFC196C8: + psx_check_interrupts(cpu); + /* 0xBFC196C8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC196CC: 03E00008 jr $ra */ + /* 0xBFC196D0: AC249E2C sw $a0, -25044($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25044)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC196D0u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + void func_1FC196D4(CPUState* cpu) { label_BFC196D4: psx_check_interrupts(cpu); @@ -55085,6 +55535,50 @@ label_BFC19FB0: return; } +void func_1FC1A11C(CPUState* cpu) { +label_BFC1A11C: + psx_check_interrupts(cpu); + /* 0xBFC1A11C: 3C0100F0 lui $at, 0xF0 */ + cpu->gpr[1] = 0x00F00000u; + /* 0xBFC1A120: 342100F0 ori $at, $at, 0xF0 */ + cpu->gpr[1] = cpu->gpr[1] | 0xF0u; + /* 0xBFC1A124: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC1A128: 00817024 and $t6, $a0, $at */ + cpu->gpr[14] = cpu->gpr[4] & cpu->gpr[1]; + /* 0xBFC1A12C: 11C00007 beq $t6, $zero, 0xBFC1A14C */ + uint32_t psx_brA_BFC1A12C = cpu->gpr[14]; uint32_t psx_brB_BFC1A12C = cpu->gpr[0]; + int psx_taken_BFC1A12C = (psx_brA_BFC1A12C == psx_brB_BFC1A12C); + /* 0xBFC1A130: 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, 0xBFC1A130u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC1A12C) goto label_BFC1A14C; +label_BFC1A134: + psx_check_interrupts(cpu); + /* 0xBFC1A134: 240F0002 addiu $t7, $zero, 2 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC1A138: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1A13C: AC2F65D4 sw $t7, 26068($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26068)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A13Cu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1A140: 3C01800F lui $at, 0x800F */ + cpu->gpr[1] = 0x800F0000u; + /* 0xBFC1A144: 0C00F4C5 jal 0xB003D314 */ + /* 0xBFC1A148: AC20A780 sw $zero, -22656($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-22656)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A148u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC1A14Cu; + psx_dispatch(cpu, 0x8003D314u); +label_BFC1A14C: + psx_check_interrupts(cpu); + /* 0xBFC1A14C: 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, 0xBFC1A14Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC1A150: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC1A154: 03E00008 jr $ra */ + /* 0xBFC1A158: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1A15C(CPUState* cpu) { label_BFC1A15C: psx_check_interrupts(cpu); @@ -55157,6 +55651,87 @@ label_BFC1A1AC: return; } +void func_1FC1A3B8(CPUState* cpu) { +label_BFC1A3B8: + psx_check_interrupts(cpu); + /* 0xBFC1A3B8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3BC: AC209F64 sw $zero, -24732($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24732)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3BCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1A3C0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3C4: AC209F68 sw $zero, -24728($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24728)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3C4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1A3C8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3CC: 240E0023 addiu $t6, $zero, 35 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (35)); + /* 0xBFC1A3D0: AC2E9F6C sw $t6, -24724($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24724)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3D0u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC1A3D4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3D8: AC209F70 sw $zero, -24720($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3D8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1A3DC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3E0: AC209F74 sw $zero, -24716($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24716)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3E0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1A3E4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3E8: 3C0F8006 lui $t7, 0x8006 */ + cpu->gpr[15] = 0x80060000u; + /* 0xBFC1A3EC: 8DEF6948 lw $t7, 26952($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3ECu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1A3F0: AC209F78 sw $zero, -24712($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24712)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3F0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1A3F4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A3F8: 15E00004 bne $t7, $zero, 0xBFC1A40C */ + uint32_t psx_brA_BFC1A3F8 = cpu->gpr[15]; uint32_t psx_brB_BFC1A3F8 = cpu->gpr[0]; + int psx_taken_BFC1A3F8 = (psx_brA_BFC1A3F8 != psx_brB_BFC1A3F8); + /* 0xBFC1A3FC: AC209E6C sw $zero, -24980($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24980)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A3FCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1A3F8) goto label_BFC1A40C; +label_BFC1A400: + psx_check_interrupts(cpu); + /* 0xBFC1A400: 24180032 addiu $t8, $zero, 50 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1A404: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1A408: AC386948 sw $t8, 26952($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A408u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } +label_BFC1A40C: + psx_check_interrupts(cpu); + /* 0xBFC1A40C: 03E00008 jr $ra */ + /* 0xBFC1A410: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1A414(CPUState* cpu) { +label_BFC1A414: + psx_check_interrupts(cpu); + /* 0xBFC1A414: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1A418: 03E00008 jr $ra */ + /* 0xBFC1A41C: AC249F64 sw $a0, -24732($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24732)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A41Cu); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + +void func_1FC1A420(CPUState* cpu) { +label_BFC1A420: + psx_check_interrupts(cpu); + /* 0xBFC1A420: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1A424: 8C429F64 lw $v0, -24732($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24732)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1A424u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1A428: 03E00008 jr $ra */ + /* 0xBFC1A42C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1A430(CPUState* cpu) { label_BFC1A430: psx_check_interrupts(cpu); @@ -56817,6 +57392,56 @@ label_BFC1AE18: return; } +void func_1FC1AE24(CPUState* cpu) { +label_BFC1AE24: + psx_check_interrupts(cpu); + /* 0xBFC1AE24: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1AE28: 8C429F68 lw $v0, -24728($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24728)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1AE28u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1AE2C: 03E00008 jr $ra */ + /* 0xBFC1AE30: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1AE34(CPUState* cpu) { +label_BFC1AE34: + psx_check_interrupts(cpu); + /* 0xBFC1AE34: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC1AE38: 8DCE9F74 lw $t6, -24716($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24716)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1AE38u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC1AE3C: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC1AE40: 15C10007 bne $t6, $at, 0xBFC1AE60 */ + uint32_t psx_brA_BFC1AE40 = cpu->gpr[14]; uint32_t psx_brB_BFC1AE40 = cpu->gpr[1]; + int psx_taken_BFC1AE40 = (psx_brA_BFC1AE40 != psx_brB_BFC1AE40); + /* 0xBFC1AE44: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1AE40) goto label_BFC1AE60; +label_BFC1AE48: + psx_check_interrupts(cpu); + /* 0xBFC1AE48: 240F0001 addiu $t7, $zero, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1AE4C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1AE50: AC2F9F74 sw $t7, -24716($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24716)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1AE50u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1AE54: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1AE58: 2418FFFF addiu $t8, $zero, -1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC1AE5C: AC389F88 sw $t8, -24696($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24696)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1AE5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } +label_BFC1AE60: + psx_check_interrupts(cpu); + /* 0xBFC1AE60: 03E00008 jr $ra */ + /* 0xBFC1AE64: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1AE68(CPUState* cpu) { label_BFC1AE68: psx_check_interrupts(cpu); @@ -58373,6 +58998,160 @@ label_BFC1B6E0: return; } +void func_1FC1B6EC(CPUState* cpu) { +label_BFC1B6EC: + psx_check_interrupts(cpu); + /* 0xBFC1B6EC: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC1B6F0: 27BDFFD8 addiu $sp, $sp, -40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-40)); + /* 0xBFC1B6F4: 28610015 slti $at, $v1, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (21) ? 1 : 0); + /* 0xBFC1B6F8: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B6F8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC1B6FC: 1020001D beq $at, $zero, 0xBFC1B774 */ + uint32_t psx_brA_BFC1B6FC = cpu->gpr[1]; uint32_t psx_brB_BFC1B6FC = cpu->gpr[0]; + int psx_taken_BFC1B6FC = (psx_brA_BFC1B6FC == psx_brB_BFC1B6FC); + /* 0xBFC1B700: AFA5002C sw $a1, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B700u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + if (psx_taken_BFC1B6FC) goto label_BFC1B774; +label_BFC1B704: + psx_check_interrupts(cpu); + /* 0xBFC1B704: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC1B708: 8DCE9E2C lw $t6, -25044($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25044)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B708u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC1B70C: 24010003 addiu $at, $zero, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC1B710: 15C10019 bne $t6, $at, 0xBFC1B778 */ + uint32_t psx_brA_BFC1B710 = cpu->gpr[14]; uint32_t psx_brB_BFC1B710 = cpu->gpr[1]; + int psx_taken_BFC1B710 = (psx_brA_BFC1B710 != psx_brB_BFC1B710); + /* 0xBFC1B714: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B714u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC1B710) goto label_BFC1B778; +label_BFC1B718: + psx_check_interrupts(cpu); + /* 0xBFC1B718: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC1B71C: 8DEF9E24 lw $t7, -25052($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B71Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1B720: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B724: 24640064 addiu $a0, $v1, 100 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[3] + (100)); + /* 0xBFC1B728: 2DF80001 sltiu $t8, $t7, 1 */ + cpu->gpr[24] = (uint32_t)(cpu->gpr[15] < 0x00000001u ? 1 : 0); + /* 0xBFC1B72C: AC389E24 sw $t8, -25052($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B72Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC1B730: 0C011997 jal 0xB004665C */ + /* 0xBFC1B734: AFA40020 sw $a0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B734u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + cpu->gpr[31] = 0xBFC1B738u; + psx_dispatch(cpu, 0x8004665Cu); +label_BFC1B738: + psx_check_interrupts(cpu); + /* 0xBFC1B738: 8FA5002C lw $a1, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B738u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC1B73C: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC1B740: 0C011262 jal 0xB0044988 */ + /* 0xBFC1B744: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1B748u; + psx_dispatch(cpu, 0x80044988u); +label_BFC1B748: + psx_check_interrupts(cpu); + /* 0xBFC1B748: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC1B74C: 8F399E24 lw $t9, -25052($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B74Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC1B750: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B754: 8FA40020 lw $a0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B754u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC1B758: 2F280001 sltiu $t0, $t9, 1 */ + cpu->gpr[8] = (uint32_t)(cpu->gpr[25] < 0x00000001u ? 1 : 0); + /* 0xBFC1B75C: 0C011997 jal 0xB004665C */ + /* 0xBFC1B760: AC289E24 sw $t0, -25052($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B760u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + cpu->gpr[31] = 0xBFC1B764u; + psx_dispatch(cpu, 0x8004665Cu); +label_BFC1B764: + psx_check_interrupts(cpu); + /* 0xBFC1B764: 8FA5002C lw $a1, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B764u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC1B768: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC1B76C: 0C011262 jal 0xB0044988 */ + /* 0xBFC1B770: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1B774u; + psx_dispatch(cpu, 0x80044988u); +label_BFC1B774: + psx_check_interrupts(cpu); + /* 0xBFC1B774: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B774u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } +label_BFC1B778: + psx_check_interrupts(cpu); + /* 0xBFC1B778: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + /* 0xBFC1B77C: 03E00008 jr $ra */ + /* 0xBFC1B780: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1B784(CPUState* cpu) { +label_BFC1B784: + psx_check_interrupts(cpu); + /* 0xBFC1B784: 00047080 sll $t6, $a0, 2 */ + cpu->gpr[14] = cpu->gpr[4] << 2u; + /* 0xBFC1B788: 3C0F800F lui $t7, 0x800F */ + cpu->gpr[15] = 0x800F0000u; + /* 0xBFC1B78C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B790: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC1B794: 8DEFD0F0 lw $t7, -12048($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-12048)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B794u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1B798: AC249E5C sw $a0, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B798u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC1B79C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7A0: AC2F9E50 sw $t7, -25008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7A0u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1B7A4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7A8: AC209E54 sw $zero, -25004($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7A8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7AC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7B0: AC209E58 sw $zero, -25000($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25000)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7B0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7B4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7B8: AC209E60 sw $zero, -24992($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24992)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7B8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7BC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7C0: AC209E64 sw $zero, -24988($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24988)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7C0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7C4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7C8: AC209E40 sw $zero, -25024($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25024)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7C8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7CC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7D0: AC209E44 sw $zero, -25020($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25020)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7D0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1B7D4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1B7D8: 03E00008 jr $ra */ + /* 0xBFC1B7DC: AC209E48 sw $zero, -25016($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25016)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1B7DCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + return; +} + void func_1FC1B7E0(CPUState* cpu) { label_BFC1B7E0: psx_check_interrupts(cpu); @@ -59336,6 +60115,30 @@ label_BFC1BD20: return; } +void func_1FC1BD3C(CPUState* cpu) { +label_BFC1BD3C: + psx_check_interrupts(cpu); + /* 0xBFC1BD3C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1BD40: 03E00008 jr $ra */ + /* 0xBFC1BD44: AC249E78 sw $a0, -24968($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24968)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1BD44u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + +void func_1FC1BD58(CPUState* cpu) { +label_BFC1BD58: + psx_check_interrupts(cpu); + /* 0xBFC1BD58: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1BD5C: 8C429F74 lw $v0, -24716($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24716)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1BD5Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1BD60: 03E00008 jr $ra */ + /* 0xBFC1BD64: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1BD68(CPUState* cpu) { label_BFC1BD68: psx_check_interrupts(cpu); @@ -59967,6 +60770,561 @@ label_BFC1C194: return; } +void func_1FC1C1A4(CPUState* cpu) { +label_BFC1C1A4: + psx_check_interrupts(cpu); + /* 0xBFC1C1A4: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1C1A8: 91299E70 lbu $t1, -24976($t1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-24976))); + /* 0xBFC1C1AC: 27BDFC88 addiu $sp, $sp, -888 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-888)); + /* 0xBFC1C1B0: AFB00018 sw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C1B0u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC1C1B4: 2D210002 sltiu $at, $t1, 2 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[9] < 0x00000002u ? 1 : 0); + /* 0xBFC1C1B8: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C1B8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC1C1BC: AFA40378 sw $a0, 888($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (888)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C1BCu); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC1C1C0: 14200015 bne $at, $zero, 0xBFC1C218 */ + uint32_t psx_brA_BFC1C1C0 = cpu->gpr[1]; uint32_t psx_brB_BFC1C1C0 = cpu->gpr[0]; + int psx_taken_BFC1C1C0 = (psx_brA_BFC1C1C0 != psx_brB_BFC1C1C0); + /* 0xBFC1C1C4: 24100001 addiu $s0, $zero, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC1C1C0) goto label_BFC1C218; +label_BFC1C1C8: + psx_check_interrupts(cpu); + /* 0xBFC1C1C8: AFB10024 sw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C1C8u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1C1CC: 3C11800F lui $s1, 0x800F */ + cpu->gpr[17] = 0x800F0000u; + /* 0xBFC1C1D0: 2631D0F4 addiu $s1, $s1, -12044 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (-12044)); +label_BFC1C1D4: + psx_check_interrupts(cpu); + /* 0xBFC1C1D4: AE200000 sw $zero, 0($s1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[17] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C1D4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1C1D8: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC1C1DC: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1C1E0: 24050008 addiu $a1, $zero, 8 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (8)); + cpu->gpr[31] = 0xBFC1C1E4u; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1C1E4: + psx_check_interrupts(cpu); + /* 0xBFC1C1E4: 0C011997 jal 0xB004665C */ + /* 0xBFC1C1E8: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1C1ECu; + psx_dispatch(cpu, 0x8004665Cu); +label_BFC1C1EC: + psx_check_interrupts(cpu); + /* 0xBFC1C1EC: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC1C1F0: 0C011294 jal 0xB0044A50 */ + /* 0xBFC1C1F4: 240503FE addiu $a1, $zero, 1022 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (1022)); + cpu->gpr[31] = 0xBFC1C1F8u; + psx_dispatch(cpu, 0x80044A50u); +label_BFC1C1F8: + psx_check_interrupts(cpu); + /* 0xBFC1C1F8: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1C1FC: 91299E70 lbu $t1, -24976($t1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-24976))); + /* 0xBFC1C200: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1C204: 0209082B sltu $at, $s0, $t1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[16] < cpu->gpr[9] ? 1 : 0); + /* 0xBFC1C208: 1420FFF2 bne $at, $zero, 0xBFC1C1D4 */ + uint32_t psx_brA_BFC1C208 = cpu->gpr[1]; uint32_t psx_brB_BFC1C208 = cpu->gpr[0]; + int psx_taken_BFC1C208 = (psx_brA_BFC1C208 != psx_brB_BFC1C208); + /* 0xBFC1C20C: 26310004 addiu $s1, $s1, 4 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (4)); + if (psx_taken_BFC1C208) goto label_BFC1C1D4; +label_BFC1C210: + psx_check_interrupts(cpu); + /* 0xBFC1C210: 8FB10024 lw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C210u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1C214: 00000000 nop */ + /* nop */ +label_BFC1C218: + psx_check_interrupts(cpu); + /* 0xBFC1C218: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC1C21C: 91089E71 lbu $t0, -24975($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-24975))); + /* 0xBFC1C220: 01205021 addu $t2, $t1, $zero */ + cpu->gpr[10] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC1C224: 010A082B sltu $at, $t0, $t2 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[10] ? 1 : 0); + /* 0xBFC1C228: 1420001A bne $at, $zero, 0xBFC1C294 */ + uint32_t psx_brA_BFC1C228 = cpu->gpr[1]; uint32_t psx_brB_BFC1C228 = cpu->gpr[0]; + int psx_taken_BFC1C228 = (psx_brA_BFC1C228 != psx_brB_BFC1C228); + /* 0xBFC1C22C: 01408021 addu $s0, $t2, $zero */ + cpu->gpr[16] = cpu->gpr[10] + cpu->gpr[0]; + if (psx_taken_BFC1C228) goto label_BFC1C294; +label_BFC1C230: + psx_check_interrupts(cpu); + /* 0xBFC1C230: 3C0F800F lui $t7, 0x800F */ + cpu->gpr[15] = 0x800F0000u; + /* 0xBFC1C234: 25EFD0F0 addiu $t7, $t7, -12048 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-12048)); + /* 0xBFC1C238: AFB10024 sw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C238u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1C23C: 00107080 sll $t6, $s0, 2 */ + cpu->gpr[14] = cpu->gpr[16] << 2u; + /* 0xBFC1C240: 01CF8821 addu $s1, $t6, $t7 */ + cpu->gpr[17] = cpu->gpr[14] + cpu->gpr[15]; +label_BFC1C244: + psx_check_interrupts(cpu); + /* 0xBFC1C244: 2A010015 slti $at, $s0, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[16] < (21) ? 1 : 0); + /* 0xBFC1C248: 1020000C beq $at, $zero, 0xBFC1C27C */ + uint32_t psx_brA_BFC1C248 = cpu->gpr[1]; uint32_t psx_brB_BFC1C248 = cpu->gpr[0]; + int psx_taken_BFC1C248 = (psx_brA_BFC1C248 == psx_brB_BFC1C248); + /* 0xBFC1C24C: AE300000 sw $s0, 0($s1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[17] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C24Cu); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + if (psx_taken_BFC1C248) goto label_BFC1C27C; +label_BFC1C250: + psx_check_interrupts(cpu); + /* 0xBFC1C250: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC1C254: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1C258: 24050028 addiu $a1, $zero, 40 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + cpu->gpr[31] = 0xBFC1C25Cu; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1C25C: + psx_check_interrupts(cpu); + /* 0xBFC1C25C: 0C011997 jal 0xB004665C */ + /* 0xBFC1C260: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1C264u; + psx_dispatch(cpu, 0x8004665Cu); +label_BFC1C264: + psx_check_interrupts(cpu); + /* 0xBFC1C264: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC1C268: 0C011294 jal 0xB0044A50 */ + /* 0xBFC1C26C: 24050003 addiu $a1, $zero, 3 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + cpu->gpr[31] = 0xBFC1C270u; + psx_dispatch(cpu, 0x80044A50u); +label_BFC1C270: + psx_check_interrupts(cpu); + /* 0xBFC1C270: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC1C274: 91089E71 lbu $t0, -24975($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-24975))); + /* 0xBFC1C278: 00000000 nop */ + /* nop */ +label_BFC1C27C: + psx_check_interrupts(cpu); + /* 0xBFC1C27C: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1C280: 0110082B sltu $at, $t0, $s0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[16] ? 1 : 0); + /* 0xBFC1C284: 1020FFEF beq $at, $zero, 0xBFC1C244 */ + uint32_t psx_brA_BFC1C284 = cpu->gpr[1]; uint32_t psx_brB_BFC1C284 = cpu->gpr[0]; + int psx_taken_BFC1C284 = (psx_brA_BFC1C284 == psx_brB_BFC1C284); + /* 0xBFC1C288: 26310004 addiu $s1, $s1, 4 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (4)); + if (psx_taken_BFC1C284) goto label_BFC1C244; +label_BFC1C28C: + psx_check_interrupts(cpu); + /* 0xBFC1C28C: 8FB10024 lw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C28Cu); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1C290: 00000000 nop */ + /* nop */ +label_BFC1C294: + psx_check_interrupts(cpu); + /* 0xBFC1C294: 0C011997 jal 0xB004665C */ + /* 0xBFC1C298: 24040016 addiu $a0, $zero, 22 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (22)); + cpu->gpr[31] = 0xBFC1C29Cu; + psx_dispatch(cpu, 0x8004665Cu); +label_BFC1C29C: + psx_check_interrupts(cpu); + /* 0xBFC1C29C: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC1C2A0: 0C011294 jal 0xB0044A50 */ + /* 0xBFC1C2A4: 240503FE addiu $a1, $zero, 1022 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (1022)); + cpu->gpr[31] = 0xBFC1C2A8u; + psx_dispatch(cpu, 0x80044A50u); +label_BFC1C2A8: + psx_check_interrupts(cpu); + /* 0xBFC1C2A8: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC1C2AC: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1C2B0: 91299E70 lbu $t1, -24976($t1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-24976))); + /* 0xBFC1C2B4: 91089E71 lbu $t0, -24975($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-24975))); + /* 0xBFC1C2B8: 00008021 addu $s0, $zero, $zero */ + cpu->gpr[16] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC1C2BC: 01092023 subu $a0, $t0, $t1 */ + cpu->gpr[4] = cpu->gpr[8] - cpu->gpr[9]; + /* 0xBFC1C2C0: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC1C2C4: 10800011 beq $a0, $zero, 0xBFC1C30C */ + uint32_t psx_brA_BFC1C2C4 = cpu->gpr[4]; uint32_t psx_brB_BFC1C2C4 = cpu->gpr[0]; + int psx_taken_BFC1C2C4 = (psx_brA_BFC1C2C4 == psx_brB_BFC1C2C4); + /* 0xBFC1C2C8: 01205021 addu $t2, $t1, $zero */ + cpu->gpr[10] = cpu->gpr[9] + cpu->gpr[0]; + if (psx_taken_BFC1C2C4) goto label_BFC1C30C; +label_BFC1C2CC: + psx_check_interrupts(cpu); + /* 0xBFC1C2CC: 27A30378 addiu $v1, $sp, 888 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); +label_BFC1C2D0: + psx_check_interrupts(cpu); + /* 0xBFC1C2D0: 0C016A3C jal 0xB005A8F0 */ + /* 0xBFC1C2D4: AFA30030 sw $v1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C2D4u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + cpu->gpr[31] = 0xBFC1C2D8u; + psx_dispatch(cpu, 0x8005A8F0u); +label_BFC1C2D8: + psx_check_interrupts(cpu); + /* 0xBFC1C2D8: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC1C2DC: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1C2E0: 91299E70 lbu $t1, -24976($t1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-24976))); + /* 0xBFC1C2E4: 91089E71 lbu $t0, -24975($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-24975))); + /* 0xBFC1C2E8: 8FA30030 lw $v1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C2E8u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC1C2EC: 01092023 subu $a0, $t0, $t1 */ + cpu->gpr[4] = cpu->gpr[8] - cpu->gpr[9]; + /* 0xBFC1C2F0: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC1C2F4: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1C2F8: 0204082B sltu $at, $s0, $a0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[16] < cpu->gpr[4] ? 1 : 0); + /* 0xBFC1C2FC: AC62FE64 sw $v0, -412($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-412)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C2FCu); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC1C300: 1420FFF3 bne $at, $zero, 0xBFC1C2D0 */ + uint32_t psx_brA_BFC1C300 = cpu->gpr[1]; uint32_t psx_brB_BFC1C300 = cpu->gpr[0]; + int psx_taken_BFC1C300 = (psx_brA_BFC1C300 != psx_brB_BFC1C300); + /* 0xBFC1C304: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + if (psx_taken_BFC1C300) goto label_BFC1C2D0; +label_BFC1C308: + psx_check_interrupts(cpu); + /* 0xBFC1C308: 01205021 addu $t2, $t1, $zero */ + cpu->gpr[10] = cpu->gpr[9] + cpu->gpr[0]; +label_BFC1C30C: + psx_check_interrupts(cpu); + /* 0xBFC1C30C: 01405821 addu $t3, $t2, $zero */ + cpu->gpr[11] = cpu->gpr[10] + cpu->gpr[0]; + /* 0xBFC1C310: 010B082B sltu $at, $t0, $t3 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[11] ? 1 : 0); + /* 0xBFC1C314: 14200026 bne $at, $zero, 0xBFC1C3B0 */ + uint32_t psx_brA_BFC1C314 = cpu->gpr[1]; uint32_t psx_brB_BFC1C314 = cpu->gpr[0]; + int psx_taken_BFC1C314 = (psx_brA_BFC1C314 != psx_brB_BFC1C314); + /* 0xBFC1C318: 01401021 addu $v0, $t2, $zero */ + cpu->gpr[2] = cpu->gpr[10] + cpu->gpr[0]; + if (psx_taken_BFC1C314) goto label_BFC1C3B0; +label_BFC1C31C: + psx_check_interrupts(cpu); + /* 0xBFC1C31C: 27B90378 addiu $t9, $sp, 888 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); + /* 0xBFC1C320: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC1C324: 00086080 sll $t4, $t0, 2 */ + cpu->gpr[12] = cpu->gpr[8] << 2u; + /* 0xBFC1C328: 3C06800F lui $a2, 0x800F */ + cpu->gpr[6] = 0x800F0000u; + /* 0xBFC1C32C: 24C6D0F0 addiu $a2, $a2, -12048 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-12048)); + /* 0xBFC1C330: 01993821 addu $a3, $t4, $t9 */ + cpu->gpr[7] = cpu->gpr[12] + cpu->gpr[25]; + /* 0xBFC1C334: 03192821 addu $a1, $t8, $t9 */ + cpu->gpr[5] = cpu->gpr[24] + cpu->gpr[25]; +label_BFC1C338: + psx_check_interrupts(cpu); + /* 0xBFC1C338: 2C810002 sltiu $at, $a0, 2 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000002u ? 1 : 0); + /* 0xBFC1C33C: 24100001 addiu $s0, $zero, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1C340: 1420000F bne $at, $zero, 0xBFC1C380 */ + uint32_t psx_brA_BFC1C340 = cpu->gpr[1]; uint32_t psx_brB_BFC1C340 = cpu->gpr[0]; + int psx_taken_BFC1C340 = (psx_brA_BFC1C340 != psx_brB_BFC1C340); + /* 0xBFC1C344: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1C340) goto label_BFC1C380; +label_BFC1C348: + psx_check_interrupts(cpu); + /* 0xBFC1C348: 27A3037C addiu $v1, $sp, 892 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[29] + (892)); +label_BFC1C34C: + psx_check_interrupts(cpu); + /* 0xBFC1C34C: 00027080 sll $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] << 2u; + /* 0xBFC1C350: 03AE7821 addu $t7, $sp, $t6 */ + cpu->gpr[15] = cpu->gpr[29] + cpu->gpr[14]; + /* 0xBFC1C354: 8DEF01DC lw $t7, 476($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (476)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C354u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1C358: 8C6DFE64 lw $t5, -412($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-412)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C358u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC1C35C: 00000000 nop */ + /* nop */ + /* 0xBFC1C360: 01AFC023 subu $t8, $t5, $t7 */ + cpu->gpr[24] = cpu->gpr[13] - cpu->gpr[15]; + /* 0xBFC1C364: 1B000002 blez $t8, 0xBFC1C370 */ + uint32_t psx_brA_BFC1C364 = cpu->gpr[24]; + int psx_taken_BFC1C364 = ((int32_t)psx_brA_BFC1C364 <= 0); + /* 0xBFC1C368: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1C364) goto label_BFC1C370; +label_BFC1C36C: + psx_check_interrupts(cpu); + /* 0xBFC1C36C: 02001021 addu $v0, $s0, $zero */ + cpu->gpr[2] = cpu->gpr[16] + cpu->gpr[0]; +label_BFC1C370: + psx_check_interrupts(cpu); + /* 0xBFC1C370: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1C374: 0204082B sltu $at, $s0, $a0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[16] < cpu->gpr[4] ? 1 : 0); + /* 0xBFC1C378: 1420FFF4 bne $at, $zero, 0xBFC1C34C */ + uint32_t psx_brA_BFC1C378 = cpu->gpr[1]; uint32_t psx_brB_BFC1C378 = cpu->gpr[0]; + int psx_taken_BFC1C378 = (psx_brA_BFC1C378 != psx_brB_BFC1C378); + /* 0xBFC1C37C: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + if (psx_taken_BFC1C378) goto label_BFC1C34C; +label_BFC1C380: + psx_check_interrupts(cpu); + /* 0xBFC1C380: 00026080 sll $t4, $v0, 2 */ + cpu->gpr[12] = cpu->gpr[2] << 2u; + /* 0xBFC1C384: 00CCC821 addu $t9, $a2, $t4 */ + cpu->gpr[25] = cpu->gpr[6] + cpu->gpr[12]; + /* 0xBFC1C388: 00097080 sll $t6, $t1, 2 */ + cpu->gpr[14] = cpu->gpr[9] << 2u; + /* 0xBFC1C38C: 032E6821 addu $t5, $t9, $t6 */ + cpu->gpr[13] = cpu->gpr[25] + cpu->gpr[14]; + /* 0xBFC1C390: 8DAF0000 lw $t7, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C390u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1C394: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC1C398: 24A50004 addiu $a1, $a1, 4 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (4)); + /* 0xBFC1C39C: 03B86021 addu $t4, $sp, $t8 */ + cpu->gpr[12] = cpu->gpr[29] + cpu->gpr[24]; + /* 0xBFC1C3A0: 00E5082B sltu $at, $a3, $a1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[7] < cpu->gpr[5] ? 1 : 0); + /* 0xBFC1C3A4: ACAFFCD0 sw $t7, -816($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-816)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3A4u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1C3A8: 1020FFE3 beq $at, $zero, 0xBFC1C338 */ + uint32_t psx_brA_BFC1C3A8 = cpu->gpr[1]; uint32_t psx_brB_BFC1C3A8 = cpu->gpr[0]; + int psx_taken_BFC1C3A8 = (psx_brA_BFC1C3A8 == psx_brB_BFC1C3A8); + /* 0xBFC1C3AC: AD8001DC sw $zero, 476($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (476)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3ACu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1C3A8) goto label_BFC1C338; +label_BFC1C3B0: + psx_check_interrupts(cpu); + /* 0xBFC1C3B0: 8FB90378 lw $t9, 888($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (888)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3B0u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC1C3B4: 00000000 nop */ + /* nop */ + /* 0xBFC1C3B8: 17200023 bne $t9, $zero, 0xBFC1C448 */ + uint32_t psx_brA_BFC1C3B8 = cpu->gpr[25]; uint32_t psx_brB_BFC1C3B8 = cpu->gpr[0]; + int psx_taken_BFC1C3B8 = (psx_brA_BFC1C3B8 != psx_brB_BFC1C3B8); + /* 0xBFC1C3BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1C3B8) goto label_BFC1C448; +label_BFC1C3C0: + psx_check_interrupts(cpu); + /* 0xBFC1C3C0: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC1C3C4: 8C426948 lw $v0, 26952($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3C4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1C3C8: 24010033 addiu $at, $zero, 51 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (51)); + /* 0xBFC1C3CC: 10410002 beq $v0, $at, 0xBFC1C3D8 */ + uint32_t psx_brA_BFC1C3CC = cpu->gpr[2]; uint32_t psx_brB_BFC1C3CC = cpu->gpr[1]; + int psx_taken_BFC1C3CC = (psx_brA_BFC1C3CC == psx_brB_BFC1C3CC); + /* 0xBFC1C3D0: 24010034 addiu $at, $zero, 52 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (52)); + if (psx_taken_BFC1C3CC) goto label_BFC1C3D8; +label_BFC1C3D4: + psx_check_interrupts(cpu); + /* 0xBFC1C3D4: 1441001C bne $v0, $at, 0xBFC1C448 */ + uint32_t psx_brA_BFC1C3D4 = cpu->gpr[2]; uint32_t psx_brB_BFC1C3D4 = cpu->gpr[1]; + int psx_taken_BFC1C3D4 = (psx_brA_BFC1C3D4 != psx_brB_BFC1C3D4); +label_BFC1C3D8: + psx_check_interrupts(cpu); + /* 0xBFC1C3D8: 010B082B sltu $at, $t0, $t3 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[11] ? 1 : 0); + if (psx_taken_BFC1C3D4) goto label_BFC1C448; +label_BFC1C3DC: + psx_check_interrupts(cpu); + /* 0xBFC1C3DC: 14200017 bne $at, $zero, 0xBFC1C43C */ + uint32_t psx_brA_BFC1C3DC = cpu->gpr[1]; uint32_t psx_brB_BFC1C3DC = cpu->gpr[0]; + int psx_taken_BFC1C3DC = (psx_brA_BFC1C3DC != psx_brB_BFC1C3DC); + /* 0xBFC1C3E0: 01408021 addu $s0, $t2, $zero */ + cpu->gpr[16] = cpu->gpr[10] + cpu->gpr[0]; + if (psx_taken_BFC1C3DC) goto label_BFC1C43C; +label_BFC1C3E4: + psx_check_interrupts(cpu); + /* 0xBFC1C3E4: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1C3E8: 00107080 sll $t6, $s0, 2 */ + cpu->gpr[14] = cpu->gpr[16] << 2u; + /* 0xBFC1C3EC: 27AD0378 addiu $t5, $sp, 888 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); + /* 0xBFC1C3F0: 8C429E50 lw $v0, -25008($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3F0u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1C3F4: 01CD1821 addu $v1, $t6, $t5 */ + cpu->gpr[3] = cpu->gpr[14] + cpu->gpr[13]; +label_BFC1C3F8: + psx_check_interrupts(cpu); + /* 0xBFC1C3F8: 8C6FFCD4 lw $t7, -812($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C3F8u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1C3FC: 00000000 nop */ + /* nop */ + /* 0xBFC1C400: 144F000A bne $v0, $t7, 0xBFC1C42C */ + uint32_t psx_brA_BFC1C400 = cpu->gpr[2]; uint32_t psx_brB_BFC1C400 = cpu->gpr[15]; + int psx_taken_BFC1C400 = (psx_brA_BFC1C400 != psx_brB_BFC1C400); + /* 0xBFC1C404: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + if (psx_taken_BFC1C400) goto label_BFC1C42C; +label_BFC1C408: + psx_check_interrupts(cpu); + /* 0xBFC1C408: 0009C080 sll $t8, $t1, 2 */ + cpu->gpr[24] = cpu->gpr[9] << 2u; + /* 0xBFC1C40C: 27AC0378 addiu $t4, $sp, 888 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); + /* 0xBFC1C410: 030C2021 addu $a0, $t8, $t4 */ + cpu->gpr[4] = cpu->gpr[24] + cpu->gpr[12]; + /* 0xBFC1C414: 8C99FCD4 lw $t9, -812($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C414u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC1C418: 01408021 addu $s0, $t2, $zero */ + cpu->gpr[16] = cpu->gpr[10] + cpu->gpr[0]; + /* 0xBFC1C41C: AC79FCD4 sw $t9, -812($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C41Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC1C420: 10000006 beq $zero, $zero, 0xBFC1C43C */ + uint32_t psx_brA_BFC1C420 = cpu->gpr[0]; uint32_t psx_brB_BFC1C420 = cpu->gpr[0]; + int psx_taken_BFC1C420 = (psx_brA_BFC1C420 == psx_brB_BFC1C420); + /* 0xBFC1C424: AC82FCD4 sw $v0, -812($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C424u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC1C420) goto label_BFC1C43C; +label_BFC1C428: + psx_check_interrupts(cpu); + /* 0xBFC1C428: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); +label_BFC1C42C: + psx_check_interrupts(cpu); + /* 0xBFC1C42C: 0110082B sltu $at, $t0, $s0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[16] ? 1 : 0); + /* 0xBFC1C430: 1020FFF1 beq $at, $zero, 0xBFC1C3F8 */ + uint32_t psx_brA_BFC1C430 = cpu->gpr[1]; uint32_t psx_brB_BFC1C430 = cpu->gpr[0]; + int psx_taken_BFC1C430 = (psx_brA_BFC1C430 == psx_brB_BFC1C430); + /* 0xBFC1C434: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + if (psx_taken_BFC1C430) goto label_BFC1C3F8; +label_BFC1C438: + psx_check_interrupts(cpu); + /* 0xBFC1C438: 01408021 addu $s0, $t2, $zero */ + cpu->gpr[16] = cpu->gpr[10] + cpu->gpr[0]; +label_BFC1C43C: + psx_check_interrupts(cpu); + /* 0xBFC1C43C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1C440: 10000004 beq $zero, $zero, 0xBFC1C454 */ + uint32_t psx_brA_BFC1C440 = cpu->gpr[0]; uint32_t psx_brB_BFC1C440 = cpu->gpr[0]; + int psx_taken_BFC1C440 = (psx_brA_BFC1C440 == psx_brB_BFC1C440); + /* 0xBFC1C444: AC2A9E5C sw $t2, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C444u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + if (psx_taken_BFC1C440) goto label_BFC1C454; +label_BFC1C448: + psx_check_interrupts(cpu); + /* 0xBFC1C448: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1C44C: AC209E5C sw $zero, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C44Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1C450: 01408021 addu $s0, $t2, $zero */ + cpu->gpr[16] = cpu->gpr[10] + cpu->gpr[0]; +label_BFC1C454: + psx_check_interrupts(cpu); + /* 0xBFC1C454: 010B082B sltu $at, $t0, $t3 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[11] ? 1 : 0); + /* 0xBFC1C458: 14200013 bne $at, $zero, 0xBFC1C4A8 */ + uint32_t psx_brA_BFC1C458 = cpu->gpr[1]; uint32_t psx_brB_BFC1C458 = cpu->gpr[0]; + int psx_taken_BFC1C458 = (psx_brA_BFC1C458 != psx_brB_BFC1C458); + /* 0xBFC1C45C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1C458) goto label_BFC1C4A8; +label_BFC1C460: + psx_check_interrupts(cpu); + /* 0xBFC1C460: 3C0D800F lui $t5, 0x800F */ + cpu->gpr[13] = 0x800F0000u; + /* 0xBFC1C464: 27B80378 addiu $t8, $sp, 888 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); + /* 0xBFC1C468: 25ADD0F0 addiu $t5, $t5, -12048 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[13] + (-12048)); + /* 0xBFC1C46C: AFB10024 sw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C46Cu); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1C470: 00107080 sll $t6, $s0, 2 */ + cpu->gpr[14] = cpu->gpr[16] << 2u; + /* 0xBFC1C474: 00107880 sll $t7, $s0, 2 */ + cpu->gpr[15] = cpu->gpr[16] << 2u; + /* 0xBFC1C478: 00086080 sll $t4, $t0, 2 */ + cpu->gpr[12] = cpu->gpr[8] << 2u; + /* 0xBFC1C47C: 01981021 addu $v0, $t4, $t8 */ + cpu->gpr[2] = cpu->gpr[12] + cpu->gpr[24]; + /* 0xBFC1C480: 01F81821 addu $v1, $t7, $t8 */ + cpu->gpr[3] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC1C484: 01CD8821 addu $s1, $t6, $t5 */ + cpu->gpr[17] = cpu->gpr[14] + cpu->gpr[13]; +label_BFC1C488: + psx_check_interrupts(cpu); + /* 0xBFC1C488: 8C79FCD4 lw $t9, -812($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C488u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC1C48C: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC1C490: 0043082B sltu $at, $v0, $v1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < cpu->gpr[3] ? 1 : 0); + /* 0xBFC1C494: 26310004 addiu $s1, $s1, 4 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (4)); + /* 0xBFC1C498: 1020FFFB beq $at, $zero, 0xBFC1C488 */ + uint32_t psx_brA_BFC1C498 = cpu->gpr[1]; uint32_t psx_brB_BFC1C498 = cpu->gpr[0]; + int psx_taken_BFC1C498 = (psx_brA_BFC1C498 == psx_brB_BFC1C498); + /* 0xBFC1C49C: AE39FFFC sw $t9, -4($s1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[17] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C49Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + if (psx_taken_BFC1C498) goto label_BFC1C488; +label_BFC1C4A0: + psx_check_interrupts(cpu); + /* 0xBFC1C4A0: 8FB10024 lw $s1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C4A0u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1C4A4: 00000000 nop */ + /* nop */ +label_BFC1C4A8: + psx_check_interrupts(cpu); + /* 0xBFC1C4A8: 0C00CAA4 jal 0xB0032A90 */ + /* 0xBFC1C4AC: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1C4B0u; + psx_dispatch(cpu, 0x80032A90u); +label_BFC1C4B0: + psx_check_interrupts(cpu); + /* 0xBFC1C4B0: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C4B0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC1C4B4: 8FB00018 lw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C4B4u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC1C4B8: 03E00008 jr $ra */ + /* 0xBFC1C4BC: 27BD0378 addiu $sp, $sp, 888 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (888)); + return; +} + void func_1FC1C4C0(CPUState* cpu) { label_BFC1C4C0: psx_check_interrupts(cpu); @@ -60525,6 +61883,56 @@ label_BFC1C96C: return; } +void func_1FC1C978(CPUState* cpu) { +label_BFC1C978: + psx_check_interrupts(cpu); + /* 0xBFC1C978: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1C97C: 8C429F70 lw $v0, -24720($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C97Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1C980: 03E00008 jr $ra */ + /* 0xBFC1C984: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1C988(CPUState* cpu) { +label_BFC1C988: + psx_check_interrupts(cpu); + /* 0xBFC1C988: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1C98C: 8C429F78 lw $v0, -24712($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24712)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C98Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1C990: 03E00008 jr $ra */ + /* 0xBFC1C994: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1C998(CPUState* cpu) { +label_BFC1C998: + psx_check_interrupts(cpu); + /* 0xBFC1C998: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1C99C: 8C429F7C lw $v0, -24708($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24708)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C99Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC1C9A0: 03E00008 jr $ra */ + /* 0xBFC1C9A4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1C9A8(CPUState* cpu) { +label_BFC1C9A8: + psx_check_interrupts(cpu); + /* 0xBFC1C9A8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1C9AC: 03E00008 jr $ra */ + /* 0xBFC1C9B0: AC249F7C sw $a0, -24708($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24708)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1C9B0u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + void func_1FC1C9B4(CPUState* cpu) { label_BFC1C9B4: psx_check_interrupts(cpu); @@ -61182,6 +62590,82 @@ label_BFC1CD30: return; } +void func_1FC1CD40(CPUState* cpu) { +label_BFC1CD40: + psx_check_interrupts(cpu); + /* 0xBFC1CD40: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1CD44: AC209FA0 sw $zero, -24672($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24672)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1CD44u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1CD48: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1CD4C: 3C0E8006 lui $t6, 0x8006 */ + cpu->gpr[14] = 0x80060000u; + /* 0xBFC1CD50: 8DCE6948 lw $t6, 26952($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1CD50u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC1CD54: AC209FA4 sw $zero, -24668($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1CD54u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1CD58: 24010034 addiu $at, $zero, 52 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (52)); + /* 0xBFC1CD5C: 11C10002 beq $t6, $at, 0xBFC1CD68 */ + uint32_t psx_brA_BFC1CD5C = cpu->gpr[14]; uint32_t psx_brB_BFC1CD5C = cpu->gpr[1]; + int psx_taken_BFC1CD5C = (psx_brA_BFC1CD5C == psx_brB_BFC1CD5C); + /* 0xBFC1CD60: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1CD5C) goto label_BFC1CD68; +label_BFC1CD64: + psx_check_interrupts(cpu); + /* 0xBFC1CD64: AC209E50 sw $zero, -25008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1CD64u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC1CD68: + psx_check_interrupts(cpu); + /* 0xBFC1CD68: 03E00008 jr $ra */ + /* 0xBFC1CD6C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC1CD90(CPUState* cpu) { +label_BFC1CD90: + psx_check_interrupts(cpu); + /* 0xBFC1CD90: 2401000A addiu $at, $zero, 10 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC1CD94: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC1CD98: 00054080 sll $t0, $a1, 2 */ + cpu->gpr[8] = cpu->gpr[5] << 2u; + /* 0xBFC1CD9C: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1CDA0: 25299FB0 addiu $t1, $t1, -24656 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (-24656)); + /* 0xBFC1CDA4: 01054023 subu $t0, $t0, $a1 */ + cpu->gpr[8] = cpu->gpr[8] - cpu->gpr[5]; + /* 0xBFC1CDA8: 01091021 addu $v0, $t0, $t1 */ + cpu->gpr[2] = cpu->gpr[8] + cpu->gpr[9]; + /* 0xBFC1CDAC: 00007012 mflo $t6 */ + cpu->gpr[14] = cpu->lo; + /* 0xBFC1CDB0: 000E7900 sll $t7, $t6, 4 */ + cpu->gpr[15] = cpu->gpr[14] << 4u; + /* 0xBFC1CDB4: 0000C010 mfhi $t8 */ + cpu->gpr[24] = cpu->hi; + /* 0xBFC1CDB8: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC1CDBC: A0990001 sb $t9, 1($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (1)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC1CDC0: 904A0000 lbu $t2, 0($v0) */ + cpu->gpr[10] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC1CDC4: 00000000 nop */ + /* nop */ + /* 0xBFC1CDC8: A08A0003 sb $t2, 3($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (3)), (uint8_t)(cpu->gpr[10] & 0xFFu)); + /* 0xBFC1CDCC: 904B0001 lbu $t3, 1($v0) */ + cpu->gpr[11] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (1))); + /* 0xBFC1CDD0: 03E00008 jr $ra */ + /* 0xBFC1CDD4: A08B0004 sb $t3, 4($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (4)), (uint8_t)(cpu->gpr[11] & 0xFFu)); + return; +} + void func_1FC1CDD8(CPUState* cpu) { label_BFC1CDD8: psx_check_interrupts(cpu); @@ -61454,6 +62938,462 @@ label_BFC1D970: return; } +void func_1FC1D980(CPUState* cpu) { +label_BFC1D980: + psx_check_interrupts(cpu); + /* 0xBFC1D980: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1D984: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D988: AC2E9DF8 sw $t6, -25096($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25096)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D988u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC1D98C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D990: 240F0001 addiu $t7, $zero, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1D994: AC2F9DF4 sw $t7, -25100($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D994u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1D998: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D99C: AC209DFC sw $zero, -25092($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25092)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D99Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9A0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D9A4: AC209E00 sw $zero, -25088($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25088)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9A4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9A8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D9AC: AC209E38 sw $zero, -25032($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25032)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9ACu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9B0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D9B4: AC209E18 sw $zero, -25064($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25064)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9B4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9B8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D9BC: 03E00008 jr $ra */ + /* 0xBFC1D9C0: AC209EC0 sw $zero, -24896($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24896)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9C0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + return; +} + +void func_1FC1D9C4(CPUState* cpu) { +label_BFC1D9C4: + psx_check_interrupts(cpu); + /* 0xBFC1D9C4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1D9C8: AC209EB0 sw $zero, -24912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9C8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9CC: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC1D9D0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1D9D4: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9D4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1D9D8: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9D8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC1D9DC: AFA40020 sw $a0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9DCu); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC1D9E0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1D9E4: 240E0005 addiu $t6, $zero, 5 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (5)); + /* 0xBFC1D9E8: AC2E6944 sw $t6, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1D9E8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC1D9EC: 24040037 addiu $a0, $zero, 55 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (55)); + /* 0xBFC1D9F0: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1D9F4: 24050006 addiu $a1, $zero, 6 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (6)); + cpu->gpr[31] = 0xBFC1D9F8u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1D9F8: + psx_check_interrupts(cpu); + /* 0xBFC1D9F8: 14400007 bne $v0, $zero, 0xBFC1DA18 */ + uint32_t psx_brA_BFC1D9F8 = cpu->gpr[2]; uint32_t psx_brB_BFC1D9F8 = cpu->gpr[0]; + int psx_taken_BFC1D9F8 = (psx_brA_BFC1D9F8 != psx_brB_BFC1D9F8); + /* 0xBFC1D9FC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1D9F8) goto label_BFC1DA18; +label_BFC1DA00: + psx_check_interrupts(cpu); + /* 0xBFC1DA00: 0C00D660 jal 0xB0035980 */ + /* 0xBFC1DA04: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA08u; + psx_dispatch(cpu, 0x80035980u); +label_BFC1DA08: + psx_check_interrupts(cpu); + /* 0xBFC1DA08: 0C00D2BC jal 0xB0034AF0 */ + /* 0xBFC1DA0C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA10u; + psx_dispatch(cpu, 0x80034AF0u); +label_BFC1DA10: + psx_check_interrupts(cpu); + /* 0xBFC1DA10: 10000074 beq $zero, $zero, 0xBFC1DBE4 */ + uint32_t psx_brA_BFC1DA10 = cpu->gpr[0]; uint32_t psx_brB_BFC1DA10 = cpu->gpr[0]; + int psx_taken_BFC1DA10 = (psx_brA_BFC1DA10 == psx_brB_BFC1DA10); + /* 0xBFC1DA14: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1DA10) goto label_BFC1DBE4; +label_BFC1DA18: + psx_check_interrupts(cpu); + /* 0xBFC1DA18: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC1DA1C: 91EF9EB4 lbu $t7, -24908($t7) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[15] + (-24908))); + /* 0xBFC1DA20: 00000000 nop */ + /* nop */ + /* 0xBFC1DA24: 31F80010 andi $t8, $t7, 0x10 */ + cpu->gpr[24] = cpu->gpr[15] & 0x10u; + /* 0xBFC1DA28: 13000020 beq $t8, $zero, 0xBFC1DAAC */ + uint32_t psx_brA_BFC1DA28 = cpu->gpr[24]; uint32_t psx_brB_BFC1DA28 = cpu->gpr[0]; + int psx_taken_BFC1DA28 = (psx_brA_BFC1DA28 == psx_brB_BFC1DA28); + /* 0xBFC1DA2C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DA28) goto label_BFC1DAAC; +label_BFC1DA30: + psx_check_interrupts(cpu); + /* 0xBFC1DA30: 0C00D660 jal 0xB0035980 */ + /* 0xBFC1DA34: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA38u; + psx_dispatch(cpu, 0x80035980u); +label_BFC1DA38: + psx_check_interrupts(cpu); + /* 0xBFC1DA38: 0C00D2BC jal 0xB0034AF0 */ + /* 0xBFC1DA3C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA40u; + psx_dispatch(cpu, 0x80034AF0u); +label_BFC1DA40: + psx_check_interrupts(cpu); + /* 0xBFC1DA40: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1DA44: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DA44u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1DA48: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1DA4C: 24190005 addiu $t9, $zero, 5 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (5)); + /* 0xBFC1DA50: AC396944 sw $t9, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DA50u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC1DA54: 24040037 addiu $a0, $zero, 55 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (55)); + /* 0xBFC1DA58: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1DA5C: 24050006 addiu $a1, $zero, 6 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (6)); + cpu->gpr[31] = 0xBFC1DA60u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1DA60: + psx_check_interrupts(cpu); + /* 0xBFC1DA60: 14400005 bne $v0, $zero, 0xBFC1DA78 */ + uint32_t psx_brA_BFC1DA60 = cpu->gpr[2]; uint32_t psx_brB_BFC1DA60 = cpu->gpr[0]; + int psx_taken_BFC1DA60 = (psx_brA_BFC1DA60 != psx_brB_BFC1DA60); + /* 0xBFC1DA64: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DA60) goto label_BFC1DA78; +label_BFC1DA68: + psx_check_interrupts(cpu); + /* 0xBFC1DA68: 0C00D660 jal 0xB0035980 */ + /* 0xBFC1DA6C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA70u; + psx_dispatch(cpu, 0x80035980u); +label_BFC1DA70: + psx_check_interrupts(cpu); + /* 0xBFC1DA70: 1000005C beq $zero, $zero, 0xBFC1DBE4 */ + uint32_t psx_brA_BFC1DA70 = cpu->gpr[0]; uint32_t psx_brB_BFC1DA70 = cpu->gpr[0]; + int psx_taken_BFC1DA70 = (psx_brA_BFC1DA70 == psx_brB_BFC1DA70); + /* 0xBFC1DA74: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1DA70) goto label_BFC1DBE4; +label_BFC1DA78: + psx_check_interrupts(cpu); + /* 0xBFC1DA78: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC1DA7C: 91089EB4 lbu $t0, -24908($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-24908))); + /* 0xBFC1DA80: 00000000 nop */ + /* nop */ + /* 0xBFC1DA84: 31090010 andi $t1, $t0, 0x10 */ + cpu->gpr[9] = cpu->gpr[8] & 0x10u; + /* 0xBFC1DA88: 11200005 beq $t1, $zero, 0xBFC1DAA0 */ + uint32_t psx_brA_BFC1DA88 = cpu->gpr[9]; uint32_t psx_brB_BFC1DA88 = cpu->gpr[0]; + int psx_taken_BFC1DA88 = (psx_brA_BFC1DA88 == psx_brB_BFC1DA88); + /* 0xBFC1DA8C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DA88) goto label_BFC1DAA0; +label_BFC1DA90: + psx_check_interrupts(cpu); + /* 0xBFC1DA90: 0C00D660 jal 0xB0035980 */ + /* 0xBFC1DA94: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DA98u; + psx_dispatch(cpu, 0x80035980u); +label_BFC1DA98: + psx_check_interrupts(cpu); + /* 0xBFC1DA98: 10000007 beq $zero, $zero, 0xBFC1DAB8 */ + uint32_t psx_brA_BFC1DA98 = cpu->gpr[0]; uint32_t psx_brB_BFC1DA98 = cpu->gpr[0]; + int psx_taken_BFC1DA98 = (psx_brA_BFC1DA98 == psx_brB_BFC1DA98); + /* 0xBFC1DA9C: 8FAA0020 lw $t2, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DA9Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + if (psx_taken_BFC1DA98) goto label_BFC1DAB8; +label_BFC1DAA0: + psx_check_interrupts(cpu); + /* 0xBFC1DAA0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DAA4: 10000003 beq $zero, $zero, 0xBFC1DAB4 */ + uint32_t psx_brA_BFC1DAA4 = cpu->gpr[0]; uint32_t psx_brB_BFC1DAA4 = cpu->gpr[0]; + int psx_taken_BFC1DAA4 = (psx_brA_BFC1DAA4 == psx_brB_BFC1DAA4); + /* 0xBFC1DAA8: AC209DF8 sw $zero, -25096($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25096)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAA8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1DAA4) goto label_BFC1DAB4; +label_BFC1DAAC: + psx_check_interrupts(cpu); + /* 0xBFC1DAAC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DAB0: AC209DF8 sw $zero, -25096($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25096)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAB0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC1DAB4: + psx_check_interrupts(cpu); + /* 0xBFC1DAB4: 8FAA0020 lw $t2, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAB4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } +label_BFC1DAB8: + psx_check_interrupts(cpu); + /* 0xBFC1DAB8: 00000000 nop */ + /* nop */ + /* 0xBFC1DABC: 11400049 beq $t2, $zero, 0xBFC1DBE4 */ + uint32_t psx_brA_BFC1DABC = cpu->gpr[10]; uint32_t psx_brB_BFC1DABC = cpu->gpr[0]; + int psx_taken_BFC1DABC = (psx_brA_BFC1DABC == psx_brB_BFC1DABC); + /* 0xBFC1DAC0: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC1DABC) goto label_BFC1DBE4; +label_BFC1DAC4: + psx_check_interrupts(cpu); + /* 0xBFC1DAC4: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC1DAC8: 8D6B9DF8 lw $t3, -25096($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-25096)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAC8u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC1DACC: 00000000 nop */ + /* nop */ + /* 0xBFC1DAD0: 15600043 bne $t3, $zero, 0xBFC1DBE0 */ + uint32_t psx_brA_BFC1DAD0 = cpu->gpr[11]; uint32_t psx_brB_BFC1DAD0 = cpu->gpr[0]; + int psx_taken_BFC1DAD0 = (psx_brA_BFC1DAD0 != psx_brB_BFC1DAD0); + /* 0xBFC1DAD4: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + if (psx_taken_BFC1DAD0) goto label_BFC1DBE0; +label_BFC1DAD8: + psx_check_interrupts(cpu); + /* 0xBFC1DAD8: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAD8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1DADC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1DAE0: 240C0016 addiu $t4, $zero, 22 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[0] + (22)); + /* 0xBFC1DAE4: AC2C6944 sw $t4, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DAE4u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC1DAE8: 24040038 addiu $a0, $zero, 56 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (56)); + /* 0xBFC1DAEC: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1DAF0: 240502D0 addiu $a1, $zero, 720 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (720)); + cpu->gpr[31] = 0xBFC1DAF4u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1DAF4: + psx_check_interrupts(cpu); + /* 0xBFC1DAF4: 14400005 bne $v0, $zero, 0xBFC1DB0C */ + uint32_t psx_brA_BFC1DAF4 = cpu->gpr[2]; uint32_t psx_brB_BFC1DAF4 = cpu->gpr[0]; + int psx_taken_BFC1DAF4 = (psx_brA_BFC1DAF4 != psx_brB_BFC1DAF4); + /* 0xBFC1DAF8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DAF4) goto label_BFC1DB0C; +label_BFC1DAFC: + psx_check_interrupts(cpu); + /* 0xBFC1DAFC: 0C00D660 jal 0xB0035980 */ + /* 0xBFC1DB00: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1DB04u; + psx_dispatch(cpu, 0x80035980u); +label_BFC1DB04: + psx_check_interrupts(cpu); + /* 0xBFC1DB04: 10000037 beq $zero, $zero, 0xBFC1DBE4 */ + uint32_t psx_brA_BFC1DB04 = cpu->gpr[0]; uint32_t psx_brB_BFC1DB04 = cpu->gpr[0]; + int psx_taken_BFC1DB04 = (psx_brA_BFC1DB04 == psx_brB_BFC1DB04); + /* 0xBFC1DB08: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1DB04) goto label_BFC1DBE4; +label_BFC1DB0C: + psx_check_interrupts(cpu); + /* 0xBFC1DB0C: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC1DB10: 8DAD9EB0 lw $t5, -24912($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DB10u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC1DB14: 00000000 nop */ + /* nop */ + /* 0xBFC1DB18: 11A00005 beq $t5, $zero, 0xBFC1DB30 */ + uint32_t psx_brA_BFC1DB18 = cpu->gpr[13]; uint32_t psx_brB_BFC1DB18 = cpu->gpr[0]; + int psx_taken_BFC1DB18 = (psx_brA_BFC1DB18 == psx_brB_BFC1DB18); + /* 0xBFC1DB1C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DB18) goto label_BFC1DB30; +label_BFC1DB20: + psx_check_interrupts(cpu); + /* 0xBFC1DB20: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1DB24: 9042A101 lbu $v0, -24319($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-24319))); + /* 0xBFC1DB28: 1000000D beq $zero, $zero, 0xBFC1DB60 */ + uint32_t psx_brA_BFC1DB28 = cpu->gpr[0]; uint32_t psx_brB_BFC1DB28 = cpu->gpr[0]; + int psx_taken_BFC1DB28 = (psx_brA_BFC1DB28 == psx_brB_BFC1DB28); + /* 0xBFC1DB2C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DB28) goto label_BFC1DB60; +label_BFC1DB30: + psx_check_interrupts(cpu); + /* 0xBFC1DB30: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1DB34: 9042A101 lbu $v0, -24319($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-24319))); + /* 0xBFC1DB38: 00000000 nop */ + /* nop */ + /* 0xBFC1DB3C: 304E0080 andi $t6, $v0, 0x80 */ + cpu->gpr[14] = cpu->gpr[2] & 0x80u; + /* 0xBFC1DB40: 15C00007 bne $t6, $zero, 0xBFC1DB60 */ + uint32_t psx_brA_BFC1DB40 = cpu->gpr[14]; uint32_t psx_brB_BFC1DB40 = cpu->gpr[0]; + int psx_taken_BFC1DB40 = (psx_brA_BFC1DB40 != psx_brB_BFC1DB40); + /* 0xBFC1DB44: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DB40) goto label_BFC1DB60; +label_BFC1DB48: + psx_check_interrupts(cpu); + /* 0xBFC1DB48: 240F0001 addiu $t7, $zero, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1DB4C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DB50: AC2F9DFC sw $t7, -25092($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25092)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DB50u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1DB54: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DB58: 10000007 beq $zero, $zero, 0xBFC1DB78 */ + uint32_t psx_brA_BFC1DB58 = cpu->gpr[0]; uint32_t psx_brB_BFC1DB58 = cpu->gpr[0]; + int psx_taken_BFC1DB58 = (psx_brA_BFC1DB58 == psx_brB_BFC1DB58); + /* 0xBFC1DB5C: AC209DF4 sw $zero, -25100($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DB5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1DB58) goto label_BFC1DB78; +label_BFC1DB60: + psx_check_interrupts(cpu); + /* 0xBFC1DB60: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC1DB64: 8F189EB0 lw $t8, -24912($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DB64u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC1DB68: 00000000 nop */ + /* nop */ + /* 0xBFC1DB6C: 13000002 beq $t8, $zero, 0xBFC1DB78 */ + uint32_t psx_brA_BFC1DB6C = cpu->gpr[24]; uint32_t psx_brB_BFC1DB6C = cpu->gpr[0]; + int psx_taken_BFC1DB6C = (psx_brA_BFC1DB6C == psx_brB_BFC1DB6C); + /* 0xBFC1DB70: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1DB6C) goto label_BFC1DB78; +label_BFC1DB74: + psx_check_interrupts(cpu); + /* 0xBFC1DB74: AC209EB0 sw $zero, -24912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DB74u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC1DB78: + psx_check_interrupts(cpu); + /* 0xBFC1DB78: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC1DB7C: 9339A100 lbu $t9, -24320($t9) */ + cpu->gpr[25] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[25] + (-24320))); + /* 0xBFC1DB80: 00000000 nop */ + /* nop */ + /* 0xBFC1DB84: 33280008 andi $t0, $t9, 0x8 */ + cpu->gpr[8] = cpu->gpr[25] & 0x8u; + /* 0xBFC1DB88: 11000015 beq $t0, $zero, 0xBFC1DBE0 */ + uint32_t psx_brA_BFC1DB88 = cpu->gpr[8]; uint32_t psx_brB_BFC1DB88 = cpu->gpr[0]; + int psx_taken_BFC1DB88 = (psx_brA_BFC1DB88 == psx_brB_BFC1DB88); + /* 0xBFC1DB8C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1DB88) goto label_BFC1DBE0; +label_BFC1DB90: + psx_check_interrupts(cpu); + /* 0xBFC1DB90: 30490040 andi $t1, $v0, 0x40 */ + cpu->gpr[9] = cpu->gpr[2] & 0x40u; + /* 0xBFC1DB94: 11200006 beq $t1, $zero, 0xBFC1DBB0 */ + uint32_t psx_brA_BFC1DB94 = cpu->gpr[9]; uint32_t psx_brB_BFC1DB94 = cpu->gpr[0]; + int psx_taken_BFC1DB94 = (psx_brA_BFC1DB94 == psx_brB_BFC1DB94); + /* 0xBFC1DB98: 304B0080 andi $t3, $v0, 0x80 */ + cpu->gpr[11] = cpu->gpr[2] & 0x80u; + if (psx_taken_BFC1DB94) goto label_BFC1DBB0; +label_BFC1DB9C: + psx_check_interrupts(cpu); + /* 0xBFC1DB9C: 240A0001 addiu $t2, $zero, 1 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1DBA0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DBA4: 10000007 beq $zero, $zero, 0xBFC1DBC4 */ + uint32_t psx_brA_BFC1DBA4 = cpu->gpr[0]; uint32_t psx_brB_BFC1DBA4 = cpu->gpr[0]; + int psx_taken_BFC1DBA4 = (psx_brA_BFC1DBA4 == psx_brB_BFC1DBA4); + /* 0xBFC1DBA8: AC2A9DF4 sw $t2, -25100($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBA8u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + if (psx_taken_BFC1DBA4) goto label_BFC1DBC4; +label_BFC1DBAC: + psx_check_interrupts(cpu); + /* 0xBFC1DBAC: 304B0080 andi $t3, $v0, 0x80 */ + cpu->gpr[11] = cpu->gpr[2] & 0x80u; +label_BFC1DBB0: + psx_check_interrupts(cpu); + /* 0xBFC1DBB0: 11600004 beq $t3, $zero, 0xBFC1DBC4 */ + uint32_t psx_brA_BFC1DBB0 = cpu->gpr[11]; uint32_t psx_brB_BFC1DBB0 = cpu->gpr[0]; + int psx_taken_BFC1DBB0 = (psx_brA_BFC1DBB0 == psx_brB_BFC1DBB0); + /* 0xBFC1DBB4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1DBB0) goto label_BFC1DBC4; +label_BFC1DBB8: + psx_check_interrupts(cpu); + /* 0xBFC1DBB8: AC209DF4 sw $zero, -25100($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBB8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1DBBC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DBC0: AC209DFC sw $zero, -25092($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25092)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBC0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC1DBC4: + psx_check_interrupts(cpu); + /* 0xBFC1DBC4: 304C0010 andi $t4, $v0, 0x10 */ + cpu->gpr[12] = cpu->gpr[2] & 0x10u; + /* 0xBFC1DBC8: 11800005 beq $t4, $zero, 0xBFC1DBE0 */ + uint32_t psx_brA_BFC1DBC8 = cpu->gpr[12]; uint32_t psx_brB_BFC1DBC8 = cpu->gpr[0]; + int psx_taken_BFC1DBC8 = (psx_brA_BFC1DBC8 == psx_brB_BFC1DBC8); + /* 0xBFC1DBCC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1DBC8) goto label_BFC1DBE0; +label_BFC1DBD0: + psx_check_interrupts(cpu); + /* 0xBFC1DBD0: AC209DF4 sw $zero, -25100($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBD0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1DBD4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1DBD8: 240D0001 addiu $t5, $zero, 1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1DBDC: AC2D9E00 sw $t5, -25088($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25088)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBDCu); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } +label_BFC1DBE0: + psx_check_interrupts(cpu); + /* 0xBFC1DBE0: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC1DBE4: + psx_check_interrupts(cpu); + /* 0xBFC1DBE4: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1DBE4u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC1DBE8: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC1DBEC: 03E00008 jr $ra */ + /* 0xBFC1DBF0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1DBF4(CPUState* cpu) { label_BFC1DBF4: psx_check_interrupts(cpu); @@ -62401,6 +64341,75 @@ label_BFC1E1B4: return; } +void func_1FC1E1CC(CPUState* cpu) { +label_BFC1E1CC: + psx_check_interrupts(cpu); + /* 0xBFC1E1CC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1E1D0: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC1E1D4: AC246940 sw $a0, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1E1D4u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC1E1D8: 244EFFFE addiu $t6, $v0, -2 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[2] + (-2)); + /* 0xBFC1E1DC: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC1E1E0: 2DC10018 sltiu $at, $t6, 24 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[14] < 0x00000018u ? 1 : 0); + /* 0xBFC1E1E4: 10200075 beq $at, $zero, 0xBFC1E3BC */ + uint32_t psx_brA_BFC1E1E4 = cpu->gpr[1]; uint32_t psx_brB_BFC1E1E4 = cpu->gpr[0]; + int psx_taken_BFC1E1E4 = (psx_brA_BFC1E1E4 == psx_brB_BFC1E1E4); + /* 0xBFC1E1E8: 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, 0xBFC1E1E8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC1E1E4) { cpu->pc = 0xBFC1E3BCu; return; } +label_BFC1E1EC: + psx_check_interrupts(cpu); + /* 0xBFC1E1EC: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC1E1F0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1E1F4: 002E0821 addu $at, $at, $t6 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[14]; + /* 0xBFC1E1F8: 8C2EAC84 lw $t6, -21372($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-21372)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1E1F8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC1E1FC: 00000000 nop */ + /* nop */ + /* 0xBFC1E200: 01C00008 jr $t6 */ + /* 0xBFC1E204: 00000000 nop */ + /* nop */ + cpu->pc = cpu->gpr[14]; return; +} + +void func_1FC1E3AC(CPUState* cpu) { +label_BFC1E3AC: + psx_check_interrupts(cpu); + /* 0xBFC1E3AC: 0C00E4C8 jal 0xB0039320 */ + /* 0xBFC1E3B0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1E3B4u; + psx_dispatch(cpu, 0x80039320u); +label_BFC1E3B4: + psx_check_interrupts(cpu); + /* 0xBFC1E3B4: 10000002 beq $zero, $zero, 0xBFC1E3C0 */ + uint32_t psx_brA_BFC1E3B4 = cpu->gpr[0]; uint32_t psx_brB_BFC1E3B4 = cpu->gpr[0]; + int psx_taken_BFC1E3B4 = (psx_brA_BFC1E3B4 == psx_brB_BFC1E3B4); + /* 0xBFC1E3B8: 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, 0xBFC1E3B8u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC1E3B4) goto label_BFC1E3C0; +label_BFC1E3BC: + psx_check_interrupts(cpu); + /* 0xBFC1E3BC: 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, 0xBFC1E3BCu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } +label_BFC1E3C0: + psx_check_interrupts(cpu); + /* 0xBFC1E3C0: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC1E3C4: 03E00008 jr $ra */ + /* 0xBFC1E3C8: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1E3CC(CPUState* cpu) { label_BFC1E3CC: psx_check_interrupts(cpu); @@ -65767,6 +67776,357 @@ label_BFC1F754: return; } +void func_1FC1F778(CPUState* cpu) { +label_BFC1F778: + psx_check_interrupts(cpu); + /* 0xBFC1F778: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F77C: AC209E40 sw $zero, -25024($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25024)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F77Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F780: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F784: AC209E44 sw $zero, -25020($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25020)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F784u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F788: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F78C: AC209E48 sw $zero, -25016($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25016)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F78Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F790: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F794: AC209E4C sw $zero, -25012($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25012)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F794u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F798: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F79C: 27BDFFD0 addiu $sp, $sp, -48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-48)); + /* 0xBFC1F7A0: AC209EB8 sw $zero, -24904($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24904)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7A0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F7A4: 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, 0xBFC1F7A4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC1F7A8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F7AC: 0C00C8EE jal 0xB00323B8 */ + /* 0xBFC1F7B0: AC209E74 sw $zero, -24972($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24972)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7B0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC1F7B4u; + psx_dispatch(cpu, 0x800323B8u); +label_BFC1F7B4: + psx_check_interrupts(cpu); + /* 0xBFC1F7B4: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F7B8: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7B8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F7BC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F7C0: 240E000F addiu $t6, $zero, 15 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (15)); + /* 0xBFC1F7C4: AC2E6944 sw $t6, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7C4u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC1F7C8: 24040036 addiu $a0, $zero, 54 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (54)); + /* 0xBFC1F7CC: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1F7D0: 24050258 addiu $a1, $zero, 600 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (600)); + cpu->gpr[31] = 0xBFC1F7D4u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1F7D4: + psx_check_interrupts(cpu); + /* 0xBFC1F7D4: 14400003 bne $v0, $zero, 0xBFC1F7E4 */ + uint32_t psx_brA_BFC1F7D4 = cpu->gpr[2]; uint32_t psx_brB_BFC1F7D4 = cpu->gpr[0]; + int psx_taken_BFC1F7D4 = (psx_brA_BFC1F7D4 != psx_brB_BFC1F7D4); + /* 0xBFC1F7D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1F7D4) goto label_BFC1F7E4; +label_BFC1F7DC: + psx_check_interrupts(cpu); + /* 0xBFC1F7DC: 10000064 beq $zero, $zero, 0xBFC1F970 */ + uint32_t psx_brA_BFC1F7DC = cpu->gpr[0]; uint32_t psx_brB_BFC1F7DC = cpu->gpr[0]; + int psx_taken_BFC1F7DC = (psx_brA_BFC1F7DC == psx_brB_BFC1F7DC); + /* 0xBFC1F7E0: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1F7DC) goto label_BFC1F970; +label_BFC1F7E4: + psx_check_interrupts(cpu); + /* 0xBFC1F7E4: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC1F7E8: 8DEF9EB0 lw $t7, -24912($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7E8u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC1F7EC: 00000000 nop */ + /* nop */ + /* 0xBFC1F7F0: 11E00004 beq $t7, $zero, 0xBFC1F804 */ + uint32_t psx_brA_BFC1F7F0 = cpu->gpr[15]; uint32_t psx_brB_BFC1F7F0 = cpu->gpr[0]; + int psx_taken_BFC1F7F0 = (psx_brA_BFC1F7F0 == psx_brB_BFC1F7F0); + /* 0xBFC1F7F4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1F7F0) goto label_BFC1F804; +label_BFC1F7F8: + psx_check_interrupts(cpu); + /* 0xBFC1F7F8: AC209EB0 sw $zero, -24912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F7F8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F7FC: 1000005C beq $zero, $zero, 0xBFC1F970 */ + uint32_t psx_brA_BFC1F7FC = cpu->gpr[0]; uint32_t psx_brB_BFC1F7FC = cpu->gpr[0]; + int psx_taken_BFC1F7FC = (psx_brA_BFC1F7FC == psx_brB_BFC1F7FC); + /* 0xBFC1F800: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1F7FC) goto label_BFC1F970; +label_BFC1F804: + psx_check_interrupts(cpu); + /* 0xBFC1F804: 24180001 addiu $t8, $zero, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1F808: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F80C: AC389E38 sw $t8, -25032($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25032)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F80Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC1F810: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F814: AC209DF8 sw $zero, -25096($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25096)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F814u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F818: 27A40024 addiu $a0, $sp, 36 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (36)); + /* 0xBFC1F81C: 0C00E461 jal 0xB0039184 */ + /* 0xBFC1F820: 27A50020 addiu $a1, $sp, 32 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + cpu->gpr[31] = 0xBFC1F824u; + psx_dispatch(cpu, 0x80039184u); +label_BFC1F824: + psx_check_interrupts(cpu); + /* 0xBFC1F824: 93A50024 lbu $a1, 36($sp) */ + cpu->gpr[5] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[29] + (36))); + /* 0xBFC1F828: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F82C: 93A60020 lbu $a2, 32($sp) */ + cpu->gpr[6] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[29] + (32))); + /* 0xBFC1F830: A0259E70 sb $a1, -24976($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-24976)), (uint8_t)(cpu->gpr[5] & 0xFFu)); + /* 0xBFC1F834: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F838: 3C03800F lui $v1, 0x800F */ + cpu->gpr[3] = 0x800F0000u; + /* 0xBFC1F83C: 2463D0F0 addiu $v1, $v1, -12048 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-12048)); + /* 0xBFC1F840: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC1F844: 24040064 addiu $a0, $zero, 100 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC1F848: A0269E71 sb $a2, -24975($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-24975)), (uint8_t)(cpu->gpr[6] & 0xFFu)); +label_BFC1F84C: + psx_check_interrupts(cpu); + /* 0xBFC1F84C: 0045082B sltu $at, $v0, $a1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < cpu->gpr[5] ? 1 : 0); + /* 0xBFC1F850: 14200003 bne $at, $zero, 0xBFC1F860 */ + uint32_t psx_brA_BFC1F850 = cpu->gpr[1]; uint32_t psx_brB_BFC1F850 = cpu->gpr[0]; + int psx_taken_BFC1F850 = (psx_brA_BFC1F850 != psx_brB_BFC1F850); + /* 0xBFC1F854: 00C2082B sltu $at, $a2, $v0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[6] < cpu->gpr[2] ? 1 : 0); + if (psx_taken_BFC1F850) goto label_BFC1F860; +label_BFC1F858: + psx_check_interrupts(cpu); + /* 0xBFC1F858: 10200003 beq $at, $zero, 0xBFC1F868 */ + uint32_t psx_brA_BFC1F858 = cpu->gpr[1]; uint32_t psx_brB_BFC1F858 = cpu->gpr[0]; + int psx_taken_BFC1F858 = (psx_brA_BFC1F858 == psx_brB_BFC1F858); + /* 0xBFC1F85C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1F858) goto label_BFC1F868; +label_BFC1F860: + psx_check_interrupts(cpu); + /* 0xBFC1F860: 10000002 beq $zero, $zero, 0xBFC1F86C */ + uint32_t psx_brA_BFC1F860 = cpu->gpr[0]; uint32_t psx_brB_BFC1F860 = cpu->gpr[0]; + int psx_taken_BFC1F860 = (psx_brA_BFC1F860 == psx_brB_BFC1F860); + /* 0xBFC1F864: AC600000 sw $zero, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F864u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1F860) goto label_BFC1F86C; +label_BFC1F868: + psx_check_interrupts(cpu); + /* 0xBFC1F868: AC620000 sw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F868u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } +label_BFC1F86C: + psx_check_interrupts(cpu); + /* 0xBFC1F86C: 24420001 addiu $v0, $v0, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1)); + /* 0xBFC1F870: 1444FFF6 bne $v0, $a0, 0xBFC1F84C */ + uint32_t psx_brA_BFC1F870 = cpu->gpr[2]; uint32_t psx_brB_BFC1F870 = cpu->gpr[4]; + int psx_taken_BFC1F870 = (psx_brA_BFC1F870 != psx_brB_BFC1F870); + /* 0xBFC1F874: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + if (psx_taken_BFC1F870) goto label_BFC1F84C; +label_BFC1F878: + psx_check_interrupts(cpu); + /* 0xBFC1F878: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F87C: AC209E5C sw $zero, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F87Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F880: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F884: AC209E50 sw $zero, -25008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F884u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F888: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F88C: 24190001 addiu $t9, $zero, 1 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC1F890: AC399EAC sw $t9, -24916($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24916)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F890u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC1F894: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F898: AC209E60 sw $zero, -24992($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24992)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F898u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F89C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F8A0: 0C00CAA4 jal 0xB0032A90 */ + /* 0xBFC1F8A4: AC209E64 sw $zero, -24988($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24988)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8A4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC1F8A8u; + psx_dispatch(cpu, 0x80032A90u); +label_BFC1F8A8: + psx_check_interrupts(cpu); + /* 0xBFC1F8A8: 24080025 addiu $t0, $zero, 37 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[0] + (37)); + /* 0xBFC1F8AC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1F8B0: AC289EA8 sw $t0, -24920($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24920)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8B0u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC1F8B4: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F8B8: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8B8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F8BC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F8C0: 24090011 addiu $t1, $zero, 17 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (17)); + /* 0xBFC1F8C4: AC296944 sw $t1, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8C4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC1F8C8: 2404003E addiu $a0, $zero, 62 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (62)); + /* 0xBFC1F8CC: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1F8D0: 240500B4 addiu $a1, $zero, 180 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (180)); + cpu->gpr[31] = 0xBFC1F8D4u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1F8D4: + psx_check_interrupts(cpu); + /* 0xBFC1F8D4: 14400003 bne $v0, $zero, 0xBFC1F8E4 */ + uint32_t psx_brA_BFC1F8D4 = cpu->gpr[2]; uint32_t psx_brB_BFC1F8D4 = cpu->gpr[0]; + int psx_taken_BFC1F8D4 = (psx_brA_BFC1F8D4 != psx_brB_BFC1F8D4); + /* 0xBFC1F8D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1F8D4) goto label_BFC1F8E4; +label_BFC1F8DC: + psx_check_interrupts(cpu); + /* 0xBFC1F8DC: 0C00DF32 jal 0xB0037CC8 */ + /* 0xBFC1F8E0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1F8E4u; + psx_dispatch(cpu, 0x80037CC8u); +label_BFC1F8E4: + psx_check_interrupts(cpu); + /* 0xBFC1F8E4: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC1F8E8: 8D4A9EB0 lw $t2, -24912($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8E8u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC1F8EC: 00000000 nop */ + /* nop */ + /* 0xBFC1F8F0: 11400004 beq $t2, $zero, 0xBFC1F904 */ + uint32_t psx_brA_BFC1F8F0 = cpu->gpr[10]; uint32_t psx_brB_BFC1F8F0 = cpu->gpr[0]; + int psx_taken_BFC1F8F0 = (psx_brA_BFC1F8F0 == psx_brB_BFC1F8F0); + /* 0xBFC1F8F4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1F8F0) goto label_BFC1F904; +label_BFC1F8F8: + psx_check_interrupts(cpu); + /* 0xBFC1F8F8: AC209EB0 sw $zero, -24912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F8F8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F8FC: 1000001C beq $zero, $zero, 0xBFC1F970 */ + uint32_t psx_brA_BFC1F8FC = cpu->gpr[0]; uint32_t psx_brB_BFC1F8FC = cpu->gpr[0]; + int psx_taken_BFC1F8FC = (psx_brA_BFC1F8FC == psx_brB_BFC1F8FC); + /* 0xBFC1F900: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1F8FC) goto label_BFC1F970; +label_BFC1F904: + psx_check_interrupts(cpu); + /* 0xBFC1F904: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F908: AC206940 sw $zero, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F908u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F90C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F910: 240B000B addiu $t3, $zero, 11 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (11)); + /* 0xBFC1F914: AC2B6944 sw $t3, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F914u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC1F918: 24040032 addiu $a0, $zero, 50 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1F91C: 0C00E4FF jal 0xB00393FC */ + /* 0xBFC1F920: 240500B4 addiu $a1, $zero, 180 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (180)); + cpu->gpr[31] = 0xBFC1F924u; + psx_dispatch(cpu, 0x800393FCu); +label_BFC1F924: + psx_check_interrupts(cpu); + /* 0xBFC1F924: 14400003 bne $v0, $zero, 0xBFC1F934 */ + uint32_t psx_brA_BFC1F924 = cpu->gpr[2]; uint32_t psx_brB_BFC1F924 = cpu->gpr[0]; + int psx_taken_BFC1F924 = (psx_brA_BFC1F924 != psx_brB_BFC1F924); + /* 0xBFC1F928: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1F924) goto label_BFC1F934; +label_BFC1F92C: + psx_check_interrupts(cpu); + /* 0xBFC1F92C: 0C00DF32 jal 0xB0037CC8 */ + /* 0xBFC1F930: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1F934u; + psx_dispatch(cpu, 0x80037CC8u); +label_BFC1F934: + psx_check_interrupts(cpu); + /* 0xBFC1F934: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC1F938: 8D8C9EB0 lw $t4, -24912($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F938u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC1F93C: 00000000 nop */ + /* nop */ + /* 0xBFC1F940: 11800004 beq $t4, $zero, 0xBFC1F954 */ + uint32_t psx_brA_BFC1F940 = cpu->gpr[12]; uint32_t psx_brB_BFC1F940 = cpu->gpr[0]; + int psx_taken_BFC1F940 = (psx_brA_BFC1F940 == psx_brB_BFC1F940); + /* 0xBFC1F944: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC1F940) goto label_BFC1F954; +label_BFC1F948: + psx_check_interrupts(cpu); + /* 0xBFC1F948: AC209EB0 sw $zero, -24912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F948u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1F94C: 10000008 beq $zero, $zero, 0xBFC1F970 */ + uint32_t psx_brA_BFC1F94C = cpu->gpr[0]; uint32_t psx_brB_BFC1F94C = cpu->gpr[0]; + int psx_taken_BFC1F94C = (psx_brA_BFC1F94C == psx_brB_BFC1F94C); + /* 0xBFC1F950: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC1F94C) goto label_BFC1F970; +label_BFC1F954: + psx_check_interrupts(cpu); + /* 0xBFC1F954: 240D0032 addiu $t5, $zero, 50 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1F958: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F95C: AC2D6940 sw $t5, 26944($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26944)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F95Cu); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } + /* 0xBFC1F960: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1F964: 240E0032 addiu $t6, $zero, 50 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1F968: AC2E6948 sw $t6, 26952($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1F968u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC1F96C: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC1F970: + psx_check_interrupts(cpu); + /* 0xBFC1F970: 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, 0xBFC1F970u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC1F974: 27BD0030 addiu $sp, $sp, 48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (48)); + /* 0xBFC1F978: 03E00008 jr $ra */ + /* 0xBFC1F97C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC1F980(CPUState* cpu) { label_BFC1F980: psx_check_interrupts(cpu); @@ -66401,6 +68761,551 @@ label_BFC1FCBC: return; } +void func_1FC1FCC8(CPUState* cpu) { +label_BFC1FCC8: + psx_check_interrupts(cpu); + /* 0xBFC1FCC8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCCC: AC209E5C sw $zero, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FCCCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FCD0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCD4: AC209E50 sw $zero, -25008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FCD4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FCD8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCDC: AC209E54 sw $zero, -25004($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FCDCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FCE0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCE4: AC209E58 sw $zero, -25000($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25000)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FCE4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FCE8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCEC: 27BDFFC8 addiu $sp, $sp, -56 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-56)); + /* 0xBFC1FCF0: AC209E60 sw $zero, -24992($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24992)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FCF0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FCF4: 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, 0xBFC1FCF4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC1FCF8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FCFC: 0C00CAA4 jal 0xB0032A90 */ + /* 0xBFC1FD00: AC209E64 sw $zero, -24988($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24988)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FD00u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC1FD04u; + psx_dispatch(cpu, 0x80032A90u); +label_BFC1FD04: + psx_check_interrupts(cpu); + /* 0xBFC1FD04: 0C00C905 jal 0xB0032414 */ + /* 0xBFC1FD08: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1FD0Cu; + psx_dispatch(cpu, 0x80032414u); +label_BFC1FD0C: + psx_check_interrupts(cpu); + /* 0xBFC1FD0C: 0C00D262 jal 0xB0034988 */ + /* 0xBFC1FD10: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FD14u; + psx_dispatch(cpu, 0x80034988u); +label_BFC1FD14: + psx_check_interrupts(cpu); + /* 0xBFC1FD14: 10400005 beq $v0, $zero, 0xBFC1FD2C */ + uint32_t psx_brA_BFC1FD14 = cpu->gpr[2]; uint32_t psx_brB_BFC1FD14 = cpu->gpr[0]; + int psx_taken_BFC1FD14 = (psx_brA_BFC1FD14 == psx_brB_BFC1FD14); + /* 0xBFC1FD18: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD14) goto label_BFC1FD2C; +label_BFC1FD1C: + psx_check_interrupts(cpu); + /* 0xBFC1FD1C: 0C00C905 jal 0xB0032414 */ + /* 0xBFC1FD20: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1FD24u; + psx_dispatch(cpu, 0x80032414u); +label_BFC1FD24: + psx_check_interrupts(cpu); + /* 0xBFC1FD24: 10000003 beq $zero, $zero, 0xBFC1FD34 */ + uint32_t psx_brA_BFC1FD24 = cpu->gpr[0]; uint32_t psx_brB_BFC1FD24 = cpu->gpr[0]; + int psx_taken_BFC1FD24 = (psx_brA_BFC1FD24 == psx_brB_BFC1FD24); + /* 0xBFC1FD28: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD24) goto label_BFC1FD34; +label_BFC1FD2C: + psx_check_interrupts(cpu); + /* 0xBFC1FD2C: 0C00D26A jal 0xB00349A8 */ + /* 0xBFC1FD30: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1FD34u; + psx_dispatch(cpu, 0x800349A8u); +label_BFC1FD34: + psx_check_interrupts(cpu); + /* 0xBFC1FD34: 0C00D262 jal 0xB0034988 */ + /* 0xBFC1FD38: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FD3Cu; + psx_dispatch(cpu, 0x80034988u); +label_BFC1FD3C: + psx_check_interrupts(cpu); + /* 0xBFC1FD3C: 1040003E beq $v0, $zero, 0xBFC1FE38 */ + uint32_t psx_brA_BFC1FD3C = cpu->gpr[2]; uint32_t psx_brB_BFC1FD3C = cpu->gpr[0]; + int psx_taken_BFC1FD3C = (psx_brA_BFC1FD3C == psx_brB_BFC1FD3C); + /* 0xBFC1FD40: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD3C) goto label_BFC1FE38; +label_BFC1FD44: + psx_check_interrupts(cpu); + /* 0xBFC1FD44: 0C00CF56 jal 0xB0033D58 */ + /* 0xBFC1FD48: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FD4Cu; + psx_dispatch(cpu, 0x80033D58u); +label_BFC1FD4C: + psx_check_interrupts(cpu); + /* 0xBFC1FD4C: 14400018 bne $v0, $zero, 0xBFC1FDB0 */ + uint32_t psx_brA_BFC1FD4C = cpu->gpr[2]; uint32_t psx_brB_BFC1FD4C = cpu->gpr[0]; + int psx_taken_BFC1FD4C = (psx_brA_BFC1FD4C != psx_brB_BFC1FD4C); + /* 0xBFC1FD50: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD4C) goto label_BFC1FDB0; +label_BFC1FD54: + psx_check_interrupts(cpu); + /* 0xBFC1FD54: AFB00020 sw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FD54u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC1FD58: 0C00D266 jal 0xB0034998 */ + /* 0xBFC1FD5C: 24100001 addiu $s0, $zero, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + cpu->gpr[31] = 0xBFC1FD60u; + psx_dispatch(cpu, 0x80034998u); +label_BFC1FD60: + psx_check_interrupts(cpu); + /* 0xBFC1FD60: 18400011 blez $v0, 0xBFC1FDA8 */ + uint32_t psx_brA_BFC1FD60 = cpu->gpr[2]; + int psx_taken_BFC1FD60 = ((int32_t)psx_brA_BFC1FD60 <= 0); + /* 0xBFC1FD64: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD60) goto label_BFC1FDA8; +label_BFC1FD68: + psx_check_interrupts(cpu); + /* 0xBFC1FD68: 3C0F800F lui $t7, 0x800F */ + cpu->gpr[15] = 0x800F0000u; + /* 0xBFC1FD6C: 25EFD0F0 addiu $t7, $t7, -12048 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-12048)); + /* 0xBFC1FD70: AFB1001C sw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FD70u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1FD74: 00107080 sll $t6, $s0, 2 */ + cpu->gpr[14] = cpu->gpr[16] << 2u; + /* 0xBFC1FD78: 01CF8821 addu $s1, $t6, $t7 */ + cpu->gpr[17] = cpu->gpr[14] + cpu->gpr[15]; +label_BFC1FD7C: + psx_check_interrupts(cpu); + /* 0xBFC1FD7C: 8E240000 lw $a0, 0($s1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[17] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FD7Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC1FD80: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1FD84: 24050028 addiu $a1, $zero, 40 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + cpu->gpr[31] = 0xBFC1FD88u; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1FD88: + psx_check_interrupts(cpu); + /* 0xBFC1FD88: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1FD8C: 0C00D266 jal 0xB0034998 */ + /* 0xBFC1FD90: 26310004 addiu $s1, $s1, 4 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (4)); + cpu->gpr[31] = 0xBFC1FD94u; + psx_dispatch(cpu, 0x80034998u); +label_BFC1FD94: + psx_check_interrupts(cpu); + /* 0xBFC1FD94: 0050082A slt $at, $v0, $s0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (int32_t)cpu->gpr[16] ? 1 : 0); + /* 0xBFC1FD98: 1020FFF8 beq $at, $zero, 0xBFC1FD7C */ + uint32_t psx_brA_BFC1FD98 = cpu->gpr[1]; uint32_t psx_brB_BFC1FD98 = cpu->gpr[0]; + int psx_taken_BFC1FD98 = (psx_brA_BFC1FD98 == psx_brB_BFC1FD98); + /* 0xBFC1FD9C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FD98) goto label_BFC1FD7C; +label_BFC1FDA0: + psx_check_interrupts(cpu); + /* 0xBFC1FDA0: 8FB1001C lw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FDA0u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1FDA4: 00000000 nop */ + /* nop */ +label_BFC1FDA8: + psx_check_interrupts(cpu); + /* 0xBFC1FDA8: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FDA8u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC1FDAC: 00000000 nop */ + /* nop */ +label_BFC1FDB0: + psx_check_interrupts(cpu); + /* 0xBFC1FDB0: 3C188006 lui $t8, 0x8006 */ + cpu->gpr[24] = 0x80060000u; + /* 0xBFC1FDB4: 8F186948 lw $t8, 26952($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FDB4u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC1FDB8: 24010032 addiu $at, $zero, 50 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1FDBC: 17010068 bne $t8, $at, 0xBFC1FF60 */ + uint32_t psx_brA_BFC1FDBC = cpu->gpr[24]; uint32_t psx_brB_BFC1FDBC = cpu->gpr[1]; + int psx_taken_BFC1FDBC = (psx_brA_BFC1FDBC != psx_brB_BFC1FDBC); + /* 0xBFC1FDC0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FDBC) goto label_BFC1FF60; +label_BFC1FDC4: + psx_check_interrupts(cpu); + /* 0xBFC1FDC4: 0C00CF56 jal 0xB0033D58 */ + /* 0xBFC1FDC8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FDCCu; + psx_dispatch(cpu, 0x80033D58u); +label_BFC1FDCC: + psx_check_interrupts(cpu); + /* 0xBFC1FDCC: 14400014 bne $v0, $zero, 0xBFC1FE20 */ + uint32_t psx_brA_BFC1FDCC = cpu->gpr[2]; uint32_t psx_brB_BFC1FDCC = cpu->gpr[0]; + int psx_taken_BFC1FDCC = (psx_brA_BFC1FDCC != psx_brB_BFC1FDCC); + /* 0xBFC1FDD0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FDCC) goto label_BFC1FE20; +label_BFC1FDD4: + psx_check_interrupts(cpu); + /* 0xBFC1FDD4: AFB00020 sw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FDD4u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC1FDD8: AFB1001C sw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FDD8u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1FDDC: 24110015 addiu $s1, $zero, 21 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[0] + (21)); + /* 0xBFC1FDE0: 24100001 addiu $s0, $zero, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC1FDE4: + psx_check_interrupts(cpu); + /* 0xBFC1FDE4: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC1FDE8: 93399E71 lbu $t9, -24975($t9) */ + cpu->gpr[25] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[25] + (-24975))); + /* 0xBFC1FDEC: 00000000 nop */ + /* nop */ + /* 0xBFC1FDF0: 0330082B sltu $at, $t9, $s0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[25] < cpu->gpr[16] ? 1 : 0); + /* 0xBFC1FDF4: 14200007 bne $at, $zero, 0xBFC1FE14 */ + uint32_t psx_brA_BFC1FDF4 = cpu->gpr[1]; uint32_t psx_brB_BFC1FDF4 = cpu->gpr[0]; + int psx_taken_BFC1FDF4 = (psx_brA_BFC1FDF4 != psx_brB_BFC1FDF4); + /* 0xBFC1FDF8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FDF4) goto label_BFC1FE14; +label_BFC1FDFC: + psx_check_interrupts(cpu); + /* 0xBFC1FDFC: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC1FE00: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1FE04: 24050028 addiu $a1, $zero, 40 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + cpu->gpr[31] = 0xBFC1FE08u; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1FE08: + psx_check_interrupts(cpu); + /* 0xBFC1FE08: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1FE0C: 1611FFF5 bne $s0, $s1, 0xBFC1FDE4 */ + uint32_t psx_brA_BFC1FE0C = cpu->gpr[16]; uint32_t psx_brB_BFC1FE0C = cpu->gpr[17]; + int psx_taken_BFC1FE0C = (psx_brA_BFC1FE0C != psx_brB_BFC1FE0C); + /* 0xBFC1FE10: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FE0C) goto label_BFC1FDE4; +label_BFC1FE14: + psx_check_interrupts(cpu); + /* 0xBFC1FE14: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FE14u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC1FE18: 8FB1001C lw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FE18u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1FE1C: 00000000 nop */ + /* nop */ +label_BFC1FE20: + psx_check_interrupts(cpu); + /* 0xBFC1FE20: 0C00D26A jal 0xB00349A8 */ + /* 0xBFC1FE24: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC1FE28u; + psx_dispatch(cpu, 0x800349A8u); +label_BFC1FE28: + psx_check_interrupts(cpu); + /* 0xBFC1FE28: 0C00D350 jal 0xB0034D40 */ + /* 0xBFC1FE2C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FE30u; + psx_dispatch(cpu, 0x80034D40u); +label_BFC1FE30: + psx_check_interrupts(cpu); + /* 0xBFC1FE30: 1000004B beq $zero, $zero, 0xBFC1FF60 */ + uint32_t psx_brA_BFC1FE30 = cpu->gpr[0]; uint32_t psx_brB_BFC1FE30 = cpu->gpr[0]; + int psx_taken_BFC1FE30 = (psx_brA_BFC1FE30 == psx_brB_BFC1FE30); + /* 0xBFC1FE34: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FE30) goto label_BFC1FF60; +label_BFC1FE38: + psx_check_interrupts(cpu); + /* 0xBFC1FE38: 0C00D25E jal 0xB0034978 */ + /* 0xBFC1FE3C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FE40u; + psx_dispatch(cpu, 0x80034978u); +label_BFC1FE40: + psx_check_interrupts(cpu); + /* 0xBFC1FE40: 10400023 beq $v0, $zero, 0xBFC1FED0 */ + uint32_t psx_brA_BFC1FE40 = cpu->gpr[2]; uint32_t psx_brB_BFC1FE40 = cpu->gpr[0]; + int psx_taken_BFC1FE40 = (psx_brA_BFC1FE40 == psx_brB_BFC1FE40); + /* 0xBFC1FE44: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FE40) goto label_BFC1FED0; +label_BFC1FE48: + psx_check_interrupts(cpu); + /* 0xBFC1FE48: 3C088006 lui $t0, 0x8006 */ + cpu->gpr[8] = 0x80060000u; + /* 0xBFC1FE4C: 8D086948 lw $t0, 26952($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FE4Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC1FE50: 24010032 addiu $at, $zero, 50 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1FE54: 15010017 bne $t0, $at, 0xBFC1FEB4 */ + uint32_t psx_brA_BFC1FE54 = cpu->gpr[8]; uint32_t psx_brB_BFC1FE54 = cpu->gpr[1]; + int psx_taken_BFC1FE54 = (psx_brA_BFC1FE54 != psx_brB_BFC1FE54); + /* 0xBFC1FE58: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FE54) goto label_BFC1FEB4; +label_BFC1FE5C: + psx_check_interrupts(cpu); + /* 0xBFC1FE5C: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1FE60: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC1FE64: 91299E71 lbu $t1, -24975($t1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-24975))); + /* 0xBFC1FE68: 90429E70 lbu $v0, -24976($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-24976))); + /* 0xBFC1FE6C: AFB00020 sw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FE6Cu); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC1FE70: 0049082B sltu $at, $v0, $t1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < cpu->gpr[9] ? 1 : 0); + /* 0xBFC1FE74: 1020000D beq $at, $zero, 0xBFC1FEAC */ + uint32_t psx_brA_BFC1FE74 = cpu->gpr[1]; uint32_t psx_brB_BFC1FE74 = cpu->gpr[0]; + int psx_taken_BFC1FE74 = (psx_brA_BFC1FE74 == psx_brB_BFC1FE74); + /* 0xBFC1FE78: 00408021 addu $s0, $v0, $zero */ + cpu->gpr[16] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC1FE74) goto label_BFC1FEAC; +label_BFC1FE7C: + psx_check_interrupts(cpu); + /* 0xBFC1FE7C: 2A010015 slti $at, $s0, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[16] < (21) ? 1 : 0); +label_BFC1FE80: + psx_check_interrupts(cpu); + /* 0xBFC1FE80: 1020000A beq $at, $zero, 0xBFC1FEAC */ + uint32_t psx_brA_BFC1FE80 = cpu->gpr[1]; uint32_t psx_brB_BFC1FE80 = cpu->gpr[0]; + int psx_taken_BFC1FE80 = (psx_brA_BFC1FE80 == psx_brB_BFC1FE80); + /* 0xBFC1FE84: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FE80) goto label_BFC1FEAC; +label_BFC1FE88: + psx_check_interrupts(cpu); + /* 0xBFC1FE88: 02002021 addu $a0, $s0, $zero */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC1FE8C: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1FE90: 24050028 addiu $a1, $zero, 40 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + cpu->gpr[31] = 0xBFC1FE94u; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1FE94: + psx_check_interrupts(cpu); + /* 0xBFC1FE94: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC1FE98: 914A9E71 lbu $t2, -24975($t2) */ + cpu->gpr[10] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[10] + (-24975))); + /* 0xBFC1FE9C: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1FEA0: 020A082B sltu $at, $s0, $t2 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[16] < cpu->gpr[10] ? 1 : 0); + /* 0xBFC1FEA4: 1420FFF6 bne $at, $zero, 0xBFC1FE80 */ + uint32_t psx_brA_BFC1FEA4 = cpu->gpr[1]; uint32_t psx_brB_BFC1FEA4 = cpu->gpr[0]; + int psx_taken_BFC1FEA4 = (psx_brA_BFC1FEA4 != psx_brB_BFC1FEA4); + /* 0xBFC1FEA8: 2A010015 slti $at, $s0, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[16] < (21) ? 1 : 0); + if (psx_taken_BFC1FEA4) goto label_BFC1FE80; +label_BFC1FEAC: + psx_check_interrupts(cpu); + /* 0xBFC1FEAC: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FEACu); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC1FEB0: 00000000 nop */ + /* nop */ +label_BFC1FEB4: + psx_check_interrupts(cpu); + /* 0xBFC1FEB4: 0C00D069 jal 0xB00341A4 */ + /* 0xBFC1FEB8: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + cpu->gpr[31] = 0xBFC1FEBCu; + psx_dispatch(cpu, 0x800341A4u); +label_BFC1FEBC: + psx_check_interrupts(cpu); + /* 0xBFC1FEBC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FEC0: AC209E5C sw $zero, -24996($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FEC0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FEC4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FEC8: 10000025 beq $zero, $zero, 0xBFC1FF60 */ + uint32_t psx_brA_BFC1FEC8 = cpu->gpr[0]; uint32_t psx_brB_BFC1FEC8 = cpu->gpr[0]; + int psx_taken_BFC1FEC8 = (psx_brA_BFC1FEC8 == psx_brB_BFC1FEC8); + /* 0xBFC1FECC: AC209E50 sw $zero, -25008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FECCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC1FEC8) goto label_BFC1FF60; +label_BFC1FED0: + psx_check_interrupts(cpu); + /* 0xBFC1FED0: 0C00CF56 jal 0xB0033D58 */ + /* 0xBFC1FED4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC1FED8u; + psx_dispatch(cpu, 0x80033D58u); +label_BFC1FED8: + psx_check_interrupts(cpu); + /* 0xBFC1FED8: 14400021 bne $v0, $zero, 0xBFC1FF60 */ + uint32_t psx_brA_BFC1FED8 = cpu->gpr[2]; uint32_t psx_brB_BFC1FED8 = cpu->gpr[0]; + int psx_taken_BFC1FED8 = (psx_brA_BFC1FED8 != psx_brB_BFC1FED8); + /* 0xBFC1FEDC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC1FED8) goto label_BFC1FF60; +label_BFC1FEE0: + psx_check_interrupts(cpu); + /* 0xBFC1FEE0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC1FEE4: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC1FEE8: 916B9E71 lbu $t3, -24975($t3) */ + cpu->gpr[11] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[11] + (-24975))); + /* 0xBFC1FEEC: 90429E70 lbu $v0, -24976($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-24976))); + /* 0xBFC1FEF0: AFB00020 sw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FEF0u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC1FEF4: 0162082B sltu $at, $t3, $v0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[11] < cpu->gpr[2] ? 1 : 0); + /* 0xBFC1FEF8: 14200017 bne $at, $zero, 0xBFC1FF58 */ + uint32_t psx_brA_BFC1FEF8 = cpu->gpr[1]; uint32_t psx_brB_BFC1FEF8 = cpu->gpr[0]; + int psx_taken_BFC1FEF8 = (psx_brA_BFC1FEF8 != psx_brB_BFC1FEF8); + /* 0xBFC1FEFC: 00408021 addu $s0, $v0, $zero */ + cpu->gpr[16] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC1FEF8) goto label_BFC1FF58; +label_BFC1FF00: + psx_check_interrupts(cpu); + /* 0xBFC1FF00: AFB1001C sw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF00u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC1FF04: 3C11800F lui $s1, 0x800F */ + cpu->gpr[17] = 0x800F0000u; + /* 0xBFC1FF08: 2631D0F0 addiu $s1, $s1, -12048 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (-12048)); + /* 0xBFC1FF0C: 2A010015 slti $at, $s0, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[16] < (21) ? 1 : 0); +label_BFC1FF10: + psx_check_interrupts(cpu); + /* 0xBFC1FF10: 14200005 bne $at, $zero, 0xBFC1FF28 */ + uint32_t psx_brA_BFC1FF10 = cpu->gpr[1]; uint32_t psx_brB_BFC1FF10 = cpu->gpr[0]; + int psx_taken_BFC1FF10 = (psx_brA_BFC1FF10 != psx_brB_BFC1FF10); + /* 0xBFC1FF14: 00106080 sll $t4, $s0, 2 */ + cpu->gpr[12] = cpu->gpr[16] << 2u; + if (psx_taken_BFC1FF10) goto label_BFC1FF28; +label_BFC1FF18: + psx_check_interrupts(cpu); + /* 0xBFC1FF18: 8FB1001C lw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF18u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1FF1C: 1000000F beq $zero, $zero, 0xBFC1FF5C */ + uint32_t psx_brA_BFC1FF1C = cpu->gpr[0]; uint32_t psx_brB_BFC1FF1C = cpu->gpr[0]; + int psx_taken_BFC1FF1C = (psx_brA_BFC1FF1C == psx_brB_BFC1FF1C); + /* 0xBFC1FF20: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF20u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + if (psx_taken_BFC1FF1C) goto label_BFC1FF5C; +label_BFC1FF24: + psx_check_interrupts(cpu); + /* 0xBFC1FF24: 00106080 sll $t4, $s0, 2 */ + cpu->gpr[12] = cpu->gpr[16] << 2u; +label_BFC1FF28: + psx_check_interrupts(cpu); + /* 0xBFC1FF28: 022C6821 addu $t5, $s1, $t4 */ + cpu->gpr[13] = cpu->gpr[17] + cpu->gpr[12]; + /* 0xBFC1FF2C: 8DA40000 lw $a0, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF2Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC1FF30: 0C00CDBB jal 0xB00336EC */ + /* 0xBFC1FF34: 24050028 addiu $a1, $zero, 40 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + cpu->gpr[31] = 0xBFC1FF38u; + psx_dispatch(cpu, 0x800336ECu); +label_BFC1FF38: + psx_check_interrupts(cpu); + /* 0xBFC1FF38: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC1FF3C: 91CE9E71 lbu $t6, -24975($t6) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-24975))); + /* 0xBFC1FF40: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC1FF44: 01D0082B sltu $at, $t6, $s0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[14] < cpu->gpr[16] ? 1 : 0); + /* 0xBFC1FF48: 1020FFF1 beq $at, $zero, 0xBFC1FF10 */ + uint32_t psx_brA_BFC1FF48 = cpu->gpr[1]; uint32_t psx_brB_BFC1FF48 = cpu->gpr[0]; + int psx_taken_BFC1FF48 = (psx_brA_BFC1FF48 == psx_brB_BFC1FF48); + /* 0xBFC1FF4C: 2A010015 slti $at, $s0, 21 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[16] < (21) ? 1 : 0); + if (psx_taken_BFC1FF48) goto label_BFC1FF10; +label_BFC1FF50: + psx_check_interrupts(cpu); + /* 0xBFC1FF50: 8FB1001C lw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF50u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC1FF54: 00000000 nop */ + /* nop */ +label_BFC1FF58: + psx_check_interrupts(cpu); + /* 0xBFC1FF58: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF58u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } +label_BFC1FF5C: + psx_check_interrupts(cpu); + /* 0xBFC1FF5C: 00000000 nop */ + /* nop */ +label_BFC1FF60: + psx_check_interrupts(cpu); + /* 0xBFC1FF60: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FF64: AC209E40 sw $zero, -25024($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25024)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF64u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FF68: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FF6C: AC209E44 sw $zero, -25020($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25020)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF6Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FF70: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FF74: AC209E48 sw $zero, -25016($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25016)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF74u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC1FF78: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FF7C: 0C00CB8D jal 0xB0032E34 */ + /* 0xBFC1FF80: AC209E74 sw $zero, -24972($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24972)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF80u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC1FF84u; + psx_dispatch(cpu, 0x80032E34u); +label_BFC1FF84: + psx_check_interrupts(cpu); + /* 0xBFC1FF84: 240F0032 addiu $t7, $zero, 50 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (50)); + /* 0xBFC1FF88: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC1FF8C: 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, 0xBFC1FF8Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC1FF90: AC2F9E4C sw $t7, -25012($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25012)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF90u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC1FF94: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC1FF98: 2418000B addiu $t8, $zero, 11 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (11)); + /* 0xBFC1FF9C: AC386944 sw $t8, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC1FF9Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC1FFA0: 03E00008 jr $ra */ + /* 0xBFC1FFA4: 27BD0038 addiu $sp, $sp, 56 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (56)); + return; +} + void func_1FC1FFA8(CPUState* cpu) { label_BFC1FFA8: psx_check_interrupts(cpu); @@ -68563,6 +71468,102 @@ label_BFC20B50: return; } +void func_1FC20B60(CPUState* cpu) { +label_BFC20B60: + psx_check_interrupts(cpu); + /* 0xBFC20B60: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC20B64: 8C426948 lw $v0, 26952($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20B64u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC20B68: 24010034 addiu $at, $zero, 52 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (52)); + /* 0xBFC20B6C: 10410009 beq $v0, $at, 0xBFC20B94 */ + uint32_t psx_brA_BFC20B6C = cpu->gpr[2]; uint32_t psx_brB_BFC20B6C = cpu->gpr[1]; + int psx_taken_BFC20B6C = (psx_brA_BFC20B6C == psx_brB_BFC20B6C); + /* 0xBFC20B70: 24010033 addiu $at, $zero, 51 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (51)); + if (psx_taken_BFC20B6C) goto label_BFC20B94; +label_BFC20B74: + psx_check_interrupts(cpu); + /* 0xBFC20B74: 14410007 bne $v0, $at, 0xBFC20B94 */ + uint32_t psx_brA_BFC20B74 = cpu->gpr[2]; uint32_t psx_brB_BFC20B74 = cpu->gpr[1]; + int psx_taken_BFC20B74 = (psx_brA_BFC20B74 != psx_brB_BFC20B74); + /* 0xBFC20B78: 00000000 nop */ + /* nop */ + if (psx_taken_BFC20B74) goto label_BFC20B94; +label_BFC20B7C: + psx_check_interrupts(cpu); + /* 0xBFC20B7C: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC20B80: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC20B84: AC2E9E44 sw $t6, -25020($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25020)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20B84u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC20B88: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC20B8C: 240F0012 addiu $t7, $zero, 18 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (18)); + /* 0xBFC20B90: AC2F6944 sw $t7, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20B90u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } +label_BFC20B94: + psx_check_interrupts(cpu); + /* 0xBFC20B94: 03E00008 jr $ra */ + /* 0xBFC20B98: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC20B9C(CPUState* cpu) { +label_BFC20B9C: + psx_check_interrupts(cpu); + /* 0xBFC20B9C: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC20BA0: 8C426948 lw $v0, 26952($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (26952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20BA0u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC20BA4: 24010034 addiu $at, $zero, 52 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (52)); + /* 0xBFC20BA8: 1041000C beq $v0, $at, 0xBFC20BDC */ + uint32_t psx_brA_BFC20BA8 = cpu->gpr[2]; uint32_t psx_brB_BFC20BA8 = cpu->gpr[1]; + int psx_taken_BFC20BA8 = (psx_brA_BFC20BA8 == psx_brB_BFC20BA8); + /* 0xBFC20BAC: 24010033 addiu $at, $zero, 51 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (51)); + if (psx_taken_BFC20BA8) goto label_BFC20BDC; +label_BFC20BB0: + psx_check_interrupts(cpu); + /* 0xBFC20BB0: 1441000A bne $v0, $at, 0xBFC20BDC */ + uint32_t psx_brA_BFC20BB0 = cpu->gpr[2]; uint32_t psx_brB_BFC20BB0 = cpu->gpr[1]; + int psx_taken_BFC20BB0 = (psx_brA_BFC20BB0 != psx_brB_BFC20BB0); + /* 0xBFC20BB4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC20BB0) goto label_BFC20BDC; +label_BFC20BB8: + psx_check_interrupts(cpu); + /* 0xBFC20BB8: 240E0033 addiu $t6, $zero, 51 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (51)); + /* 0xBFC20BBC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC20BC0: AC2E9E4C sw $t6, -25012($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25012)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20BC0u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC20BC4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC20BC8: 240F0002 addiu $t7, $zero, 2 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC20BCC: AC2F9E44 sw $t7, -25020($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25020)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20BCCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC20BD0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC20BD4: 24180013 addiu $t8, $zero, 19 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (19)); + /* 0xBFC20BD8: AC386944 sw $t8, 26948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (26948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC20BD8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } +label_BFC20BDC: + psx_check_interrupts(cpu); + /* 0xBFC20BDC: 03E00008 jr $ra */ + /* 0xBFC20BE0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC20BE4(CPUState* cpu) { label_BFC20BE4: psx_check_interrupts(cpu); @@ -70245,6 +73246,26 @@ label_BFC213C8: return; } +void func_1FC213E8(CPUState* cpu) { +label_BFC213E8: + psx_check_interrupts(cpu); + /* 0xBFC213E8: 308400FF andi $a0, $a0, 0xFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFu; + /* 0xBFC213EC: 03E00008 jr $ra */ + /* 0xBFC213F0: 3082000F andi $v0, $a0, 0xF */ + cpu->gpr[2] = cpu->gpr[4] & 0xFu; + return; +} + +void func_1FC213F4(CPUState* cpu) { +label_BFC213F4: + psx_check_interrupts(cpu); + /* 0xBFC213F4: 03E00008 jr $ra */ + /* 0xBFC213F8: 00000000 nop */ + /* nop */ + return; +} + void func_1FC213FC(CPUState* cpu) { label_BFC213FC: psx_check_interrupts(cpu); @@ -75474,6 +78495,104 @@ label_BFC23234: return; } +void func_1FC2324C(CPUState* cpu) { +label_BFC2324C: + psx_check_interrupts(cpu); + /* 0xBFC2324C: 00057080 sll $t6, $a1, 2 */ + cpu->gpr[14] = cpu->gpr[5] << 2u; + /* 0xBFC23250: 27BDFFD8 addiu $sp, $sp, -40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-40)); + /* 0xBFC23254: 01C57023 subu $t6, $t6, $a1 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[5]; + /* 0xBFC23258: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC2325C: AFB30020 sw $s3, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2325Cu); return; } cpu->write_word(psx_addr, cpu->gpr[19]); } + /* 0xBFC23260: 01C57023 subu $t6, $t6, $a1 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[5]; + /* 0xBFC23264: AFB2001C sw $s2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC23264u); return; } cpu->write_word(psx_addr, cpu->gpr[18]); } + /* 0xBFC23268: 000E7180 sll $t6, $t6, 6 */ + cpu->gpr[14] = cpu->gpr[14] << 6u; + /* 0xBFC2326C: 3C18800F lui $t8, 0x800F */ + cpu->gpr[24] = 0x800F0000u; + /* 0xBFC23270: AFB10018 sw $s1, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC23270u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC23274: AFB00014 sw $s0, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC23274u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC23278: 2718DBBC addiu $t8, $t8, -9284 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[24] + (-9284)); + /* 0xBFC2327C: 25CF005C addiu $t7, $t6, 92 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[14] + (92)); + /* 0xBFC23280: 00809821 addu $s3, $a0, $zero */ + cpu->gpr[19] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC23284: AFBF0024 sw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC23284u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC23288: 01F88821 addu $s1, $t7, $t8 */ + cpu->gpr[17] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC2328C: 24100001 addiu $s0, $zero, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC23290: 24120010 addiu $s2, $zero, 16 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); +label_BFC23294: + psx_check_interrupts(cpu); + /* 0xBFC23294: 02602021 addu $a0, $s3, $zero */ + cpu->gpr[4] = cpu->gpr[19] + cpu->gpr[0]; + /* 0xBFC23298: 0C016A40 jal 0xB005A900 */ + /* 0xBFC2329C: 02202821 addu $a1, $s1, $zero */ + cpu->gpr[5] = cpu->gpr[17] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC232A0u; + psx_dispatch(cpu, 0x8005A900u); +label_BFC232A0: + psx_check_interrupts(cpu); + /* 0xBFC232A0: 14400004 bne $v0, $zero, 0xBFC232B4 */ + uint32_t psx_brA_BFC232A0 = cpu->gpr[2]; uint32_t psx_brB_BFC232A0 = cpu->gpr[0]; + int psx_taken_BFC232A0 = (psx_brA_BFC232A0 != psx_brB_BFC232A0); + /* 0xBFC232A4: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + if (psx_taken_BFC232A0) goto label_BFC232B4; +label_BFC232A8: + psx_check_interrupts(cpu); + /* 0xBFC232A8: 10000005 beq $zero, $zero, 0xBFC232C0 */ + uint32_t psx_brA_BFC232A8 = cpu->gpr[0]; uint32_t psx_brB_BFC232A8 = cpu->gpr[0]; + int psx_taken_BFC232A8 = (psx_brA_BFC232A8 == psx_brB_BFC232A8); + /* 0xBFC232AC: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC232A8) goto label_BFC232C0; +label_BFC232B0: + psx_check_interrupts(cpu); + /* 0xBFC232B0: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); +label_BFC232B4: + psx_check_interrupts(cpu); + /* 0xBFC232B4: 1612FFF7 bne $s0, $s2, 0xBFC23294 */ + uint32_t psx_brA_BFC232B4 = cpu->gpr[16]; uint32_t psx_brB_BFC232B4 = cpu->gpr[18]; + int psx_taken_BFC232B4 = (psx_brA_BFC232B4 != psx_brB_BFC232B4); + /* 0xBFC232B8: 2631005C addiu $s1, $s1, 92 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (92)); + if (psx_taken_BFC232B4) goto label_BFC23294; +label_BFC232BC: + psx_check_interrupts(cpu); + /* 0xBFC232BC: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC232C0: + psx_check_interrupts(cpu); + /* 0xBFC232C0: 8FBF0024 lw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC232C0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC232C4: 8FB00014 lw $s0, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC232C4u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC232C8: 8FB10018 lw $s1, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC232C8u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC232CC: 8FB2001C lw $s2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC232CCu); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC232D0: 8FB30020 lw $s3, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC232D0u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC232D4: 03E00008 jr $ra */ + /* 0xBFC232D8: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + return; +} + void func_1FC232DC(CPUState* cpu) { label_BFC232DC: psx_check_interrupts(cpu); @@ -80781,6 +83900,15 @@ label_BFC25304: return; } +void func_1FC25314(CPUState* cpu) { +label_BFC25314: + psx_check_interrupts(cpu); + /* 0xBFC25314: 03E00008 jr $ra */ + /* 0xBFC25318: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2531C(CPUState* cpu) { label_BFC2531C: psx_check_interrupts(cpu); @@ -81210,6 +84338,273 @@ label_BFC25590: return; } +void func_1FC255A0(CPUState* cpu) { +label_BFC255A0: + psx_check_interrupts(cpu); + /* 0xBFC255A0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC255A4: 84423C50 lh $v0, 15440($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (15440)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255A4u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC255A8: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC255AC: 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, 0xBFC255ACu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC255B0: 3C0F800F lui $t7, 0x800F */ + cpu->gpr[15] = 0x800F0000u; + /* 0xBFC255B4: 38420001 xori $v0, $v0, 0x1 */ + cpu->gpr[2] = cpu->gpr[2] ^ 0x1u; + /* 0xBFC255B8: AFA50024 sw $a1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255B8u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC255BC: 00027400 sll $t6, $v0, 16 */ + cpu->gpr[14] = cpu->gpr[2] << 16u; + /* 0xBFC255C0: 25EF0EC8 addiu $t7, $t7, 3784 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (3784)); + /* 0xBFC255C4: AFA60028 sw $a2, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255C4u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC255C8: AFA7002C sw $a3, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255C8u); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + /* 0xBFC255CC: 01CF2821 addu $a1, $t6, $t7 */ + cpu->gpr[5] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC255D0: 0C00F5D5 jal 0xB003D754 */ + /* 0xBFC255D4: AFA2001C sw $v0, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255D4u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + cpu->gpr[31] = 0xBFC255D8u; + psx_dispatch(cpu, 0x8003D754u); +label_BFC255D8: + psx_check_interrupts(cpu); + /* 0xBFC255D8: 8FA2001C lw $v0, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC255D8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC255DC: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC255E0: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC255E4: 0302C023 subu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[2]; + /* 0xBFC255E8: 0018C0C0 sll $t8, $t8, 3 */ + cpu->gpr[24] = cpu->gpr[24] << 3u; + /* 0xBFC255EC: 0302C023 subu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[2]; + /* 0xBFC255F0: 0018C080 sll $t8, $t8, 2 */ + cpu->gpr[24] = cpu->gpr[24] << 2u; + /* 0xBFC255F4: 27393B70 addiu $t9, $t9, 15216 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (15216)); + /* 0xBFC255F8: 27A90024 addiu $t1, $sp, 36 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[29] + (36)); + /* 0xBFC255FC: 252A0054 addiu $t2, $t1, 84 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[9] + (84)); + /* 0xBFC25600: 03194021 addu $t0, $t8, $t9 */ + cpu->gpr[8] = cpu->gpr[24] + cpu->gpr[25]; +label_BFC25604: + psx_check_interrupts(cpu); + /* 0xBFC25604: 8D210000 lw $at, 0($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25604u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC25608: 2529000C addiu $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (12)); + /* 0xBFC2560C: AD010000 sw $at, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2560Cu); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC25610: 8D21FFF8 lw $at, -8($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25610u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC25614: 2508000C addiu $t0, $t0, 12 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (12)); + /* 0xBFC25618: AD01FFF8 sw $at, -8($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25618u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2561C: 8D21FFFC lw $at, -4($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2561Cu); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC25620: 152AFFF8 bne $t1, $t2, 0xBFC25604 */ + uint32_t psx_brA_BFC25620 = cpu->gpr[9]; uint32_t psx_brB_BFC25620 = cpu->gpr[10]; + int psx_taken_BFC25620 = (psx_brA_BFC25620 != psx_brB_BFC25620); + /* 0xBFC25624: AD01FFFC sw $at, -4($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25624u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + if (psx_taken_BFC25620) goto label_BFC25604; +label_BFC25628: + psx_check_interrupts(cpu); + /* 0xBFC25628: 8D210000 lw $at, 0($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25628u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2562C: 00025880 sll $t3, $v0, 2 */ + cpu->gpr[11] = cpu->gpr[2] << 2u; + /* 0xBFC25630: AD010000 sw $at, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25630u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC25634: 8D2A0004 lw $t2, 4($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25634u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC25638: 01625821 addu $t3, $t3, $v0 */ + cpu->gpr[11] = cpu->gpr[11] + cpu->gpr[2]; + /* 0xBFC2563C: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC25640: 258C3C28 addiu $t4, $t4, 15400 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[12] + (15400)); + /* 0xBFC25644: 000B5880 sll $t3, $t3, 2 */ + cpu->gpr[11] = cpu->gpr[11] << 2u; + /* 0xBFC25648: 27AE0080 addiu $t6, $sp, 128 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[29] + (128)); + /* 0xBFC2564C: 25CF000C addiu $t7, $t6, 12 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[14] + (12)); + /* 0xBFC25650: 016C6821 addu $t5, $t3, $t4 */ + cpu->gpr[13] = cpu->gpr[11] + cpu->gpr[12]; + /* 0xBFC25654: AD0A0004 sw $t2, 4($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25654u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } +label_BFC25658: + psx_check_interrupts(cpu); + /* 0xBFC25658: 89C10003 lwl $at, 3($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (3)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_left = (3u - psx_byte_offset) * 8u; uint32_t psx_keep_mask = (1u << psx_shift_left) - 1u; uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word << psx_shift_left); } + /* 0xBFC2565C: 99C10000 lwr $at, 0($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (0)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_right = psx_byte_offset * 8u; uint32_t psx_keep_mask = ~(0xFFFFFFFFu >> psx_shift_right); uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word >> psx_shift_right); } + /* 0xBFC25660: 25CE000C addiu $t6, $t6, 12 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[14] + (12)); + /* 0xBFC25664: A9A10003 swl $at, 3($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (3)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = (3u - psx_shift_bytes) * 8u; uint32_t psx_keep_mask = 0x00FFFFFFu >> (psx_shift_bytes * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] >> psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC25668: B9A10000 swr $at, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = psx_shift_bytes * 8u; uint32_t psx_keep_mask = 0xFFFFFF00u << ((3u - psx_shift_bytes) * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] << psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC2566C: 89C1FFFB lwl $at, -5($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-5)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_left = (3u - psx_byte_offset) * 8u; uint32_t psx_keep_mask = (1u << psx_shift_left) - 1u; uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word << psx_shift_left); } + /* 0xBFC25670: 99C1FFF8 lwr $at, -8($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-8)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_right = psx_byte_offset * 8u; uint32_t psx_keep_mask = ~(0xFFFFFFFFu >> psx_shift_right); uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word >> psx_shift_right); } + /* 0xBFC25674: 25AD000C addiu $t5, $t5, 12 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[13] + (12)); + /* 0xBFC25678: A9A1FFFB swl $at, -5($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-5)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = (3u - psx_shift_bytes) * 8u; uint32_t psx_keep_mask = 0x00FFFFFFu >> (psx_shift_bytes * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] >> psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC2567C: B9A1FFF8 swr $at, -8($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-8)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = psx_shift_bytes * 8u; uint32_t psx_keep_mask = 0xFFFFFF00u << ((3u - psx_shift_bytes) * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] << psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC25680: 89C1FFFF lwl $at, -1($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-1)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_left = (3u - psx_byte_offset) * 8u; uint32_t psx_keep_mask = (1u << psx_shift_left) - 1u; uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word << psx_shift_left); } + /* 0xBFC25684: 99C1FFFC lwr $at, -4($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-4)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_right = psx_byte_offset * 8u; uint32_t psx_keep_mask = ~(0xFFFFFFFFu >> psx_shift_right); uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word >> psx_shift_right); } + /* 0xBFC25688: 00000000 nop */ + /* nop */ + /* 0xBFC2568C: A9A1FFFF swl $at, -1($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-1)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = (3u - psx_shift_bytes) * 8u; uint32_t psx_keep_mask = 0x00FFFFFFu >> (psx_shift_bytes * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] >> psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC25690: 15CFFFF1 bne $t6, $t7, 0xBFC25658 */ + uint32_t psx_brA_BFC25690 = cpu->gpr[14]; uint32_t psx_brB_BFC25690 = cpu->gpr[15]; + int psx_taken_BFC25690 = (psx_brA_BFC25690 != psx_brB_BFC25690); + /* 0xBFC25694: B9A1FFFC swr $at, -4($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-4)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = psx_shift_bytes * 8u; uint32_t psx_keep_mask = 0xFFFFFF00u << ((3u - psx_shift_bytes) * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] << psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + if (psx_taken_BFC25690) goto label_BFC25658; +label_BFC25698: + psx_check_interrupts(cpu); + /* 0xBFC25698: 89C10003 lwl $at, 3($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (3)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_left = (3u - psx_byte_offset) * 8u; uint32_t psx_keep_mask = (1u << psx_shift_left) - 1u; uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word << psx_shift_left); } + /* 0xBFC2569C: 99C10000 lwr $at, 0($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (0)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_right = psx_byte_offset * 8u; uint32_t psx_keep_mask = ~(0xFFFFFFFFu >> psx_shift_right); uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[1]; cpu->gpr[1] = (psx_old_rt & psx_keep_mask) | (psx_word >> psx_shift_right); } + /* 0xBFC256A0: 24180002 addiu $t8, $zero, 2 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC256A4: A9A10003 swl $at, 3($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (3)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = (3u - psx_shift_bytes) * 8u; uint32_t psx_keep_mask = 0x00FFFFFFu >> (psx_shift_bytes * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] >> psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC256A8: B9A10000 swr $at, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = psx_shift_bytes * 8u; uint32_t psx_keep_mask = 0xFFFFFF00u << ((3u - psx_shift_bytes) * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[1] << psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC256AC: 89CF0007 lwl $t7, 7($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (7)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_left = (3u - psx_byte_offset) * 8u; uint32_t psx_keep_mask = (1u << psx_shift_left) - 1u; uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[15]; cpu->gpr[15] = (psx_old_rt & psx_keep_mask) | (psx_word << psx_shift_left); } + /* 0xBFC256B0: 99CF0004 lwr $t7, 4($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (4)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_byte_offset = psx_addr & 3u; uint32_t psx_shift_right = psx_byte_offset * 8u; uint32_t psx_keep_mask = ~(0xFFFFFFFFu >> psx_shift_right); uint32_t psx_word = cpu->read_word(psx_aligned); uint32_t psx_old_rt = cpu->gpr[15]; cpu->gpr[15] = (psx_old_rt & psx_keep_mask) | (psx_word >> psx_shift_right); } + /* 0xBFC256B4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC256B8: A9AF0007 swl $t7, 7($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (7)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = (3u - psx_shift_bytes) * 8u; uint32_t psx_keep_mask = 0x00FFFFFFu >> (psx_shift_bytes * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[15] >> psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC256BC: B9AF0004 swr $t7, 4($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (4)); uint32_t psx_aligned = psx_addr & ~3u; uint32_t psx_shift_bytes = psx_addr & 3u; uint32_t psx_shift_bits = psx_shift_bytes * 8u; uint32_t psx_keep_mask = 0xFFFFFF00u << ((3u - psx_shift_bytes) * 8u); uint32_t psx_mem = cpu->read_word(psx_aligned); uint32_t psx_new = (psx_mem & psx_keep_mask) | (cpu->gpr[15] << psx_shift_bits); cpu->write_word(psx_aligned, psx_new); } + /* 0xBFC256C0: 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, 0xBFC256C0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC256C4: A4223C50 sh $v0, 15440($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (15440)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC256C4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC256C8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC256CC: AC383C58 sw $t8, 15448($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC256CCu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC256D0: 03E00008 jr $ra */ + /* 0xBFC256D4: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + return; +} + +void func_1FC256D8(CPUState* cpu) { +label_BFC256D8: + psx_check_interrupts(cpu); + /* 0xBFC256D8: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC256DC: 1481000D bne $a0, $at, 0xBFC25714 */ + uint32_t psx_brA_BFC256DC = cpu->gpr[4]; uint32_t psx_brB_BFC256DC = cpu->gpr[1]; + int psx_taken_BFC256DC = (psx_brA_BFC256DC != psx_brB_BFC256DC); + /* 0xBFC256E0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC256DC) goto label_BFC25714; +label_BFC256E4: + psx_check_interrupts(cpu); + /* 0xBFC256E4: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC256E8: 8DCE3C58 lw $t6, 15448($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC256E8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC256EC: 00000000 nop */ + /* nop */ + /* 0xBFC256F0: 29C10002 slti $at, $t6, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[14] < (2) ? 1 : 0); + /* 0xBFC256F4: 14200007 bne $at, $zero, 0xBFC25714 */ + uint32_t psx_brA_BFC256F4 = cpu->gpr[1]; uint32_t psx_brB_BFC256F4 = cpu->gpr[0]; + int psx_taken_BFC256F4 = (psx_brA_BFC256F4 != psx_brB_BFC256F4); + /* 0xBFC256F8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC256F4) goto label_BFC25714; +label_BFC256FC: + psx_check_interrupts(cpu); + /* 0xBFC256FC: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC25700: 8DEF3C58 lw $t7, 15448($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25700u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC25704: 00000000 nop */ + /* nop */ + /* 0xBFC25708: 29E10002 slti $at, $t7, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[15] < (2) ? 1 : 0); + /* 0xBFC2570C: 1020FFFB beq $at, $zero, 0xBFC256FC */ + uint32_t psx_brA_BFC2570C = cpu->gpr[1]; uint32_t psx_brB_BFC2570C = cpu->gpr[0]; + int psx_taken_BFC2570C = (psx_brA_BFC2570C == psx_brB_BFC2570C); + /* 0xBFC25710: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2570C) goto label_BFC256FC; +label_BFC25714: + psx_check_interrupts(cpu); + /* 0xBFC25714: 1480000B bne $a0, $zero, 0xBFC25744 */ + uint32_t psx_brA_BFC25714 = cpu->gpr[4]; uint32_t psx_brB_BFC25714 = cpu->gpr[0]; + int psx_taken_BFC25714 = (psx_brA_BFC25714 != psx_brB_BFC25714); + /* 0xBFC25718: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25714) goto label_BFC25744; +label_BFC2571C: + psx_check_interrupts(cpu); + /* 0xBFC2571C: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC25720: 8F183C58 lw $t8, 15448($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25720u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC25724: 00000000 nop */ + /* nop */ + /* 0xBFC25728: 13000006 beq $t8, $zero, 0xBFC25744 */ + uint32_t psx_brA_BFC25728 = cpu->gpr[24]; uint32_t psx_brB_BFC25728 = cpu->gpr[0]; + int psx_taken_BFC25728 = (psx_brA_BFC25728 == psx_brB_BFC25728); + /* 0xBFC2572C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25728) goto label_BFC25744; +label_BFC25730: + psx_check_interrupts(cpu); + /* 0xBFC25730: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC25734: 8F393C58 lw $t9, 15448($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25734u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC25738: 00000000 nop */ + /* nop */ + /* 0xBFC2573C: 1720FFFC bne $t9, $zero, 0xBFC25730 */ + uint32_t psx_brA_BFC2573C = cpu->gpr[25]; uint32_t psx_brB_BFC2573C = cpu->gpr[0]; + int psx_taken_BFC2573C = (psx_brA_BFC2573C != psx_brB_BFC2573C); + /* 0xBFC25740: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2573C) goto label_BFC25730; +label_BFC25744: + psx_check_interrupts(cpu); + /* 0xBFC25744: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC25748: 8C423C58 lw $v0, 15448($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (15448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25748u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2574C: 03E00008 jr $ra */ + /* 0xBFC25750: 00000000 nop */ + /* nop */ + return; +} + void func_1FC25754(CPUState* cpu) { label_BFC25754: psx_check_interrupts(cpu); @@ -81390,6 +84785,433 @@ label_BFC25840: return; } +void func_1FC25884(CPUState* cpu) { +label_BFC25884: + psx_check_interrupts(cpu); + /* 0xBFC25884: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC25888: 10400008 beq $v0, $zero, 0xBFC258AC */ + uint32_t psx_brA_BFC25888 = cpu->gpr[2]; uint32_t psx_brB_BFC25888 = cpu->gpr[0]; + int psx_taken_BFC25888 = (psx_brA_BFC25888 == psx_brB_BFC25888); + /* 0xBFC2588C: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC25888) goto label_BFC258AC; +label_BFC25890: + psx_check_interrupts(cpu); + /* 0xBFC25890: 8CAE0000 lw $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, 0xBFC25890u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC25894: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC25898: 24A50004 addiu $a1, $a1, 4 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (4)); + /* 0xBFC2589C: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC258A0: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC258A4: 1440FFFA bne $v0, $zero, 0xBFC25890 */ + uint32_t psx_brA_BFC258A4 = cpu->gpr[2]; uint32_t psx_brB_BFC258A4 = cpu->gpr[0]; + int psx_taken_BFC258A4 = (psx_brA_BFC258A4 != psx_brB_BFC258A4); + /* 0xBFC258A8: AC8EFFFC sw $t6, -4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC258A8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC258A4) goto label_BFC25890; +label_BFC258AC: + psx_check_interrupts(cpu); + /* 0xBFC258AC: 03E00008 jr $ra */ + /* 0xBFC258B0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2592C(CPUState* cpu) { +label_BFC2592C: + psx_check_interrupts(cpu); + /* 0xBFC2592C: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC25930: 8C426EE4 lw $v0, 28388($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28388)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25930u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC25934: 00000000 nop */ + /* nop */ + /* 0xBFC25938: 0082082A slt $at, $a0, $v0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (int32_t)cpu->gpr[2] ? 1 : 0); + /* 0xBFC2593C: 10200003 beq $at, $zero, 0xBFC2594C */ + uint32_t psx_brA_BFC2593C = cpu->gpr[1]; uint32_t psx_brB_BFC2593C = cpu->gpr[0]; + int psx_taken_BFC2593C = (psx_brA_BFC2593C == psx_brB_BFC2593C); + /* 0xBFC25940: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2593C) goto label_BFC2594C; +label_BFC25944: + psx_check_interrupts(cpu); + /* 0xBFC25944: 10000008 beq $zero, $zero, 0xBFC25968 */ + uint32_t psx_brA_BFC25944 = cpu->gpr[0]; uint32_t psx_brB_BFC25944 = cpu->gpr[0]; + int psx_taken_BFC25944 = (psx_brA_BFC25944 == psx_brB_BFC25944); + /* 0xBFC25948: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC25944) goto label_BFC25968; +label_BFC2594C: + psx_check_interrupts(cpu); + /* 0xBFC2594C: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC25950: 8C426EEC lw $v0, 28396($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28396)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25950u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC25954: 00000000 nop */ + /* nop */ + /* 0xBFC25958: 0044082A slt $at, $v0, $a0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (int32_t)cpu->gpr[4] ? 1 : 0); + /* 0xBFC2595C: 10200002 beq $at, $zero, 0xBFC25968 */ + uint32_t psx_brA_BFC2595C = cpu->gpr[1]; uint32_t psx_brB_BFC2595C = cpu->gpr[0]; + int psx_taken_BFC2595C = (psx_brA_BFC2595C == psx_brB_BFC2595C); + /* 0xBFC25960: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2595C) goto label_BFC25968; +label_BFC25964: + psx_check_interrupts(cpu); + /* 0xBFC25964: 00402021 addu $a0, $v0, $zero */ + cpu->gpr[4] = cpu->gpr[2] + cpu->gpr[0]; +label_BFC25968: + psx_check_interrupts(cpu); + /* 0xBFC25968: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC2596C: 8C426EE8 lw $v0, 28392($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28392)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2596Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC25970: 00000000 nop */ + /* nop */ + /* 0xBFC25974: 00A2082A slt $at, $a1, $v0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[5] < (int32_t)cpu->gpr[2] ? 1 : 0); + /* 0xBFC25978: 10200003 beq $at, $zero, 0xBFC25988 */ + uint32_t psx_brA_BFC25978 = cpu->gpr[1]; uint32_t psx_brB_BFC25978 = cpu->gpr[0]; + int psx_taken_BFC25978 = (psx_brA_BFC25978 == psx_brB_BFC25978); + /* 0xBFC2597C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25978) goto label_BFC25988; +label_BFC25980: + psx_check_interrupts(cpu); + /* 0xBFC25980: 10000008 beq $zero, $zero, 0xBFC259A4 */ + uint32_t psx_brA_BFC25980 = cpu->gpr[0]; uint32_t psx_brB_BFC25980 = cpu->gpr[0]; + int psx_taken_BFC25980 = (psx_brA_BFC25980 == psx_brB_BFC25980); + /* 0xBFC25984: 00402821 addu $a1, $v0, $zero */ + cpu->gpr[5] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC25980) goto label_BFC259A4; +label_BFC25988: + psx_check_interrupts(cpu); + /* 0xBFC25988: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC2598C: 8C426EF0 lw $v0, 28400($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28400)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2598Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC25990: 00000000 nop */ + /* nop */ + /* 0xBFC25994: 0045082A slt $at, $v0, $a1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (int32_t)cpu->gpr[5] ? 1 : 0); + /* 0xBFC25998: 10200002 beq $at, $zero, 0xBFC259A4 */ + uint32_t psx_brA_BFC25998 = cpu->gpr[1]; uint32_t psx_brB_BFC25998 = cpu->gpr[0]; + int psx_taken_BFC25998 = (psx_brA_BFC25998 == psx_brB_BFC25998); + /* 0xBFC2599C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25998) goto label_BFC259A4; +label_BFC259A0: + psx_check_interrupts(cpu); + /* 0xBFC259A0: 00402821 addu $a1, $v0, $zero */ + cpu->gpr[5] = cpu->gpr[2] + cpu->gpr[0]; +label_BFC259A4: + psx_check_interrupts(cpu); + /* 0xBFC259A4: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC259A8: AC246EF4 sw $a0, 28404($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28404)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC259A8u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC259AC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC259B0: 03E00008 jr $ra */ + /* 0xBFC259B4: AC256EF8 sw $a1, 28408($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28408)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC259B4u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + return; +} + +void func_1FC259D8(CPUState* cpu) { +label_BFC259D8: + psx_check_interrupts(cpu); + /* 0xBFC259D8: ACA00000 sw $zero, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC259D8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC259DC: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC259E0: ACC00000 sw $zero, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC259E0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC259E4: 25EF3E30 addiu $t7, $t7, 15920 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (15920)); + /* 0xBFC259E8: 00047140 sll $t6, $a0, 5 */ + cpu->gpr[14] = cpu->gpr[4] << 5u; + /* 0xBFC259EC: ACE00000 sw $zero, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC259ECu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC259F0: 01CF1021 addu $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC259F4: 90580000 lbu $t8, 0($v0) */ + cpu->gpr[24] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC259F8: 00000000 nop */ + /* nop */ + /* 0xBFC259FC: 13000003 beq $t8, $zero, 0xBFC25A0C */ + uint32_t psx_brA_BFC259FC = cpu->gpr[24]; uint32_t psx_brB_BFC259FC = cpu->gpr[0]; + int psx_taken_BFC259FC = (psx_brA_BFC259FC == psx_brB_BFC259FC); + /* 0xBFC25A00: 00000000 nop */ + /* nop */ + if (psx_taken_BFC259FC) goto label_BFC25A0C; +label_BFC25A04: + psx_check_interrupts(cpu); + /* 0xBFC25A04: 03E00008 jr $ra */ + /* 0xBFC25A08: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + return; +label_BFC25A0C: + psx_check_interrupts(cpu); + /* 0xBFC25A0C: 90440001 lbu $a0, 1($v0) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (1))); + /* 0xBFC25A10: 1000004D beq $zero, $zero, 0xBFC25B48 */ + uint32_t psx_brA_BFC25A10 = cpu->gpr[0]; uint32_t psx_brB_BFC25A10 = cpu->gpr[0]; + int psx_taken_BFC25A10 = (psx_brA_BFC25A10 == psx_brB_BFC25A10); + /* 0xBFC25A14: 308300F0 andi $v1, $a0, 0xF0 */ + cpu->gpr[3] = cpu->gpr[4] & 0xF0u; + if (psx_taken_BFC25A10) goto label_BFC25B48; +label_BFC25A18: + psx_check_interrupts(cpu); + /* 0xBFC25A18: 24010012 addiu $at, $zero, 18 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (18)); + /* 0xBFC25A1C: 10810003 beq $a0, $at, 0xBFC25A2C */ + uint32_t psx_brA_BFC25A1C = cpu->gpr[4]; uint32_t psx_brB_BFC25A1C = cpu->gpr[1]; + int psx_taken_BFC25A1C = (psx_brA_BFC25A1C == psx_brB_BFC25A1C); + /* 0xBFC25A20: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25A1C) goto label_BFC25A2C; +label_BFC25A24: + psx_check_interrupts(cpu); + /* 0xBFC25A24: 10000050 beq $zero, $zero, 0xBFC25B68 */ + uint32_t psx_brA_BFC25A24 = cpu->gpr[0]; uint32_t psx_brB_BFC25A24 = cpu->gpr[0]; + int psx_taken_BFC25A24 = (psx_brA_BFC25A24 == psx_brB_BFC25A24); + /* 0xBFC25A28: 2403FFFF addiu $v1, $zero, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC25A24) goto label_BFC25B68; +label_BFC25A2C: + psx_check_interrupts(cpu); + /* 0xBFC25A2C: 80590004 lb $t9, 4($v0) */ + cpu->gpr[25] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (4))); + /* 0xBFC25A30: 00000000 nop */ + /* nop */ + /* 0xBFC25A34: ACB90000 sw $t9, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A34u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC25A38: 80480005 lb $t0, 5($v0) */ + cpu->gpr[8] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (5))); + /* 0xBFC25A3C: 00000000 nop */ + /* nop */ + /* 0xBFC25A40: ACC80000 sw $t0, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A40u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC25A44: ACE00000 sw $zero, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A44u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC25A48: 90490003 lbu $t1, 3($v0) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (3))); + /* 0xBFC25A4C: 00000000 nop */ + /* nop */ + /* 0xBFC25A50: 01205027 nor $t2, $t1, $zero */ + cpu->gpr[10] = ~(cpu->gpr[9] | cpu->gpr[0]); + /* 0xBFC25A54: 314B0008 andi $t3, $t2, 0x8 */ + cpu->gpr[11] = cpu->gpr[10] & 0x8u; + /* 0xBFC25A58: 11600006 beq $t3, $zero, 0xBFC25A74 */ + uint32_t psx_brA_BFC25A58 = cpu->gpr[11]; uint32_t psx_brB_BFC25A58 = cpu->gpr[0]; + int psx_taken_BFC25A58 = (psx_brA_BFC25A58 == psx_brB_BFC25A58); + /* 0xBFC25A5C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25A58) goto label_BFC25A74; +label_BFC25A60: + psx_check_interrupts(cpu); + /* 0xBFC25A60: 8CEC0000 lw $t4, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A60u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC25A64: 3C010020 lui $at, 0x20 */ + cpu->gpr[1] = 0x00200000u; + /* 0xBFC25A68: 34210020 ori $at, $at, 0x20 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20u; + /* 0xBFC25A6C: 01816825 or $t5, $t4, $at */ + cpu->gpr[13] = cpu->gpr[12] | cpu->gpr[1]; + /* 0xBFC25A70: ACED0000 sw $t5, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A70u); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } +label_BFC25A74: + psx_check_interrupts(cpu); + /* 0xBFC25A74: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC25A78: 8DCE9E2C lw $t6, -25044($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25044)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25A78u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC25A7C: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC25A80: 15C40014 bne $t6, $a0, 0xBFC25AD4 */ + uint32_t psx_brA_BFC25A80 = cpu->gpr[14]; uint32_t psx_brB_BFC25A80 = cpu->gpr[4]; + int psx_taken_BFC25A80 = (psx_brA_BFC25A80 != psx_brB_BFC25A80); + /* 0xBFC25A84: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25A80) goto label_BFC25AD4; +label_BFC25A88: + psx_check_interrupts(cpu); + /* 0xBFC25A88: 904F0003 lbu $t7, 3($v0) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (3))); + /* 0xBFC25A8C: 00000000 nop */ + /* nop */ + /* 0xBFC25A90: 01E0C027 nor $t8, $t7, $zero */ + cpu->gpr[24] = ~(cpu->gpr[15] | cpu->gpr[0]); + /* 0xBFC25A94: 33190004 andi $t9, $t8, 0x4 */ + cpu->gpr[25] = cpu->gpr[24] & 0x4u; + /* 0xBFC25A98: 13200006 beq $t9, $zero, 0xBFC25AB4 */ + uint32_t psx_brA_BFC25A98 = cpu->gpr[25]; uint32_t psx_brB_BFC25A98 = cpu->gpr[0]; + int psx_taken_BFC25A98 = (psx_brA_BFC25A98 == psx_brB_BFC25A98); + /* 0xBFC25A9C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25A98) goto label_BFC25AB4; +label_BFC25AA0: + psx_check_interrupts(cpu); + /* 0xBFC25AA0: 8CE80000 lw $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, 0xBFC25AA0u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC25AA4: 3C010800 lui $at, 0x800 */ + cpu->gpr[1] = 0x08000000u; + /* 0xBFC25AA8: 34210800 ori $at, $at, 0x800 */ + cpu->gpr[1] = cpu->gpr[1] | 0x800u; + /* 0xBFC25AAC: 01014825 or $t1, $t0, $at */ + cpu->gpr[9] = cpu->gpr[8] | cpu->gpr[1]; + /* 0xBFC25AB0: ACE90000 sw $t1, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25AB0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } +label_BFC25AB4: + psx_check_interrupts(cpu); + /* 0xBFC25AB4: 8CEA0000 lw $t2, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25AB4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC25AB8: 24010820 addiu $at, $zero, 2080 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2080)); + /* 0xBFC25ABC: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC25AC0: 15610004 bne $t3, $at, 0xBFC25AD4 */ + uint32_t psx_brA_BFC25AC0 = cpu->gpr[11]; uint32_t psx_brB_BFC25AC0 = cpu->gpr[1]; + int psx_taken_BFC25AC0 = (psx_brA_BFC25AC0 != psx_brB_BFC25AC0); + /* 0xBFC25AC4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25AC0) goto label_BFC25AD4; +label_BFC25AC8: + psx_check_interrupts(cpu); + /* 0xBFC25AC8: 3C0C000F lui $t4, 0xF */ + cpu->gpr[12] = 0x000F0000u; + /* 0xBFC25ACC: 358C000F ori $t4, $t4, 0xF */ + cpu->gpr[12] = cpu->gpr[12] | 0xFu; + /* 0xBFC25AD0: ACEC0000 sw $t4, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25AD0u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } +label_BFC25AD4: + psx_check_interrupts(cpu); + /* 0xBFC25AD4: 3C0D8006 lui $t5, 0x8006 */ + cpu->gpr[13] = 0x80060000u; + /* 0xBFC25AD8: 90430001 lbu $v1, 1($v0) */ + cpu->gpr[3] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (1))); + /* 0xBFC25ADC: 8DAD6EB8 lw $t5, 28344($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (28344)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25ADCu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC25AE0: 306300F0 andi $v1, $v1, 0xF0 */ + cpu->gpr[3] = cpu->gpr[3] & 0xF0u; + /* 0xBFC25AE4: 15A40021 bne $t5, $a0, 0xBFC25B6C */ + uint32_t psx_brA_BFC25AE4 = cpu->gpr[13]; uint32_t psx_brB_BFC25AE4 = cpu->gpr[4]; + int psx_taken_BFC25AE4 = (psx_brA_BFC25AE4 != psx_brB_BFC25AE4); + /* 0xBFC25AE8: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC25AE4) goto label_BFC25B6C; +label_BFC25AEC: + psx_check_interrupts(cpu); + /* 0xBFC25AEC: 8CEE0000 lw $t6, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25AECu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC25AF0: 00000000 nop */ + /* nop */ + /* 0xBFC25AF4: 15C00003 bne $t6, $zero, 0xBFC25B04 */ + uint32_t psx_brA_BFC25AF4 = cpu->gpr[14]; uint32_t psx_brB_BFC25AF4 = cpu->gpr[0]; + int psx_taken_BFC25AF4 = (psx_brA_BFC25AF4 != psx_brB_BFC25AF4); + /* 0xBFC25AF8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + if (psx_taken_BFC25AF4) goto label_BFC25B04; +label_BFC25AFC: + psx_check_interrupts(cpu); + /* 0xBFC25AFC: 1000001A beq $zero, $zero, 0xBFC25B68 */ + uint32_t psx_brA_BFC25AFC = cpu->gpr[0]; uint32_t psx_brB_BFC25AFC = cpu->gpr[0]; + int psx_taken_BFC25AFC = (psx_brA_BFC25AFC == psx_brB_BFC25AFC); + /* 0xBFC25B00: AC206EB8 sw $zero, 28344($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28344)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B00u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC25AFC) goto label_BFC25B68; +label_BFC25B04: + psx_check_interrupts(cpu); + /* 0xBFC25B04: ACE00000 sw $zero, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B04u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC25B08: ACA00000 sw $zero, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B08u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC25B0C: 10000016 beq $zero, $zero, 0xBFC25B68 */ + uint32_t psx_brA_BFC25B0C = cpu->gpr[0]; uint32_t psx_brB_BFC25B0C = cpu->gpr[0]; + int psx_taken_BFC25B0C = (psx_brA_BFC25B0C == psx_brB_BFC25B0C); + /* 0xBFC25B10: ACC00000 sw $zero, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B10u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC25B0C) goto label_BFC25B68; +label_BFC25B14: + psx_check_interrupts(cpu); + /* 0xBFC25B14: 904F0002 lbu $t7, 2($v0) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (2))); + /* 0xBFC25B18: 90590003 lbu $t9, 3($v0) */ + cpu->gpr[25] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (3))); + /* 0xBFC25B1C: 000FC200 sll $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] << 8u; + /* 0xBFC25B20: 03194025 or $t0, $t8, $t9 */ + cpu->gpr[8] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC25B24: 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, 0xBFC25B24u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC25B28: 8CE90000 lw $t1, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B28u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC25B2C: 00000000 nop */ + /* nop */ + /* 0xBFC25B30: 01205027 nor $t2, $t1, $zero */ + cpu->gpr[10] = ~(cpu->gpr[9] | cpu->gpr[0]); + /* 0xBFC25B34: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC25B38: ACEB0000 sw $t3, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25B38u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC25B3C: 90430001 lbu $v1, 1($v0) */ + cpu->gpr[3] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (1))); + /* 0xBFC25B40: 10000009 beq $zero, $zero, 0xBFC25B68 */ + uint32_t psx_brA_BFC25B40 = cpu->gpr[0]; uint32_t psx_brB_BFC25B40 = cpu->gpr[0]; + int psx_taken_BFC25B40 = (psx_brA_BFC25B40 == psx_brB_BFC25B40); + /* 0xBFC25B44: 306300F0 andi $v1, $v1, 0xF0 */ + cpu->gpr[3] = cpu->gpr[3] & 0xF0u; + if (psx_taken_BFC25B40) goto label_BFC25B68; +label_BFC25B48: + psx_check_interrupts(cpu); + /* 0xBFC25B48: 24010010 addiu $at, $zero, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC25B4C: 1061FFB2 beq $v1, $at, 0xBFC25A18 */ + uint32_t psx_brA_BFC25B4C = cpu->gpr[3]; uint32_t psx_brB_BFC25B4C = cpu->gpr[1]; + int psx_taken_BFC25B4C = (psx_brA_BFC25B4C == psx_brB_BFC25B4C); + /* 0xBFC25B50: 24010020 addiu $at, $zero, 32 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + if (psx_taken_BFC25B4C) goto label_BFC25A18; +label_BFC25B54: + psx_check_interrupts(cpu); + /* 0xBFC25B54: 1061FFEF beq $v1, $at, 0xBFC25B14 */ + uint32_t psx_brA_BFC25B54 = cpu->gpr[3]; uint32_t psx_brB_BFC25B54 = cpu->gpr[1]; + int psx_taken_BFC25B54 = (psx_brA_BFC25B54 == psx_brB_BFC25B54); + /* 0xBFC25B58: 24010040 addiu $at, $zero, 64 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + if (psx_taken_BFC25B54) goto label_BFC25B14; +label_BFC25B5C: + psx_check_interrupts(cpu); + /* 0xBFC25B5C: 1061FFED beq $v1, $at, 0xBFC25B14 */ + uint32_t psx_brA_BFC25B5C = cpu->gpr[3]; uint32_t psx_brB_BFC25B5C = cpu->gpr[1]; + int psx_taken_BFC25B5C = (psx_brA_BFC25B5C == psx_brB_BFC25B5C); + /* 0xBFC25B60: 00000000 nop */ + /* nop */ + if (psx_taken_BFC25B5C) goto label_BFC25B14; +label_BFC25B64: + psx_check_interrupts(cpu); + /* 0xBFC25B64: 2403FFFF addiu $v1, $zero, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); +label_BFC25B68: + psx_check_interrupts(cpu); + /* 0xBFC25B68: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; +label_BFC25B6C: + psx_check_interrupts(cpu); + /* 0xBFC25B6C: 03E00008 jr $ra */ + /* 0xBFC25B70: 00000000 nop */ + /* nop */ + return; +} + void func_1FC25B74(CPUState* cpu) { label_BFC25B74: psx_check_interrupts(cpu); @@ -81520,6 +85342,69 @@ label_BFC25C38: return; } +void func_1FC25C74(CPUState* cpu) { +label_BFC25C74: + psx_check_interrupts(cpu); + /* 0xBFC25C74: 03E00008 jr $ra */ + /* 0xBFC25C78: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC25C7C(CPUState* cpu) { +label_BFC25C7C: + psx_check_interrupts(cpu); + /* 0xBFC25C7C: 03E00008 jr $ra */ + /* 0xBFC25C80: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC25C84(CPUState* cpu) { +label_BFC25C84: + psx_check_interrupts(cpu); + /* 0xBFC25C84: 03E00008 jr $ra */ + /* 0xBFC25C88: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC25C8C(CPUState* cpu) { +label_BFC25C8C: + psx_check_interrupts(cpu); + /* 0xBFC25C8C: 03E00008 jr $ra */ + /* 0xBFC25C90: AFA40000 sw $a0, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25C90u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + +void func_1FC25C94(CPUState* cpu) { +label_BFC25C94: + psx_check_interrupts(cpu); + /* 0xBFC25C94: 03E00008 jr $ra */ + /* 0xBFC25C98: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC25CB0(CPUState* cpu) { +label_BFC25CB0: + psx_check_interrupts(cpu); + /* 0xBFC25CB0: 03E00008 jr $ra */ + /* 0xBFC25CB4: AFA40000 sw $a0, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25CB4u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + +void func_1FC25CB8(CPUState* cpu) { +label_BFC25CB8: + psx_check_interrupts(cpu); + /* 0xBFC25CB8: 03E00008 jr $ra */ + /* 0xBFC25CBC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC25CC0(CPUState* cpu) { label_BFC25CC0: psx_check_interrupts(cpu); @@ -81797,6 +85682,33 @@ label_BFC25E40: return; } +void func_1FC25E60(CPUState* cpu) { +label_BFC25E60: + psx_check_interrupts(cpu); + /* 0xBFC25E60: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC25E64: AC246EE4 sw $a0, 28388($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28388)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25E64u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC25E68: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC25E6C: AC256EE8 sw $a1, 28392($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28392)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25E6Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC25E70: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC25E74: 00867021 addu $t6, $a0, $a2 */ + cpu->gpr[14] = cpu->gpr[4] + cpu->gpr[6]; + /* 0xBFC25E78: AC2E6EEC sw $t6, 28396($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28396)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25E78u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC25E7C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC25E80: 00A77821 addu $t7, $a1, $a3 */ + cpu->gpr[15] = cpu->gpr[5] + cpu->gpr[7]; + /* 0xBFC25E84: 03E00008 jr $ra */ + /* 0xBFC25E88: AC2F6EF0 sw $t7, 28400($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28400)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC25E88u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + return; +} + void func_1FC25E8C(CPUState* cpu) { label_BFC25E8C: psx_check_interrupts(cpu); @@ -83261,6 +87173,19 @@ label_BFC26640: return; } +void func_1FC26660(CPUState* cpu) { +label_BFC26660: + psx_check_interrupts(cpu); + /* 0xBFC26660: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC26664: 8C426C68 lw $v0, 27752($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (27752)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26664u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC26668: 03E00008 jr $ra */ + /* 0xBFC2666C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC26670(CPUState* cpu) { label_BFC26670: psx_check_interrupts(cpu); @@ -84063,6 +87988,147 @@ label_BFC26AEC: return; } +void func_1FC26AF8(CPUState* cpu) { +label_BFC26AF8: + psx_check_interrupts(cpu); + /* 0xBFC26AF8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26AFC: AC206EB8 sw $zero, 28344($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28344)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26AFCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B00: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B04: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC26B08: AC2E6EBC sw $t6, 28348($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28348)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B08u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC26B0C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B10: AC206EC0 sw $zero, 28352($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28352)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B10u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B14: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B18: AC206EC4 sw $zero, 28356($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28356)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B18u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B1C: AC206EC8 sw $zero, 28360($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28360)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B1Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B20: AC206ECC sw $zero, 28364($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28364)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B20u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B24: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B28: AC206ED0 sw $zero, 28368($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28368)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B28u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B2C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B30: AC206ED4 sw $zero, 28372($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28372)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B30u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B34: 3C0F8006 lui $t7, 0x8006 */ + cpu->gpr[15] = 0x80060000u; + /* 0xBFC26B38: 25EF6C78 addiu $t7, $t7, 27768 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (27768)); + /* 0xBFC26B3C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B40: AC2F6ED8 sw $t7, 28376($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28376)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B40u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC26B44: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B48: 24180001 addiu $t8, $zero, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC26B4C: AC386EDC sw $t8, 28380($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28380)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B4Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC26B50: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B54: AC206EE0 sw $zero, 28384($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28384)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B54u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B58: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B5C: AC206EE4 sw $zero, 28388($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28388)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B60: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B64: AC206EE8 sw $zero, 28392($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28392)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B64u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26B68: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B6C: 24190280 addiu $t9, $zero, 640 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (640)); + /* 0xBFC26B70: AC396EEC sw $t9, 28396($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28396)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B70u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC26B74: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B78: 240801E0 addiu $t0, $zero, 480 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[0] + (480)); + /* 0xBFC26B7C: AC286EF0 sw $t0, 28400($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28400)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC26B80: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B84: 2409000A addiu $t1, $zero, 10 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC26B88: AC296EF4 sw $t1, 28404($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28404)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B88u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC26B8C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B90: 240A000A addiu $t2, $zero, 10 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC26B94: AC2A6EF8 sw $t2, 28408($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28408)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B94u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC26B98: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26B9C: AC206EFC sw $zero, 28412($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28412)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26B9Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BA0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BA4: AC206C54 sw $zero, 27732($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27732)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BA4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BA8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BAC: AC206C58 sw $zero, 27736($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27736)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BACu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BB0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BB4: AC206C5C sw $zero, 27740($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27740)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BB4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BB8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BBC: AC206C60 sw $zero, 27744($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27744)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BBCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BC0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BC4: AC206C64 sw $zero, 27748($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27748)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BC4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BC8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BCC: AC206C68 sw $zero, 27752($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27752)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BCCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BD0: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BD4: AC206C6C sw $zero, 27756($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27756)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BD4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC26BD8: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BDC: 240B0040 addiu $t3, $zero, 64 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC26BE0: AC2B6C70 sw $t3, 27760($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27760)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BE0u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC26BE4: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26BE8: 240C0040 addiu $t4, $zero, 64 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC26BEC: AC2C6C74 sw $t4, 27764($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (27764)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BECu); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC26BF0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC26BF4: 240D03FE addiu $t5, $zero, 1022 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (1022)); + /* 0xBFC26BF8: AC2D3CCC sw $t5, 15564($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (15564)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26BF8u); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } + /* 0xBFC26BFC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC26C00: 03E00008 jr $ra */ + /* 0xBFC26C04: AC2E6F00 sw $t6, 28416($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (28416)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26C04u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + return; +} + void func_1FC26C10(CPUState* cpu) { label_BFC26C10: psx_check_interrupts(cpu); @@ -84612,6 +88678,444 @@ label_BFC26EE8: return; } +void func_1FC26EF8(CPUState* cpu) { +label_BFC26EF8: + psx_check_interrupts(cpu); + /* 0xBFC26EF8: 24A50096 addiu $a1, $a1, 150 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (150)); + /* 0xBFC26EFC: 24011194 addiu $at, $zero, 4500 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (4500)); + /* 0xBFC26F00: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26F04: 27BDFFA0 addiu $sp, $sp, -96 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-96)); + /* 0xBFC26F08: 2401000A addiu $at, $zero, 10 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC26F0C: AFB40020 sw $s4, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F0Cu); return; } cpu->write_word(psx_addr, cpu->gpr[20]); } + /* 0xBFC26F10: AFBF0024 sw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F10u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC26F14: AFB00018 sw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F14u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC26F18: AFB2001C sw $s2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F18u); return; } cpu->write_word(psx_addr, cpu->gpr[18]); } + /* 0xBFC26F1C: 0080A021 addu $s4, $a0, $zero */ + cpu->gpr[20] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC26F20: 00C08021 addu $s0, $a2, $zero */ + cpu->gpr[16] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC26F24: 27A40058 addiu $a0, $sp, 88 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (88)); + /* 0xBFC26F28: 00007012 mflo $t6 */ + cpu->gpr[14] = cpu->lo; + /* 0xBFC26F2C: AFAE0038 sw $t6, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F2Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC26F30: 8FAF0038 lw $t7, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F30u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC26F34: 8FB90038 lw $t9, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F34u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC26F38: 01E1001A div $t7, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[15]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26F3C: 8FAB0038 lw $t3, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F3Cu); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC26F40: 00000000 nop */ + /* nop */ + /* 0xBFC26F44: 000B60C0 sll $t4, $t3, 3 */ + cpu->gpr[12] = cpu->gpr[11] << 3u; + /* 0xBFC26F48: 018B6021 addu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[11]; + /* 0xBFC26F4C: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC26F50: 018B6023 subu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] - cpu->gpr[11]; + /* 0xBFC26F54: 000C60C0 sll $t4, $t4, 3 */ + cpu->gpr[12] = cpu->gpr[12] << 3u; + /* 0xBFC26F58: 018B6021 addu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[11]; + /* 0xBFC26F5C: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC26F60: 018B6021 addu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[11]; + /* 0xBFC26F64: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC26F68: 00AC2823 subu $a1, $a1, $t4 */ + cpu->gpr[5] = cpu->gpr[5] - cpu->gpr[12]; + /* 0xBFC26F6C: 0000C010 mfhi $t8 */ + cpu->gpr[24] = cpu->hi; + /* 0xBFC26F70: 00000000 nop */ + /* nop */ + /* 0xBFC26F74: 00000000 nop */ + /* nop */ + /* 0xBFC26F78: 0321001A div $t9, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26F7C: 2401004B addiu $at, $zero, 75 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (75)); + /* 0xBFC26F80: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC26F84: 00084900 sll $t1, $t0, 4 */ + cpu->gpr[9] = cpu->gpr[8] << 4u; + /* 0xBFC26F88: 03095021 addu $t2, $t8, $t1 */ + cpu->gpr[10] = cpu->gpr[24] + cpu->gpr[9]; + /* 0xBFC26F8C: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26F90: 2401000A addiu $at, $zero, 10 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC26F94: A3AA0058 sb $t2, 88($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (88)), (uint8_t)(cpu->gpr[10] & 0xFFu)); + /* 0xBFC26F98: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC26F9C: AFAD0038 sw $t5, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26F9Cu); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } + /* 0xBFC26FA0: 8FAE0038 lw $t6, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FA0u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC26FA4: 8FB90038 lw $t9, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FA4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC26FA8: 01C1001A div $t6, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[14]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26FAC: 8FAA0038 lw $t2, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FACu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC26FB0: 00000000 nop */ + /* nop */ + /* 0xBFC26FB4: 000A5880 sll $t3, $t2, 2 */ + cpu->gpr[11] = cpu->gpr[10] << 2u; + /* 0xBFC26FB8: 016A5821 addu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] + cpu->gpr[10]; + /* 0xBFC26FBC: 000B5880 sll $t3, $t3, 2 */ + cpu->gpr[11] = cpu->gpr[11] << 2u; + /* 0xBFC26FC0: 016A5823 subu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[10]; + /* 0xBFC26FC4: 000B5880 sll $t3, $t3, 2 */ + cpu->gpr[11] = cpu->gpr[11] << 2u; + /* 0xBFC26FC8: 016A5823 subu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[10]; + /* 0xBFC26FCC: 00AB6023 subu $t4, $a1, $t3 */ + cpu->gpr[12] = cpu->gpr[5] - cpu->gpr[11]; + /* 0xBFC26FD0: AFAC0038 sw $t4, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FD0u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC26FD4: 8FAD0038 lw $t5, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FD4u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC26FD8: 00007810 mfhi $t7 */ + cpu->gpr[15] = cpu->hi; + /* 0xBFC26FDC: 00000000 nop */ + /* nop */ + /* 0xBFC26FE0: 00000000 nop */ + /* nop */ + /* 0xBFC26FE4: 0321001A div $t9, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26FE8: 8FB90038 lw $t9, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC26FE8u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC26FEC: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC26FF0: 0008C100 sll $t8, $t0, 4 */ + cpu->gpr[24] = cpu->gpr[8] << 4u; + /* 0xBFC26FF4: 01F84821 addu $t1, $t7, $t8 */ + cpu->gpr[9] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC26FF8: 01A1001A div $t5, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[13]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC26FFC: A3A90059 sb $t1, 89($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (89)), (uint8_t)(cpu->gpr[9] & 0xFFu)); + /* 0xBFC27000: 00007010 mfhi $t6 */ + cpu->gpr[14] = cpu->hi; + /* 0xBFC27004: 00000000 nop */ + /* nop */ + /* 0xBFC27008: 00000000 nop */ + /* nop */ + /* 0xBFC2700C: 0321001A div $t9, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC27010: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC27014: 00087900 sll $t7, $t0, 4 */ + cpu->gpr[15] = cpu->gpr[8] << 4u; + /* 0xBFC27018: 01CFC021 addu $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC2701C: 0C015C6E jal 0xB00571B8 */ + /* 0xBFC27020: A3B8005A sb $t8, 90($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (90)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + cpu->gpr[31] = 0xBFC27024u; + psx_dispatch(cpu, 0x800571B8u); +label_BFC27024: + psx_check_interrupts(cpu); + /* 0xBFC27024: 10400003 beq $v0, $zero, 0xBFC27034 */ + uint32_t psx_brA_BFC27024 = cpu->gpr[2]; uint32_t psx_brB_BFC27024 = cpu->gpr[0]; + int psx_taken_BFC27024 = (psx_brA_BFC27024 == psx_brB_BFC27024); + /* 0xBFC27028: 00000000 nop */ + /* nop */ + if (psx_taken_BFC27024) goto label_BFC27034; +label_BFC2702C: + psx_check_interrupts(cpu); + /* 0xBFC2702C: 10000006 beq $zero, $zero, 0xBFC27048 */ + uint32_t psx_brA_BFC2702C = cpu->gpr[0]; uint32_t psx_brB_BFC2702C = cpu->gpr[0]; + int psx_taken_BFC2702C = (psx_brA_BFC2702C == psx_brB_BFC2702C); + /* 0xBFC27030: 24120001 addiu $s2, $zero, 1 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC2702C) goto label_BFC27048; +label_BFC27034: + psx_check_interrupts(cpu); + /* 0xBFC27034: 0C015C6E jal 0xB00571B8 */ + /* 0xBFC27038: 27A40058 addiu $a0, $sp, 88 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (88)); + cpu->gpr[31] = 0xBFC2703Cu; + psx_dispatch(cpu, 0x800571B8u); +label_BFC2703C: + psx_check_interrupts(cpu); + /* 0xBFC2703C: 1040FFFD beq $v0, $zero, 0xBFC27034 */ + uint32_t psx_brA_BFC2703C = cpu->gpr[2]; uint32_t psx_brB_BFC2703C = cpu->gpr[0]; + int psx_taken_BFC2703C = (psx_brA_BFC2703C == psx_brB_BFC2703C); + /* 0xBFC27040: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2703C) goto label_BFC27034; +label_BFC27044: + psx_check_interrupts(cpu); + /* 0xBFC27044: 24120001 addiu $s2, $zero, 1 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC27048: + psx_check_interrupts(cpu); + /* 0xBFC27048: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC2704C: 8C849E80 lw $a0, -24960($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24960)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2704Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC27050: 0C016A80 jal 0xB005AA00 */ + /* 0xBFC27054: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC27058u; + psx_dispatch(cpu, 0x8005AA00u); +label_BFC27058: + psx_check_interrupts(cpu); + /* 0xBFC27058: 14520004 bne $v0, $s2, 0xBFC2706C */ + uint32_t psx_brA_BFC27058 = cpu->gpr[2]; uint32_t psx_brB_BFC27058 = cpu->gpr[18]; + int psx_taken_BFC27058 = (psx_brA_BFC27058 != psx_brB_BFC27058); + /* 0xBFC2705C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC27058) goto label_BFC2706C; +label_BFC27060: + psx_check_interrupts(cpu); + /* 0xBFC27060: AFB10030 sw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27060u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC27064: 10000009 beq $zero, $zero, 0xBFC2708C */ + uint32_t psx_brA_BFC27064 = cpu->gpr[0]; uint32_t psx_brB_BFC27064 = cpu->gpr[0]; + int psx_taken_BFC27064 = (psx_brA_BFC27064 == psx_brB_BFC27064); + /* 0xBFC27068: AFB3002C sw $s3, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27068u); return; } cpu->write_word(psx_addr, cpu->gpr[19]); } + if (psx_taken_BFC27064) goto label_BFC2708C; +label_BFC2706C: + psx_check_interrupts(cpu); + /* 0xBFC2706C: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC27070: 8C849E8C lw $a0, -24948($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27070u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC27074: 0C016A80 jal 0xB005AA00 */ + /* 0xBFC27078: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2707Cu; + psx_dispatch(cpu, 0x8005AA00u); +label_BFC2707C: + psx_check_interrupts(cpu); + /* 0xBFC2707C: 1452FFF2 bne $v0, $s2, 0xBFC27048 */ + uint32_t psx_brA_BFC2707C = cpu->gpr[2]; uint32_t psx_brB_BFC2707C = cpu->gpr[18]; + int psx_taken_BFC2707C = (psx_brA_BFC2707C != psx_brB_BFC2707C); + /* 0xBFC27080: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2707C) goto label_BFC27048; +label_BFC27084: + psx_check_interrupts(cpu); + /* 0xBFC27084: 10000039 beq $zero, $zero, 0xBFC2716C */ + uint32_t psx_brA_BFC27084 = cpu->gpr[0]; uint32_t psx_brB_BFC27084 = cpu->gpr[0]; + int psx_taken_BFC27084 = (psx_brA_BFC27084 == psx_brB_BFC27084); + /* 0xBFC27088: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC27084) goto label_BFC2716C; +label_BFC2708C: + psx_check_interrupts(cpu); + /* 0xBFC2708C: 3C110001 lui $s1, 0x1 */ + cpu->gpr[17] = 0x00010000u; + /* 0xBFC27090: 3631869F ori $s1, $s1, 0x869F */ + cpu->gpr[17] = cpu->gpr[17] | 0x869Fu; + /* 0xBFC27094: 02802021 addu $a0, $s4, $zero */ + cpu->gpr[4] = cpu->gpr[20] + cpu->gpr[0]; + /* 0xBFC27098: 02002821 addu $a1, $s0, $zero */ + cpu->gpr[5] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC2709C: 0C015D76 jal 0xB00575D8 */ + /* 0xBFC270A0: 24060080 addiu $a2, $zero, 128 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (128)); + cpu->gpr[31] = 0xBFC270A4u; + psx_dispatch(cpu, 0x800575D8u); +label_BFC270A4: + psx_check_interrupts(cpu); + /* 0xBFC270A4: 1440000A bne $v0, $zero, 0xBFC270D0 */ + uint32_t psx_brA_BFC270A4 = cpu->gpr[2]; uint32_t psx_brB_BFC270A4 = cpu->gpr[0]; + int psx_taken_BFC270A4 = (psx_brA_BFC270A4 != psx_brB_BFC270A4); + /* 0xBFC270A8: 00409821 addu $s3, $v0, $zero */ + cpu->gpr[19] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC270A4) goto label_BFC270D0; +label_BFC270AC: + psx_check_interrupts(cpu); + /* 0xBFC270AC: 2631FFFF addiu $s1, $s1, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (-1)); + /* 0xBFC270B0: 1A200007 blez $s1, 0xBFC270D0 */ + uint32_t psx_brA_BFC270B0 = cpu->gpr[17]; + int psx_taken_BFC270B0 = ((int32_t)psx_brA_BFC270B0 <= 0); + /* 0xBFC270B4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC270B0) goto label_BFC270D0; +label_BFC270B8: + psx_check_interrupts(cpu); + /* 0xBFC270B8: 02802021 addu $a0, $s4, $zero */ + cpu->gpr[4] = cpu->gpr[20] + cpu->gpr[0]; + /* 0xBFC270BC: 02002821 addu $a1, $s0, $zero */ + cpu->gpr[5] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC270C0: 0C015D76 jal 0xB00575D8 */ + /* 0xBFC270C4: 24060080 addiu $a2, $zero, 128 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (128)); + cpu->gpr[31] = 0xBFC270C8u; + psx_dispatch(cpu, 0x800575D8u); +label_BFC270C8: + psx_check_interrupts(cpu); + /* 0xBFC270C8: 1040FFF8 beq $v0, $zero, 0xBFC270AC */ + uint32_t psx_brA_BFC270C8 = cpu->gpr[2]; uint32_t psx_brB_BFC270C8 = cpu->gpr[0]; + int psx_taken_BFC270C8 = (psx_brA_BFC270C8 == psx_brB_BFC270C8); + /* 0xBFC270CC: 00409821 addu $s3, $v0, $zero */ + cpu->gpr[19] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC270C8) goto label_BFC270AC; +label_BFC270D0: + psx_check_interrupts(cpu); + /* 0xBFC270D0: 1A200022 blez $s1, 0xBFC2715C */ + uint32_t psx_brA_BFC270D0 = cpu->gpr[17]; + int psx_taken_BFC270D0 = ((int32_t)psx_brA_BFC270D0 <= 0); + /* 0xBFC270D4: 00008021 addu $s0, $zero, $zero */ + cpu->gpr[16] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC270D0) goto label_BFC2715C; +label_BFC270D8: + psx_check_interrupts(cpu); + /* 0xBFC270D8: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC270DC: 8C849E80 lw $a0, -24960($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24960)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC270DCu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC270E0: 0C016A80 jal 0xB005AA00 */ + /* 0xBFC270E4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC270E8u; + psx_dispatch(cpu, 0x8005AA00u); +label_BFC270E8: + psx_check_interrupts(cpu); + /* 0xBFC270E8: 14520006 bne $v0, $s2, 0xBFC27104 */ + uint32_t psx_brA_BFC270E8 = cpu->gpr[2]; uint32_t psx_brB_BFC270E8 = cpu->gpr[18]; + int psx_taken_BFC270E8 = (psx_brA_BFC270E8 != psx_brB_BFC270E8); + /* 0xBFC270EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC270E8) goto label_BFC27104; +label_BFC270F0: + psx_check_interrupts(cpu); + /* 0xBFC270F0: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC270F4: 1A000003 blez $s0, 0xBFC27104 */ + uint32_t psx_brA_BFC270F4 = cpu->gpr[16]; + int psx_taken_BFC270F4 = ((int32_t)psx_brA_BFC270F4 <= 0); + /* 0xBFC270F8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC270F4) goto label_BFC27104; +label_BFC270FC: + psx_check_interrupts(cpu); + /* 0xBFC270FC: 10000017 beq $zero, $zero, 0xBFC2715C */ + uint32_t psx_brA_BFC270FC = cpu->gpr[0]; uint32_t psx_brB_BFC270FC = cpu->gpr[0]; + int psx_taken_BFC270FC = (psx_brA_BFC270FC == psx_brB_BFC270FC); + /* 0xBFC27100: 02809821 addu $s3, $s4, $zero */ + cpu->gpr[19] = cpu->gpr[20] + cpu->gpr[0]; + if (psx_taken_BFC270FC) goto label_BFC2715C; +label_BFC27104: + psx_check_interrupts(cpu); + /* 0xBFC27104: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC27108: 8C849E8C lw $a0, -24948($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27108u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2710C: 0C016A80 jal 0xB005AA00 */ + /* 0xBFC27110: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC27114u; + psx_dispatch(cpu, 0x8005AA00u); +label_BFC27114: + psx_check_interrupts(cpu); + /* 0xBFC27114: 14520005 bne $v0, $s2, 0xBFC2712C */ + uint32_t psx_brA_BFC27114 = cpu->gpr[2]; uint32_t psx_brB_BFC27114 = cpu->gpr[18]; + int psx_taken_BFC27114 = (psx_brA_BFC27114 != psx_brB_BFC27114); + /* 0xBFC27118: 00000000 nop */ + /* nop */ + if (psx_taken_BFC27114) goto label_BFC2712C; +label_BFC2711C: + psx_check_interrupts(cpu); + /* 0xBFC2711C: 8FB10030 lw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2711Cu); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC27120: 8FB3002C lw $s3, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27120u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC27124: 10000011 beq $zero, $zero, 0xBFC2716C */ + uint32_t psx_brA_BFC27124 = cpu->gpr[0]; uint32_t psx_brB_BFC27124 = cpu->gpr[0]; + int psx_taken_BFC27124 = (psx_brA_BFC27124 == psx_brB_BFC27124); + /* 0xBFC27128: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC27124) goto label_BFC2716C; +label_BFC2712C: + psx_check_interrupts(cpu); + /* 0xBFC2712C: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC27130: 8C849E88 lw $a0, -24952($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24952)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27130u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC27134: 0C016A80 jal 0xB005AA00 */ + /* 0xBFC27138: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2713Cu; + psx_dispatch(cpu, 0x8005AA00u); +label_BFC2713C: + psx_check_interrupts(cpu); + /* 0xBFC2713C: 14520005 bne $v0, $s2, 0xBFC27154 */ + uint32_t psx_brA_BFC2713C = cpu->gpr[2]; uint32_t psx_brB_BFC2713C = cpu->gpr[18]; + int psx_taken_BFC2713C = (psx_brA_BFC2713C != psx_brB_BFC2713C); + /* 0xBFC27140: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2713C) goto label_BFC27154; +label_BFC27144: + psx_check_interrupts(cpu); + /* 0xBFC27144: 8FB10030 lw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27144u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC27148: 8FB3002C lw $s3, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27148u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC2714C: 10000007 beq $zero, $zero, 0xBFC2716C */ + uint32_t psx_brA_BFC2714C = cpu->gpr[0]; uint32_t psx_brB_BFC2714C = cpu->gpr[0]; + int psx_taken_BFC2714C = (psx_brA_BFC2714C == psx_brB_BFC2714C); + /* 0xBFC27150: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC2714C) goto label_BFC2716C; +label_BFC27154: + psx_check_interrupts(cpu); + /* 0xBFC27154: 1E20FFE0 bgtz $s1, 0xBFC270D8 */ + uint32_t psx_brA_BFC27154 = cpu->gpr[17]; + int psx_taken_BFC27154 = ((int32_t)psx_brA_BFC27154 > 0); + /* 0xBFC27158: 00000000 nop */ + /* nop */ + if (psx_taken_BFC27154) goto label_BFC270D8; +label_BFC2715C: + psx_check_interrupts(cpu); + /* 0xBFC2715C: 02601021 addu $v0, $s3, $zero */ + cpu->gpr[2] = cpu->gpr[19] + cpu->gpr[0]; + /* 0xBFC27160: 8FB3002C lw $s3, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27160u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC27164: 8FB10030 lw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27164u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC27168: 00000000 nop */ + /* nop */ +label_BFC2716C: + psx_check_interrupts(cpu); + /* 0xBFC2716C: 8FBF0024 lw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2716Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC27170: 8FB00018 lw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27170u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC27174: 8FB2001C lw $s2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27174u); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC27178: 8FB40020 lw $s4, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27178u); return; } cpu->gpr[20] = cpu->read_word(psx_addr); } + /* 0xBFC2717C: 03E00008 jr $ra */ + /* 0xBFC27180: 27BD0060 addiu $sp, $sp, 96 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (96)); + return; +} + void func_1FC27190(CPUState* cpu) { label_BFC27190: psx_check_interrupts(cpu); @@ -86507,6 +91011,89 @@ label_BFC27CE0: return; } +void func_1FC27D2C(CPUState* cpu) { +label_BFC27D2C: + psx_check_interrupts(cpu); + /* 0xBFC27D2C: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC27D30: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC27D34: 3C031F80 lui $v1, 0x1F80 */ + cpu->gpr[3] = 0x1F800000u; + /* 0xBFC27D38: 3C021F80 lui $v0, 0x1F80 */ + cpu->gpr[2] = 0x1F800000u; + /* 0xBFC27D3C: 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, 0xBFC27D3Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC27D40: 34421C00 ori $v0, $v0, 0x1C00 */ + cpu->gpr[2] = cpu->gpr[2] | 0x1C00u; + /* 0xBFC27D44: 34631D80 ori $v1, $v1, 0x1D80 */ + cpu->gpr[3] = cpu->gpr[3] | 0x1D80u; +label_BFC27D48: + psx_check_interrupts(cpu); + /* 0xBFC27D48: A4400000 sh $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D48u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D4C: A4400002 sh $zero, 2($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D4Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D50: A4400010 sh $zero, 16($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D50u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D54: A4400012 sh $zero, 18($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D54u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D58: A4400020 sh $zero, 32($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D58u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D5C: 24420040 addiu $v0, $v0, 64 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (64)); + /* 0xBFC27D60: A440FFE2 sh $zero, -30($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-30)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D60u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D64: A440FFF0 sh $zero, -16($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D64u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC27D68: 1443FFF7 bne $v0, $v1, 0xBFC27D48 */ + uint32_t psx_brA_BFC27D68 = cpu->gpr[2]; uint32_t psx_brB_BFC27D68 = cpu->gpr[3]; + int psx_taken_BFC27D68 = (psx_brA_BFC27D68 != psx_brB_BFC27D68); + /* 0xBFC27D6C: A440FFF2 sh $zero, -14($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D6Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + if (psx_taken_BFC27D68) goto label_BFC27D48; +label_BFC27D70: + psx_check_interrupts(cpu); + /* 0xBFC27D70: 2404007F addiu $a0, $zero, 127 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC27D74: 0C014FA4 jal 0xB0053E90 */ + /* 0xBFC27D78: 2405007F addiu $a1, $zero, 127 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + cpu->gpr[31] = 0xBFC27D7Cu; + psx_dispatch(cpu, 0x80053E90u); +label_BFC27D7C: + psx_check_interrupts(cpu); + /* 0xBFC27D7C: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC27D80: 24057FFF addiu $a1, $zero, 32767 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (32767)); + /* 0xBFC27D84: 0C014FFC jal 0xB0053FF0 */ + /* 0xBFC27D88: 24067FFF addiu $a2, $zero, 32767 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (32767)); + cpu->gpr[31] = 0xBFC27D8Cu; + psx_dispatch(cpu, 0x80053FF0u); +label_BFC27D8C: + psx_check_interrupts(cpu); + /* 0xBFC27D8C: 3C021F80 lui $v0, 0x1F80 */ + cpu->gpr[2] = 0x1F800000u; + /* 0xBFC27D90: 34421C00 ori $v0, $v0, 0x1C00 */ + cpu->gpr[2] = cpu->gpr[2] | 0x1C00u; + /* 0xBFC27D94: 3403FFFF ori $v1, $zero, 0xFFFF */ + cpu->gpr[3] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC27D98: A443018C sh $v1, 396($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (396)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D98u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC27D9C: A443018E sh $v1, 398($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (398)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27D9Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC27DA0: 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, 0xBFC27DA0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC27DA4: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC27DA8: 03E00008 jr $ra */ + /* 0xBFC27DAC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC27DB0(CPUState* cpu) { label_BFC27DB0: psx_check_interrupts(cpu); @@ -86709,7 +91296,7 @@ label_BFC27EB4: int psx_taken_BFC27ECC = (psx_brA_BFC27ECC == psx_brB_BFC27ECC); /* 0xBFC27ED0: AFA0002C sw $zero, 44($sp) */ { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27ED0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } - if (psx_taken_BFC27ECC) goto label_BFC2804C; + if (psx_taken_BFC27ECC) { cpu->pc = 0xBFC2804Cu; return; } label_BFC27ED4: psx_check_interrupts(cpu); /* 0xBFC27ED4: 00027880 sll $t7, $v0, 2 */ @@ -86726,6 +91313,118 @@ label_BFC27ED4: /* 0xBFC27EEC: 00000000 nop */ /* nop */ cpu->pc = cpu->gpr[15]; return; +} + +void func_1FC27FB0(CPUState* cpu) { +label_BFC27FB0: + psx_check_interrupts(cpu); + /* 0xBFC27FB0: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC27FB4: AFB00020 sw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FB4u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC27FB8: AFB1001C sw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FB8u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC27FBC: 27A32038 addiu $v1, $sp, 8248 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[29] + (8248)); + /* 0xBFC27FC0: 27A21038 addiu $v0, $sp, 4152 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[29] + (4152)); +label_BFC27FC4: + psx_check_interrupts(cpu); + /* 0xBFC27FC4: AC40EFF8 sw $zero, -4104($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4104)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FC4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC27FC8: 24420010 addiu $v0, $v0, 16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (16)); + /* 0xBFC27FCC: AC40EFEC sw $zero, -4116($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4116)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FCCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC27FD0: AC40EFF0 sw $zero, -4112($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4112)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FD0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC27FD4: 1443FFFB bne $v0, $v1, 0xBFC27FC4 */ + uint32_t psx_brA_BFC27FD4 = cpu->gpr[2]; uint32_t psx_brB_BFC27FD4 = cpu->gpr[3]; + int psx_taken_BFC27FD4 = (psx_brA_BFC27FD4 != psx_brB_BFC27FD4); + /* 0xBFC27FD8: AC40EFF4 sw $zero, -4108($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4108)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FD8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC27FD4) goto label_BFC27FC4; +label_BFC27FDC: + psx_check_interrupts(cpu); + /* 0xBFC27FDC: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC27FE0: 24050021 addiu $a1, $zero, 33 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (33)); + /* 0xBFC27FE4: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC27FE8: 27A6002C addiu $a2, $sp, 44 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (44)); + cpu->gpr[31] = 0xBFC27FECu; + psx_dispatch(cpu, 0x80054710u); +label_BFC27FEC: + psx_check_interrupts(cpu); + /* 0xBFC27FEC: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC27FF0: 3410E000 ori $s0, $zero, 0xE000 */ + cpu->gpr[16] = cpu->gpr[0] | 0xE000u; + /* 0xBFC27FF4: 3C110001 lui $s1, 0x1 */ + cpu->gpr[17] = 0x00010000u; +label_BFC27FF8: + psx_check_interrupts(cpu); + /* 0xBFC27FF8: AFB01030 sw $s0, 4144($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4144)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC27FF8u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC27FFC: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28000: 24050020 addiu $a1, $zero, 32 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC28004: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC28008: 27A61030 addiu $a2, $sp, 4144 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (4144)); + cpu->gpr[31] = 0xBFC2800Cu; + psx_dispatch(cpu, 0x80054710u); +label_BFC2800C: + psx_check_interrupts(cpu); + /* 0xBFC2800C: 27A40030 addiu $a0, $sp, 48 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (48)); + /* 0xBFC28010: 0C01510A jal 0xB0054428 */ + /* 0xBFC28014: 24051000 addiu $a1, $zero, 4096 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (4096)); + cpu->gpr[31] = 0xBFC28018u; + psx_dispatch(cpu, 0x80054428u); +label_BFC28018: + psx_check_interrupts(cpu); + /* 0xBFC28018: 26100200 addiu $s0, $s0, 512 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (512)); + /* 0xBFC2801C: 1611FFF6 bne $s0, $s1, 0xBFC27FF8 */ + uint32_t psx_brA_BFC2801C = cpu->gpr[16]; uint32_t psx_brB_BFC2801C = cpu->gpr[17]; + int psx_taken_BFC2801C = (psx_brA_BFC2801C != psx_brB_BFC2801C); + /* 0xBFC28020: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2801C) goto label_BFC27FF8; +label_BFC28024: + psx_check_interrupts(cpu); + /* 0xBFC28024: 0C014F6E jal 0xB0053DB8 */ + /* 0xBFC28028: 24040006 addiu $a0, $zero, 6 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (6)); + cpu->gpr[31] = 0xBFC2802Cu; + psx_dispatch(cpu, 0x80053DB8u); +label_BFC2802C: + psx_check_interrupts(cpu); + /* 0xBFC2802C: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28030: 24053FFF addiu $a1, $zero, 16383 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (16383)); + /* 0xBFC28034: 0C014FFC jal 0xB0053FF0 */ + /* 0xBFC28038: 24063FFF addiu $a2, $zero, 16383 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (16383)); + cpu->gpr[31] = 0xBFC2803Cu; + psx_dispatch(cpu, 0x80053FF0u); +label_BFC2803C: + psx_check_interrupts(cpu); + /* 0xBFC2803C: 8FB00020 lw $s0, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2803Cu); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC28040: 8FB1001C lw $s1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28040u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC28044: 10000001 beq $zero, $zero, 0xBFC2804C */ + uint32_t psx_brA_BFC28044 = cpu->gpr[0]; uint32_t psx_brB_BFC28044 = cpu->gpr[0]; + int psx_taken_BFC28044 = (psx_brA_BFC28044 == psx_brB_BFC28044); + /* 0xBFC28048: 00000000 nop */ + /* nop */ + if (psx_taken_BFC28044) goto label_BFC2804C; label_BFC2804C: psx_check_interrupts(cpu); /* 0xBFC2804C: 0C014F5E jal 0xB0053D78 */ @@ -86773,6 +91472,289 @@ label_BFC2807C: return; } +void func_1FC282E8(CPUState* cpu) { +label_BFC282E8: + psx_check_interrupts(cpu); + /* 0xBFC282E8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC282EC: 85CE9EE8 lh $t6, -24856($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24856)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC282ECu); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC282F0: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC282F4: 15C0001A bne $t6, $zero, 0xBFC28360 */ + uint32_t psx_brA_BFC282F4 = cpu->gpr[14]; uint32_t psx_brB_BFC282F4 = cpu->gpr[0]; + int psx_taken_BFC282F4 = (psx_brA_BFC282F4 != psx_brB_BFC282F4); + /* 0xBFC282F8: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC282F8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC282F4) goto label_BFC28360; +label_BFC282FC: + psx_check_interrupts(cpu); + /* 0xBFC282FC: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC28300: 84A59EE2 lh $a1, -24862($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-24862)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28300u); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC28304: 240F007F addiu $t7, $zero, 127 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC28308: 24180040 addiu $t8, $zero, 64 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC2830C: AFB80014 sw $t8, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2830Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC28310: AFAF0010 sw $t7, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28310u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC28314: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28318: 24060002 addiu $a2, $zero, 2 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC2831C: 0C014B5A jal 0xB0052D68 */ + /* 0xBFC28320: 2407001F addiu $a3, $zero, 31 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + cpu->gpr[31] = 0xBFC28324u; + psx_dispatch(cpu, 0x80052D68u); +label_BFC28324: + psx_check_interrupts(cpu); + /* 0xBFC28324: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC28328: 84A59EE2 lh $a1, -24862($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-24862)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28328u); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2832C: 2419003C addiu $t9, $zero, 60 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (60)); + /* 0xBFC28330: 24080040 addiu $t0, $zero, 64 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC28334: AFA80014 sw $t0, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28334u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC28338: AFB90010 sw $t9, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28338u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC2833C: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28340: 00003021 addu $a2, $zero, $zero */ + cpu->gpr[6] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28344: 0C014B5A jal 0xB0052D68 */ + /* 0xBFC28348: 24070024 addiu $a3, $zero, 36 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (36)); + cpu->gpr[31] = 0xBFC2834Cu; + psx_dispatch(cpu, 0x80052D68u); +label_BFC2834C: + psx_check_interrupts(cpu); + /* 0xBFC2834C: 0C014F9B jal 0xB0053E6C */ + /* 0xBFC28350: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC28354u; + psx_dispatch(cpu, 0x80053E6Cu); +label_BFC28354: + psx_check_interrupts(cpu); + /* 0xBFC28354: 24090001 addiu $t1, $zero, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC28358: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2835C: A4299EE8 sh $t1, -24856($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24856)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2835Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC28360: + psx_check_interrupts(cpu); + /* 0xBFC28360: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28360u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC28364: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC28368: 03E00008 jr $ra */ + /* 0xBFC2836C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC28370(CPUState* cpu) { +label_BFC28370: + psx_check_interrupts(cpu); + /* 0xBFC28370: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC28374: 85CE9EE8 lh $t6, -24856($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24856)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28374u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC28378: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC2837C: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC28380: 15C10017 bne $t6, $at, 0xBFC283E0 */ + uint32_t psx_brA_BFC28380 = cpu->gpr[14]; uint32_t psx_brB_BFC28380 = cpu->gpr[1]; + int psx_taken_BFC28380 = (psx_brA_BFC28380 != psx_brB_BFC28380); + /* 0xBFC28384: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28384u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC28380) goto label_BFC283E0; +label_BFC28388: + psx_check_interrupts(cpu); + /* 0xBFC28388: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC2838C: 84A59EE2 lh $a1, -24862($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-24862)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2838Cu); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC28390: 240F0040 addiu $t7, $zero, 64 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC28394: 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, 0xBFC28394u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC28398: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2839C: 24060002 addiu $a2, $zero, 2 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC283A0: 2407001F addiu $a3, $zero, 31 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC283A4: 0C014B5A jal 0xB0052D68 */ + /* 0xBFC283A8: AFA00010 sw $zero, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283A8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC283ACu; + psx_dispatch(cpu, 0x80052D68u); +label_BFC283AC: + psx_check_interrupts(cpu); + /* 0xBFC283AC: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC283B0: 84A59EE2 lh $a1, -24862($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-24862)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283B0u); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC283B4: 24180040 addiu $t8, $zero, 64 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC283B8: AFB80014 sw $t8, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283B8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC283BC: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC283C0: 00003021 addu $a2, $zero, $zero */ + cpu->gpr[6] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC283C4: 24070024 addiu $a3, $zero, 36 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (36)); + /* 0xBFC283C8: 0C014B5A jal 0xB0052D68 */ + /* 0xBFC283CC: AFA00010 sw $zero, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283CCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC283D0u; + psx_dispatch(cpu, 0x80052D68u); +label_BFC283D0: + psx_check_interrupts(cpu); + /* 0xBFC283D0: 0C014F9B jal 0xB0053E6C */ + /* 0xBFC283D4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC283D8u; + psx_dispatch(cpu, 0x80053E6Cu); +label_BFC283D8: + psx_check_interrupts(cpu); + /* 0xBFC283D8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC283DC: A4209EE8 sh $zero, -24856($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24856)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283DCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } +label_BFC283E0: + psx_check_interrupts(cpu); + /* 0xBFC283E0: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC283E0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC283E4: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC283E8: 03E00008 jr $ra */ + /* 0xBFC283EC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC283F0(CPUState* cpu) { +label_BFC283F0: + psx_check_interrupts(cpu); + /* 0xBFC283F0: 10800023 beq $a0, $zero, 0xBFC28480 */ + uint32_t psx_brA_BFC283F0 = cpu->gpr[4]; uint32_t psx_brB_BFC283F0 = cpu->gpr[0]; + int psx_taken_BFC283F0 = (psx_brA_BFC283F0 == psx_brB_BFC283F0); + /* 0xBFC283F4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC283F0) goto label_BFC28480; +label_BFC283F8: + psx_check_interrupts(cpu); + /* 0xBFC283F8: 3C038007 lui $v1, 0x8007 */ + cpu->gpr[3] = 0x80070000u; + /* 0xBFC283FC: 24634A40 addiu $v1, $v1, 19008 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (19008)); + /* 0xBFC28400: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC28404: 2404270F addiu $a0, $zero, 9999 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (9999)); + /* 0xBFC28408: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28408u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } +label_BFC2840C: + psx_check_interrupts(cpu); + /* 0xBFC2840C: 00000000 nop */ + /* nop */ + /* 0xBFC28410: 14440004 bne $v0, $a0, 0xBFC28424 */ + uint32_t psx_brA_BFC28410 = cpu->gpr[2]; uint32_t psx_brB_BFC28410 = cpu->gpr[4]; + int psx_taken_BFC28410 = (psx_brA_BFC28410 != psx_brB_BFC28410); + /* 0xBFC28414: 00027080 sll $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] << 2u; + if (psx_taken_BFC28410) goto label_BFC28424; +label_BFC28418: + psx_check_interrupts(cpu); + /* 0xBFC28418: 1000000A beq $zero, $zero, 0xBFC28444 */ + uint32_t psx_brA_BFC28418 = cpu->gpr[0]; uint32_t psx_brB_BFC28418 = cpu->gpr[0]; + int psx_taken_BFC28418 = (psx_brA_BFC28418 == psx_brB_BFC28418); + /* 0xBFC2841C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC28418) goto label_BFC28444; +label_BFC28420: + psx_check_interrupts(cpu); + /* 0xBFC28420: 00027080 sll $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] << 2u; +label_BFC28424: + psx_check_interrupts(cpu); + /* 0xBFC28424: 01C27021 addu $t6, $t6, $v0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[2]; + /* 0xBFC28428: 24010006 addiu $at, $zero, 6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (6)); + /* 0xBFC2842C: 01C1001B divu $t6, $at */ + { uint32_t psx_n = cpu->gpr[14]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC28430: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + /* 0xBFC28434: 00007812 mflo $t7 */ + cpu->gpr[15] = cpu->lo; + /* 0xBFC28438: AC6FFFF8 sw $t7, -8($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28438u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC2843C: 1000FFF3 beq $zero, $zero, 0xBFC2840C */ + uint32_t psx_brA_BFC2843C = cpu->gpr[0]; uint32_t psx_brB_BFC2843C = cpu->gpr[0]; + int psx_taken_BFC2843C = (psx_brA_BFC2843C == psx_brB_BFC2843C); + /* 0xBFC28440: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28440u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2843C) goto label_BFC2840C; +label_BFC28444: + psx_check_interrupts(cpu); + /* 0xBFC28444: 3C038007 lui $v1, 0x8007 */ + cpu->gpr[3] = 0x80070000u; + /* 0xBFC28448: 24634B88 addiu $v1, $v1, 19336 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (19336)); + /* 0xBFC2844C: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2844Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } +label_BFC28450: + psx_check_interrupts(cpu); + /* 0xBFC28450: 00000000 nop */ + /* nop */ + /* 0xBFC28454: 1044000A beq $v0, $a0, 0xBFC28480 */ + uint32_t psx_brA_BFC28454 = cpu->gpr[2]; uint32_t psx_brB_BFC28454 = cpu->gpr[4]; + int psx_taken_BFC28454 = (psx_brA_BFC28454 == psx_brB_BFC28454); + /* 0xBFC28458: 00000000 nop */ + /* nop */ + if (psx_taken_BFC28454) goto label_BFC28480; +label_BFC2845C: + psx_check_interrupts(cpu); + /* 0xBFC2845C: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC28460: 0302C021 addu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[2]; + /* 0xBFC28464: 24010006 addiu $at, $zero, 6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (6)); + /* 0xBFC28468: 0301001B divu $t8, $at */ + { uint32_t psx_n = cpu->gpr[24]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC2846C: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + /* 0xBFC28470: 0000C812 mflo $t9 */ + cpu->gpr[25] = cpu->lo; + /* 0xBFC28474: AC79FFF8 sw $t9, -8($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC28474u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC28478: 1000FFF5 beq $zero, $zero, 0xBFC28450 */ + uint32_t psx_brA_BFC28478 = cpu->gpr[0]; uint32_t psx_brB_BFC28478 = cpu->gpr[0]; + int psx_taken_BFC28478 = (psx_brA_BFC28478 == psx_brB_BFC28478); + /* 0xBFC2847C: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2847Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + if (psx_taken_BFC28478) goto label_BFC28450; +label_BFC28480: + psx_check_interrupts(cpu); + /* 0xBFC28480: 03E00008 jr $ra */ + /* 0xBFC28484: 00000000 nop */ + /* nop */ + return; +} + void func_1FC28490(CPUState* cpu) { label_BFC28490: psx_check_interrupts(cpu); @@ -88905,6 +93887,925 @@ label_BFC29194: return; } +void func_1FC291C4(CPUState* cpu) { +label_BFC291C4: + psx_check_interrupts(cpu); + /* 0xBFC291C4: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC291C8: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC291CC: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC291D0: 00051C00 sll $v1, $a1, 16 */ + cpu->gpr[3] = cpu->gpr[5] << 16u; + /* 0xBFC291D4: 00064400 sll $t0, $a2, 16 */ + cpu->gpr[8] = cpu->gpr[6] << 16u; + /* 0xBFC291D8: 00084403 sra $t0, $t0, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC291DC: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC291E0: 10800052 beq $a0, $zero, 0xBFC2932C */ + uint32_t psx_brA_BFC291E0 = cpu->gpr[4]; uint32_t psx_brB_BFC291E0 = cpu->gpr[0]; + int psx_taken_BFC291E0 = (psx_brA_BFC291E0 == psx_brB_BFC291E0); + /* 0xBFC291E4: 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, 0xBFC291E4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC291E0) goto label_BFC2932C; +label_BFC291E8: + psx_check_interrupts(cpu); + /* 0xBFC291E8: 240E1000 addiu $t6, $zero, 4096 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (4096)); + /* 0xBFC291EC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC291F0: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC291F4: AC2E3F78 sw $t6, 16248($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16248)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC291F4u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC291F8: 84848020 lh $a0, -32736($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-32736)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC291F8u); return; } cpu->gpr[4] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC291FC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC29200: 240F08D2 addiu $t7, $zero, 2258 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (2258)); + /* 0xBFC29204: AC2F3F7C sw $t7, 16252($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16252)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29204u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC29208: 04810002 bgez $a0, 0xBFC29214 */ + uint32_t psx_brA_BFC29208 = cpu->gpr[4]; + int psx_taken_BFC29208 = ((int32_t)psx_brA_BFC29208 >= 0); + /* 0xBFC2920C: 00800821 addu $at, $a0, $zero */ + cpu->gpr[1] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC29208) goto label_BFC29214; +label_BFC29210: + psx_check_interrupts(cpu); + /* 0xBFC29210: 24210003 addiu $at, $at, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (3)); +label_BFC29214: + psx_check_interrupts(cpu); + /* 0xBFC29214: 00012883 sra $a1, $at, 2 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[1] >> 2u); + /* 0xBFC29218: 04810002 bgez $a0, 0xBFC29224 */ + uint32_t psx_brA_BFC29218 = cpu->gpr[4]; + int psx_taken_BFC29218 = ((int32_t)psx_brA_BFC29218 >= 0); + /* 0xBFC2921C: 00800821 addu $at, $a0, $zero */ + cpu->gpr[1] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC29218) goto label_BFC29224; +label_BFC29220: + psx_check_interrupts(cpu); + /* 0xBFC29220: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC29224: + psx_check_interrupts(cpu); + /* 0xBFC29224: 00013103 sra $a2, $at, 4 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC29228: 00A6C021 addu $t8, $a1, $a2 */ + cpu->gpr[24] = cpu->gpr[5] + cpu->gpr[6]; + /* 0xBFC2922C: 0018C880 sll $t9, $t8, 2 */ + cpu->gpr[25] = cpu->gpr[24] << 2u; + /* 0xBFC29230: 0338C823 subu $t9, $t9, $t8 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[24]; + /* 0xBFC29234: 0019C8C0 sll $t9, $t9, 3 */ + cpu->gpr[25] = cpu->gpr[25] << 3u; + /* 0xBFC29238: 0338C821 addu $t9, $t9, $t8 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[24]; + /* 0xBFC2923C: 0019C880 sll $t9, $t9, 2 */ + cpu->gpr[25] = cpu->gpr[25] << 2u; + /* 0xBFC29240: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC29244: 10600003 beq $v1, $zero, 0xBFC29254 */ + uint32_t psx_brA_BFC29244 = cpu->gpr[3]; uint32_t psx_brB_BFC29244 = cpu->gpr[0]; + int psx_taken_BFC29244 = (psx_brA_BFC29244 == psx_brB_BFC29244); + /* 0xBFC29248: A4393F6A sh $t9, 16234($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16234)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29248u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + if (psx_taken_BFC29244) goto label_BFC29254; +label_BFC2924C: + psx_check_interrupts(cpu); + /* 0xBFC2924C: 10000002 beq $zero, $zero, 0xBFC29258 */ + uint32_t psx_brA_BFC2924C = cpu->gpr[0]; uint32_t psx_brB_BFC2924C = cpu->gpr[0]; + int psx_taken_BFC2924C = (psx_brA_BFC2924C == psx_brB_BFC2924C); + /* 0xBFC29250: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC2924C) goto label_BFC29258; +label_BFC29254: + psx_check_interrupts(cpu); + /* 0xBFC29254: 24030002 addiu $v1, $zero, 2 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); +label_BFC29258: + psx_check_interrupts(cpu); + /* 0xBFC29258: 00A64823 subu $t1, $a1, $a2 */ + cpu->gpr[9] = cpu->gpr[5] - cpu->gpr[6]; + /* 0xBFC2925C: 00095080 sll $t2, $t1, 2 */ + cpu->gpr[10] = cpu->gpr[9] << 2u; + /* 0xBFC29260: 01495023 subu $t2, $t2, $t1 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[9]; + /* 0xBFC29264: 000A50C0 sll $t2, $t2, 3 */ + cpu->gpr[10] = cpu->gpr[10] << 3u; + /* 0xBFC29268: 01495021 addu $t2, $t2, $t1 */ + cpu->gpr[10] = cpu->gpr[10] + cpu->gpr[9]; + /* 0xBFC2926C: 000A5080 sll $t2, $t2, 2 */ + cpu->gpr[10] = cpu->gpr[10] << 2u; + /* 0xBFC29270: 0143001A div $t2, $v1 */ + { int32_t psx_n = (int32_t)cpu->gpr[10]; int32_t psx_d = (int32_t)cpu->gpr[3]; 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; } } + /* 0xBFC29274: 00046023 subu $t4, $zero, $a0 */ + cpu->gpr[12] = cpu->gpr[0] - cpu->gpr[4]; + /* 0xBFC29278: 00003821 addu $a3, $zero, $zero */ + cpu->gpr[7] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2927C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC29280: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC29284: 14600002 bne $v1, $zero, 0xBFC29290 */ + uint32_t psx_brA_BFC29284 = cpu->gpr[3]; uint32_t psx_brB_BFC29284 = cpu->gpr[0]; + int psx_taken_BFC29284 = (psx_brA_BFC29284 != psx_brB_BFC29284); + /* 0xBFC29288: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29284) goto label_BFC29290; +label_BFC2928C: + psx_check_interrupts(cpu); + /* 0xBFC2928C: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC2928Cu); return; +label_BFC29290: + psx_check_interrupts(cpu); + /* 0xBFC29290: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC29294: 14610004 bne $v1, $at, 0xBFC292A8 */ + uint32_t psx_brA_BFC29294 = cpu->gpr[3]; uint32_t psx_brB_BFC29294 = cpu->gpr[1]; + int psx_taken_BFC29294 = (psx_brA_BFC29294 != psx_brB_BFC29294); + /* 0xBFC29298: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC29294) goto label_BFC292A8; +label_BFC2929C: + psx_check_interrupts(cpu); + /* 0xBFC2929C: 15410002 bne $t2, $at, 0xBFC292A8 */ + uint32_t psx_brA_BFC2929C = cpu->gpr[10]; uint32_t psx_brB_BFC2929C = cpu->gpr[1]; + int psx_taken_BFC2929C = (psx_brA_BFC2929C != psx_brB_BFC2929C); + /* 0xBFC292A0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2929C) goto label_BFC292A8; +label_BFC292A4: + psx_check_interrupts(cpu); + /* 0xBFC292A4: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC292A4u); return; +label_BFC292A8: + psx_check_interrupts(cpu); + /* 0xBFC292A8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC292AC: A42B3F6C sh $t3, 16236($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16236)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC292ACu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC292B0: 05810002 bgez $t4, 0xBFC292BC */ + uint32_t psx_brA_BFC292B0 = cpu->gpr[12]; + int psx_taken_BFC292B0 = ((int32_t)psx_brA_BFC292B0 >= 0); + /* 0xBFC292B4: 01800821 addu $at, $t4, $zero */ + cpu->gpr[1] = cpu->gpr[12] + cpu->gpr[0]; + if (psx_taken_BFC292B0) goto label_BFC292BC; +label_BFC292B8: + psx_check_interrupts(cpu); + /* 0xBFC292B8: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC292BC: + psx_check_interrupts(cpu); + /* 0xBFC292BC: 00016843 sra $t5, $at, 1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC292C0: 000D7080 sll $t6, $t5, 2 */ + cpu->gpr[14] = cpu->gpr[13] << 2u; + /* 0xBFC292C4: 01CD7023 subu $t6, $t6, $t5 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[13]; + /* 0xBFC292C8: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC292CC: 01CD7021 addu $t6, $t6, $t5 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[13]; + /* 0xBFC292D0: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC292D4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC292D8: A42E3F6E sh $t6, 16238($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16238)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC292D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC292DC: 04810002 bgez $a0, 0xBFC292E8 */ + uint32_t psx_brA_BFC292DC = cpu->gpr[4]; + int psx_taken_BFC292DC = ((int32_t)psx_brA_BFC292DC >= 0); + /* 0xBFC292E0: 00800821 addu $at, $a0, $zero */ + cpu->gpr[1] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC292DC) goto label_BFC292E8; +label_BFC292E4: + psx_check_interrupts(cpu); + /* 0xBFC292E4: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC292E8: + psx_check_interrupts(cpu); + /* 0xBFC292E8: 00017843 sra $t7, $at, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC292EC: 000FC080 sll $t8, $t7, 2 */ + cpu->gpr[24] = cpu->gpr[15] << 2u; + /* 0xBFC292F0: 030FC023 subu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[15]; + /* 0xBFC292F4: 0018C0C0 sll $t8, $t8, 3 */ + cpu->gpr[24] = cpu->gpr[24] << 3u; + /* 0xBFC292F8: 030FC021 addu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[15]; + /* 0xBFC292FC: 0018C080 sll $t8, $t8, 2 */ + cpu->gpr[24] = cpu->gpr[24] << 2u; + /* 0xBFC29300: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC29304: A4383F72 sh $t8, 16242($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16242)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29304u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC29308: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2930C: A4203F74 sh $zero, 16244($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16244)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2930Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC29310: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC29314: A4203F70 sh $zero, 16240($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16240)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29314u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC29318: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2931C: AC283F80 sw $t0, 16256($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16256)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2931Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC29320: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC29324: 1000010E beq $zero, $zero, 0xBFC29760 */ + uint32_t psx_brA_BFC29324 = cpu->gpr[0]; uint32_t psx_brB_BFC29324 = cpu->gpr[0]; + int psx_taken_BFC29324 = (psx_brA_BFC29324 == psx_brB_BFC29324); + /* 0xBFC29328: A4273F68 sh $a3, 16232($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29328u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + if (psx_taken_BFC29324) goto label_BFC29760; +label_BFC2932C: + psx_check_interrupts(cpu); + /* 0xBFC2932C: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC29330: 84E73F68 lh $a3, 16232($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29330u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29334: 00000000 nop */ + /* nop */ + /* 0xBFC29338: 28E11000 slti $at, $a3, 4096 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[7] < (4096) ? 1 : 0); + /* 0xBFC2933C: 10200004 beq $at, $zero, 0xBFC29350 */ + uint32_t psx_brA_BFC2933C = cpu->gpr[1]; uint32_t psx_brB_BFC2933C = cpu->gpr[0]; + int psx_taken_BFC2933C = (psx_brA_BFC2933C == psx_brB_BFC2933C); + /* 0xBFC29340: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2933C) goto label_BFC29350; +label_BFC29344: + psx_check_interrupts(cpu); + /* 0xBFC29344: 24E70001 addiu $a3, $a3, 1 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (1)); + /* 0xBFC29348: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC2934C: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); +label_BFC29350: + psx_check_interrupts(cpu); + /* 0xBFC29350: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC29354: 8C423F80 lw $v0, 16256($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (16256)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29354u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC29358: 00000000 nop */ + /* nop */ + /* 0xBFC2935C: 0047082A slt $at, $v0, $a3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (int32_t)cpu->gpr[7] ? 1 : 0); + /* 0xBFC29360: 1020003F beq $at, $zero, 0xBFC29460 */ + uint32_t psx_brA_BFC29360 = cpu->gpr[1]; uint32_t psx_brB_BFC29360 = cpu->gpr[0]; + int psx_taken_BFC29360 = (psx_brA_BFC29360 == psx_brB_BFC29360); + /* 0xBFC29364: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29360) goto label_BFC29460; +label_BFC29368: + psx_check_interrupts(cpu); + /* 0xBFC29368: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC2936C: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC29370: 858C3F6A lh $t4, 16234($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (16234)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29370u); return; } cpu->gpr[12] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29374: 856B3F6E lh $t3, 16238($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (16238)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29374u); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29378: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2937C: A4273F68 sh $a3, 16232($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2937Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC29380: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC29384: 016C2821 addu $a1, $t3, $t4 */ + cpu->gpr[5] = cpu->gpr[11] + cpu->gpr[12]; + /* 0xBFC29388: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC2938C: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC29390: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC29394: 85CE3F6C lh $t6, 16236($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (16236)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29394u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29398: 85AD3F70 lh $t5, 16240($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (16240)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29398u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2939C: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC293A0: 01AE3023 subu $a2, $t5, $t6 */ + cpu->gpr[6] = cpu->gpr[13] - cpu->gpr[14]; + /* 0xBFC293A4: 8F399E24 lw $t9, -25052($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC293A4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC293A8: 3C0A8014 lui $t2, 0x8014 */ + cpu->gpr[10] = 0x80140000u; + /* 0xBFC293AC: 00194880 sll $t1, $t9, 2 */ + cpu->gpr[9] = cpu->gpr[25] << 2u; + /* 0xBFC293B0: 01394821 addu $t1, $t1, $t9 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[25]; + /* 0xBFC293B4: 00094880 sll $t1, $t1, 2 */ + cpu->gpr[9] = cpu->gpr[9] << 2u; + /* 0xBFC293B8: 01394821 addu $t1, $t1, $t9 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[25]; + /* 0xBFC293BC: 00094900 sll $t1, $t1, 4 */ + cpu->gpr[9] = cpu->gpr[9] << 4u; + /* 0xBFC293C0: 254A8C9C addiu $t2, $t2, -29540 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] + (-29540)); + /* 0xBFC293C4: 012A2021 addu $a0, $t1, $t2 */ + cpu->gpr[4] = cpu->gpr[9] + cpu->gpr[10]; + /* 0xBFC293C8: 00002812 mflo $a1 */ + cpu->gpr[5] = cpu->lo; + /* 0xBFC293CC: 00000000 nop */ + /* nop */ + /* 0xBFC293D0: 00000000 nop */ + /* nop */ + /* 0xBFC293D4: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC293D8: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC293DC: 0C0120C7 jal 0xB004831C */ + /* 0xBFC293E0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC293E4u; + psx_dispatch(cpu, 0x8004831Cu); +label_BFC293E4: + psx_check_interrupts(cpu); + /* 0xBFC293E4: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC293E8: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC293EC: 854A3F6A lh $t2, 16234($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (16234)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC293ECu); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC293F0: 85293F72 lh $t1, 16242($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (16242)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC293F0u); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC293F4: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC293F8: 012A2823 subu $a1, $t1, $t2 */ + cpu->gpr[5] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC293FC: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC29400: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC29404: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC29408: 858C3F6C lh $t4, 16236($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (16236)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29408u); return; } cpu->gpr[12] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2940C: 856B3F74 lh $t3, 16244($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (16244)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2940Cu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29410: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC29414: 016C3021 addu $a2, $t3, $t4 */ + cpu->gpr[6] = cpu->gpr[11] + cpu->gpr[12]; + /* 0xBFC29418: 8DEF9E24 lw $t7, -25052($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29418u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2941C: 3C198014 lui $t9, 0x8014 */ + cpu->gpr[25] = 0x80140000u; + /* 0xBFC29420: 000FC080 sll $t8, $t7, 2 */ + cpu->gpr[24] = cpu->gpr[15] << 2u; + /* 0xBFC29424: 030FC021 addu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[15]; + /* 0xBFC29428: 0018C080 sll $t8, $t8, 2 */ + cpu->gpr[24] = cpu->gpr[24] << 2u; + /* 0xBFC2942C: 030FC021 addu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[15]; + /* 0xBFC29430: 0018C100 sll $t8, $t8, 4 */ + cpu->gpr[24] = cpu->gpr[24] << 4u; + /* 0xBFC29434: 27398CF0 addiu $t9, $t9, -29456 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (-29456)); + /* 0xBFC29438: 03192021 addu $a0, $t8, $t9 */ + cpu->gpr[4] = cpu->gpr[24] + cpu->gpr[25]; + /* 0xBFC2943C: 00002812 mflo $a1 */ + cpu->gpr[5] = cpu->lo; + /* 0xBFC29440: 00000000 nop */ + /* nop */ + /* 0xBFC29444: 00000000 nop */ + /* nop */ + /* 0xBFC29448: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC2944C: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC29450: 0C0120C7 jal 0xB004831C */ + /* 0xBFC29454: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC29458u; + psx_dispatch(cpu, 0x8004831Cu); +label_BFC29458: + psx_check_interrupts(cpu); + /* 0xBFC29458: 100000C1 beq $zero, $zero, 0xBFC29760 */ + uint32_t psx_brA_BFC29458 = cpu->gpr[0]; uint32_t psx_brB_BFC29458 = cpu->gpr[0]; + int psx_taken_BFC29458 = (psx_brA_BFC29458 == psx_brB_BFC29458); + /* 0xBFC2945C: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC29458) goto label_BFC29760; +label_BFC29460: + psx_check_interrupts(cpu); + /* 0xBFC29460: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC29464: 8F393F7C lw $t9, 16252($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (16252)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29464u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC29468: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC2946C: 03270019 multu $t9, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[25] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC29470: 8DAD9E24 lw $t5, -25052($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29470u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC29474: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC29478: 000D7080 sll $t6, $t5, 2 */ + cpu->gpr[14] = cpu->gpr[13] << 2u; + /* 0xBFC2947C: 01CD7021 addu $t6, $t6, $t5 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[13]; + /* 0xBFC29480: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC29484: 8F183F78 lw $t8, 16248($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (16248)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29484u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC29488: 3C0F8014 lui $t7, 0x8014 */ + cpu->gpr[15] = 0x80140000u; + /* 0xBFC2948C: 01CD7021 addu $t6, $t6, $t5 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[13]; + /* 0xBFC29490: 000E7100 sll $t6, $t6, 4 */ + cpu->gpr[14] = cpu->gpr[14] << 4u; + /* 0xBFC29494: 25EF8C9C addiu $t7, $t7, -29540 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-29540)); + /* 0xBFC29498: 01CF2021 addu $a0, $t6, $t7 */ + cpu->gpr[4] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC2949C: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC294A0: 00000000 nop */ + /* nop */ + /* 0xBFC294A4: 00000000 nop */ + /* nop */ + /* 0xBFC294A8: 0122001A div $t1, $v0 */ + { int32_t psx_n = (int32_t)cpu->gpr[9]; int32_t psx_d = (int32_t)cpu->gpr[2]; 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; } } + /* 0xBFC294AC: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC294B0: 030A2823 subu $a1, $t8, $t2 */ + cpu->gpr[5] = cpu->gpr[24] - cpu->gpr[10]; + /* 0xBFC294B4: 14400002 bne $v0, $zero, 0xBFC294C0 */ + uint32_t psx_brA_BFC294B4 = cpu->gpr[2]; uint32_t psx_brB_BFC294B4 = cpu->gpr[0]; + int psx_taken_BFC294B4 = (psx_brA_BFC294B4 != psx_brB_BFC294B4); + /* 0xBFC294B8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC294B4) goto label_BFC294C0; +label_BFC294BC: + psx_check_interrupts(cpu); + /* 0xBFC294BC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC294BCu); return; +label_BFC294C0: + psx_check_interrupts(cpu); + /* 0xBFC294C0: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC294C4: 14410004 bne $v0, $at, 0xBFC294D8 */ + uint32_t psx_brA_BFC294C4 = cpu->gpr[2]; uint32_t psx_brB_BFC294C4 = cpu->gpr[1]; + int psx_taken_BFC294C4 = (psx_brA_BFC294C4 != psx_brB_BFC294C4); + /* 0xBFC294C8: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC294C4) goto label_BFC294D8; +label_BFC294CC: + psx_check_interrupts(cpu); + /* 0xBFC294CC: 15210002 bne $t1, $at, 0xBFC294D8 */ + uint32_t psx_brA_BFC294CC = cpu->gpr[9]; uint32_t psx_brB_BFC294CC = cpu->gpr[1]; + int psx_taken_BFC294CC = (psx_brA_BFC294CC != psx_brB_BFC294CC); + /* 0xBFC294D0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC294CC) goto label_BFC294D8; +label_BFC294D4: + psx_check_interrupts(cpu); + /* 0xBFC294D4: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC294D4u); return; +label_BFC294D8: + psx_check_interrupts(cpu); + /* 0xBFC294D8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC294DC: 0C0120A7 jal 0xB004829C */ + /* 0xBFC294E0: A4273F68 sh $a3, 16232($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC294E0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + cpu->gpr[31] = 0xBFC294E4u; + psx_dispatch(cpu, 0x8004829Cu); +label_BFC294E4: + psx_check_interrupts(cpu); + /* 0xBFC294E4: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC294E8: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC294EC: 84E73F68 lh $a3, 16232($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC294ECu); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC294F0: 85EF3F6A lh $t7, 16234($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (16234)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC294F0u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC294F4: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC294F8: 01E70019 multu $t7, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[15] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC294FC: 8C423F80 lw $v0, 16256($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (16256)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC294FCu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC29500: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC29504: 85CE3F6E lh $t6, 16238($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (16238)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29504u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29508: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC2950C: 854A3F6C lh $t2, 16236($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (16236)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2950Cu); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29510: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC29514: 8D6B9E24 lw $t3, -25052($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29514u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC29518: 3C0D8014 lui $t5, 0x8014 */ + cpu->gpr[13] = 0x80140000u; + /* 0xBFC2951C: 000B6080 sll $t4, $t3, 2 */ + cpu->gpr[12] = cpu->gpr[11] << 2u; + /* 0xBFC29520: 018B6021 addu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[11]; + /* 0xBFC29524: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC29528: 0000C812 mflo $t9 */ + cpu->gpr[25] = cpu->lo; + /* 0xBFC2952C: 018B6021 addu $t4, $t4, $t3 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[11]; + /* 0xBFC29530: 000C6100 sll $t4, $t4, 4 */ + cpu->gpr[12] = cpu->gpr[12] << 4u; + /* 0xBFC29534: 0322001A div $t9, $v0 */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[2]; 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; } } + /* 0xBFC29538: 25AD8C9C addiu $t5, $t5, -29540 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[13] + (-29540)); + /* 0xBFC2953C: 018D2021 addu $a0, $t4, $t5 */ + cpu->gpr[4] = cpu->gpr[12] + cpu->gpr[13]; + /* 0xBFC29540: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC29544: 87183F70 lh $t8, 16240($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (16240)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29544u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29548: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC2954C: 01C92821 addu $a1, $t6, $t1 */ + cpu->gpr[5] = cpu->gpr[14] + cpu->gpr[9]; + /* 0xBFC29550: 14400002 bne $v0, $zero, 0xBFC2955C */ + uint32_t psx_brA_BFC29550 = cpu->gpr[2]; uint32_t psx_brB_BFC29550 = cpu->gpr[0]; + int psx_taken_BFC29550 = (psx_brA_BFC29550 != psx_brB_BFC29550); + /* 0xBFC29554: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29550) goto label_BFC2955C; +label_BFC29558: + psx_check_interrupts(cpu); + /* 0xBFC29558: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC29558u); return; +label_BFC2955C: + psx_check_interrupts(cpu); + /* 0xBFC2955C: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC29560: 14410004 bne $v0, $at, 0xBFC29574 */ + uint32_t psx_brA_BFC29560 = cpu->gpr[2]; uint32_t psx_brB_BFC29560 = cpu->gpr[1]; + int psx_taken_BFC29560 = (psx_brA_BFC29560 != psx_brB_BFC29560); + /* 0xBFC29564: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC29560) goto label_BFC29574; +label_BFC29568: + psx_check_interrupts(cpu); + /* 0xBFC29568: 17210002 bne $t9, $at, 0xBFC29574 */ + uint32_t psx_brA_BFC29568 = cpu->gpr[25]; uint32_t psx_brB_BFC29568 = cpu->gpr[1]; + int psx_taken_BFC29568 = (psx_brA_BFC29568 != psx_brB_BFC29568); + /* 0xBFC2956C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29568) goto label_BFC29574; +label_BFC29570: + psx_check_interrupts(cpu); + /* 0xBFC29570: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC29570u); return; +label_BFC29574: + psx_check_interrupts(cpu); + /* 0xBFC29574: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC29578: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC2957C: 00002812 mflo $a1 */ + cpu->gpr[5] = cpu->lo; + /* 0xBFC29580: 00000000 nop */ + /* nop */ + /* 0xBFC29584: 00000000 nop */ + /* nop */ + /* 0xBFC29588: 01470019 multu $t2, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2958C: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC29590: 00000000 nop */ + /* nop */ + /* 0xBFC29594: 00000000 nop */ + /* nop */ + /* 0xBFC29598: 0162001A div $t3, $v0 */ + { int32_t psx_n = (int32_t)cpu->gpr[11]; int32_t psx_d = (int32_t)cpu->gpr[2]; 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; } } + /* 0xBFC2959C: 00006012 mflo $t4 */ + cpu->gpr[12] = cpu->lo; + /* 0xBFC295A0: 030C3023 subu $a2, $t8, $t4 */ + cpu->gpr[6] = cpu->gpr[24] - cpu->gpr[12]; + /* 0xBFC295A4: 14400002 bne $v0, $zero, 0xBFC295B0 */ + uint32_t psx_brA_BFC295A4 = cpu->gpr[2]; uint32_t psx_brB_BFC295A4 = cpu->gpr[0]; + int psx_taken_BFC295A4 = (psx_brA_BFC295A4 != psx_brB_BFC295A4); + /* 0xBFC295A8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC295A4) goto label_BFC295B0; +label_BFC295AC: + psx_check_interrupts(cpu); + /* 0xBFC295AC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC295ACu); return; +label_BFC295B0: + psx_check_interrupts(cpu); + /* 0xBFC295B0: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC295B4: 14410004 bne $v0, $at, 0xBFC295C8 */ + uint32_t psx_brA_BFC295B4 = cpu->gpr[2]; uint32_t psx_brB_BFC295B4 = cpu->gpr[1]; + int psx_taken_BFC295B4 = (psx_brA_BFC295B4 != psx_brB_BFC295B4); + /* 0xBFC295B8: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC295B4) goto label_BFC295C8; +label_BFC295BC: + psx_check_interrupts(cpu); + /* 0xBFC295BC: 15610002 bne $t3, $at, 0xBFC295C8 */ + uint32_t psx_brA_BFC295BC = cpu->gpr[11]; uint32_t psx_brB_BFC295BC = cpu->gpr[1]; + int psx_taken_BFC295BC = (psx_brA_BFC295BC != psx_brB_BFC295BC); + /* 0xBFC295C0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC295BC) goto label_BFC295C8; +label_BFC295C4: + psx_check_interrupts(cpu); + /* 0xBFC295C4: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC295C4u); return; +label_BFC295C8: + psx_check_interrupts(cpu); + /* 0xBFC295C8: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC295CC: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC295D0: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC295D4: 0C0120C7 jal 0xB004831C */ + /* 0xBFC295D8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC295DCu; + psx_dispatch(cpu, 0x8004831Cu); +label_BFC295DC: + psx_check_interrupts(cpu); + /* 0xBFC295DC: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC295E0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC295E4: 84E73F68 lh $a3, 16232($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC295E4u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC295E8: 8DCE3F7C lw $t6, 16252($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (16252)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC295E8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC295EC: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC295F0: 01C70019 multu $t6, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[14] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC295F4: 8D4A3F80 lw $t2, 16256($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (16256)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC295F4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC295F8: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC295FC: 8DAD9E24 lw $t5, -25052($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC295FCu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC29600: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC29604: 000D7880 sll $t7, $t5, 2 */ + cpu->gpr[15] = cpu->gpr[13] << 2u; + /* 0xBFC29608: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2960C: 000F7880 sll $t7, $t7, 2 */ + cpu->gpr[15] = cpu->gpr[15] << 2u; + /* 0xBFC29610: 8F183F78 lw $t8, 16248($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (16248)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29610u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC29614: 3C198014 lui $t9, 0x8014 */ + cpu->gpr[25] = 0x80140000u; + /* 0xBFC29618: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2961C: 000F7900 sll $t7, $t7, 4 */ + cpu->gpr[15] = cpu->gpr[15] << 4u; + /* 0xBFC29620: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC29624: 27398CF0 addiu $t9, $t9, -29456 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (-29456)); + /* 0xBFC29628: 01F92021 addu $a0, $t7, $t9 */ + cpu->gpr[4] = cpu->gpr[15] + cpu->gpr[25]; + /* 0xBFC2962C: 012A001A div $t1, $t2 */ + { int32_t psx_n = (int32_t)cpu->gpr[9]; int32_t psx_d = (int32_t)cpu->gpr[10]; 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; } } + /* 0xBFC29630: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC29634: 030B2823 subu $a1, $t8, $t3 */ + cpu->gpr[5] = cpu->gpr[24] - cpu->gpr[11]; + /* 0xBFC29638: 15400002 bne $t2, $zero, 0xBFC29644 */ + uint32_t psx_brA_BFC29638 = cpu->gpr[10]; uint32_t psx_brB_BFC29638 = cpu->gpr[0]; + int psx_taken_BFC29638 = (psx_brA_BFC29638 != psx_brB_BFC29638); + /* 0xBFC2963C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29638) goto label_BFC29644; +label_BFC29640: + psx_check_interrupts(cpu); + /* 0xBFC29640: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC29640u); return; +label_BFC29644: + psx_check_interrupts(cpu); + /* 0xBFC29644: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC29648: 15410004 bne $t2, $at, 0xBFC2965C */ + uint32_t psx_brA_BFC29648 = cpu->gpr[10]; uint32_t psx_brB_BFC29648 = cpu->gpr[1]; + int psx_taken_BFC29648 = (psx_brA_BFC29648 != psx_brB_BFC29648); + /* 0xBFC2964C: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC29648) goto label_BFC2965C; +label_BFC29650: + psx_check_interrupts(cpu); + /* 0xBFC29650: 15210002 bne $t1, $at, 0xBFC2965C */ + uint32_t psx_brA_BFC29650 = cpu->gpr[9]; uint32_t psx_brB_BFC29650 = cpu->gpr[1]; + int psx_taken_BFC29650 = (psx_brA_BFC29650 != psx_brB_BFC29650); + /* 0xBFC29654: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29650) goto label_BFC2965C; +label_BFC29658: + psx_check_interrupts(cpu); + /* 0xBFC29658: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC29658u); return; +label_BFC2965C: + psx_check_interrupts(cpu); + /* 0xBFC2965C: 0C0120A7 jal 0xB004829C */ + /* 0xBFC29660: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC29664u; + psx_dispatch(cpu, 0x8004829Cu); +label_BFC29664: + psx_check_interrupts(cpu); + /* 0xBFC29664: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC29668: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC2966C: 84E73F68 lh $a3, 16232($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (16232)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2966Cu); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29670: 85CE3F6A lh $t6, 16234($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (16234)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29670u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29674: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC29678: 01C70019 multu $t6, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[14] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2967C: 8C423F80 lw $v0, 16256($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (16256)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2967Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC29680: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC29684: 87393F72 lh $t9, 16242($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (16242)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29684u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29688: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC2968C: 856B3F6C lh $t3, 16236($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (16236)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2968Cu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC29690: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC29694: 8D8C9E24 lw $t4, -25052($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC29694u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC29698: 3C0F8014 lui $t7, 0x8014 */ + cpu->gpr[15] = 0x80140000u; + /* 0xBFC2969C: 000C6880 sll $t5, $t4, 2 */ + cpu->gpr[13] = cpu->gpr[12] << 2u; + /* 0xBFC296A0: 01AC6821 addu $t5, $t5, $t4 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[12]; + /* 0xBFC296A4: 000D6880 sll $t5, $t5, 2 */ + cpu->gpr[13] = cpu->gpr[13] << 2u; + /* 0xBFC296A8: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC296AC: 01AC6821 addu $t5, $t5, $t4 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[12]; + /* 0xBFC296B0: 000D6900 sll $t5, $t5, 4 */ + cpu->gpr[13] = cpu->gpr[13] << 4u; + /* 0xBFC296B4: 0122001A div $t1, $v0 */ + { int32_t psx_n = (int32_t)cpu->gpr[9]; int32_t psx_d = (int32_t)cpu->gpr[2]; 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; } } + /* 0xBFC296B8: 25EF8CF0 addiu $t7, $t7, -29456 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-29456)); + /* 0xBFC296BC: 01AF2021 addu $a0, $t5, $t7 */ + cpu->gpr[4] = cpu->gpr[13] + cpu->gpr[15]; + /* 0xBFC296C0: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC296C4: 87183F74 lh $t8, 16244($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (16244)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC296C4u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC296C8: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC296CC: 032A2823 subu $a1, $t9, $t2 */ + cpu->gpr[5] = cpu->gpr[25] - cpu->gpr[10]; + /* 0xBFC296D0: 14400002 bne $v0, $zero, 0xBFC296DC */ + uint32_t psx_brA_BFC296D0 = cpu->gpr[2]; uint32_t psx_brB_BFC296D0 = cpu->gpr[0]; + int psx_taken_BFC296D0 = (psx_brA_BFC296D0 != psx_brB_BFC296D0); + /* 0xBFC296D4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC296D0) goto label_BFC296DC; +label_BFC296D8: + psx_check_interrupts(cpu); + /* 0xBFC296D8: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC296D8u); return; +label_BFC296DC: + psx_check_interrupts(cpu); + /* 0xBFC296DC: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC296E0: 14410004 bne $v0, $at, 0xBFC296F4 */ + uint32_t psx_brA_BFC296E0 = cpu->gpr[2]; uint32_t psx_brB_BFC296E0 = cpu->gpr[1]; + int psx_taken_BFC296E0 = (psx_brA_BFC296E0 != psx_brB_BFC296E0); + /* 0xBFC296E4: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC296E0) goto label_BFC296F4; +label_BFC296E8: + psx_check_interrupts(cpu); + /* 0xBFC296E8: 15210002 bne $t1, $at, 0xBFC296F4 */ + uint32_t psx_brA_BFC296E8 = cpu->gpr[9]; uint32_t psx_brB_BFC296E8 = cpu->gpr[1]; + int psx_taken_BFC296E8 = (psx_brA_BFC296E8 != psx_brB_BFC296E8); + /* 0xBFC296EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC296E8) goto label_BFC296F4; +label_BFC296F0: + psx_check_interrupts(cpu); + /* 0xBFC296F0: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC296F0u); return; +label_BFC296F4: + psx_check_interrupts(cpu); + /* 0xBFC296F4: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC296F8: 00A1001A div $a1, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[5]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC296FC: 00002812 mflo $a1 */ + cpu->gpr[5] = cpu->lo; + /* 0xBFC29700: 00000000 nop */ + /* nop */ + /* 0xBFC29704: 00000000 nop */ + /* nop */ + /* 0xBFC29708: 01670019 multu $t3, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[11] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2970C: 00006012 mflo $t4 */ + cpu->gpr[12] = cpu->lo; + /* 0xBFC29710: 00000000 nop */ + /* nop */ + /* 0xBFC29714: 00000000 nop */ + /* nop */ + /* 0xBFC29718: 0182001A div $t4, $v0 */ + { int32_t psx_n = (int32_t)cpu->gpr[12]; int32_t psx_d = (int32_t)cpu->gpr[2]; 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; } } + /* 0xBFC2971C: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC29720: 030D3021 addu $a2, $t8, $t5 */ + cpu->gpr[6] = cpu->gpr[24] + cpu->gpr[13]; + /* 0xBFC29724: 14400002 bne $v0, $zero, 0xBFC29730 */ + uint32_t psx_brA_BFC29724 = cpu->gpr[2]; uint32_t psx_brB_BFC29724 = cpu->gpr[0]; + int psx_taken_BFC29724 = (psx_brA_BFC29724 != psx_brB_BFC29724); + /* 0xBFC29728: 00000000 nop */ + /* nop */ + if (psx_taken_BFC29724) goto label_BFC29730; +label_BFC2972C: + psx_check_interrupts(cpu); + /* 0xBFC2972C: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC2972Cu); return; +label_BFC29730: + psx_check_interrupts(cpu); + /* 0xBFC29730: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC29734: 14410004 bne $v0, $at, 0xBFC29748 */ + uint32_t psx_brA_BFC29734 = cpu->gpr[2]; uint32_t psx_brB_BFC29734 = cpu->gpr[1]; + int psx_taken_BFC29734 = (psx_brA_BFC29734 != psx_brB_BFC29734); + /* 0xBFC29738: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC29734) goto label_BFC29748; +label_BFC2973C: + psx_check_interrupts(cpu); + /* 0xBFC2973C: 15810002 bne $t4, $at, 0xBFC29748 */ + uint32_t psx_brA_BFC2973C = cpu->gpr[12]; uint32_t psx_brB_BFC2973C = cpu->gpr[1]; + int psx_taken_BFC2973C = (psx_brA_BFC2973C != psx_brB_BFC2973C); + /* 0xBFC29740: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2973C) goto label_BFC29748; +label_BFC29744: + psx_check_interrupts(cpu); + /* 0xBFC29744: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC29744u); return; +label_BFC29748: + psx_check_interrupts(cpu); + /* 0xBFC29748: 24010064 addiu $at, $zero, 100 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC2974C: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC29750: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC29754: 0C0120C7 jal 0xB004831C */ + /* 0xBFC29758: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2975Cu; + psx_dispatch(cpu, 0x8004831Cu); +label_BFC2975C: + psx_check_interrupts(cpu); + /* 0xBFC2975C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC29760: + psx_check_interrupts(cpu); + /* 0xBFC29760: 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, 0xBFC29760u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC29764: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC29768: 03E00008 jr $ra */ + /* 0xBFC2976C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC29770(CPUState* cpu) { label_BFC29770: psx_check_interrupts(cpu); @@ -90898,6 +96799,1184 @@ label_BFC2A40C: return; } +void func_1FC2A4E0(CPUState* cpu) { +label_BFC2A4E0: + psx_check_interrupts(cpu); + /* 0xBFC2A4E0: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2A4E4: 342120B8 ori $at, $at, 0x20B8 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20B8u; + /* 0xBFC2A4E8: 03A1E823 subu $sp, $sp, $at */ + cpu->gpr[29] = cpu->gpr[29] - cpu->gpr[1]; + /* 0xBFC2A4EC: AFBE0050 sw $fp, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A4ECu); return; } cpu->write_word(psx_addr, cpu->gpr[30]); } + /* 0xBFC2A4F0: AFBF0054 sw $ra, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A4F0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2A4F4: AFB60048 sw $s6, 72($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (72)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A4F4u); return; } cpu->write_word(psx_addr, cpu->gpr[22]); } + /* 0xBFC2A4F8: AFB7004C sw $s7, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A4F8u); return; } cpu->write_word(psx_addr, cpu->gpr[23]); } + /* 0xBFC2A4FC: AFB40040 sw $s4, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A4FCu); return; } cpu->write_word(psx_addr, cpu->gpr[20]); } + /* 0xBFC2A500: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2A504: 003D0821 addu $at, $at, $sp */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[29]; + /* 0xBFC2A508: AFB50044 sw $s5, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A508u); return; } cpu->write_word(psx_addr, cpu->gpr[21]); } + /* 0xBFC2A50C: AFB20038 sw $s2, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A50Cu); return; } cpu->write_word(psx_addr, cpu->gpr[18]); } + /* 0xBFC2A510: AFB3003C sw $s3, 60($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A510u); return; } cpu->write_word(psx_addr, cpu->gpr[19]); } + /* 0xBFC2A514: AFB00030 sw $s0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A514u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC2A518: AFB10034 sw $s1, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A518u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC2A51C: AC2620C0 sw $a2, 8384($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (8384)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A51Cu); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC2A520: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2A524: 003D0821 addu $at, $at, $sp */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[29]; + /* 0xBFC2A528: AC2720C4 sw $a3, 8388($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (8388)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A528u); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + /* 0xBFC2A52C: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2A530: 00809821 addu $s3, $a0, $zero */ + cpu->gpr[19] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2A534: 00A0F021 addu $fp, $a1, $zero */ + cpu->gpr[30] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC2A538: 342100AC ori $at, $at, 0xAC */ + cpu->gpr[1] = cpu->gpr[1] | 0xACu; + /* 0xBFC2A53C: 0000B021 addu $s6, $zero, $zero */ + cpu->gpr[22] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2A540: 00009021 addu $s2, $zero, $zero */ + cpu->gpr[18] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2A544: 03A12021 addu $a0, $sp, $at */ + cpu->gpr[4] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2A548: 0C010C8B jal 0xB004322C */ + /* 0xBFC2A54C: 24052000 addiu $a1, $zero, 8192 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (8192)); + cpu->gpr[31] = 0xBFC2A550u; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2A550: + psx_check_interrupts(cpu); + /* 0xBFC2A550: 27A400AC addiu $a0, $sp, 172 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (172)); + /* 0xBFC2A554: 0C010C8B jal 0xB004322C */ + /* 0xBFC2A558: 3C050001 lui $a1, 0x1 */ + cpu->gpr[5] = 0x00010000u; + cpu->gpr[31] = 0xBFC2A55Cu; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2A55C: + psx_check_interrupts(cpu); + /* 0xBFC2A55C: 92640000 lbu $a0, 0($s3) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[19] + (0))); + /* 0xBFC2A560: 00000000 nop */ + /* nop */ + /* 0xBFC2A564: 10800051 beq $a0, $zero, 0xBFC2A6AC */ + uint32_t psx_brA_BFC2A564 = cpu->gpr[4]; uint32_t psx_brB_BFC2A564 = cpu->gpr[0]; + int psx_taken_BFC2A564 = (psx_brA_BFC2A564 == psx_brB_BFC2A564); + /* 0xBFC2A568: 3C140001 lui $s4, 0x1 */ + cpu->gpr[20] = 0x00010000u; + if (psx_taken_BFC2A564) goto label_BFC2A6AC; +label_BFC2A56C: + psx_check_interrupts(cpu); + /* 0xBFC2A56C: 2414000A addiu $s4, $zero, 10 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); + /* 0xBFC2A570: 34158140 ori $s5, $zero, 0x8140 */ + cpu->gpr[21] = cpu->gpr[0] | 0x8140u; + /* 0xBFC2A574: 341784BF ori $s7, $zero, 0x84BF */ + cpu->gpr[23] = cpu->gpr[0] | 0x84BFu; +label_BFC2A578: + psx_check_interrupts(cpu); + /* 0xBFC2A578: 1684000A bne $s4, $a0, 0xBFC2A5A4 */ + uint32_t psx_brA_BFC2A578 = cpu->gpr[20]; uint32_t psx_brB_BFC2A578 = cpu->gpr[4]; + int psx_taken_BFC2A578 = (psx_brA_BFC2A578 != psx_brB_BFC2A578); + /* 0xBFC2A57C: 2C810081 sltiu $at, $a0, 129 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000081u ? 1 : 0); + if (psx_taken_BFC2A578) goto label_BFC2A5A4; +label_BFC2A580: + psx_check_interrupts(cpu); + /* 0xBFC2A580: 06C10002 bgez $s6, 0xBFC2A58C */ + uint32_t psx_brA_BFC2A580 = cpu->gpr[22]; + int psx_taken_BFC2A580 = ((int32_t)psx_brA_BFC2A580 >= 0); + /* 0xBFC2A584: 02C00821 addu $at, $s6, $zero */ + cpu->gpr[1] = cpu->gpr[22] + cpu->gpr[0]; + if (psx_taken_BFC2A580) goto label_BFC2A58C; +label_BFC2A588: + psx_check_interrupts(cpu); + /* 0xBFC2A588: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2A58C: + psx_check_interrupts(cpu); + /* 0xBFC2A58C: 0001B103 sra $s6, $at, 4 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2A590: 0016B100 sll $s6, $s6, 4 */ + cpu->gpr[22] = cpu->gpr[22] << 4u; + /* 0xBFC2A594: 26D60010 addiu $s6, $s6, 16 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (16)); + /* 0xBFC2A598: 1000003D beq $zero, $zero, 0xBFC2A690 */ + uint32_t psx_brA_BFC2A598 = cpu->gpr[0]; uint32_t psx_brB_BFC2A598 = cpu->gpr[0]; + int psx_taken_BFC2A598 = (psx_brA_BFC2A598 == psx_brB_BFC2A598); + /* 0xBFC2A59C: 26730001 addiu $s3, $s3, 1 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (1)); + if (psx_taken_BFC2A598) goto label_BFC2A690; +label_BFC2A5A0: + psx_check_interrupts(cpu); + /* 0xBFC2A5A0: 2C810081 sltiu $at, $a0, 129 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000081u ? 1 : 0); +label_BFC2A5A4: + psx_check_interrupts(cpu); + /* 0xBFC2A5A4: 14200009 bne $at, $zero, 0xBFC2A5CC */ + uint32_t psx_brA_BFC2A5A4 = cpu->gpr[1]; uint32_t psx_brB_BFC2A5A4 = cpu->gpr[0]; + int psx_taken_BFC2A5A4 = (psx_brA_BFC2A5A4 != psx_brB_BFC2A5A4); + /* 0xBFC2A5A8: 2C810099 sltiu $at, $a0, 153 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000099u ? 1 : 0); + if (psx_taken_BFC2A5A4) goto label_BFC2A5CC; +label_BFC2A5AC: + psx_check_interrupts(cpu); + /* 0xBFC2A5AC: 10200007 beq $at, $zero, 0xBFC2A5CC */ + uint32_t psx_brA_BFC2A5AC = cpu->gpr[1]; uint32_t psx_brB_BFC2A5AC = cpu->gpr[0]; + int psx_taken_BFC2A5AC = (psx_brA_BFC2A5AC == psx_brB_BFC2A5AC); + /* 0xBFC2A5B0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2A5AC) goto label_BFC2A5CC; +label_BFC2A5B4: + psx_check_interrupts(cpu); + /* 0xBFC2A5B4: 926F0001 lbu $t7, 1($s3) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[19] + (1))); + /* 0xBFC2A5B8: 00047200 sll $t6, $a0, 8 */ + cpu->gpr[14] = cpu->gpr[4] << 8u; + /* 0xBFC2A5BC: 01CF2825 or $a1, $t6, $t7 */ + cpu->gpr[5] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A5C0: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC2A5C4: 10000009 beq $zero, $zero, 0xBFC2A5EC */ + uint32_t psx_brA_BFC2A5C4 = cpu->gpr[0]; uint32_t psx_brB_BFC2A5C4 = cpu->gpr[0]; + int psx_taken_BFC2A5C4 = (psx_brA_BFC2A5C4 == psx_brB_BFC2A5C4); + /* 0xBFC2A5C8: 26730002 addiu $s3, $s3, 2 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (2)); + if (psx_taken_BFC2A5C4) goto label_BFC2A5EC; +label_BFC2A5CC: + psx_check_interrupts(cpu); + /* 0xBFC2A5CC: 0C010C2A jal 0xB00430A8 */ + /* 0xBFC2A5D0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2A5D4u; + psx_dispatch(cpu, 0x800430A8u); +label_BFC2A5D4: + psx_check_interrupts(cpu); + /* 0xBFC2A5D4: 3058FFFF andi $t8, $v0, 0xFFFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2A5D8: 17000003 bne $t8, $zero, 0xBFC2A5E8 */ + uint32_t psx_brA_BFC2A5D8 = cpu->gpr[24]; uint32_t psx_brB_BFC2A5D8 = cpu->gpr[0]; + int psx_taken_BFC2A5D8 = (psx_brA_BFC2A5D8 != psx_brB_BFC2A5D8); + /* 0xBFC2A5DC: 3045FFFF andi $a1, $v0, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[2] & 0xFFFFu; + if (psx_taken_BFC2A5D8) goto label_BFC2A5E8; +label_BFC2A5E0: + psx_check_interrupts(cpu); + /* 0xBFC2A5E0: 10000185 beq $zero, $zero, 0xBFC2ABF8 */ + uint32_t psx_brA_BFC2A5E0 = cpu->gpr[0]; uint32_t psx_brB_BFC2A5E0 = cpu->gpr[0]; + int psx_taken_BFC2A5E0 = (psx_brA_BFC2A5E0 == psx_brB_BFC2A5E0); + /* 0xBFC2A5E4: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC2A5E0) goto label_BFC2ABF8; +label_BFC2A5E8: + psx_check_interrupts(cpu); + /* 0xBFC2A5E8: 26730001 addiu $s3, $s3, 1 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (1)); +label_BFC2A5EC: + psx_check_interrupts(cpu); + /* 0xBFC2A5EC: 00B5082B sltu $at, $a1, $s5 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[21] ? 1 : 0); + /* 0xBFC2A5F0: 1420000A bne $at, $zero, 0xBFC2A61C */ + uint32_t psx_brA_BFC2A5F0 = cpu->gpr[1]; uint32_t psx_brB_BFC2A5F0 = cpu->gpr[0]; + int psx_taken_BFC2A5F0 = (psx_brA_BFC2A5F0 != psx_brB_BFC2A5F0); + /* 0xBFC2A5F4: 00B7082B sltu $at, $a1, $s7 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[23] ? 1 : 0); + if (psx_taken_BFC2A5F0) goto label_BFC2A61C; +label_BFC2A5F8: + psx_check_interrupts(cpu); + /* 0xBFC2A5F8: 10200008 beq $at, $zero, 0xBFC2A61C */ + uint32_t psx_brA_BFC2A5F8 = cpu->gpr[1]; uint32_t psx_brB_BFC2A5F8 = cpu->gpr[0]; + int psx_taken_BFC2A5F8 = (psx_brA_BFC2A5F8 == psx_brB_BFC2A5F8); + /* 0xBFC2A5FC: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2A5F8) goto label_BFC2A61C; +label_BFC2A600: + psx_check_interrupts(cpu); + /* 0xBFC2A600: 342100AC ori $at, $at, 0xAC */ + cpu->gpr[1] = cpu->gpr[1] | 0xACu; + /* 0xBFC2A604: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2A608: 3C10BFC6 lui $s0, 0xBFC6 */ + cpu->gpr[16] = 0xBFC60000u; + /* 0xBFC2A60C: 0016C940 sll $t9, $s6, 5 */ + cpu->gpr[25] = cpu->gpr[22] << 5u; + /* 0xBFC2A610: 032E8821 addu $s1, $t9, $t6 */ + cpu->gpr[17] = cpu->gpr[25] + cpu->gpr[14]; + /* 0xBFC2A614: 10000014 beq $zero, $zero, 0xBFC2A668 */ + uint32_t psx_brA_BFC2A614 = cpu->gpr[0]; uint32_t psx_brB_BFC2A614 = cpu->gpr[0]; + int psx_taken_BFC2A614 = (psx_brA_BFC2A614 == psx_brB_BFC2A614); + /* 0xBFC2A618: 36106000 ori $s0, $s0, 0x6000 */ + cpu->gpr[16] = cpu->gpr[16] | 0x6000u; + if (psx_taken_BFC2A614) goto label_BFC2A668; +label_BFC2A61C: + psx_check_interrupts(cpu); + /* 0xBFC2A61C: 3401889F ori $at, $zero, 0x889F */ + cpu->gpr[1] = cpu->gpr[0] | 0x889Fu; + /* 0xBFC2A620: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2A624: 1420000B bne $at, $zero, 0xBFC2A654 */ + uint32_t psx_brA_BFC2A624 = cpu->gpr[1]; uint32_t psx_brB_BFC2A624 = cpu->gpr[0]; + int psx_taken_BFC2A624 = (psx_brA_BFC2A624 != psx_brB_BFC2A624); + /* 0xBFC2A628: 34019873 ori $at, $zero, 0x9873 */ + cpu->gpr[1] = cpu->gpr[0] | 0x9873u; + if (psx_taken_BFC2A624) goto label_BFC2A654; +label_BFC2A62C: + psx_check_interrupts(cpu); + /* 0xBFC2A62C: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2A630: 10200008 beq $at, $zero, 0xBFC2A654 */ + uint32_t psx_brA_BFC2A630 = cpu->gpr[1]; uint32_t psx_brB_BFC2A630 = cpu->gpr[0]; + int psx_taken_BFC2A630 = (psx_brA_BFC2A630 == psx_brB_BFC2A630); + /* 0xBFC2A634: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2A630) goto label_BFC2A654; +label_BFC2A638: + psx_check_interrupts(cpu); + /* 0xBFC2A638: 342100AC ori $at, $at, 0xAC */ + cpu->gpr[1] = cpu->gpr[1] | 0xACu; + /* 0xBFC2A63C: 03A1C021 addu $t8, $sp, $at */ + cpu->gpr[24] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2A640: 3C10BFC6 lui $s0, 0xBFC6 */ + cpu->gpr[16] = 0xBFC60000u; + /* 0xBFC2A644: 00167940 sll $t7, $s6, 5 */ + cpu->gpr[15] = cpu->gpr[22] << 5u; + /* 0xBFC2A648: 01F88821 addu $s1, $t7, $t8 */ + cpu->gpr[17] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC2A64C: 10000006 beq $zero, $zero, 0xBFC2A668 */ + uint32_t psx_brA_BFC2A64C = cpu->gpr[0]; uint32_t psx_brB_BFC2A64C = cpu->gpr[0]; + int psx_taken_BFC2A64C = (psx_brA_BFC2A64C == psx_brB_BFC2A64C); + /* 0xBFC2A650: 36109D68 ori $s0, $s0, 0x9D68 */ + cpu->gpr[16] = cpu->gpr[16] | 0x9D68u; + if (psx_taken_BFC2A64C) goto label_BFC2A668; +label_BFC2A654: + psx_check_interrupts(cpu); + /* 0xBFC2A654: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC2A658: 0C016A44 jal 0xB005A910 */ + /* 0xBFC2A65C: 248480A0 addiu $a0, $a0, -32608 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-32608)); + cpu->gpr[31] = 0xBFC2A660u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC2A660: + psx_check_interrupts(cpu); + /* 0xBFC2A660: 10000165 beq $zero, $zero, 0xBFC2ABF8 */ + uint32_t psx_brA_BFC2A660 = cpu->gpr[0]; uint32_t psx_brB_BFC2A660 = cpu->gpr[0]; + int psx_taken_BFC2A660 = (psx_brA_BFC2A660 == psx_brB_BFC2A660); + /* 0xBFC2A664: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC2A660) goto label_BFC2ABF8; +label_BFC2A668: + psx_check_interrupts(cpu); + /* 0xBFC2A668: 0C010B34 jal 0xB0042CD0 */ + /* 0xBFC2A66C: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC2A670u; + psx_dispatch(cpu, 0x80042CD0u); +label_BFC2A670: + psx_check_interrupts(cpu); + /* 0xBFC2A670: 0002C900 sll $t9, $v0, 4 */ + cpu->gpr[25] = cpu->gpr[2] << 4u; + /* 0xBFC2A674: 0322C823 subu $t9, $t9, $v0 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[2]; + /* 0xBFC2A678: 0019C840 sll $t9, $t9, 1 */ + cpu->gpr[25] = cpu->gpr[25] << 1u; + /* 0xBFC2A67C: 02192021 addu $a0, $s0, $t9 */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[25]; + /* 0xBFC2A680: 02202821 addu $a1, $s1, $zero */ + cpu->gpr[5] = cpu->gpr[17] + cpu->gpr[0]; + /* 0xBFC2A684: 0C010C7F jal 0xB00431FC */ + /* 0xBFC2A688: 2406001E addiu $a2, $zero, 30 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (30)); + cpu->gpr[31] = 0xBFC2A68Cu; + psx_dispatch(cpu, 0x800431FCu); +label_BFC2A68C: + psx_check_interrupts(cpu); + /* 0xBFC2A68C: 26D60001 addiu $s6, $s6, 1 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (1)); +label_BFC2A690: + psx_check_interrupts(cpu); + /* 0xBFC2A690: 92640000 lbu $a0, 0($s3) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[19] + (0))); + /* 0xBFC2A694: 00000000 nop */ + /* nop */ + /* 0xBFC2A698: 10800003 beq $a0, $zero, 0xBFC2A6A8 */ + uint32_t psx_brA_BFC2A698 = cpu->gpr[4]; uint32_t psx_brB_BFC2A698 = cpu->gpr[0]; + int psx_taken_BFC2A698 = (psx_brA_BFC2A698 == psx_brB_BFC2A698); + /* 0xBFC2A69C: 2AC10100 slti $at, $s6, 256 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[22] < (256) ? 1 : 0); + if (psx_taken_BFC2A698) goto label_BFC2A6A8; +label_BFC2A6A0: + psx_check_interrupts(cpu); + /* 0xBFC2A6A0: 1420FFB5 bne $at, $zero, 0xBFC2A578 */ + uint32_t psx_brA_BFC2A6A0 = cpu->gpr[1]; uint32_t psx_brB_BFC2A6A0 = cpu->gpr[0]; + int psx_taken_BFC2A6A0 = (psx_brA_BFC2A6A0 != psx_brB_BFC2A6A0); + /* 0xBFC2A6A4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2A6A0) goto label_BFC2A578; +label_BFC2A6A8: + psx_check_interrupts(cpu); + /* 0xBFC2A6A8: 3C140001 lui $s4, 0x1 */ + cpu->gpr[20] = 0x00010000u; +label_BFC2A6AC: + psx_check_interrupts(cpu); + /* 0xBFC2A6AC: 029DA021 addu $s4, $s4, $sp */ + cpu->gpr[20] = cpu->gpr[20] + cpu->gpr[29]; + /* 0xBFC2A6B0: 8E9420D8 lw $s4, 8408($s4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[20] + (8408)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A6B0u); return; } cpu->gpr[20] = cpu->read_word(psx_addr); } + /* 0xBFC2A6B4: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2A6B8: 0000B821 addu $s7, $zero, $zero */ + cpu->gpr[23] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2A6BC: 24150010 addiu $s5, $zero, 16 */ + cpu->gpr[21] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); +label_BFC2A6C0: + psx_check_interrupts(cpu); + /* 0xBFC2A6C0: 00008821 addu $s1, $zero, $zero */ + cpu->gpr[17] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC2A6C4: + psx_check_interrupts(cpu); + /* 0xBFC2A6C4: 00008021 addu $s0, $zero, $zero */ + cpu->gpr[16] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2A6C8: 02E0F821 addu $ra, $s7, $zero */ + cpu->gpr[31] = cpu->gpr[23] + cpu->gpr[0]; +label_BFC2A6CC: + psx_check_interrupts(cpu); + /* 0xBFC2A6CC: 03F6082A slt $at, $ra, $s6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[31] < (int32_t)cpu->gpr[22] ? 1 : 0); + /* 0xBFC2A6D0: 102000B0 beq $at, $zero, 0xBFC2A994 */ + uint32_t psx_brA_BFC2A6D0 = cpu->gpr[1]; uint32_t psx_brB_BFC2A6D0 = cpu->gpr[0]; + int psx_taken_BFC2A6D0 = (psx_brA_BFC2A6D0 == psx_brB_BFC2A6D0); + /* 0xBFC2A6D4: 03E09821 addu $s3, $ra, $zero */ + cpu->gpr[19] = cpu->gpr[31] + cpu->gpr[0]; + if (psx_taken_BFC2A6D0) goto label_BFC2A994; +label_BFC2A6D8: + psx_check_interrupts(cpu); + /* 0xBFC2A6D8: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2A6DC: 342120B8 ori $at, $at, 0x20B8 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20B8u; + /* 0xBFC2A6E0: 03A17821 addu $t7, $sp, $at */ + cpu->gpr[15] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2A6E4: 00127040 sll $t6, $s2, 1 */ + cpu->gpr[14] = cpu->gpr[18] << 1u; + /* 0xBFC2A6E8: 01CF5021 addu $t2, $t6, $t7 */ + cpu->gpr[10] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC2A6EC: 001FC140 sll $t8, $ra, 5 */ + cpu->gpr[24] = cpu->gpr[31] << 5u; + /* 0xBFC2A6F0: 0011C840 sll $t9, $s1, 1 */ + cpu->gpr[25] = cpu->gpr[17] << 1u; + /* 0xBFC2A6F4: 03197021 addu $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] + cpu->gpr[25]; + /* 0xBFC2A6F8: 12800062 beq $s4, $zero, 0xBFC2A884 */ + uint32_t psx_brA_BFC2A6F8 = cpu->gpr[20]; uint32_t psx_brB_BFC2A6F8 = cpu->gpr[0]; + int psx_taken_BFC2A6F8 = (psx_brA_BFC2A6F8 == psx_brB_BFC2A6F8); + /* 0xBFC2A6FC: 01CF6821 addu $t5, $t6, $t7 */ + cpu->gpr[13] = cpu->gpr[14] + cpu->gpr[15]; + if (psx_taken_BFC2A6F8) goto label_BFC2A884; +label_BFC2A700: + psx_check_interrupts(cpu); + /* 0xBFC2A700: 95A2DFF4 lhu $v0, -8204($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A700u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2A704: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A708: 000219C2 srl $v1, $v0, 7 */ + cpu->gpr[3] = cpu->gpr[2] >> 7u; + /* 0xBFC2A70C: 00025A02 srl $t3, $v0, 8 */ + cpu->gpr[11] = cpu->gpr[2] >> 8u; + /* 0xBFC2A710: 00022182 srl $a0, $v0, 6 */ + cpu->gpr[4] = cpu->gpr[2] >> 6u; + /* 0xBFC2A714: 30840001 andi $a0, $a0, 0x1 */ + cpu->gpr[4] = cpu->gpr[4] & 0x1u; + /* 0xBFC2A718: 316B0001 andi $t3, $t3, 0x1 */ + cpu->gpr[11] = cpu->gpr[11] & 0x1u; + /* 0xBFC2A71C: 30630001 andi $v1, $v1, 0x1 */ + cpu->gpr[3] = cpu->gpr[3] & 0x1u; + /* 0xBFC2A720: 006BC025 or $t8, $v1, $t3 */ + cpu->gpr[24] = cpu->gpr[3] | cpu->gpr[11]; + /* 0xBFC2A724: 0004C900 sll $t9, $a0, 4 */ + cpu->gpr[25] = cpu->gpr[4] << 4u; + /* 0xBFC2A728: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A72C: 00037900 sll $t7, $v1, 4 */ + cpu->gpr[15] = cpu->gpr[3] << 4u; + /* 0xBFC2A730: 00022942 srl $a1, $v0, 5 */ + cpu->gpr[5] = cpu->gpr[2] >> 5u; + /* 0xBFC2A734: 30A50001 andi $a1, $a1, 0x1 */ + cpu->gpr[5] = cpu->gpr[5] & 0x1u; + /* 0xBFC2A738: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A73C: 0005CA00 sll $t9, $a1, 8 */ + cpu->gpr[25] = cpu->gpr[5] << 8u; + /* 0xBFC2A740: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A744: 00047A00 sll $t7, $a0, 8 */ + cpu->gpr[15] = cpu->gpr[4] << 8u; + /* 0xBFC2A748: 00023102 srl $a2, $v0, 4 */ + cpu->gpr[6] = cpu->gpr[2] >> 4u; + /* 0xBFC2A74C: 30C60001 andi $a2, $a2, 0x1 */ + cpu->gpr[6] = cpu->gpr[6] & 0x1u; + /* 0xBFC2A750: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A754: 0006CB00 sll $t9, $a2, 12 */ + cpu->gpr[25] = cpu->gpr[6] << 12u; + /* 0xBFC2A758: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A75C: 00057B00 sll $t7, $a1, 12 */ + cpu->gpr[15] = cpu->gpr[5] << 12u; + /* 0xBFC2A760: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A764: 000238C2 srl $a3, $v0, 3 */ + cpu->gpr[7] = cpu->gpr[2] >> 3u; + /* 0xBFC2A768: 00024082 srl $t0, $v0, 2 */ + cpu->gpr[8] = cpu->gpr[2] >> 2u; + /* 0xBFC2A76C: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A770: 31080001 andi $t0, $t0, 0x1 */ + cpu->gpr[8] = cpu->gpr[8] & 0x1u; + /* 0xBFC2A774: 30E70001 andi $a3, $a3, 0x1 */ + cpu->gpr[7] = cpu->gpr[7] & 0x1u; + /* 0xBFC2A778: A438DFF4 sh $t8, -8204($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A778u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2A77C: 00E6C825 or $t9, $a3, $a2 */ + cpu->gpr[25] = cpu->gpr[7] | cpu->gpr[6]; + /* 0xBFC2A780: 00087100 sll $t6, $t0, 4 */ + cpu->gpr[14] = cpu->gpr[8] << 4u; + /* 0xBFC2A784: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A788: 0007C100 sll $t8, $a3, 4 */ + cpu->gpr[24] = cpu->gpr[7] << 4u; + /* 0xBFC2A78C: 00024842 srl $t1, $v0, 1 */ + cpu->gpr[9] = cpu->gpr[2] >> 1u; + /* 0xBFC2A790: 31290001 andi $t1, $t1, 0x1 */ + cpu->gpr[9] = cpu->gpr[9] & 0x1u; + /* 0xBFC2A794: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A798: 00097200 sll $t6, $t1, 8 */ + cpu->gpr[14] = cpu->gpr[9] << 8u; + /* 0xBFC2A79C: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A7A0: 0008C200 sll $t8, $t0, 8 */ + cpu->gpr[24] = cpu->gpr[8] << 8u; + /* 0xBFC2A7A4: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A7A8: 304C0001 andi $t4, $v0, 0x1 */ + cpu->gpr[12] = cpu->gpr[2] & 0x1u; + /* 0xBFC2A7AC: 000C7300 sll $t6, $t4, 12 */ + cpu->gpr[14] = cpu->gpr[12] << 12u; + /* 0xBFC2A7B0: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A7B4: 0009C300 sll $t8, $t1, 12 */ + cpu->gpr[24] = cpu->gpr[9] << 12u; + /* 0xBFC2A7B8: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A7BC: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A7C0: 00022382 srl $a0, $v0, 14 */ + cpu->gpr[4] = cpu->gpr[2] >> 14u; + /* 0xBFC2A7C4: 00021BC2 srl $v1, $v0, 15 */ + cpu->gpr[3] = cpu->gpr[2] >> 15u; + /* 0xBFC2A7C8: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A7CC: 30630001 andi $v1, $v1, 0x1 */ + cpu->gpr[3] = cpu->gpr[3] & 0x1u; + /* 0xBFC2A7D0: 30840001 andi $a0, $a0, 0x1 */ + cpu->gpr[4] = cpu->gpr[4] & 0x1u; + /* 0xBFC2A7D4: A439DFF6 sh $t9, -8202($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A7D4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2A7D8: 00047900 sll $t7, $a0, 4 */ + cpu->gpr[15] = cpu->gpr[4] << 4u; + /* 0xBFC2A7DC: 006C7025 or $t6, $v1, $t4 */ + cpu->gpr[14] = cpu->gpr[3] | cpu->gpr[12]; + /* 0xBFC2A7E0: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A7E4: 0003C900 sll $t9, $v1, 4 */ + cpu->gpr[25] = cpu->gpr[3] << 4u; + /* 0xBFC2A7E8: 00022B42 srl $a1, $v0, 13 */ + cpu->gpr[5] = cpu->gpr[2] >> 13u; + /* 0xBFC2A7EC: 30A50001 andi $a1, $a1, 0x1 */ + cpu->gpr[5] = cpu->gpr[5] & 0x1u; + /* 0xBFC2A7F0: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A7F4: 00057A00 sll $t7, $a1, 8 */ + cpu->gpr[15] = cpu->gpr[5] << 8u; + /* 0xBFC2A7F8: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A7FC: 0004CA00 sll $t9, $a0, 8 */ + cpu->gpr[25] = cpu->gpr[4] << 8u; + /* 0xBFC2A800: 00023302 srl $a2, $v0, 12 */ + cpu->gpr[6] = cpu->gpr[2] >> 12u; + /* 0xBFC2A804: 30C60001 andi $a2, $a2, 0x1 */ + cpu->gpr[6] = cpu->gpr[6] & 0x1u; + /* 0xBFC2A808: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A80C: 00067B00 sll $t7, $a2, 12 */ + cpu->gpr[15] = cpu->gpr[6] << 12u; + /* 0xBFC2A810: 01CFC025 or $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A814: 0005CB00 sll $t9, $a1, 12 */ + cpu->gpr[25] = cpu->gpr[5] << 12u; + /* 0xBFC2A818: 03197025 or $t6, $t8, $t9 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2A81C: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A820: 00024282 srl $t0, $v0, 10 */ + cpu->gpr[8] = cpu->gpr[2] >> 10u; + /* 0xBFC2A824: 00023AC2 srl $a3, $v0, 11 */ + cpu->gpr[7] = cpu->gpr[2] >> 11u; + /* 0xBFC2A828: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A82C: 30E70001 andi $a3, $a3, 0x1 */ + cpu->gpr[7] = cpu->gpr[7] & 0x1u; + /* 0xBFC2A830: 31080001 andi $t0, $t0, 0x1 */ + cpu->gpr[8] = cpu->gpr[8] & 0x1u; + /* 0xBFC2A834: A42EDFF8 sh $t6, -8200($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A834u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2A838: 0008C100 sll $t8, $t0, 4 */ + cpu->gpr[24] = cpu->gpr[8] << 4u; + /* 0xBFC2A83C: 00E67825 or $t7, $a3, $a2 */ + cpu->gpr[15] = cpu->gpr[7] | cpu->gpr[6]; + /* 0xBFC2A840: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A844: 00077100 sll $t6, $a3, 4 */ + cpu->gpr[14] = cpu->gpr[7] << 4u; + /* 0xBFC2A848: 00024A42 srl $t1, $v0, 9 */ + cpu->gpr[9] = cpu->gpr[2] >> 9u; + /* 0xBFC2A84C: 31290001 andi $t1, $t1, 0x1 */ + cpu->gpr[9] = cpu->gpr[9] & 0x1u; + /* 0xBFC2A850: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A854: 0009C200 sll $t8, $t1, 8 */ + cpu->gpr[24] = cpu->gpr[9] << 8u; + /* 0xBFC2A858: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A85C: 00087200 sll $t6, $t0, 8 */ + cpu->gpr[14] = cpu->gpr[8] << 8u; + /* 0xBFC2A860: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A864: 000BC300 sll $t8, $t3, 12 */ + cpu->gpr[24] = cpu->gpr[11] << 12u; + /* 0xBFC2A868: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A86C: 00097300 sll $t6, $t1, 12 */ + cpu->gpr[14] = cpu->gpr[9] << 12u; + /* 0xBFC2A870: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A874: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A878: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2A87C: 10000045 beq $zero, $zero, 0xBFC2A994 */ + uint32_t psx_brA_BFC2A87C = cpu->gpr[0]; uint32_t psx_brB_BFC2A87C = cpu->gpr[0]; + int psx_taken_BFC2A87C = (psx_brA_BFC2A87C == psx_brB_BFC2A87C); + /* 0xBFC2A880: A42FDFFA sh $t7, -8198($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A880u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + if (psx_taken_BFC2A87C) goto label_BFC2A994; +label_BFC2A884: + psx_check_interrupts(cpu); + /* 0xBFC2A884: 95A2DFF4 lhu $v0, -8204($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A884u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2A888: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A88C: 0002C1C2 srl $t8, $v0, 7 */ + cpu->gpr[24] = cpu->gpr[2] >> 7u; + /* 0xBFC2A890: 00027182 srl $t6, $v0, 6 */ + cpu->gpr[14] = cpu->gpr[2] >> 6u; + /* 0xBFC2A894: 31CF0001 andi $t7, $t6, 0x1 */ + cpu->gpr[15] = cpu->gpr[14] & 0x1u; + /* 0xBFC2A898: 33190001 andi $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1u; + /* 0xBFC2A89C: 000FC100 sll $t8, $t7, 4 */ + cpu->gpr[24] = cpu->gpr[15] << 4u; + /* 0xBFC2A8A0: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2A8A4: 00027942 srl $t7, $v0, 5 */ + cpu->gpr[15] = cpu->gpr[2] >> 5u; + /* 0xBFC2A8A8: 31F90001 andi $t9, $t7, 0x1 */ + cpu->gpr[25] = cpu->gpr[15] & 0x1u; + /* 0xBFC2A8AC: 0019C200 sll $t8, $t9, 8 */ + cpu->gpr[24] = cpu->gpr[25] << 8u; + /* 0xBFC2A8B0: 01D87825 or $t7, $t6, $t8 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2A8B4: 0002C902 srl $t9, $v0, 4 */ + cpu->gpr[25] = cpu->gpr[2] >> 4u; + /* 0xBFC2A8B8: 332E0001 andi $t6, $t9, 0x1 */ + cpu->gpr[14] = cpu->gpr[25] & 0x1u; + /* 0xBFC2A8BC: 000EC300 sll $t8, $t6, 12 */ + cpu->gpr[24] = cpu->gpr[14] << 12u; + /* 0xBFC2A8C0: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A8C4: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A8C8: A439DFF4 sh $t9, -8204($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A8C8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2A8CC: 0002C082 srl $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] >> 2u; + /* 0xBFC2A8D0: 000270C2 srl $t6, $v0, 3 */ + cpu->gpr[14] = cpu->gpr[2] >> 3u; + /* 0xBFC2A8D4: 31CF0001 andi $t7, $t6, 0x1 */ + cpu->gpr[15] = cpu->gpr[14] & 0x1u; + /* 0xBFC2A8D8: 33190001 andi $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1u; + /* 0xBFC2A8DC: 00197100 sll $t6, $t9, 4 */ + cpu->gpr[14] = cpu->gpr[25] << 4u; + /* 0xBFC2A8E0: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2A8E4: 0002C842 srl $t9, $v0, 1 */ + cpu->gpr[25] = cpu->gpr[2] >> 1u; + /* 0xBFC2A8E8: 332F0001 andi $t7, $t9, 0x1 */ + cpu->gpr[15] = cpu->gpr[25] & 0x1u; + /* 0xBFC2A8EC: 000F7200 sll $t6, $t7, 8 */ + cpu->gpr[14] = cpu->gpr[15] << 8u; + /* 0xBFC2A8F0: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2A8F4: 304F0001 andi $t7, $v0, 0x1 */ + cpu->gpr[15] = cpu->gpr[2] & 0x1u; + /* 0xBFC2A8F8: 000FC300 sll $t8, $t7, 12 */ + cpu->gpr[24] = cpu->gpr[15] << 12u; + /* 0xBFC2A8FC: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2A900: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A904: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A908: A42EDFF6 sh $t6, -8202($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A908u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2A90C: 0002C382 srl $t8, $v0, 14 */ + cpu->gpr[24] = cpu->gpr[2] >> 14u; + /* 0xBFC2A910: 00027BC2 srl $t7, $v0, 15 */ + cpu->gpr[15] = cpu->gpr[2] >> 15u; + /* 0xBFC2A914: 31F90001 andi $t9, $t7, 0x1 */ + cpu->gpr[25] = cpu->gpr[15] & 0x1u; + /* 0xBFC2A918: 330E0001 andi $t6, $t8, 0x1 */ + cpu->gpr[14] = cpu->gpr[24] & 0x1u; + /* 0xBFC2A91C: 000E7900 sll $t7, $t6, 4 */ + cpu->gpr[15] = cpu->gpr[14] << 4u; + /* 0xBFC2A920: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2A924: 00027342 srl $t6, $v0, 13 */ + cpu->gpr[14] = cpu->gpr[2] >> 13u; + /* 0xBFC2A928: 31D90001 andi $t9, $t6, 0x1 */ + cpu->gpr[25] = cpu->gpr[14] & 0x1u; + /* 0xBFC2A92C: 00197A00 sll $t7, $t9, 8 */ + cpu->gpr[15] = cpu->gpr[25] << 8u; + /* 0xBFC2A930: 030F7025 or $t6, $t8, $t7 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[15]; + /* 0xBFC2A934: 0002CB02 srl $t9, $v0, 12 */ + cpu->gpr[25] = cpu->gpr[2] >> 12u; + /* 0xBFC2A938: 33380001 andi $t8, $t9, 0x1 */ + cpu->gpr[24] = cpu->gpr[25] & 0x1u; + /* 0xBFC2A93C: 00187B00 sll $t7, $t8, 12 */ + cpu->gpr[15] = cpu->gpr[24] << 12u; + /* 0xBFC2A940: 01CFC825 or $t9, $t6, $t7 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2A944: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A948: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A94C: A439DFF8 sh $t9, -8200($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A94Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2A950: 00027A82 srl $t7, $v0, 10 */ + cpu->gpr[15] = cpu->gpr[2] >> 10u; + /* 0xBFC2A954: 0002C2C2 srl $t8, $v0, 11 */ + cpu->gpr[24] = cpu->gpr[2] >> 11u; + /* 0xBFC2A958: 330E0001 andi $t6, $t8, 0x1 */ + cpu->gpr[14] = cpu->gpr[24] & 0x1u; + /* 0xBFC2A95C: 31F90001 andi $t9, $t7, 0x1 */ + cpu->gpr[25] = cpu->gpr[15] & 0x1u; + /* 0xBFC2A960: 0019C100 sll $t8, $t9, 4 */ + cpu->gpr[24] = cpu->gpr[25] << 4u; + /* 0xBFC2A964: 01D87825 or $t7, $t6, $t8 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2A968: 0002CA42 srl $t9, $v0, 9 */ + cpu->gpr[25] = cpu->gpr[2] >> 9u; + /* 0xBFC2A96C: 332E0001 andi $t6, $t9, 0x1 */ + cpu->gpr[14] = cpu->gpr[25] & 0x1u; + /* 0xBFC2A970: 000EC200 sll $t8, $t6, 8 */ + cpu->gpr[24] = cpu->gpr[14] << 8u; + /* 0xBFC2A974: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2A978: 00027202 srl $t6, $v0, 8 */ + cpu->gpr[14] = cpu->gpr[2] >> 8u; + /* 0xBFC2A97C: 31CF0001 andi $t7, $t6, 0x1 */ + cpu->gpr[15] = cpu->gpr[14] & 0x1u; + /* 0xBFC2A980: 000FC300 sll $t8, $t7, 12 */ + cpu->gpr[24] = cpu->gpr[15] << 12u; + /* 0xBFC2A984: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2A988: 002A0821 addu $at, $at, $t2 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[10]; + /* 0xBFC2A98C: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2A990: A42EDFFA sh $t6, -8198($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2A990u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } +label_BFC2A994: + psx_check_interrupts(cpu); + /* 0xBFC2A994: 26100001 addiu $s0, $s0, 1 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (1)); + /* 0xBFC2A998: 27FF0001 addiu $ra, $ra, 1 */ + cpu->gpr[31] = (uint32_t)((int32_t)cpu->gpr[31] + (1)); + /* 0xBFC2A99C: 1615FF4B bne $s0, $s5, 0xBFC2A6CC */ + uint32_t psx_brA_BFC2A99C = cpu->gpr[16]; uint32_t psx_brB_BFC2A99C = cpu->gpr[21]; + int psx_taken_BFC2A99C = (psx_brA_BFC2A99C != psx_brB_BFC2A99C); + /* 0xBFC2A9A0: 26520004 addiu $s2, $s2, 4 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[18] + (4)); + if (psx_taken_BFC2A99C) goto label_BFC2A6CC; +label_BFC2A9A4: + psx_check_interrupts(cpu); + /* 0xBFC2A9A4: 26310001 addiu $s1, $s1, 1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (1)); + /* 0xBFC2A9A8: 2A210010 slti $at, $s1, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[17] < (16) ? 1 : 0); + /* 0xBFC2A9AC: 1420FF45 bne $at, $zero, 0xBFC2A6C4 */ + uint32_t psx_brA_BFC2A9AC = cpu->gpr[1]; uint32_t psx_brB_BFC2A9AC = cpu->gpr[0]; + int psx_taken_BFC2A9AC = (psx_brA_BFC2A9AC != psx_brB_BFC2A9AC); + /* 0xBFC2A9B0: 0276082A slt $at, $s3, $s6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[19] < (int32_t)cpu->gpr[22] ? 1 : 0); + if (psx_taken_BFC2A9AC) goto label_BFC2A6C4; +label_BFC2A9B4: + psx_check_interrupts(cpu); + /* 0xBFC2A9B4: 10200005 beq $at, $zero, 0xBFC2A9CC */ + uint32_t psx_brA_BFC2A9B4 = cpu->gpr[1]; uint32_t psx_brB_BFC2A9B4 = cpu->gpr[0]; + int psx_taken_BFC2A9B4 = (psx_brA_BFC2A9B4 == psx_brB_BFC2A9B4); + /* 0xBFC2A9B8: 2AC10010 slti $at, $s6, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[22] < (16) ? 1 : 0); + if (psx_taken_BFC2A9B4) goto label_BFC2A9CC; +label_BFC2A9BC: + psx_check_interrupts(cpu); + /* 0xBFC2A9BC: 26F70010 addiu $s7, $s7, 16 */ + cpu->gpr[23] = (uint32_t)((int32_t)cpu->gpr[23] + (16)); + /* 0xBFC2A9C0: 2AE10100 slti $at, $s7, 256 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[23] < (256) ? 1 : 0); + /* 0xBFC2A9C4: 1420FF3E bne $at, $zero, 0xBFC2A6C0 */ + uint32_t psx_brA_BFC2A9C4 = cpu->gpr[1]; uint32_t psx_brB_BFC2A9C4 = cpu->gpr[0]; + int psx_taken_BFC2A9C4 = (psx_brA_BFC2A9C4 != psx_brB_BFC2A9C4); + /* 0xBFC2A9C8: 2AC10010 slti $at, $s6, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[22] < (16) ? 1 : 0); + if (psx_taken_BFC2A9C4) goto label_BFC2A6C0; +label_BFC2A9CC: + psx_check_interrupts(cpu); + /* 0xBFC2A9CC: 1020000A beq $at, $zero, 0xBFC2A9F8 */ + uint32_t psx_brA_BFC2A9CC = cpu->gpr[1]; uint32_t psx_brB_BFC2A9CC = cpu->gpr[0]; + int psx_taken_BFC2A9CC = (psx_brA_BFC2A9CC == psx_brB_BFC2A9CC); + /* 0xBFC2A9D0: 26D1FFFF addiu $s1, $s6, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[22] + (-1)); + if (psx_taken_BFC2A9CC) goto label_BFC2A9F8; +label_BFC2A9D4: + psx_check_interrupts(cpu); + /* 0xBFC2A9D4: 26D1FFFF addiu $s1, $s6, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[22] + (-1)); + /* 0xBFC2A9D8: 0016A140 sll $s4, $s6, 5 */ + cpu->gpr[20] = cpu->gpr[22] << 5u; + /* 0xBFC2A9DC: 06210002 bgez $s1, 0xBFC2A9E8 */ + uint32_t psx_brA_BFC2A9DC = cpu->gpr[17]; + int psx_taken_BFC2A9DC = ((int32_t)psx_brA_BFC2A9DC >= 0); + /* 0xBFC2A9E0: 02200821 addu $at, $s1, $zero */ + cpu->gpr[1] = cpu->gpr[17] + cpu->gpr[0]; + if (psx_taken_BFC2A9DC) goto label_BFC2A9E8; +label_BFC2A9E4: + psx_check_interrupts(cpu); + /* 0xBFC2A9E4: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2A9E8: + psx_check_interrupts(cpu); + /* 0xBFC2A9E8: 00019103 sra $s2, $at, 4 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2A9EC: 10000009 beq $zero, $zero, 0xBFC2AA14 */ + uint32_t psx_brA_BFC2A9EC = cpu->gpr[0]; uint32_t psx_brB_BFC2A9EC = cpu->gpr[0]; + int psx_taken_BFC2A9EC = (psx_brA_BFC2A9EC == psx_brB_BFC2A9EC); + /* 0xBFC2A9F0: 00148080 sll $s0, $s4, 2 */ + cpu->gpr[16] = cpu->gpr[20] << 2u; + if (psx_taken_BFC2A9EC) goto label_BFC2AA14; +label_BFC2A9F4: + psx_check_interrupts(cpu); + /* 0xBFC2A9F4: 26D1FFFF addiu $s1, $s6, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[22] + (-1)); +label_BFC2A9F8: + psx_check_interrupts(cpu); + /* 0xBFC2A9F8: 06210002 bgez $s1, 0xBFC2AA04 */ + uint32_t psx_brA_BFC2A9F8 = cpu->gpr[17]; + int psx_taken_BFC2A9F8 = ((int32_t)psx_brA_BFC2A9F8 >= 0); + /* 0xBFC2A9FC: 02200821 addu $at, $s1, $zero */ + cpu->gpr[1] = cpu->gpr[17] + cpu->gpr[0]; + if (psx_taken_BFC2A9F8) goto label_BFC2AA04; +label_BFC2AA00: + psx_check_interrupts(cpu); + /* 0xBFC2AA00: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2AA04: + psx_check_interrupts(cpu); + /* 0xBFC2AA04: 00019103 sra $s2, $at, 4 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2AA08: 0012A240 sll $s4, $s2, 9 */ + cpu->gpr[20] = cpu->gpr[18] << 9u; + /* 0xBFC2AA0C: 26940200 addiu $s4, $s4, 512 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (512)); + /* 0xBFC2AA10: 00148080 sll $s0, $s4, 2 */ + cpu->gpr[16] = cpu->gpr[20] << 2u; +label_BFC2AA14: + psx_check_interrupts(cpu); + /* 0xBFC2AA14: 26050040 addiu $a1, $s0, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[16] + (64)); + /* 0xBFC2AA18: 0C010C8B jal 0xB004322C */ + /* 0xBFC2AA1C: 03C02021 addu $a0, $fp, $zero */ + cpu->gpr[4] = cpu->gpr[30] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC2AA20u; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2AA20: + psx_check_interrupts(cpu); + /* 0xBFC2AA20: 24190008 addiu $t9, $zero, 8 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (8)); + /* 0xBFC2AA24: 240F0010 addiu $t7, $zero, 16 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC2AA28: AFD90004 sw $t9, 4($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA28u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC2AA2C: 2418002C addiu $t8, $zero, 44 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (44)); + /* 0xBFC2AA30: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2AA34: AFCF0000 sw $t7, 0($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA34u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC2AA38: AFD80008 sw $t8, 8($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA38u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC2AA3C: 01DD7021 addu $t6, $t6, $sp */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[29]; + /* 0xBFC2AA40: 3C190001 lui $t9, 0x1 */ + cpu->gpr[25] = 0x00010000u; + /* 0xBFC2AA44: 8DCE20CC lw $t6, 8396($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8396)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA44u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2AA48: 033DC821 addu $t9, $t9, $sp */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[29]; + /* 0xBFC2AA4C: 8F3920C8 lw $t9, 8392($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (8392)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA4Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2AA50: 000E7C00 sll $t7, $t6, 16 */ + cpu->gpr[15] = cpu->gpr[14] << 16u; + /* 0xBFC2AA54: 01F9C025 or $t8, $t7, $t9 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[25]; + /* 0xBFC2AA58: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2AA5C: AFD8000C sw $t8, 12($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC2AA60: 35CE0010 ori $t6, $t6, 0x10 */ + cpu->gpr[14] = cpu->gpr[14] | 0x10u; + /* 0xBFC2AA64: 3C0F0001 lui $t7, 0x1 */ + cpu->gpr[15] = 0x00010000u; + /* 0xBFC2AA68: AFCE0010 sw $t6, 16($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA68u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2AA6C: 01FD7821 addu $t7, $t7, $sp */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[29]; + /* 0xBFC2AA70: 3C180001 lui $t8, 0x1 */ + cpu->gpr[24] = 0x00010000u; + /* 0xBFC2AA74: 8DEF20D0 lw $t7, 8400($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8400)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA74u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2AA78: 031DC021 addu $t8, $t8, $sp */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[29]; + /* 0xBFC2AA7C: 8F1820D4 lw $t8, 8404($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (8404)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA7Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2AA80: 000FCC00 sll $t9, $t7, 16 */ + cpu->gpr[25] = cpu->gpr[15] << 16u; + /* 0xBFC2AA84: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2AA88: AFCE0014 sw $t6, 20($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA88u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2AA8C: 260F000C addiu $t7, $s0, 12 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[16] + (12)); + /* 0xBFC2AA90: 3C190001 lui $t9, 0x1 */ + cpu->gpr[25] = 0x00010000u; + /* 0xBFC2AA94: AFCF0034 sw $t7, 52($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AA94u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC2AA98: 033DC821 addu $t9, $t9, $sp */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[29]; + /* 0xBFC2AA9C: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2AAA0: 8F3920C4 lw $t9, 8388($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (8388)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AAA0u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2AAA4: 01DD7021 addu $t6, $t6, $sp */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[29]; + /* 0xBFC2AAA8: 8DCE20C0 lw $t6, 8384($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8384)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AAA8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2AAAC: 0019C400 sll $t8, $t9, 16 */ + cpu->gpr[24] = cpu->gpr[25] << 16u; + /* 0xBFC2AAB0: 2AC10011 slti $at, $s6, 17 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[22] < (17) ? 1 : 0); + /* 0xBFC2AAB4: 030E7825 or $t7, $t8, $t6 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2AAB8: 14200003 bne $at, $zero, 0xBFC2AAC8 */ + uint32_t psx_brA_BFC2AAB8 = cpu->gpr[1]; uint32_t psx_brB_BFC2AAB8 = cpu->gpr[0]; + int psx_taken_BFC2AAB8 = (psx_brA_BFC2AAB8 != psx_brB_BFC2AAB8); + /* 0xBFC2AABC: AFCF0038 sw $t7, 56($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AABCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + if (psx_taken_BFC2AAB8) goto label_BFC2AAC8; +label_BFC2AAC0: + psx_check_interrupts(cpu); + /* 0xBFC2AAC0: 10000008 beq $zero, $zero, 0xBFC2AAE4 */ + uint32_t psx_brA_BFC2AAC0 = cpu->gpr[0]; uint32_t psx_brB_BFC2AAC0 = cpu->gpr[0]; + int psx_taken_BFC2AAC0 = (psx_brA_BFC2AAC0 == psx_brB_BFC2AAC0); + /* 0xBFC2AAC4: 24020040 addiu $v0, $zero, 64 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + if (psx_taken_BFC2AAC0) goto label_BFC2AAE4; +label_BFC2AAC8: + psx_check_interrupts(cpu); + /* 0xBFC2AAC8: 06210004 bgez $s1, 0xBFC2AADC */ + uint32_t psx_brA_BFC2AAC8 = cpu->gpr[17]; + int psx_taken_BFC2AAC8 = ((int32_t)psx_brA_BFC2AAC8 >= 0); + /* 0xBFC2AACC: 3222000F andi $v0, $s1, 0xF */ + cpu->gpr[2] = cpu->gpr[17] & 0xFu; + if (psx_taken_BFC2AAC8) goto label_BFC2AADC; +label_BFC2AAD0: + psx_check_interrupts(cpu); + /* 0xBFC2AAD0: 10400002 beq $v0, $zero, 0xBFC2AADC */ + uint32_t psx_brA_BFC2AAD0 = cpu->gpr[2]; uint32_t psx_brB_BFC2AAD0 = cpu->gpr[0]; + int psx_taken_BFC2AAD0 = (psx_brA_BFC2AAD0 == psx_brB_BFC2AAD0); + /* 0xBFC2AAD4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2AAD0) goto label_BFC2AADC; +label_BFC2AAD8: + psx_check_interrupts(cpu); + /* 0xBFC2AAD8: 2442FFF0 addiu $v0, $v0, -16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-16)); +label_BFC2AADC: + psx_check_interrupts(cpu); + /* 0xBFC2AADC: 00021080 sll $v0, $v0, 2 */ + cpu->gpr[2] = cpu->gpr[2] << 2u; + /* 0xBFC2AAE0: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); +label_BFC2AAE4: + psx_check_interrupts(cpu); + /* 0xBFC2AAE4: 0012C900 sll $t9, $s2, 4 */ + cpu->gpr[25] = cpu->gpr[18] << 4u; + /* 0xBFC2AAE8: 27380010 addiu $t8, $t9, 16 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[25] + (16)); + /* 0xBFC2AAEC: 00187400 sll $t6, $t8, 16 */ + cpu->gpr[14] = cpu->gpr[24] << 16u; + /* 0xBFC2AAF0: 01C27825 or $t7, $t6, $v0 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[2]; + /* 0xBFC2AAF4: 2AC10010 slti $at, $s6, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[22] < (16) ? 1 : 0); + /* 0xBFC2AAF8: 10200025 beq $at, $zero, 0xBFC2AB90 */ + uint32_t psx_brA_BFC2AAF8 = cpu->gpr[1]; uint32_t psx_brB_BFC2AAF8 = cpu->gpr[0]; + int psx_taken_BFC2AAF8 = (psx_brA_BFC2AAF8 == psx_brB_BFC2AAF8); + /* 0xBFC2AAFC: AFCF003C sw $t7, 60($fp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[30] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AAFCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + if (psx_taken_BFC2AAF8) goto label_BFC2AB90; +label_BFC2AB00: + psx_check_interrupts(cpu); + /* 0xBFC2AB00: 00008821 addu $s1, $zero, $zero */ + cpu->gpr[17] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2AB04: 00009821 addu $s3, $zero, $zero */ + cpu->gpr[19] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2AB08: 1A80003A blez $s4, 0xBFC2ABF4 */ + uint32_t psx_brA_BFC2AB08 = cpu->gpr[20]; + int psx_taken_BFC2AB08 = ((int32_t)psx_brA_BFC2AB08 <= 0); + /* 0xBFC2AB0C: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2AB08) goto label_BFC2ABF4; +label_BFC2AB10: + psx_check_interrupts(cpu); + /* 0xBFC2AB10: 00162080 sll $a0, $s6, 2 */ + cpu->gpr[4] = cpu->gpr[22] << 2u; + /* 0xBFC2AB14: 03C01021 addu $v0, $fp, $zero */ + cpu->gpr[2] = cpu->gpr[30] + cpu->gpr[0]; +label_BFC2AB18: + psx_check_interrupts(cpu); + /* 0xBFC2AB18: 06610004 bgez $s3, 0xBFC2AB2C */ + uint32_t psx_brA_BFC2AB18 = cpu->gpr[19]; + int psx_taken_BFC2AB18 = ((int32_t)psx_brA_BFC2AB18 >= 0); + /* 0xBFC2AB1C: 3279003F andi $t9, $s3, 0x3F */ + cpu->gpr[25] = cpu->gpr[19] & 0x3Fu; + if (psx_taken_BFC2AB18) goto label_BFC2AB2C; +label_BFC2AB20: + psx_check_interrupts(cpu); + /* 0xBFC2AB20: 13200002 beq $t9, $zero, 0xBFC2AB2C */ + uint32_t psx_brA_BFC2AB20 = cpu->gpr[25]; uint32_t psx_brB_BFC2AB20 = cpu->gpr[0]; + int psx_taken_BFC2AB20 = (psx_brA_BFC2AB20 == psx_brB_BFC2AB20); + /* 0xBFC2AB24: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2AB20) goto label_BFC2AB2C; +label_BFC2AB28: + psx_check_interrupts(cpu); + /* 0xBFC2AB28: 2739FFC0 addiu $t9, $t9, -64 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (-64)); +label_BFC2AB2C: + psx_check_interrupts(cpu); + /* 0xBFC2AB2C: 0324082A slt $at, $t9, $a0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[25] < (int32_t)cpu->gpr[4] ? 1 : 0); + /* 0xBFC2AB30: 14200004 bne $at, $zero, 0xBFC2AB44 */ + uint32_t psx_brA_BFC2AB30 = cpu->gpr[1]; uint32_t psx_brB_BFC2AB30 = cpu->gpr[0]; + int psx_taken_BFC2AB30 = (psx_brA_BFC2AB30 != psx_brB_BFC2AB30); + /* 0xBFC2AB34: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2AB30) goto label_BFC2AB44; +label_BFC2AB38: + psx_check_interrupts(cpu); + /* 0xBFC2AB38: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC2AB3C: 00059980 sll $s3, $a1, 6 */ + cpu->gpr[19] = cpu->gpr[5] << 6u; + /* 0xBFC2AB40: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; +label_BFC2AB44: + psx_check_interrupts(cpu); + /* 0xBFC2AB44: 342120B8 ori $at, $at, 0x20B8 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20B8u; + /* 0xBFC2AB48: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2AB4C: 0013C040 sll $t8, $s3, 1 */ + cpu->gpr[24] = cpu->gpr[19] << 1u; + /* 0xBFC2AB50: 030E1821 addu $v1, $t8, $t6 */ + cpu->gpr[3] = cpu->gpr[24] + cpu->gpr[14]; + /* 0xBFC2AB54: 3C19FFFF lui $t9, 0xFFFF */ + cpu->gpr[25] = 0xFFFF0000u; + /* 0xBFC2AB58: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2AB5C: 3C0FFFFF lui $t7, 0xFFFF */ + cpu->gpr[15] = 0xFFFF0000u; + /* 0xBFC2AB60: 9739DFF6 lhu $t9, -8202($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AB60u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2AB64: 01E37821 addu $t7, $t7, $v1 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[3]; + /* 0xBFC2AB68: 95EFDFF4 lhu $t7, -8204($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AB68u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2AB6C: 0019C400 sll $t8, $t9, 16 */ + cpu->gpr[24] = cpu->gpr[25] << 16u; + /* 0xBFC2AB70: 26310001 addiu $s1, $s1, 1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (1)); + /* 0xBFC2AB74: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2AB78: AC4E0040 sw $t6, 64($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AB78u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2AB7C: 26730002 addiu $s3, $s3, 2 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (2)); + /* 0xBFC2AB80: 1634FFE5 bne $s1, $s4, 0xBFC2AB18 */ + uint32_t psx_brA_BFC2AB80 = cpu->gpr[17]; uint32_t psx_brB_BFC2AB80 = cpu->gpr[20]; + int psx_taken_BFC2AB80 = (psx_brA_BFC2AB80 != psx_brB_BFC2AB80); + /* 0xBFC2AB84: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + if (psx_taken_BFC2AB80) goto label_BFC2AB18; +label_BFC2AB88: + psx_check_interrupts(cpu); + /* 0xBFC2AB88: 1000001B beq $zero, $zero, 0xBFC2ABF8 */ + uint32_t psx_brA_BFC2AB88 = cpu->gpr[0]; uint32_t psx_brB_BFC2AB88 = cpu->gpr[0]; + int psx_taken_BFC2AB88 = (psx_brA_BFC2AB88 == psx_brB_BFC2AB88); + /* 0xBFC2AB8C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2AB88) goto label_BFC2ABF8; +label_BFC2AB90: + psx_check_interrupts(cpu); + /* 0xBFC2AB90: 00141040 sll $v0, $s4, 1 */ + cpu->gpr[2] = cpu->gpr[20] << 1u; + /* 0xBFC2AB94: 18400017 blez $v0, 0xBFC2ABF4 */ + uint32_t psx_brA_BFC2AB94 = cpu->gpr[2]; + int psx_taken_BFC2AB94 = ((int32_t)psx_brA_BFC2AB94 <= 0); + /* 0xBFC2AB98: 00008821 addu $s1, $zero, $zero */ + cpu->gpr[17] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2AB94) goto label_BFC2ABF4; +label_BFC2AB9C: + psx_check_interrupts(cpu); + /* 0xBFC2AB9C: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2ABA0: 342120B8 ori $at, $at, 0x20B8 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20B8u; + /* 0xBFC2ABA4: 03A11821 addu $v1, $sp, $at */ + cpu->gpr[3] = cpu->gpr[29] + cpu->gpr[1]; +label_BFC2ABA8: + psx_check_interrupts(cpu); + /* 0xBFC2ABA8: 3C0FFFFF lui $t7, 0xFFFF */ + cpu->gpr[15] = 0xFFFF0000u; + /* 0xBFC2ABAC: 01E37821 addu $t7, $t7, $v1 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[3]; + /* 0xBFC2ABB0: 95EFDFF6 lhu $t7, -8202($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ABB0u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2ABB4: 3C19FFFF lui $t9, 0xFFFF */ + cpu->gpr[25] = 0xFFFF0000u; + /* 0xBFC2ABB8: 000FC400 sll $t8, $t7, 16 */ + cpu->gpr[24] = cpu->gpr[15] << 16u; + /* 0xBFC2ABBC: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2ABC0: 9739DFF4 lhu $t9, -8204($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ABC0u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2ABC4: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC2ABC8: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2ABCC: 06210002 bgez $s1, 0xBFC2ABD8 */ + uint32_t psx_brA_BFC2ABCC = cpu->gpr[17]; + int psx_taken_BFC2ABCC = ((int32_t)psx_brA_BFC2ABCC >= 0); + /* 0xBFC2ABD0: 02200821 addu $at, $s1, $zero */ + cpu->gpr[1] = cpu->gpr[17] + cpu->gpr[0]; + if (psx_taken_BFC2ABCC) goto label_BFC2ABD8; +label_BFC2ABD4: + psx_check_interrupts(cpu); + /* 0xBFC2ABD4: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2ABD8: + psx_check_interrupts(cpu); + /* 0xBFC2ABD8: 00017843 sra $t7, $at, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2ABDC: 000FC880 sll $t9, $t7, 2 */ + cpu->gpr[25] = cpu->gpr[15] << 2u; + /* 0xBFC2ABE0: 26310002 addiu $s1, $s1, 2 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (2)); + /* 0xBFC2ABE4: 03D9C021 addu $t8, $fp, $t9 */ + cpu->gpr[24] = cpu->gpr[30] + cpu->gpr[25]; + /* 0xBFC2ABE8: 0222082A slt $at, $s1, $v0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[17] < (int32_t)cpu->gpr[2] ? 1 : 0); + /* 0xBFC2ABEC: 1420FFEE bne $at, $zero, 0xBFC2ABA8 */ + uint32_t psx_brA_BFC2ABEC = cpu->gpr[1]; uint32_t psx_brB_BFC2ABEC = cpu->gpr[0]; + int psx_taken_BFC2ABEC = (psx_brA_BFC2ABEC != psx_brB_BFC2ABEC); + /* 0xBFC2ABF0: AF0E0040 sw $t6, 64($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ABF0u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC2ABEC) goto label_BFC2ABA8; +label_BFC2ABF4: + psx_check_interrupts(cpu); + /* 0xBFC2ABF4: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC2ABF8: + psx_check_interrupts(cpu); + /* 0xBFC2ABF8: 8FBF0054 lw $ra, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ABF8u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2ABFC: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2AC00: 342120B8 ori $at, $at, 0x20B8 */ + cpu->gpr[1] = cpu->gpr[1] | 0x20B8u; + /* 0xBFC2AC04: 8FB00030 lw $s0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC04u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC2AC08: 8FB10034 lw $s1, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC08u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC2AC0C: 8FB20038 lw $s2, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC0Cu); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC2AC10: 8FB3003C lw $s3, 60($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC10u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC2AC14: 8FB40040 lw $s4, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC14u); return; } cpu->gpr[20] = cpu->read_word(psx_addr); } + /* 0xBFC2AC18: 8FB50044 lw $s5, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC18u); return; } cpu->gpr[21] = cpu->read_word(psx_addr); } + /* 0xBFC2AC1C: 8FB60048 lw $s6, 72($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (72)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC1Cu); return; } cpu->gpr[22] = cpu->read_word(psx_addr); } + /* 0xBFC2AC20: 8FB7004C lw $s7, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC20u); return; } cpu->gpr[23] = cpu->read_word(psx_addr); } + /* 0xBFC2AC24: 8FBE0050 lw $fp, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2AC24u); return; } cpu->gpr[30] = cpu->read_word(psx_addr); } + /* 0xBFC2AC28: 03E00008 jr $ra */ + /* 0xBFC2AC2C: 03A1E821 addu $sp, $sp, $at */ + cpu->gpr[29] = cpu->gpr[29] + cpu->gpr[1]; + return; +} + void func_1FC2ACD0(CPUState* cpu) { label_BFC2ACD0: psx_check_interrupts(cpu); @@ -91020,6 +98099,2304 @@ label_BFC2B098: return; } +void func_1FC2B0A8(CPUState* cpu) { +label_BFC2B0A8: + psx_check_interrupts(cpu); + /* 0xBFC2B0A8: 308500FF andi $a1, $a0, 0xFF */ + cpu->gpr[5] = cpu->gpr[4] & 0xFFu; + /* 0xBFC2B0AC: 27BDFFD8 addiu $sp, $sp, -40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-40)); + /* 0xBFC2B0B0: 2CA10020 sltiu $at, $a1, 32 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000020u ? 1 : 0); + /* 0xBFC2B0B4: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B0B4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2B0B8: 14200006 bne $at, $zero, 0xBFC2B0D4 */ + uint32_t psx_brA_BFC2B0B8 = cpu->gpr[1]; uint32_t psx_brB_BFC2B0B8 = cpu->gpr[0]; + int psx_taken_BFC2B0B8 = (psx_brA_BFC2B0B8 != psx_brB_BFC2B0B8); + /* 0xBFC2B0BC: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2B0B8) goto label_BFC2B0D4; +label_BFC2B0C0: + psx_check_interrupts(cpu); + /* 0xBFC2B0C0: 2CA10030 sltiu $at, $a1, 48 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000030u ? 1 : 0); + /* 0xBFC2B0C4: 10200004 beq $at, $zero, 0xBFC2B0D8 */ + uint32_t psx_brA_BFC2B0C4 = cpu->gpr[1]; uint32_t psx_brB_BFC2B0C4 = cpu->gpr[0]; + int psx_taken_BFC2B0C4 = (psx_brA_BFC2B0C4 == psx_brB_BFC2B0C4); + /* 0xBFC2B0C8: 2CA10030 sltiu $at, $a1, 48 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000030u ? 1 : 0); + if (psx_taken_BFC2B0C4) goto label_BFC2B0D8; +label_BFC2B0CC: + psx_check_interrupts(cpu); + /* 0xBFC2B0CC: 10000032 beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B0CC = cpu->gpr[0]; uint32_t psx_brB_BFC2B0CC = cpu->gpr[0]; + int psx_taken_BFC2B0CC = (psx_brA_BFC2B0CC == psx_brB_BFC2B0CC); + /* 0xBFC2B0D0: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC2B0CC) goto label_BFC2B198; +label_BFC2B0D4: + psx_check_interrupts(cpu); + /* 0xBFC2B0D4: 2CA10030 sltiu $at, $a1, 48 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000030u ? 1 : 0); +label_BFC2B0D8: + psx_check_interrupts(cpu); + /* 0xBFC2B0D8: 14200005 bne $at, $zero, 0xBFC2B0F0 */ + uint32_t psx_brA_BFC2B0D8 = cpu->gpr[1]; uint32_t psx_brB_BFC2B0D8 = cpu->gpr[0]; + int psx_taken_BFC2B0D8 = (psx_brA_BFC2B0D8 != psx_brB_BFC2B0D8); + /* 0xBFC2B0DC: 2CA1003A sltiu $at, $a1, 58 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000003Au ? 1 : 0); + if (psx_taken_BFC2B0D8) goto label_BFC2B0F0; +label_BFC2B0E0: + psx_check_interrupts(cpu); + /* 0xBFC2B0E0: 10200004 beq $at, $zero, 0xBFC2B0F4 */ + uint32_t psx_brA_BFC2B0E0 = cpu->gpr[1]; uint32_t psx_brB_BFC2B0E0 = cpu->gpr[0]; + int psx_taken_BFC2B0E0 = (psx_brA_BFC2B0E0 == psx_brB_BFC2B0E0); + /* 0xBFC2B0E4: 2CA1003A sltiu $at, $a1, 58 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000003Au ? 1 : 0); + if (psx_taken_BFC2B0E0) goto label_BFC2B0F4; +label_BFC2B0E8: + psx_check_interrupts(cpu); + /* 0xBFC2B0E8: 1000002B beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B0E8 = cpu->gpr[0]; uint32_t psx_brB_BFC2B0E8 = cpu->gpr[0]; + int psx_taken_BFC2B0E8 = (psx_brA_BFC2B0E8 == psx_brB_BFC2B0E8); + /* 0xBFC2B0EC: A3A00020 sb $zero, 32($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (32)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + if (psx_taken_BFC2B0E8) goto label_BFC2B198; +label_BFC2B0F0: + psx_check_interrupts(cpu); + /* 0xBFC2B0F0: 2CA1003A sltiu $at, $a1, 58 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000003Au ? 1 : 0); +label_BFC2B0F4: + psx_check_interrupts(cpu); + /* 0xBFC2B0F4: 14200005 bne $at, $zero, 0xBFC2B10C */ + uint32_t psx_brA_BFC2B0F4 = cpu->gpr[1]; uint32_t psx_brB_BFC2B0F4 = cpu->gpr[0]; + int psx_taken_BFC2B0F4 = (psx_brA_BFC2B0F4 != psx_brB_BFC2B0F4); + /* 0xBFC2B0F8: 2CA10041 sltiu $at, $a1, 65 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000041u ? 1 : 0); + if (psx_taken_BFC2B0F4) goto label_BFC2B10C; +label_BFC2B0FC: + psx_check_interrupts(cpu); + /* 0xBFC2B0FC: 10200004 beq $at, $zero, 0xBFC2B110 */ + uint32_t psx_brA_BFC2B0FC = cpu->gpr[1]; uint32_t psx_brB_BFC2B0FC = cpu->gpr[0]; + int psx_taken_BFC2B0FC = (psx_brA_BFC2B0FC == psx_brB_BFC2B0FC); + /* 0xBFC2B100: 2CA10041 sltiu $at, $a1, 65 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000041u ? 1 : 0); + if (psx_taken_BFC2B0FC) goto label_BFC2B110; +label_BFC2B104: + psx_check_interrupts(cpu); + /* 0xBFC2B104: 10000024 beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B104 = cpu->gpr[0]; uint32_t psx_brB_BFC2B104 = cpu->gpr[0]; + int psx_taken_BFC2B104 = (psx_brA_BFC2B104 == psx_brB_BFC2B104); + /* 0xBFC2B108: 2402000B addiu $v0, $zero, 11 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (11)); + if (psx_taken_BFC2B104) goto label_BFC2B198; +label_BFC2B10C: + psx_check_interrupts(cpu); + /* 0xBFC2B10C: 2CA10041 sltiu $at, $a1, 65 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000041u ? 1 : 0); +label_BFC2B110: + psx_check_interrupts(cpu); + /* 0xBFC2B110: 14200006 bne $at, $zero, 0xBFC2B12C */ + uint32_t psx_brA_BFC2B110 = cpu->gpr[1]; uint32_t psx_brB_BFC2B110 = cpu->gpr[0]; + int psx_taken_BFC2B110 = (psx_brA_BFC2B110 != psx_brB_BFC2B110); + /* 0xBFC2B114: 2CA1005B sltiu $at, $a1, 91 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000005Bu ? 1 : 0); + if (psx_taken_BFC2B110) goto label_BFC2B12C; +label_BFC2B118: + psx_check_interrupts(cpu); + /* 0xBFC2B118: 10200005 beq $at, $zero, 0xBFC2B130 */ + uint32_t psx_brA_BFC2B118 = cpu->gpr[1]; uint32_t psx_brB_BFC2B118 = cpu->gpr[0]; + int psx_taken_BFC2B118 = (psx_brA_BFC2B118 == psx_brB_BFC2B118); + /* 0xBFC2B11C: 2CA1005B sltiu $at, $a1, 91 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000005Bu ? 1 : 0); + if (psx_taken_BFC2B118) goto label_BFC2B130; +label_BFC2B120: + psx_check_interrupts(cpu); + /* 0xBFC2B120: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC2B124: 1000001C beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B124 = cpu->gpr[0]; uint32_t psx_brB_BFC2B124 = cpu->gpr[0]; + int psx_taken_BFC2B124 = (psx_brA_BFC2B124 == psx_brB_BFC2B124); + /* 0xBFC2B128: A3AE0020 sb $t6, 32($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (32)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + if (psx_taken_BFC2B124) goto label_BFC2B198; +label_BFC2B12C: + psx_check_interrupts(cpu); + /* 0xBFC2B12C: 2CA1005B sltiu $at, $a1, 91 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000005Bu ? 1 : 0); +label_BFC2B130: + psx_check_interrupts(cpu); + /* 0xBFC2B130: 14200005 bne $at, $zero, 0xBFC2B148 */ + uint32_t psx_brA_BFC2B130 = cpu->gpr[1]; uint32_t psx_brB_BFC2B130 = cpu->gpr[0]; + int psx_taken_BFC2B130 = (psx_brA_BFC2B130 != psx_brB_BFC2B130); + /* 0xBFC2B134: 2CA10061 sltiu $at, $a1, 97 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000061u ? 1 : 0); + if (psx_taken_BFC2B130) goto label_BFC2B148; +label_BFC2B138: + psx_check_interrupts(cpu); + /* 0xBFC2B138: 10200004 beq $at, $zero, 0xBFC2B14C */ + uint32_t psx_brA_BFC2B138 = cpu->gpr[1]; uint32_t psx_brB_BFC2B138 = cpu->gpr[0]; + int psx_taken_BFC2B138 = (psx_brA_BFC2B138 == psx_brB_BFC2B138); + /* 0xBFC2B13C: 2CA10061 sltiu $at, $a1, 97 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000061u ? 1 : 0); + if (psx_taken_BFC2B138) goto label_BFC2B14C; +label_BFC2B140: + psx_check_interrupts(cpu); + /* 0xBFC2B140: 10000015 beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B140 = cpu->gpr[0]; uint32_t psx_brB_BFC2B140 = cpu->gpr[0]; + int psx_taken_BFC2B140 = (psx_brA_BFC2B140 == psx_brB_BFC2B140); + /* 0xBFC2B144: 24020025 addiu $v0, $zero, 37 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (37)); + if (psx_taken_BFC2B140) goto label_BFC2B198; +label_BFC2B148: + psx_check_interrupts(cpu); + /* 0xBFC2B148: 2CA10061 sltiu $at, $a1, 97 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x00000061u ? 1 : 0); +label_BFC2B14C: + psx_check_interrupts(cpu); + /* 0xBFC2B14C: 14200006 bne $at, $zero, 0xBFC2B168 */ + uint32_t psx_brA_BFC2B14C = cpu->gpr[1]; uint32_t psx_brB_BFC2B14C = cpu->gpr[0]; + int psx_taken_BFC2B14C = (psx_brA_BFC2B14C != psx_brB_BFC2B14C); + /* 0xBFC2B150: 2CA1007B sltiu $at, $a1, 123 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000007Bu ? 1 : 0); + if (psx_taken_BFC2B14C) goto label_BFC2B168; +label_BFC2B154: + psx_check_interrupts(cpu); + /* 0xBFC2B154: 10200005 beq $at, $zero, 0xBFC2B16C */ + uint32_t psx_brA_BFC2B154 = cpu->gpr[1]; uint32_t psx_brB_BFC2B154 = cpu->gpr[0]; + int psx_taken_BFC2B154 = (psx_brA_BFC2B154 == psx_brB_BFC2B154); + /* 0xBFC2B158: 2CA1007B sltiu $at, $a1, 123 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000007Bu ? 1 : 0); + if (psx_taken_BFC2B154) goto label_BFC2B16C; +label_BFC2B15C: + psx_check_interrupts(cpu); + /* 0xBFC2B15C: 240F0002 addiu $t7, $zero, 2 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC2B160: 1000000D beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B160 = cpu->gpr[0]; uint32_t psx_brB_BFC2B160 = cpu->gpr[0]; + int psx_taken_BFC2B160 = (psx_brA_BFC2B160 == psx_brB_BFC2B160); + /* 0xBFC2B164: A3AF0020 sb $t7, 32($sp) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[29] + (32)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + if (psx_taken_BFC2B160) goto label_BFC2B198; +label_BFC2B168: + psx_check_interrupts(cpu); + /* 0xBFC2B168: 2CA1007B sltiu $at, $a1, 123 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000007Bu ? 1 : 0); +label_BFC2B16C: + psx_check_interrupts(cpu); + /* 0xBFC2B16C: 14200005 bne $at, $zero, 0xBFC2B184 */ + uint32_t psx_brA_BFC2B16C = cpu->gpr[1]; uint32_t psx_brB_BFC2B16C = cpu->gpr[0]; + int psx_taken_BFC2B16C = (psx_brA_BFC2B16C != psx_brB_BFC2B16C); + /* 0xBFC2B170: 2CA1007F sltiu $at, $a1, 127 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < 0x0000007Fu ? 1 : 0); + if (psx_taken_BFC2B16C) goto label_BFC2B184; +label_BFC2B174: + psx_check_interrupts(cpu); + /* 0xBFC2B174: 10200003 beq $at, $zero, 0xBFC2B184 */ + uint32_t psx_brA_BFC2B174 = cpu->gpr[1]; uint32_t psx_brB_BFC2B174 = cpu->gpr[0]; + int psx_taken_BFC2B174 = (psx_brA_BFC2B174 == psx_brB_BFC2B174); + /* 0xBFC2B178: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B174) goto label_BFC2B184; +label_BFC2B17C: + psx_check_interrupts(cpu); + /* 0xBFC2B17C: 10000006 beq $zero, $zero, 0xBFC2B198 */ + uint32_t psx_brA_BFC2B17C = cpu->gpr[0]; uint32_t psx_brB_BFC2B17C = cpu->gpr[0]; + int psx_taken_BFC2B17C = (psx_brA_BFC2B17C == psx_brB_BFC2B17C); + /* 0xBFC2B180: 2402003F addiu $v0, $zero, 63 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (63)); + if (psx_taken_BFC2B17C) goto label_BFC2B198; +label_BFC2B184: + psx_check_interrupts(cpu); + /* 0xBFC2B184: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC2B188: 0C016A44 jal 0xB005A910 */ + /* 0xBFC2B18C: 248481E4 addiu $a0, $a0, -32284 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-32284)); + cpu->gpr[31] = 0xBFC2B190u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC2B190: + psx_check_interrupts(cpu); + /* 0xBFC2B190: 10000016 beq $zero, $zero, 0xBFC2B1EC */ + uint32_t psx_brA_BFC2B190 = cpu->gpr[0]; uint32_t psx_brB_BFC2B190 = cpu->gpr[0]; + int psx_taken_BFC2B190 = (psx_brA_BFC2B190 == psx_brB_BFC2B190); + /* 0xBFC2B194: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2B190) goto label_BFC2B1EC; +label_BFC2B198: + psx_check_interrupts(cpu); + /* 0xBFC2B198: 1040000B beq $v0, $zero, 0xBFC2B1C8 */ + uint32_t psx_brA_BFC2B198 = cpu->gpr[2]; uint32_t psx_brB_BFC2B198 = cpu->gpr[0]; + int psx_taken_BFC2B198 = (psx_brA_BFC2B198 == psx_brB_BFC2B198); + /* 0xBFC2B19C: 93A90020 lbu $t1, 32($sp) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[29] + (32))); + if (psx_taken_BFC2B198) goto label_BFC2B1C8; +label_BFC2B1A0: + psx_check_interrupts(cpu); + /* 0xBFC2B1A0: 0002C840 sll $t9, $v0, 1 */ + cpu->gpr[25] = cpu->gpr[2] << 1u; + /* 0xBFC2B1A4: 0019C823 subu $t9, $zero, $t9 */ + cpu->gpr[25] = cpu->gpr[0] - cpu->gpr[25]; + /* 0xBFC2B1A8: 0005C040 sll $t8, $a1, 1 */ + cpu->gpr[24] = cpu->gpr[5] << 1u; + /* 0xBFC2B1AC: 03194021 addu $t0, $t8, $t9 */ + cpu->gpr[8] = cpu->gpr[24] + cpu->gpr[25]; + /* 0xBFC2B1B0: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC2B1B4: 00681821 addu $v1, $v1, $t0 */ + cpu->gpr[3] = cpu->gpr[3] + cpu->gpr[8]; + /* 0xBFC2B1B8: 94638162 lhu $v1, -32414($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-32414)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B1B8u); return; } cpu->gpr[3] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B1BC: 1000000B beq $zero, $zero, 0xBFC2B1EC */ + uint32_t psx_brA_BFC2B1BC = cpu->gpr[0]; uint32_t psx_brB_BFC2B1BC = cpu->gpr[0]; + int psx_taken_BFC2B1BC = (psx_brA_BFC2B1BC == psx_brB_BFC2B1BC); + /* 0xBFC2B1C0: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC2B1BC) goto label_BFC2B1EC; +label_BFC2B1C4: + psx_check_interrupts(cpu); + /* 0xBFC2B1C4: 93A90020 lbu $t1, 32($sp) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[29] + (32))); +label_BFC2B1C8: + psx_check_interrupts(cpu); + /* 0xBFC2B1C8: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC2B1CC: 256B8194 addiu $t3, $t3, -32364 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[11] + (-32364)); + /* 0xBFC2B1D0: 00095080 sll $t2, $t1, 2 */ + cpu->gpr[10] = cpu->gpr[9] << 2u; + /* 0xBFC2B1D4: 014B1021 addu $v0, $t2, $t3 */ + cpu->gpr[2] = cpu->gpr[10] + cpu->gpr[11]; + /* 0xBFC2B1D8: 944C0000 lhu $t4, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B1D8u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B1DC: 944E0002 lhu $t6, 2($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B1DCu); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B1E0: 01856821 addu $t5, $t4, $a1 */ + cpu->gpr[13] = cpu->gpr[12] + cpu->gpr[5]; + /* 0xBFC2B1E4: 01AE1823 subu $v1, $t5, $t6 */ + cpu->gpr[3] = cpu->gpr[13] - cpu->gpr[14]; + /* 0xBFC2B1E8: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; +label_BFC2B1EC: + psx_check_interrupts(cpu); + /* 0xBFC2B1EC: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B1ECu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2B1F0: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + /* 0xBFC2B1F4: 03E00008 jr $ra */ + /* 0xBFC2B1F8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2B1FC(CPUState* cpu) { +label_BFC2B1FC: + psx_check_interrupts(cpu); + /* 0xBFC2B1FC: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2B200: 10400008 beq $v0, $zero, 0xBFC2B224 */ + uint32_t psx_brA_BFC2B200 = cpu->gpr[2]; uint32_t psx_brB_BFC2B200 = cpu->gpr[0]; + int psx_taken_BFC2B200 = (psx_brA_BFC2B200 == psx_brB_BFC2B200); + /* 0xBFC2B204: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC2B200) goto label_BFC2B224; +label_BFC2B208: + psx_check_interrupts(cpu); + /* 0xBFC2B208: 808E0000 lb $t6, 0($a0) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC2B20C: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2B210: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC2B214: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC2B218: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC2B21C: 1440FFFA bne $v0, $zero, 0xBFC2B208 */ + uint32_t psx_brA_BFC2B21C = cpu->gpr[2]; uint32_t psx_brB_BFC2B21C = cpu->gpr[0]; + int psx_taken_BFC2B21C = (psx_brA_BFC2B21C != psx_brB_BFC2B21C); + /* 0xBFC2B220: A0AEFFFF sb $t6, -1($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (-1)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + if (psx_taken_BFC2B21C) goto label_BFC2B208; +label_BFC2B224: + psx_check_interrupts(cpu); + /* 0xBFC2B224: 03E00008 jr $ra */ + /* 0xBFC2B228: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2B22C(CPUState* cpu) { +label_BFC2B22C: + psx_check_interrupts(cpu); + /* 0xBFC2B22C: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC2B230: 10400006 beq $v0, $zero, 0xBFC2B24C */ + uint32_t psx_brA_BFC2B230 = cpu->gpr[2]; uint32_t psx_brB_BFC2B230 = cpu->gpr[0]; + int psx_taken_BFC2B230 = (psx_brA_BFC2B230 == psx_brB_BFC2B230); + /* 0xBFC2B234: 24A5FFFF addiu $a1, $a1, -1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-1)); + if (psx_taken_BFC2B230) goto label_BFC2B24C; +label_BFC2B238: + psx_check_interrupts(cpu); + /* 0xBFC2B238: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC2B23C: A0800000 sb $zero, 0($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (0)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC2B240: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC2B244: 1440FFFC bne $v0, $zero, 0xBFC2B238 */ + uint32_t psx_brA_BFC2B244 = cpu->gpr[2]; uint32_t psx_brB_BFC2B244 = cpu->gpr[0]; + int psx_taken_BFC2B244 = (psx_brA_BFC2B244 != psx_brB_BFC2B244); + /* 0xBFC2B248: 24A5FFFF addiu $a1, $a1, -1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-1)); + if (psx_taken_BFC2B244) goto label_BFC2B238; +label_BFC2B24C: + psx_check_interrupts(cpu); + /* 0xBFC2B24C: 03E00008 jr $ra */ + /* 0xBFC2B250: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2B260(CPUState* cpu) { +label_BFC2B260: + psx_check_interrupts(cpu); + /* 0xBFC2B260: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B264: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B268: 03A1E823 subu $sp, $sp, $at */ + cpu->gpr[29] = cpu->gpr[29] - cpu->gpr[1]; + /* 0xBFC2B26C: AFBE0058 sw $fp, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B26Cu); return; } cpu->write_word(psx_addr, cpu->gpr[30]); } + /* 0xBFC2B270: AFBF005C sw $ra, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B270u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2B274: AFB60050 sw $s6, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B274u); return; } cpu->write_word(psx_addr, cpu->gpr[22]); } + /* 0xBFC2B278: AFB70054 sw $s7, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B278u); return; } cpu->write_word(psx_addr, cpu->gpr[23]); } + /* 0xBFC2B27C: AFB40048 sw $s4, 72($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (72)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B27Cu); return; } cpu->write_word(psx_addr, cpu->gpr[20]); } + /* 0xBFC2B280: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B284: AFB5004C sw $s5, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B284u); return; } cpu->write_word(psx_addr, cpu->gpr[21]); } + /* 0xBFC2B288: 003D0821 addu $at, $at, $sp */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[29]; + /* 0xBFC2B28C: AFB20040 sw $s2, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B28Cu); return; } cpu->write_word(psx_addr, cpu->gpr[18]); } + /* 0xBFC2B290: AFB30044 sw $s3, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B290u); return; } cpu->write_word(psx_addr, cpu->gpr[19]); } + /* 0xBFC2B294: AFB00038 sw $s0, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B294u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC2B298: AFB1003C sw $s1, 60($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B298u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC2B29C: AC2521D4 sw $a1, 8660($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (8660)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B29Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC2B2A0: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B2A4: 003D0821 addu $at, $at, $sp */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[29]; + /* 0xBFC2B2A8: AC2621D8 sw $a2, 8664($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (8664)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B2A8u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC2B2AC: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B2B0: 003D0821 addu $at, $at, $sp */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[29]; + /* 0xBFC2B2B4: AC2721DC sw $a3, 8668($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (8668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B2B4u); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + /* 0xBFC2B2B8: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B2BC: 0080B021 addu $s6, $a0, $zero */ + cpu->gpr[22] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2B2C0: 342101C4 ori $at, $at, 0x1C4 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1C4u; + /* 0xBFC2B2C4: AFA001C0 sw $zero, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B2C4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC2B2C8: 00009821 addu $s3, $zero, $zero */ + cpu->gpr[19] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2B2CC: 03A12021 addu $a0, $sp, $at */ + cpu->gpr[4] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B2D0: 0C010C8B jal 0xB004322C */ + /* 0xBFC2B2D4: 24052000 addiu $a1, $zero, 8192 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (8192)); + cpu->gpr[31] = 0xBFC2B2D8u; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2B2D8: + psx_check_interrupts(cpu); + /* 0xBFC2B2D8: 27A401C4 addiu $a0, $sp, 452 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[29] + (452)); + /* 0xBFC2B2DC: 0C010C8B jal 0xB004322C */ + /* 0xBFC2B2E0: 3C050001 lui $a1, 0x1 */ + cpu->gpr[5] = 0x00010000u; + cpu->gpr[31] = 0xBFC2B2E4u; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2B2E4: + psx_check_interrupts(cpu); + /* 0xBFC2B2E4: 92C40000 lbu $a0, 0($s6) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[22] + (0))); + /* 0xBFC2B2E8: 00000000 nop */ + /* nop */ + /* 0xBFC2B2EC: 10800186 beq $a0, $zero, 0xBFC2B908 */ + uint32_t psx_brA_BFC2B2EC = cpu->gpr[4]; uint32_t psx_brB_BFC2B2EC = cpu->gpr[0]; + int psx_taken_BFC2B2EC = (psx_brA_BFC2B2EC == psx_brB_BFC2B2EC); + /* 0xBFC2B2F0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B2EC) goto label_BFC2B908; +label_BFC2B2F4: + psx_check_interrupts(cpu); + /* 0xBFC2B2F4: 3C17BFC6 lui $s7, 0xBFC6 */ + cpu->gpr[23] = 0xBFC60000u; + /* 0xBFC2B2F8: 36F76000 ori $s7, $s7, 0x6000 */ + cpu->gpr[23] = cpu->gpr[23] | 0x6000u; + /* 0xBFC2B2FC: 2412000F addiu $s2, $zero, 15 */ + cpu->gpr[18] = (uint32_t)((int32_t)cpu->gpr[0] + (15)); + /* 0xBFC2B300: 241E000A addiu $fp, $zero, 10 */ + cpu->gpr[30] = (uint32_t)((int32_t)cpu->gpr[0] + (10)); +label_BFC2B304: + psx_check_interrupts(cpu); + /* 0xBFC2B304: 17C4000D bne $fp, $a0, 0xBFC2B33C */ + uint32_t psx_brA_BFC2B304 = cpu->gpr[30]; uint32_t psx_brB_BFC2B304 = cpu->gpr[4]; + int psx_taken_BFC2B304 = (psx_brA_BFC2B304 != psx_brB_BFC2B304); + /* 0xBFC2B308: 2C810081 sltiu $at, $a0, 129 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000081u ? 1 : 0); + if (psx_taken_BFC2B304) goto label_BFC2B33C; +label_BFC2B30C: + psx_check_interrupts(cpu); + /* 0xBFC2B30C: 8FAE01C0 lw $t6, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B30Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2B310: 26D60001 addiu $s6, $s6, 1 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (1)); + /* 0xBFC2B314: 00000000 nop */ + /* nop */ + /* 0xBFC2B318: 05C10002 bgez $t6, 0xBFC2B324 */ + uint32_t psx_brA_BFC2B318 = cpu->gpr[14]; + int psx_taken_BFC2B318 = ((int32_t)psx_brA_BFC2B318 >= 0); + /* 0xBFC2B31C: 01C00821 addu $at, $t6, $zero */ + cpu->gpr[1] = cpu->gpr[14] + cpu->gpr[0]; + if (psx_taken_BFC2B318) goto label_BFC2B324; +label_BFC2B320: + psx_check_interrupts(cpu); + /* 0xBFC2B320: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2B324: + psx_check_interrupts(cpu); + /* 0xBFC2B324: 00017903 sra $t7, $at, 4 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2B328: 000FC100 sll $t8, $t7, 4 */ + cpu->gpr[24] = cpu->gpr[15] << 4u; + /* 0xBFC2B32C: 27190010 addiu $t9, $t8, 16 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[24] + (16)); + /* 0xBFC2B330: 1000016C beq $zero, $zero, 0xBFC2B8E4 */ + uint32_t psx_brA_BFC2B330 = cpu->gpr[0]; uint32_t psx_brB_BFC2B330 = cpu->gpr[0]; + int psx_taken_BFC2B330 = (psx_brA_BFC2B330 == psx_brB_BFC2B330); + /* 0xBFC2B334: AFB901C0 sw $t9, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B334u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + if (psx_taken_BFC2B330) goto label_BFC2B8E4; +label_BFC2B338: + psx_check_interrupts(cpu); + /* 0xBFC2B338: 2C810081 sltiu $at, $a0, 129 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000081u ? 1 : 0); +label_BFC2B33C: + psx_check_interrupts(cpu); + /* 0xBFC2B33C: 14200009 bne $at, $zero, 0xBFC2B364 */ + uint32_t psx_brA_BFC2B33C = cpu->gpr[1]; uint32_t psx_brB_BFC2B33C = cpu->gpr[0]; + int psx_taken_BFC2B33C = (psx_brA_BFC2B33C != psx_brB_BFC2B33C); + /* 0xBFC2B340: 2C810099 sltiu $at, $a0, 153 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000099u ? 1 : 0); + if (psx_taken_BFC2B33C) goto label_BFC2B364; +label_BFC2B344: + psx_check_interrupts(cpu); + /* 0xBFC2B344: 10200007 beq $at, $zero, 0xBFC2B364 */ + uint32_t psx_brA_BFC2B344 = cpu->gpr[1]; uint32_t psx_brB_BFC2B344 = cpu->gpr[0]; + int psx_taken_BFC2B344 = (psx_brA_BFC2B344 == psx_brB_BFC2B344); + /* 0xBFC2B348: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B344) goto label_BFC2B364; +label_BFC2B34C: + psx_check_interrupts(cpu); + /* 0xBFC2B34C: 92CF0001 lbu $t7, 1($s6) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[22] + (1))); + /* 0xBFC2B350: 00047200 sll $t6, $a0, 8 */ + cpu->gpr[14] = cpu->gpr[4] << 8u; + /* 0xBFC2B354: 01CF2825 or $a1, $t6, $t7 */ + cpu->gpr[5] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2B358: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC2B35C: 10000009 beq $zero, $zero, 0xBFC2B384 */ + uint32_t psx_brA_BFC2B35C = cpu->gpr[0]; uint32_t psx_brB_BFC2B35C = cpu->gpr[0]; + int psx_taken_BFC2B35C = (psx_brA_BFC2B35C == psx_brB_BFC2B35C); + /* 0xBFC2B360: 26D60002 addiu $s6, $s6, 2 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (2)); + if (psx_taken_BFC2B35C) goto label_BFC2B384; +label_BFC2B364: + psx_check_interrupts(cpu); + /* 0xBFC2B364: 0C010C2A jal 0xB00430A8 */ + /* 0xBFC2B368: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2B36Cu; + psx_dispatch(cpu, 0x800430A8u); +label_BFC2B36C: + psx_check_interrupts(cpu); + /* 0xBFC2B36C: 3058FFFF andi $t8, $v0, 0xFFFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B370: 17000003 bne $t8, $zero, 0xBFC2B380 */ + uint32_t psx_brA_BFC2B370 = cpu->gpr[24]; uint32_t psx_brB_BFC2B370 = cpu->gpr[0]; + int psx_taken_BFC2B370 = (psx_brA_BFC2B370 != psx_brB_BFC2B370); + /* 0xBFC2B374: 3045FFFF andi $a1, $v0, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[2] & 0xFFFFu; + if (psx_taken_BFC2B370) goto label_BFC2B380; +label_BFC2B378: + psx_check_interrupts(cpu); + /* 0xBFC2B378: 100002D3 beq $zero, $zero, 0xBFC2BEC8 */ + uint32_t psx_brA_BFC2B378 = cpu->gpr[0]; uint32_t psx_brB_BFC2B378 = cpu->gpr[0]; + int psx_taken_BFC2B378 = (psx_brA_BFC2B378 == psx_brB_BFC2B378); + /* 0xBFC2B37C: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC2B378) goto label_BFC2BEC8; +label_BFC2B380: + psx_check_interrupts(cpu); + /* 0xBFC2B380: 26D60001 addiu $s6, $s6, 1 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (1)); +label_BFC2B384: + psx_check_interrupts(cpu); + /* 0xBFC2B384: 34018140 ori $at, $zero, 0x8140 */ + cpu->gpr[1] = cpu->gpr[0] | 0x8140u; + /* 0xBFC2B388: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2B38C: 1420000F bne $at, $zero, 0xBFC2B3CC */ + uint32_t psx_brA_BFC2B38C = cpu->gpr[1]; uint32_t psx_brB_BFC2B38C = cpu->gpr[0]; + int psx_taken_BFC2B38C = (psx_brA_BFC2B38C != psx_brB_BFC2B38C); + /* 0xBFC2B390: 340184BF ori $at, $zero, 0x84BF */ + cpu->gpr[1] = cpu->gpr[0] | 0x84BFu; + if (psx_taken_BFC2B38C) goto label_BFC2B3CC; +label_BFC2B394: + psx_check_interrupts(cpu); + /* 0xBFC2B394: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2B398: 1020000C beq $at, $zero, 0xBFC2B3CC */ + uint32_t psx_brA_BFC2B398 = cpu->gpr[1]; uint32_t psx_brB_BFC2B398 = cpu->gpr[0]; + int psx_taken_BFC2B398 = (psx_brA_BFC2B398 == psx_brB_BFC2B398); + /* 0xBFC2B39C: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2B398) goto label_BFC2B3CC; +label_BFC2B3A0: + psx_check_interrupts(cpu); + /* 0xBFC2B3A0: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B3A4: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B3A8: 8FB901C0 lw $t9, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B3A8u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2B3AC: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B3B0: 342101C4 ori $at, $at, 0x1C4 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1C4u; + /* 0xBFC2B3B4: 03A1C021 addu $t8, $sp, $at */ + cpu->gpr[24] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B3B8: 00197940 sll $t7, $t9, 5 */ + cpu->gpr[15] = cpu->gpr[25] << 5u; + /* 0xBFC2B3BC: 01F8A821 addu $s5, $t7, $t8 */ + cpu->gpr[21] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC2B3C0: 02E08021 addu $s0, $s7, $zero */ + cpu->gpr[16] = cpu->gpr[23] + cpu->gpr[0]; + /* 0xBFC2B3C4: 10000019 beq $zero, $zero, 0xBFC2B42C */ + uint32_t psx_brA_BFC2B3C4 = cpu->gpr[0]; uint32_t psx_brB_BFC2B3C4 = cpu->gpr[0]; + int psx_taken_BFC2B3C4 = (psx_brA_BFC2B3C4 == psx_brB_BFC2B3C4); + /* 0xBFC2B3C8: 032EA021 addu $s4, $t9, $t6 */ + cpu->gpr[20] = cpu->gpr[25] + cpu->gpr[14]; + if (psx_taken_BFC2B3C4) goto label_BFC2B42C; +label_BFC2B3CC: + psx_check_interrupts(cpu); + /* 0xBFC2B3CC: 3401889F ori $at, $zero, 0x889F */ + cpu->gpr[1] = cpu->gpr[0] | 0x889Fu; + /* 0xBFC2B3D0: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2B3D4: 14200010 bne $at, $zero, 0xBFC2B418 */ + uint32_t psx_brA_BFC2B3D4 = cpu->gpr[1]; uint32_t psx_brB_BFC2B3D4 = cpu->gpr[0]; + int psx_taken_BFC2B3D4 = (psx_brA_BFC2B3D4 != psx_brB_BFC2B3D4); + /* 0xBFC2B3D8: 34019873 ori $at, $zero, 0x9873 */ + cpu->gpr[1] = cpu->gpr[0] | 0x9873u; + if (psx_taken_BFC2B3D4) goto label_BFC2B418; +label_BFC2B3DC: + psx_check_interrupts(cpu); + /* 0xBFC2B3DC: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC2B3E0: 1020000D beq $at, $zero, 0xBFC2B418 */ + uint32_t psx_brA_BFC2B3E0 = cpu->gpr[1]; uint32_t psx_brB_BFC2B3E0 = cpu->gpr[0]; + int psx_taken_BFC2B3E0 = (psx_brA_BFC2B3E0 == psx_brB_BFC2B3E0); + /* 0xBFC2B3E4: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2B3E0) goto label_BFC2B418; +label_BFC2B3E8: + psx_check_interrupts(cpu); + /* 0xBFC2B3E8: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B3EC: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B3F0: 8FA201C0 lw $v0, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B3F0u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2B3F4: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B3F8: 342101C4 ori $at, $at, 0x1C4 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1C4u; + /* 0xBFC2B3FC: 03A17821 addu $t7, $sp, $at */ + cpu->gpr[15] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B400: 3C10BFC6 lui $s0, 0xBFC6 */ + cpu->gpr[16] = 0xBFC60000u; + /* 0xBFC2B404: 0002C940 sll $t9, $v0, 5 */ + cpu->gpr[25] = cpu->gpr[2] << 5u; + /* 0xBFC2B408: 032FA821 addu $s5, $t9, $t7 */ + cpu->gpr[21] = cpu->gpr[25] + cpu->gpr[15]; + /* 0xBFC2B40C: 36109D68 ori $s0, $s0, 0x9D68 */ + cpu->gpr[16] = cpu->gpr[16] | 0x9D68u; + /* 0xBFC2B410: 10000006 beq $zero, $zero, 0xBFC2B42C */ + uint32_t psx_brA_BFC2B410 = cpu->gpr[0]; uint32_t psx_brB_BFC2B410 = cpu->gpr[0]; + int psx_taken_BFC2B410 = (psx_brA_BFC2B410 == psx_brB_BFC2B410); + /* 0xBFC2B414: 004EA021 addu $s4, $v0, $t6 */ + cpu->gpr[20] = cpu->gpr[2] + cpu->gpr[14]; + if (psx_taken_BFC2B410) goto label_BFC2B42C; +label_BFC2B418: + psx_check_interrupts(cpu); + /* 0xBFC2B418: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC2B41C: 0C016A44 jal 0xB005A910 */ + /* 0xBFC2B420: 248482FC addiu $a0, $a0, -32004 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-32004)); + cpu->gpr[31] = 0xBFC2B424u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC2B424: + psx_check_interrupts(cpu); + /* 0xBFC2B424: 100002A8 beq $zero, $zero, 0xBFC2BEC8 */ + uint32_t psx_brA_BFC2B424 = cpu->gpr[0]; uint32_t psx_brB_BFC2B424 = cpu->gpr[0]; + int psx_taken_BFC2B424 = (psx_brA_BFC2B424 == psx_brB_BFC2B424); + /* 0xBFC2B428: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC2B424) goto label_BFC2BEC8; +label_BFC2B42C: + psx_check_interrupts(cpu); + /* 0xBFC2B42C: 0C010B34 jal 0xB0042CD0 */ + /* 0xBFC2B430: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC2B434u; + psx_dispatch(cpu, 0x80042CD0u); +label_BFC2B434: + psx_check_interrupts(cpu); + /* 0xBFC2B434: 0002C100 sll $t8, $v0, 4 */ + cpu->gpr[24] = cpu->gpr[2] << 4u; + /* 0xBFC2B438: 0302C023 subu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[2]; + /* 0xBFC2B43C: 0018C040 sll $t8, $t8, 1 */ + cpu->gpr[24] = cpu->gpr[24] << 1u; + /* 0xBFC2B440: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC2B444: 16170090 bne $s0, $s7, 0xBFC2B688 */ + uint32_t psx_brA_BFC2B444 = cpu->gpr[16]; uint32_t psx_brB_BFC2B444 = cpu->gpr[23]; + int psx_taken_BFC2B444 = (psx_brA_BFC2B444 != psx_brB_BFC2B444); + /* 0xBFC2B448: 02182021 addu $a0, $s0, $t8 */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[24]; + if (psx_taken_BFC2B444) goto label_BFC2B688; +label_BFC2B44C: + psx_check_interrupts(cpu); + /* 0xBFC2B44C: 28410093 slti $at, $v0, 147 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (147) ? 1 : 0); + /* 0xBFC2B450: 1420008D bne $at, $zero, 0xBFC2B688 */ + uint32_t psx_brA_BFC2B450 = cpu->gpr[1]; uint32_t psx_brB_BFC2B450 = cpu->gpr[0]; + int psx_taken_BFC2B450 = (psx_brA_BFC2B450 != psx_brB_BFC2B450); + /* 0xBFC2B454: 284100D1 slti $at, $v0, 209 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (209) ? 1 : 0); + if (psx_taken_BFC2B450) goto label_BFC2B688; +label_BFC2B458: + psx_check_interrupts(cpu); + /* 0xBFC2B458: 1020008B beq $at, $zero, 0xBFC2B688 */ + uint32_t psx_brA_BFC2B458 = cpu->gpr[1]; uint32_t psx_brB_BFC2B458 = cpu->gpr[0]; + int psx_taken_BFC2B458 = (psx_brA_BFC2B458 == psx_brB_BFC2B458); + /* 0xBFC2B45C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B458) goto label_BFC2B688; +label_BFC2B460: + psx_check_interrupts(cpu); + /* 0xBFC2B460: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC2B464: 27398200 addiu $t9, $t9, -32256 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (-32256)); + /* 0xBFC2B468: 00037080 sll $t6, $v1, 2 */ + cpu->gpr[14] = cpu->gpr[3] << 2u; + /* 0xBFC2B46C: 01D98021 addu $s0, $t6, $t9 */ + cpu->gpr[16] = cpu->gpr[14] + cpu->gpr[25]; + /* 0xBFC2B470: 960FFDB6 lhu $t7, -586($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (-586)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B470u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B474: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2B478: 00340821 addu $at, $at, $s4 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[20]; + /* 0xBFC2B47C: A02FDED0 sb $t7, -8496($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-8496)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + /* 0xBFC2B480: 8FB801C0 lw $t8, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B480u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2B484: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B488: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B48C: 03A1C821 addu $t9, $sp, $at */ + cpu->gpr[25] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B490: 00187140 sll $t6, $t8, 5 */ + cpu->gpr[14] = cpu->gpr[24] << 5u; + /* 0xBFC2B494: 01D98821 addu $s1, $t6, $t9 */ + cpu->gpr[17] = cpu->gpr[14] + cpu->gpr[25]; + /* 0xBFC2B498: 02A02821 addu $a1, $s5, $zero */ + cpu->gpr[5] = cpu->gpr[21] + cpu->gpr[0]; + /* 0xBFC2B49C: 0C010C7F jal 0xB00431FC */ + /* 0xBFC2B4A0: 2406001E addiu $a2, $zero, 30 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (30)); + cpu->gpr[31] = 0xBFC2B4A4u; + psx_dispatch(cpu, 0x800431FCu); +label_BFC2B4A4: + psx_check_interrupts(cpu); + /* 0xBFC2B4A4: 02202021 addu $a0, $s1, $zero */ + cpu->gpr[4] = cpu->gpr[17] + cpu->gpr[0]; + /* 0xBFC2B4A8: 9485DFF4 lhu $a1, -8204($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B4A8u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B4AC: 9608FDB4 lhu $t0, -588($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (-588)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B4ACu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B4B0: 30AF00FF andi $t7, $a1, 0xFF */ + cpu->gpr[15] = cpu->gpr[5] & 0xFFu; + /* 0xBFC2B4B4: 00057202 srl $t6, $a1, 8 */ + cpu->gpr[14] = cpu->gpr[5] >> 8u; + /* 0xBFC2B4B8: 31D900FF andi $t9, $t6, 0xFF */ + cpu->gpr[25] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B4BC: 000FC200 sll $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] << 8u; + /* 0xBFC2B4C0: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2B4C4: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B4C8: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B4CC: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B4D0: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B4D4: 304F00FF andi $t7, $v0, 0xFF */ + cpu->gpr[15] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B4D8: 0002C202 srl $t8, $v0, 8 */ + cpu->gpr[24] = cpu->gpr[2] >> 8u; + /* 0xBFC2B4DC: 331900FF andi $t9, $t8, 0xFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B4E0: 000F7200 sll $t6, $t7, 8 */ + cpu->gpr[14] = cpu->gpr[15] << 8u; + /* 0xBFC2B4E4: 9486DFF6 lhu $a2, -8202($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B4E4u); return; } cpu->gpr[6] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B4E8: 01D97825 or $t7, $t6, $t9 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[25]; + /* 0xBFC2B4EC: A48FDFF4 sh $t7, -8204($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B4ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2B4F0: 0006CA02 srl $t9, $a2, 8 */ + cpu->gpr[25] = cpu->gpr[6] >> 8u; + /* 0xBFC2B4F4: 30D800FF andi $t8, $a2, 0xFF */ + cpu->gpr[24] = cpu->gpr[6] & 0xFFu; + /* 0xBFC2B4F8: 00187200 sll $t6, $t8, 8 */ + cpu->gpr[14] = cpu->gpr[24] << 8u; + /* 0xBFC2B4FC: 332F00FF andi $t7, $t9, 0xFF */ + cpu->gpr[15] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B500: 01CF1025 or $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2B504: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B508: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B50C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B510: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B514: 305800FF andi $t8, $v0, 0xFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B518: 00027202 srl $t6, $v0, 8 */ + cpu->gpr[14] = cpu->gpr[2] >> 8u; + /* 0xBFC2B51C: 31CF00FF andi $t7, $t6, 0xFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B520: 0018CA00 sll $t9, $t8, 8 */ + cpu->gpr[25] = cpu->gpr[24] << 8u; + /* 0xBFC2B524: 9487DFF8 lhu $a3, -8200($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B524u); return; } cpu->gpr[7] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B528: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B52C: A498DFF6 sh $t8, -8202($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B52Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2B530: 00077A02 srl $t7, $a3, 8 */ + cpu->gpr[15] = cpu->gpr[7] >> 8u; + /* 0xBFC2B534: 30EE00FF andi $t6, $a3, 0xFF */ + cpu->gpr[14] = cpu->gpr[7] & 0xFFu; + /* 0xBFC2B538: 000ECA00 sll $t9, $t6, 8 */ + cpu->gpr[25] = cpu->gpr[14] << 8u; + /* 0xBFC2B53C: 31F800FF andi $t8, $t7, 0xFF */ + cpu->gpr[24] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B540: 03381025 or $v0, $t9, $t8 */ + cpu->gpr[2] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2B544: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B548: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B54C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B550: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B554: 304E00FF andi $t6, $v0, 0xFF */ + cpu->gpr[14] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B558: 0002CA02 srl $t9, $v0, 8 */ + cpu->gpr[25] = cpu->gpr[2] >> 8u; + /* 0xBFC2B55C: 333800FF andi $t8, $t9, 0xFF */ + cpu->gpr[24] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B560: 000E7A00 sll $t7, $t6, 8 */ + cpu->gpr[15] = cpu->gpr[14] << 8u; + /* 0xBFC2B564: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2B568: A48EDFF8 sh $t6, -8200($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B568u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2B56C: 24140003 addiu $s4, $zero, 3 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC2B570: 26230006 addiu $v1, $s1, 6 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[17] + (6)); +label_BFC2B574: + psx_check_interrupts(cpu); + /* 0xBFC2B574: 9464DFF4 lhu $a0, -8204($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B574u); return; } cpu->gpr[4] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B578: 9465DFF6 lhu $a1, -8202($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B578u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B57C: 309900FF andi $t9, $a0, 0xFF */ + cpu->gpr[25] = cpu->gpr[4] & 0xFFu; + /* 0xBFC2B580: 0004C202 srl $t8, $a0, 8 */ + cpu->gpr[24] = cpu->gpr[4] >> 8u; + /* 0xBFC2B584: 330E00FF andi $t6, $t8, 0xFF */ + cpu->gpr[14] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B588: 00197A00 sll $t7, $t9, 8 */ + cpu->gpr[15] = cpu->gpr[25] << 8u; + /* 0xBFC2B58C: 01EE1025 or $v0, $t7, $t6 */ + cpu->gpr[2] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2B590: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B594: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B598: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B59C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B5A0: 305900FF andi $t9, $v0, 0xFF */ + cpu->gpr[25] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B5A4: 00027A02 srl $t7, $v0, 8 */ + cpu->gpr[15] = cpu->gpr[2] >> 8u; + /* 0xBFC2B5A8: 31EE00FF andi $t6, $t7, 0xFF */ + cpu->gpr[14] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B5AC: 0019C200 sll $t8, $t9, 8 */ + cpu->gpr[24] = cpu->gpr[25] << 8u; + /* 0xBFC2B5B0: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2B5B4: A479DFF4 sh $t9, -8204($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B5B4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2B5B8: 00057202 srl $t6, $a1, 8 */ + cpu->gpr[14] = cpu->gpr[5] >> 8u; + /* 0xBFC2B5BC: 30AF00FF andi $t7, $a1, 0xFF */ + cpu->gpr[15] = cpu->gpr[5] & 0xFFu; + /* 0xBFC2B5C0: 000FC200 sll $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] << 8u; + /* 0xBFC2B5C4: 31D900FF andi $t9, $t6, 0xFF */ + cpu->gpr[25] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B5C8: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2B5CC: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B5D0: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B5D4: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B5D8: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B5DC: 304F00FF andi $t7, $v0, 0xFF */ + cpu->gpr[15] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B5E0: 0002C202 srl $t8, $v0, 8 */ + cpu->gpr[24] = cpu->gpr[2] >> 8u; + /* 0xBFC2B5E4: 331900FF andi $t9, $t8, 0xFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B5E8: 000F7200 sll $t6, $t7, 8 */ + cpu->gpr[14] = cpu->gpr[15] << 8u; + /* 0xBFC2B5EC: 9466DFF8 lhu $a2, -8200($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B5ECu); return; } cpu->gpr[6] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B5F0: 01D97825 or $t7, $t6, $t9 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[25]; + /* 0xBFC2B5F4: A46FDFF6 sh $t7, -8202($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B5F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2B5F8: 0006CA02 srl $t9, $a2, 8 */ + cpu->gpr[25] = cpu->gpr[6] >> 8u; + /* 0xBFC2B5FC: 30D800FF andi $t8, $a2, 0xFF */ + cpu->gpr[24] = cpu->gpr[6] & 0xFFu; + /* 0xBFC2B600: 00187200 sll $t6, $t8, 8 */ + cpu->gpr[14] = cpu->gpr[24] << 8u; + /* 0xBFC2B604: 332F00FF andi $t7, $t9, 0xFF */ + cpu->gpr[15] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B608: 01CF1025 or $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2B60C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B610: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B614: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B618: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B61C: 305800FF andi $t8, $v0, 0xFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B620: 00027202 srl $t6, $v0, 8 */ + cpu->gpr[14] = cpu->gpr[2] >> 8u; + /* 0xBFC2B624: 31CF00FF andi $t7, $t6, 0xFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B628: 0018CA00 sll $t9, $t8, 8 */ + cpu->gpr[25] = cpu->gpr[24] << 8u; + /* 0xBFC2B62C: 9467DFFA lhu $a3, -8198($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B62Cu); return; } cpu->gpr[7] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B630: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B634: A478DFF8 sh $t8, -8200($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B634u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2B638: 00077A02 srl $t7, $a3, 8 */ + cpu->gpr[15] = cpu->gpr[7] >> 8u; + /* 0xBFC2B63C: 30EE00FF andi $t6, $a3, 0xFF */ + cpu->gpr[14] = cpu->gpr[7] & 0xFFu; + /* 0xBFC2B640: 000ECA00 sll $t9, $t6, 8 */ + cpu->gpr[25] = cpu->gpr[14] << 8u; + /* 0xBFC2B644: 31F800FF andi $t8, $t7, 0xFF */ + cpu->gpr[24] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B648: 03381025 or $v0, $t9, $t8 */ + cpu->gpr[2] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2B64C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B650: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B654: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B658: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B65C: 304E00FF andi $t6, $v0, 0xFF */ + cpu->gpr[14] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B660: 0002CA02 srl $t9, $v0, 8 */ + cpu->gpr[25] = cpu->gpr[2] >> 8u; + /* 0xBFC2B664: 333800FF andi $t8, $t9, 0xFF */ + cpu->gpr[24] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B668: 000E7A00 sll $t7, $t6, 8 */ + cpu->gpr[15] = cpu->gpr[14] << 8u; + /* 0xBFC2B66C: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2B670: 26940004 addiu $s4, $s4, 4 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (4)); + /* 0xBFC2B674: A46EDFFA sh $t6, -8198($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B674u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2B678: 1692FFBE bne $s4, $s2, 0xBFC2B574 */ + uint32_t psx_brA_BFC2B678 = cpu->gpr[20]; uint32_t psx_brB_BFC2B678 = cpu->gpr[18]; + int psx_taken_BFC2B678 = (psx_brA_BFC2B678 != psx_brB_BFC2B678); + /* 0xBFC2B67C: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + if (psx_taken_BFC2B678) goto label_BFC2B574; +label_BFC2B680: + psx_check_interrupts(cpu); + /* 0xBFC2B680: 10000095 beq $zero, $zero, 0xBFC2B8D8 */ + uint32_t psx_brA_BFC2B680 = cpu->gpr[0]; uint32_t psx_brB_BFC2B680 = cpu->gpr[0]; + int psx_taken_BFC2B680 = (psx_brA_BFC2B680 == psx_brB_BFC2B680); + /* 0xBFC2B684: 8FB901C0 lw $t9, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B684u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2B680) goto label_BFC2B8D8; +label_BFC2B688: + psx_check_interrupts(cpu); + /* 0xBFC2B688: 1617008C bne $s0, $s7, 0xBFC2B8BC */ + uint32_t psx_brA_BFC2B688 = cpu->gpr[16]; uint32_t psx_brB_BFC2B688 = cpu->gpr[23]; + int psx_taken_BFC2B688 = (psx_brA_BFC2B688 != psx_brB_BFC2B688); + /* 0xBFC2B68C: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + if (psx_taken_BFC2B688) goto label_BFC2B8BC; +label_BFC2B690: + psx_check_interrupts(cpu); + /* 0xBFC2B690: 1440008A bne $v0, $zero, 0xBFC2B8BC */ + uint32_t psx_brA_BFC2B690 = cpu->gpr[2]; uint32_t psx_brB_BFC2B690 = cpu->gpr[0]; + int psx_taken_BFC2B690 = (psx_brA_BFC2B690 != psx_brB_BFC2B690); + /* 0xBFC2B694: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + if (psx_taken_BFC2B690) goto label_BFC2B8BC; +label_BFC2B698: + psx_check_interrupts(cpu); + /* 0xBFC2B698: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC2B69C: 973982FA lhu $t9, -32006($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-32006)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B69Cu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B6A0: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2B6A4: 00340821 addu $at, $at, $s4 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[20]; + /* 0xBFC2B6A8: A039DED0 sb $t9, -8496($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-8496)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC2B6AC: 8FAF01C0 lw $t7, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B6ACu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2B6B0: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B6B4: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B6B8: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B6BC: 000FC140 sll $t8, $t7, 5 */ + cpu->gpr[24] = cpu->gpr[15] << 5u; + /* 0xBFC2B6C0: 030E8821 addu $s1, $t8, $t6 */ + cpu->gpr[17] = cpu->gpr[24] + cpu->gpr[14]; + /* 0xBFC2B6C4: 02A02821 addu $a1, $s5, $zero */ + cpu->gpr[5] = cpu->gpr[21] + cpu->gpr[0]; + /* 0xBFC2B6C8: 0C010C7F jal 0xB00431FC */ + /* 0xBFC2B6CC: 2406001E addiu $a2, $zero, 30 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (30)); + cpu->gpr[31] = 0xBFC2B6D0u; + psx_dispatch(cpu, 0x800431FCu); +label_BFC2B6D0: + psx_check_interrupts(cpu); + /* 0xBFC2B6D0: 02202021 addu $a0, $s1, $zero */ + cpu->gpr[4] = cpu->gpr[17] + cpu->gpr[0]; + /* 0xBFC2B6D4: 9485DFF4 lhu $a1, -8204($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B6D4u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B6D8: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC2B6DC: 30B900FF andi $t9, $a1, 0xFF */ + cpu->gpr[25] = cpu->gpr[5] & 0xFFu; + /* 0xBFC2B6E0: 0005C202 srl $t8, $a1, 8 */ + cpu->gpr[24] = cpu->gpr[5] >> 8u; + /* 0xBFC2B6E4: 330E00FF andi $t6, $t8, 0xFF */ + cpu->gpr[14] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B6E8: 00197A00 sll $t7, $t9, 8 */ + cpu->gpr[15] = cpu->gpr[25] << 8u; + /* 0xBFC2B6EC: 950882F8 lhu $t0, -32008($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-32008)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B6ECu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B6F0: 01EE1025 or $v0, $t7, $t6 */ + cpu->gpr[2] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2B6F4: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B6F8: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B6FC: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B700: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B704: 305900FF andi $t9, $v0, 0xFF */ + cpu->gpr[25] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B708: 00027A02 srl $t7, $v0, 8 */ + cpu->gpr[15] = cpu->gpr[2] >> 8u; + /* 0xBFC2B70C: 31EE00FF andi $t6, $t7, 0xFF */ + cpu->gpr[14] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B710: 0019C200 sll $t8, $t9, 8 */ + cpu->gpr[24] = cpu->gpr[25] << 8u; + /* 0xBFC2B714: 9486DFF6 lhu $a2, -8202($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B714u); return; } cpu->gpr[6] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B718: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2B71C: A499DFF4 sh $t9, -8204($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B71Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2B720: 00067202 srl $t6, $a2, 8 */ + cpu->gpr[14] = cpu->gpr[6] >> 8u; + /* 0xBFC2B724: 30CF00FF andi $t7, $a2, 0xFF */ + cpu->gpr[15] = cpu->gpr[6] & 0xFFu; + /* 0xBFC2B728: 000FC200 sll $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] << 8u; + /* 0xBFC2B72C: 31D900FF andi $t9, $t6, 0xFF */ + cpu->gpr[25] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B730: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2B734: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B738: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B73C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B740: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B744: 304F00FF andi $t7, $v0, 0xFF */ + cpu->gpr[15] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B748: 0002C202 srl $t8, $v0, 8 */ + cpu->gpr[24] = cpu->gpr[2] >> 8u; + /* 0xBFC2B74C: 331900FF andi $t9, $t8, 0xFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B750: 000F7200 sll $t6, $t7, 8 */ + cpu->gpr[14] = cpu->gpr[15] << 8u; + /* 0xBFC2B754: 9487DFF8 lhu $a3, -8200($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B754u); return; } cpu->gpr[7] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B758: 01D97825 or $t7, $t6, $t9 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[25]; + /* 0xBFC2B75C: A48FDFF6 sh $t7, -8202($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B75Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2B760: 0007CA02 srl $t9, $a3, 8 */ + cpu->gpr[25] = cpu->gpr[7] >> 8u; + /* 0xBFC2B764: 30F800FF andi $t8, $a3, 0xFF */ + cpu->gpr[24] = cpu->gpr[7] & 0xFFu; + /* 0xBFC2B768: 00187200 sll $t6, $t8, 8 */ + cpu->gpr[14] = cpu->gpr[24] << 8u; + /* 0xBFC2B76C: 332F00FF andi $t7, $t9, 0xFF */ + cpu->gpr[15] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B770: 01CF1025 or $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2B774: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B778: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B77C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B780: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B784: 305800FF andi $t8, $v0, 0xFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B788: 00027202 srl $t6, $v0, 8 */ + cpu->gpr[14] = cpu->gpr[2] >> 8u; + /* 0xBFC2B78C: 31CF00FF andi $t7, $t6, 0xFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B790: 0018CA00 sll $t9, $t8, 8 */ + cpu->gpr[25] = cpu->gpr[24] << 8u; + /* 0xBFC2B794: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B798: A498DFF8 sh $t8, -8200($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B798u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2B79C: 24140003 addiu $s4, $zero, 3 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC2B7A0: 26230006 addiu $v1, $s1, 6 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[17] + (6)); +label_BFC2B7A4: + psx_check_interrupts(cpu); + /* 0xBFC2B7A4: 9464DFF4 lhu $a0, -8204($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B7A4u); return; } cpu->gpr[4] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B7A8: 9465DFF6 lhu $a1, -8202($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B7A8u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B7AC: 308E00FF andi $t6, $a0, 0xFF */ + cpu->gpr[14] = cpu->gpr[4] & 0xFFu; + /* 0xBFC2B7B0: 00047A02 srl $t7, $a0, 8 */ + cpu->gpr[15] = cpu->gpr[4] >> 8u; + /* 0xBFC2B7B4: 31F800FF andi $t8, $t7, 0xFF */ + cpu->gpr[24] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B7B8: 000ECA00 sll $t9, $t6, 8 */ + cpu->gpr[25] = cpu->gpr[14] << 8u; + /* 0xBFC2B7BC: 03381025 or $v0, $t9, $t8 */ + cpu->gpr[2] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2B7C0: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B7C4: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B7C8: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B7CC: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B7D0: 304E00FF andi $t6, $v0, 0xFF */ + cpu->gpr[14] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B7D4: 0002CA02 srl $t9, $v0, 8 */ + cpu->gpr[25] = cpu->gpr[2] >> 8u; + /* 0xBFC2B7D8: 333800FF andi $t8, $t9, 0xFF */ + cpu->gpr[24] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B7DC: 000E7A00 sll $t7, $t6, 8 */ + cpu->gpr[15] = cpu->gpr[14] << 8u; + /* 0xBFC2B7E0: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2B7E4: A46EDFF4 sh $t6, -8204($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B7E4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2B7E8: 0005C202 srl $t8, $a1, 8 */ + cpu->gpr[24] = cpu->gpr[5] >> 8u; + /* 0xBFC2B7EC: 30B900FF andi $t9, $a1, 0xFF */ + cpu->gpr[25] = cpu->gpr[5] & 0xFFu; + /* 0xBFC2B7F0: 00197A00 sll $t7, $t9, 8 */ + cpu->gpr[15] = cpu->gpr[25] << 8u; + /* 0xBFC2B7F4: 330E00FF andi $t6, $t8, 0xFF */ + cpu->gpr[14] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B7F8: 01EE1025 or $v0, $t7, $t6 */ + cpu->gpr[2] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2B7FC: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B800: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B804: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B808: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B80C: 305900FF andi $t9, $v0, 0xFF */ + cpu->gpr[25] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B810: 00027A02 srl $t7, $v0, 8 */ + cpu->gpr[15] = cpu->gpr[2] >> 8u; + /* 0xBFC2B814: 31EE00FF andi $t6, $t7, 0xFF */ + cpu->gpr[14] = cpu->gpr[15] & 0xFFu; + /* 0xBFC2B818: 0019C200 sll $t8, $t9, 8 */ + cpu->gpr[24] = cpu->gpr[25] << 8u; + /* 0xBFC2B81C: 9466DFF8 lhu $a2, -8200($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B81Cu); return; } cpu->gpr[6] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B820: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2B824: A479DFF6 sh $t9, -8202($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B824u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2B828: 00067202 srl $t6, $a2, 8 */ + cpu->gpr[14] = cpu->gpr[6] >> 8u; + /* 0xBFC2B82C: 30CF00FF andi $t7, $a2, 0xFF */ + cpu->gpr[15] = cpu->gpr[6] & 0xFFu; + /* 0xBFC2B830: 000FC200 sll $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] << 8u; + /* 0xBFC2B834: 31D900FF andi $t9, $t6, 0xFF */ + cpu->gpr[25] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B838: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2B83C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B840: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B844: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B848: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B84C: 304F00FF andi $t7, $v0, 0xFF */ + cpu->gpr[15] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B850: 0002C202 srl $t8, $v0, 8 */ + cpu->gpr[24] = cpu->gpr[2] >> 8u; + /* 0xBFC2B854: 331900FF andi $t9, $t8, 0xFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFu; + /* 0xBFC2B858: 000F7200 sll $t6, $t7, 8 */ + cpu->gpr[14] = cpu->gpr[15] << 8u; + /* 0xBFC2B85C: 9467DFFA lhu $a3, -8198($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B85Cu); return; } cpu->gpr[7] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B860: 01D97825 or $t7, $t6, $t9 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[25]; + /* 0xBFC2B864: A46FDFF8 sh $t7, -8200($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B864u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2B868: 0007CA02 srl $t9, $a3, 8 */ + cpu->gpr[25] = cpu->gpr[7] >> 8u; + /* 0xBFC2B86C: 30F800FF andi $t8, $a3, 0xFF */ + cpu->gpr[24] = cpu->gpr[7] & 0xFFu; + /* 0xBFC2B870: 00187200 sll $t6, $t8, 8 */ + cpu->gpr[14] = cpu->gpr[24] << 8u; + /* 0xBFC2B874: 332F00FF andi $t7, $t9, 0xFF */ + cpu->gpr[15] = cpu->gpr[25] & 0xFFu; + /* 0xBFC2B878: 01CF1025 or $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2B87C: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B880: 01021004 sllv $v0, $v0, $t0 */ + cpu->gpr[2] = cpu->gpr[2] << (cpu->gpr[8] & 0x1Fu); + /* 0xBFC2B884: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B888: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC2B88C: 305800FF andi $t8, $v0, 0xFF */ + cpu->gpr[24] = cpu->gpr[2] & 0xFFu; + /* 0xBFC2B890: 00027202 srl $t6, $v0, 8 */ + cpu->gpr[14] = cpu->gpr[2] >> 8u; + /* 0xBFC2B894: 31CF00FF andi $t7, $t6, 0xFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFu; + /* 0xBFC2B898: 0018CA00 sll $t9, $t8, 8 */ + cpu->gpr[25] = cpu->gpr[24] << 8u; + /* 0xBFC2B89C: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B8A0: 26940004 addiu $s4, $s4, 4 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (4)); + /* 0xBFC2B8A4: A478DFFA sh $t8, -8198($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B8A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2B8A8: 1692FFBE bne $s4, $s2, 0xBFC2B7A4 */ + uint32_t psx_brA_BFC2B8A8 = cpu->gpr[20]; uint32_t psx_brB_BFC2B8A8 = cpu->gpr[18]; + int psx_taken_BFC2B8A8 = (psx_brA_BFC2B8A8 != psx_brB_BFC2B8A8); + /* 0xBFC2B8AC: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + if (psx_taken_BFC2B8A8) goto label_BFC2B7A4; +label_BFC2B8B0: + psx_check_interrupts(cpu); + /* 0xBFC2B8B0: 10000009 beq $zero, $zero, 0xBFC2B8D8 */ + uint32_t psx_brA_BFC2B8B0 = cpu->gpr[0]; uint32_t psx_brB_BFC2B8B0 = cpu->gpr[0]; + int psx_taken_BFC2B8B0 = (psx_brA_BFC2B8B0 == psx_brB_BFC2B8B0); + /* 0xBFC2B8B4: 8FB901C0 lw $t9, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B8B4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2B8B0) goto label_BFC2B8D8; +label_BFC2B8B8: + psx_check_interrupts(cpu); + /* 0xBFC2B8B8: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; +label_BFC2B8BC: + psx_check_interrupts(cpu); + /* 0xBFC2B8BC: 00340821 addu $at, $at, $s4 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[20]; + /* 0xBFC2B8C0: 240E0010 addiu $t6, $zero, 16 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC2B8C4: A02EDED0 sb $t6, -8496($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-8496)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC2B8C8: 02A02821 addu $a1, $s5, $zero */ + cpu->gpr[5] = cpu->gpr[21] + cpu->gpr[0]; + /* 0xBFC2B8CC: 0C010C7F jal 0xB00431FC */ + /* 0xBFC2B8D0: 2406001E addiu $a2, $zero, 30 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (30)); + cpu->gpr[31] = 0xBFC2B8D4u; + psx_dispatch(cpu, 0x800431FCu); +label_BFC2B8D4: + psx_check_interrupts(cpu); + /* 0xBFC2B8D4: 8FB901C0 lw $t9, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B8D4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } +label_BFC2B8D8: + psx_check_interrupts(cpu); + /* 0xBFC2B8D8: 00000000 nop */ + /* nop */ + /* 0xBFC2B8DC: 272F0001 addiu $t7, $t9, 1 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[25] + (1)); + /* 0xBFC2B8E0: AFAF01C0 sw $t7, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B8E0u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } +label_BFC2B8E4: + psx_check_interrupts(cpu); + /* 0xBFC2B8E4: 92C40000 lbu $a0, 0($s6) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[22] + (0))); + /* 0xBFC2B8E8: 00000000 nop */ + /* nop */ + /* 0xBFC2B8EC: 10800006 beq $a0, $zero, 0xBFC2B908 */ + uint32_t psx_brA_BFC2B8EC = cpu->gpr[4]; uint32_t psx_brB_BFC2B8EC = cpu->gpr[0]; + int psx_taken_BFC2B8EC = (psx_brA_BFC2B8EC == psx_brB_BFC2B8EC); + /* 0xBFC2B8F0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B8EC) goto label_BFC2B908; +label_BFC2B8F4: + psx_check_interrupts(cpu); + /* 0xBFC2B8F4: 8FB801C0 lw $t8, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B8F4u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2B8F8: 00000000 nop */ + /* nop */ + /* 0xBFC2B8FC: 2B010100 slti $at, $t8, 256 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[24] < (256) ? 1 : 0); + /* 0xBFC2B900: 1420FE80 bne $at, $zero, 0xBFC2B304 */ + uint32_t psx_brA_BFC2B900 = cpu->gpr[1]; uint32_t psx_brB_BFC2B900 = cpu->gpr[0]; + int psx_taken_BFC2B900 = (psx_brA_BFC2B900 != psx_brB_BFC2B900); + /* 0xBFC2B904: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2B900) goto label_BFC2B304; +label_BFC2B908: + psx_check_interrupts(cpu); + /* 0xBFC2B908: 3C160001 lui $s6, 0x1 */ + cpu->gpr[22] = 0x00010000u; + /* 0xBFC2B90C: 02DDB021 addu $s6, $s6, $sp */ + cpu->gpr[22] = cpu->gpr[22] + cpu->gpr[29]; + /* 0xBFC2B910: AFA0008C sw $zero, 140($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (140)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B910u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC2B914: 8ED621F0 lw $s6, 8688($s6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[22] + (8688)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B914u); return; } cpu->gpr[22] = cpu->read_word(psx_addr); } + /* 0xBFC2B918: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2B91C: 24170010 addiu $s7, $zero, 16 */ + cpu->gpr[23] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC2B920: 241E0004 addiu $fp, $zero, 4 */ + cpu->gpr[30] = (uint32_t)((int32_t)cpu->gpr[0] + (4)); +label_BFC2B924: + psx_check_interrupts(cpu); + /* 0xBFC2B924: 8FA401C0 lw $a0, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B924u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2B928: 0000A021 addu $s4, $zero, $zero */ + cpu->gpr[20] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC2B92C: + psx_check_interrupts(cpu); + /* 0xBFC2B92C: 8FBF008C lw $ra, 140($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (140)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B92Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2B930: 00009021 addu $s2, $zero, $zero */ + cpu->gpr[18] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2B934: 00008821 addu $s1, $zero, $zero */ + cpu->gpr[17] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC2B938: + psx_check_interrupts(cpu); + /* 0xBFC2B938: 03E4082A slt $at, $ra, $a0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[31] < (int32_t)cpu->gpr[4] ? 1 : 0); + /* 0xBFC2B93C: 14200003 bne $at, $zero, 0xBFC2B94C */ + uint32_t psx_brA_BFC2B93C = cpu->gpr[1]; uint32_t psx_brB_BFC2B93C = cpu->gpr[0]; + int psx_taken_BFC2B93C = (psx_brA_BFC2B93C != psx_brB_BFC2B93C); + /* 0xBFC2B940: 03E0A821 addu $s5, $ra, $zero */ + cpu->gpr[21] = cpu->gpr[31] + cpu->gpr[0]; + if (psx_taken_BFC2B93C) goto label_BFC2B94C; +label_BFC2B944: + psx_check_interrupts(cpu); + /* 0xBFC2B944: 100000C0 beq $zero, $zero, 0xBFC2BC48 */ + uint32_t psx_brA_BFC2B944 = cpu->gpr[0]; uint32_t psx_brB_BFC2B944 = cpu->gpr[0]; + int psx_taken_BFC2B944 = (psx_brA_BFC2B944 == psx_brB_BFC2B944); + /* 0xBFC2B948: 26730004 addiu $s3, $s3, 4 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (4)); + if (psx_taken_BFC2B944) goto label_BFC2BC48; +label_BFC2B94C: + psx_check_interrupts(cpu); + /* 0xBFC2B94C: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2B950: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2B954: 001F7140 sll $t6, $ra, 5 */ + cpu->gpr[14] = cpu->gpr[31] << 5u; + /* 0xBFC2B958: 0014C840 sll $t9, $s4, 1 */ + cpu->gpr[25] = cpu->gpr[20] << 1u; + /* 0xBFC2B95C: 01D97821 addu $t7, $t6, $t9 */ + cpu->gpr[15] = cpu->gpr[14] + cpu->gpr[25]; + /* 0xBFC2B960: 03A1C021 addu $t8, $sp, $at */ + cpu->gpr[24] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2B964: 01F86821 addu $t5, $t7, $t8 */ + cpu->gpr[13] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC2B968: 12C00066 beq $s6, $zero, 0xBFC2BB04 */ + uint32_t psx_brA_BFC2B968 = cpu->gpr[22]; uint32_t psx_brB_BFC2B968 = cpu->gpr[0]; + int psx_taken_BFC2B968 = (psx_brA_BFC2B968 == psx_brB_BFC2B968); + /* 0xBFC2B96C: 03F88021 addu $s0, $ra, $t8 */ + cpu->gpr[16] = cpu->gpr[31] + cpu->gpr[24]; + if (psx_taken_BFC2B968) goto label_BFC2BB04; +label_BFC2B970: + psx_check_interrupts(cpu); + /* 0xBFC2B970: 95A2DFF4 lhu $v0, -8204($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B970u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2B974: 00137040 sll $t6, $s3, 1 */ + cpu->gpr[14] = cpu->gpr[19] << 1u; + /* 0xBFC2B978: 000221C2 srl $a0, $v0, 7 */ + cpu->gpr[4] = cpu->gpr[2] >> 7u; + /* 0xBFC2B97C: 00025A02 srl $t3, $v0, 8 */ + cpu->gpr[11] = cpu->gpr[2] >> 8u; + /* 0xBFC2B980: 00022982 srl $a1, $v0, 6 */ + cpu->gpr[5] = cpu->gpr[2] >> 6u; + /* 0xBFC2B984: 30A50001 andi $a1, $a1, 0x1 */ + cpu->gpr[5] = cpu->gpr[5] & 0x1u; + /* 0xBFC2B988: 316B0001 andi $t3, $t3, 0x1 */ + cpu->gpr[11] = cpu->gpr[11] & 0x1u; + /* 0xBFC2B98C: 30840001 andi $a0, $a0, 0x1 */ + cpu->gpr[4] = cpu->gpr[4] & 0x1u; + /* 0xBFC2B990: 01D81821 addu $v1, $t6, $t8 */ + cpu->gpr[3] = cpu->gpr[14] + cpu->gpr[24]; + /* 0xBFC2B994: 008BC825 or $t9, $a0, $t3 */ + cpu->gpr[25] = cpu->gpr[4] | cpu->gpr[11]; + /* 0xBFC2B998: 00057900 sll $t7, $a1, 4 */ + cpu->gpr[15] = cpu->gpr[5] << 4u; + /* 0xBFC2B99C: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B9A0: 0004C100 sll $t8, $a0, 4 */ + cpu->gpr[24] = cpu->gpr[4] << 4u; + /* 0xBFC2B9A4: 00023142 srl $a2, $v0, 5 */ + cpu->gpr[6] = cpu->gpr[2] >> 5u; + /* 0xBFC2B9A8: 30C60001 andi $a2, $a2, 0x1 */ + cpu->gpr[6] = cpu->gpr[6] & 0x1u; + /* 0xBFC2B9AC: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2B9B0: 00067A00 sll $t7, $a2, 8 */ + cpu->gpr[15] = cpu->gpr[6] << 8u; + /* 0xBFC2B9B4: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B9B8: 0005C200 sll $t8, $a1, 8 */ + cpu->gpr[24] = cpu->gpr[5] << 8u; + /* 0xBFC2B9BC: 00023902 srl $a3, $v0, 4 */ + cpu->gpr[7] = cpu->gpr[2] >> 4u; + /* 0xBFC2B9C0: 30E70001 andi $a3, $a3, 0x1 */ + cpu->gpr[7] = cpu->gpr[7] & 0x1u; + /* 0xBFC2B9C4: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2B9C8: 00077B00 sll $t7, $a3, 12 */ + cpu->gpr[15] = cpu->gpr[7] << 12u; + /* 0xBFC2B9CC: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2B9D0: 0006C300 sll $t8, $a2, 12 */ + cpu->gpr[24] = cpu->gpr[6] << 12u; + /* 0xBFC2B9D4: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2B9D8: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2B9DC: 000240C2 srl $t0, $v0, 3 */ + cpu->gpr[8] = cpu->gpr[2] >> 3u; + /* 0xBFC2B9E0: 00024882 srl $t1, $v0, 2 */ + cpu->gpr[9] = cpu->gpr[2] >> 2u; + /* 0xBFC2B9E4: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2B9E8: 31290001 andi $t1, $t1, 0x1 */ + cpu->gpr[9] = cpu->gpr[9] & 0x1u; + /* 0xBFC2B9EC: 31080001 andi $t0, $t0, 0x1 */ + cpu->gpr[8] = cpu->gpr[8] & 0x1u; + /* 0xBFC2B9F0: A439DFF4 sh $t9, -8204($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2B9F0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2B9F4: 01077825 or $t7, $t0, $a3 */ + cpu->gpr[15] = cpu->gpr[8] | cpu->gpr[7]; + /* 0xBFC2B9F8: 00097100 sll $t6, $t1, 4 */ + cpu->gpr[14] = cpu->gpr[9] << 4u; + /* 0xBFC2B9FC: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BA00: 0008C900 sll $t9, $t0, 4 */ + cpu->gpr[25] = cpu->gpr[8] << 4u; + /* 0xBFC2BA04: 00025042 srl $t2, $v0, 1 */ + cpu->gpr[10] = cpu->gpr[2] >> 1u; + /* 0xBFC2BA08: 314A0001 andi $t2, $t2, 0x1 */ + cpu->gpr[10] = cpu->gpr[10] & 0x1u; + /* 0xBFC2BA0C: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BA10: 000A7200 sll $t6, $t2, 8 */ + cpu->gpr[14] = cpu->gpr[10] << 8u; + /* 0xBFC2BA14: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BA18: 0009CA00 sll $t9, $t1, 8 */ + cpu->gpr[25] = cpu->gpr[9] << 8u; + /* 0xBFC2BA1C: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BA20: 304C0001 andi $t4, $v0, 0x1 */ + cpu->gpr[12] = cpu->gpr[2] & 0x1u; + /* 0xBFC2BA24: 000C7300 sll $t6, $t4, 12 */ + cpu->gpr[14] = cpu->gpr[12] << 12u; + /* 0xBFC2BA28: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BA2C: 000ACB00 sll $t9, $t2, 12 */ + cpu->gpr[25] = cpu->gpr[10] << 12u; + /* 0xBFC2BA30: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BA34: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BA38: 00022B82 srl $a1, $v0, 14 */ + cpu->gpr[5] = cpu->gpr[2] >> 14u; + /* 0xBFC2BA3C: 000223C2 srl $a0, $v0, 15 */ + cpu->gpr[4] = cpu->gpr[2] >> 15u; + /* 0xBFC2BA40: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BA44: 30840001 andi $a0, $a0, 0x1 */ + cpu->gpr[4] = cpu->gpr[4] & 0x1u; + /* 0xBFC2BA48: 30A50001 andi $a1, $a1, 0x1 */ + cpu->gpr[5] = cpu->gpr[5] & 0x1u; + /* 0xBFC2BA4C: A42FDFF6 sh $t7, -8202($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BA4Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2BA50: 0005C100 sll $t8, $a1, 4 */ + cpu->gpr[24] = cpu->gpr[5] << 4u; + /* 0xBFC2BA54: 008C7025 or $t6, $a0, $t4 */ + cpu->gpr[14] = cpu->gpr[4] | cpu->gpr[12]; + /* 0xBFC2BA58: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2BA5C: 00047900 sll $t7, $a0, 4 */ + cpu->gpr[15] = cpu->gpr[4] << 4u; + /* 0xBFC2BA60: 00023342 srl $a2, $v0, 13 */ + cpu->gpr[6] = cpu->gpr[2] >> 13u; + /* 0xBFC2BA64: 30C60001 andi $a2, $a2, 0x1 */ + cpu->gpr[6] = cpu->gpr[6] & 0x1u; + /* 0xBFC2BA68: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2BA6C: 0006C200 sll $t8, $a2, 8 */ + cpu->gpr[24] = cpu->gpr[6] << 8u; + /* 0xBFC2BA70: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2BA74: 00057A00 sll $t7, $a1, 8 */ + cpu->gpr[15] = cpu->gpr[5] << 8u; + /* 0xBFC2BA78: 00023B02 srl $a3, $v0, 12 */ + cpu->gpr[7] = cpu->gpr[2] >> 12u; + /* 0xBFC2BA7C: 30E70001 andi $a3, $a3, 0x1 */ + cpu->gpr[7] = cpu->gpr[7] & 0x1u; + /* 0xBFC2BA80: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2BA84: 0007C300 sll $t8, $a3, 12 */ + cpu->gpr[24] = cpu->gpr[7] << 12u; + /* 0xBFC2BA88: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC2BA8C: 00067B00 sll $t7, $a2, 12 */ + cpu->gpr[15] = cpu->gpr[6] << 12u; + /* 0xBFC2BA90: 032F7025 or $t6, $t9, $t7 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2BA94: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BA98: 00024A82 srl $t1, $v0, 10 */ + cpu->gpr[9] = cpu->gpr[2] >> 10u; + /* 0xBFC2BA9C: 000242C2 srl $t0, $v0, 11 */ + cpu->gpr[8] = cpu->gpr[2] >> 11u; + /* 0xBFC2BAA0: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BAA4: 31080001 andi $t0, $t0, 0x1 */ + cpu->gpr[8] = cpu->gpr[8] & 0x1u; + /* 0xBFC2BAA8: 31290001 andi $t1, $t1, 0x1 */ + cpu->gpr[9] = cpu->gpr[9] & 0x1u; + /* 0xBFC2BAAC: A42EDFF8 sh $t6, -8200($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BAACu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC2BAB0: 0009C900 sll $t9, $t1, 4 */ + cpu->gpr[25] = cpu->gpr[9] << 4u; + /* 0xBFC2BAB4: 0107C025 or $t8, $t0, $a3 */ + cpu->gpr[24] = cpu->gpr[8] | cpu->gpr[7]; + /* 0xBFC2BAB8: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BABC: 00087100 sll $t6, $t0, 4 */ + cpu->gpr[14] = cpu->gpr[8] << 4u; + /* 0xBFC2BAC0: 00025242 srl $t2, $v0, 9 */ + cpu->gpr[10] = cpu->gpr[2] >> 9u; + /* 0xBFC2BAC4: 314A0001 andi $t2, $t2, 0x1 */ + cpu->gpr[10] = cpu->gpr[10] & 0x1u; + /* 0xBFC2BAC8: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BACC: 000ACA00 sll $t9, $t2, 8 */ + cpu->gpr[25] = cpu->gpr[10] << 8u; + /* 0xBFC2BAD0: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BAD4: 00097200 sll $t6, $t1, 8 */ + cpu->gpr[14] = cpu->gpr[9] << 8u; + /* 0xBFC2BAD8: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BADC: 000BCB00 sll $t9, $t3, 12 */ + cpu->gpr[25] = cpu->gpr[11] << 12u; + /* 0xBFC2BAE0: 03197825 or $t7, $t8, $t9 */ + cpu->gpr[15] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC2BAE4: 000A7300 sll $t6, $t2, 12 */ + cpu->gpr[14] = cpu->gpr[10] << 12u; + /* 0xBFC2BAE8: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BAEC: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BAF0: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BAF4: A438DFFA sh $t8, -8198($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BAF4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2BAF8: 8FA401C0 lw $a0, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BAF8u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2BAFC: 1000004B beq $zero, $zero, 0xBFC2BC2C */ + uint32_t psx_brA_BFC2BAFC = cpu->gpr[0]; uint32_t psx_brB_BFC2BAFC = cpu->gpr[0]; + int psx_taken_BFC2BAFC = (psx_brA_BFC2BAFC == psx_brB_BFC2BAFC); + /* 0xBFC2BB00: 3C02FFFF lui $v0, 0xFFFF */ + cpu->gpr[2] = 0xFFFF0000u; + if (psx_taken_BFC2BAFC) goto label_BFC2BC2C; +label_BFC2BB04: + psx_check_interrupts(cpu); + /* 0xBFC2BB04: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2BB08: 95A2DFF4 lhu $v0, -8204($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BB08u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2BB0C: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2BB10: 03A17821 addu $t7, $sp, $at */ + cpu->gpr[15] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2BB14: 0013C840 sll $t9, $s3, 1 */ + cpu->gpr[25] = cpu->gpr[19] << 1u; + /* 0xBFC2BB18: 032F1821 addu $v1, $t9, $t7 */ + cpu->gpr[3] = cpu->gpr[25] + cpu->gpr[15]; + /* 0xBFC2BB1C: 0002C982 srl $t9, $v0, 6 */ + cpu->gpr[25] = cpu->gpr[2] >> 6u; + /* 0xBFC2BB20: 000271C2 srl $t6, $v0, 7 */ + cpu->gpr[14] = cpu->gpr[2] >> 7u; + /* 0xBFC2BB24: 31D80001 andi $t8, $t6, 0x1 */ + cpu->gpr[24] = cpu->gpr[14] & 0x1u; + /* 0xBFC2BB28: 332F0001 andi $t7, $t9, 0x1 */ + cpu->gpr[15] = cpu->gpr[25] & 0x1u; + /* 0xBFC2BB2C: 000F7100 sll $t6, $t7, 4 */ + cpu->gpr[14] = cpu->gpr[15] << 4u; + /* 0xBFC2BB30: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2BB34: 00027942 srl $t7, $v0, 5 */ + cpu->gpr[15] = cpu->gpr[2] >> 5u; + /* 0xBFC2BB38: 31F80001 andi $t8, $t7, 0x1 */ + cpu->gpr[24] = cpu->gpr[15] & 0x1u; + /* 0xBFC2BB3C: 00187200 sll $t6, $t8, 8 */ + cpu->gpr[14] = cpu->gpr[24] << 8u; + /* 0xBFC2BB40: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2BB44: 0002C102 srl $t8, $v0, 4 */ + cpu->gpr[24] = cpu->gpr[2] >> 4u; + /* 0xBFC2BB48: 33190001 andi $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1u; + /* 0xBFC2BB4C: 00197300 sll $t6, $t9, 12 */ + cpu->gpr[14] = cpu->gpr[25] << 12u; + /* 0xBFC2BB50: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BB54: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BB58: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BB5C: A438DFF4 sh $t8, -8204($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BB5Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2BB60: 00027082 srl $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] >> 2u; + /* 0xBFC2BB64: 0002C8C2 srl $t9, $v0, 3 */ + cpu->gpr[25] = cpu->gpr[2] >> 3u; + /* 0xBFC2BB68: 332F0001 andi $t7, $t9, 0x1 */ + cpu->gpr[15] = cpu->gpr[25] & 0x1u; + /* 0xBFC2BB6C: 31D80001 andi $t8, $t6, 0x1 */ + cpu->gpr[24] = cpu->gpr[14] & 0x1u; + /* 0xBFC2BB70: 0018C900 sll $t9, $t8, 4 */ + cpu->gpr[25] = cpu->gpr[24] << 4u; + /* 0xBFC2BB74: 01F97025 or $t6, $t7, $t9 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[25]; + /* 0xBFC2BB78: 0002C042 srl $t8, $v0, 1 */ + cpu->gpr[24] = cpu->gpr[2] >> 1u; + /* 0xBFC2BB7C: 330F0001 andi $t7, $t8, 0x1 */ + cpu->gpr[15] = cpu->gpr[24] & 0x1u; + /* 0xBFC2BB80: 000FCA00 sll $t9, $t7, 8 */ + cpu->gpr[25] = cpu->gpr[15] << 8u; + /* 0xBFC2BB84: 01D9C025 or $t8, $t6, $t9 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[25]; + /* 0xBFC2BB88: 304F0001 andi $t7, $v0, 0x1 */ + cpu->gpr[15] = cpu->gpr[2] & 0x1u; + /* 0xBFC2BB8C: 000F7300 sll $t6, $t7, 12 */ + cpu->gpr[14] = cpu->gpr[15] << 12u; + /* 0xBFC2BB90: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2BB94: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BB98: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BB9C: A439DFF6 sh $t9, -8202($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BB9Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2BBA0: 00027382 srl $t6, $v0, 14 */ + cpu->gpr[14] = cpu->gpr[2] >> 14u; + /* 0xBFC2BBA4: 00027BC2 srl $t7, $v0, 15 */ + cpu->gpr[15] = cpu->gpr[2] >> 15u; + /* 0xBFC2BBA8: 31F80001 andi $t8, $t7, 0x1 */ + cpu->gpr[24] = cpu->gpr[15] & 0x1u; + /* 0xBFC2BBAC: 31D90001 andi $t9, $t6, 0x1 */ + cpu->gpr[25] = cpu->gpr[14] & 0x1u; + /* 0xBFC2BBB0: 00197900 sll $t7, $t9, 4 */ + cpu->gpr[15] = cpu->gpr[25] << 4u; + /* 0xBFC2BBB4: 030F7025 or $t6, $t8, $t7 */ + cpu->gpr[14] = cpu->gpr[24] | cpu->gpr[15]; + /* 0xBFC2BBB8: 0002CB42 srl $t9, $v0, 13 */ + cpu->gpr[25] = cpu->gpr[2] >> 13u; + /* 0xBFC2BBBC: 33380001 andi $t8, $t9, 0x1 */ + cpu->gpr[24] = cpu->gpr[25] & 0x1u; + /* 0xBFC2BBC0: 00187A00 sll $t7, $t8, 8 */ + cpu->gpr[15] = cpu->gpr[24] << 8u; + /* 0xBFC2BBC4: 01CFC825 or $t9, $t6, $t7 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[15]; + /* 0xBFC2BBC8: 0002C302 srl $t8, $v0, 12 */ + cpu->gpr[24] = cpu->gpr[2] >> 12u; + /* 0xBFC2BBCC: 330E0001 andi $t6, $t8, 0x1 */ + cpu->gpr[14] = cpu->gpr[24] & 0x1u; + /* 0xBFC2BBD0: 000E7B00 sll $t7, $t6, 12 */ + cpu->gpr[15] = cpu->gpr[14] << 12u; + /* 0xBFC2BBD4: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2BBD8: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BBDC: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BBE0: A438DFF8 sh $t8, -8200($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8200)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BBE0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2BBE4: 00027A82 srl $t7, $v0, 10 */ + cpu->gpr[15] = cpu->gpr[2] >> 10u; + /* 0xBFC2BBE8: 000272C2 srl $t6, $v0, 11 */ + cpu->gpr[14] = cpu->gpr[2] >> 11u; + /* 0xBFC2BBEC: 31D90001 andi $t9, $t6, 0x1 */ + cpu->gpr[25] = cpu->gpr[14] & 0x1u; + /* 0xBFC2BBF0: 31F80001 andi $t8, $t7, 0x1 */ + cpu->gpr[24] = cpu->gpr[15] & 0x1u; + /* 0xBFC2BBF4: 00187100 sll $t6, $t8, 4 */ + cpu->gpr[14] = cpu->gpr[24] << 4u; + /* 0xBFC2BBF8: 032E7825 or $t7, $t9, $t6 */ + cpu->gpr[15] = cpu->gpr[25] | cpu->gpr[14]; + /* 0xBFC2BBFC: 0002C242 srl $t8, $v0, 9 */ + cpu->gpr[24] = cpu->gpr[2] >> 9u; + /* 0xBFC2BC00: 33190001 andi $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1u; + /* 0xBFC2BC04: 00197200 sll $t6, $t9, 8 */ + cpu->gpr[14] = cpu->gpr[25] << 8u; + /* 0xBFC2BC08: 01EEC025 or $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[14]; + /* 0xBFC2BC0C: 0002CA02 srl $t9, $v0, 8 */ + cpu->gpr[25] = cpu->gpr[2] >> 8u; + /* 0xBFC2BC10: 332F0001 andi $t7, $t9, 0x1 */ + cpu->gpr[15] = cpu->gpr[25] & 0x1u; + /* 0xBFC2BC14: 000F7300 sll $t6, $t7, 12 */ + cpu->gpr[14] = cpu->gpr[15] << 12u; + /* 0xBFC2BC18: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC2BC1C: 00230821 addu $at, $at, $v1 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[3]; + /* 0xBFC2BC20: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2BC24: A439DFFA sh $t9, -8198($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-8198)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BC24u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2BC28: 3C02FFFF lui $v0, 0xFFFF */ + cpu->gpr[2] = 0xFFFF0000u; +label_BFC2BC2C: + psx_check_interrupts(cpu); + /* 0xBFC2BC2C: 00501021 addu $v0, $v0, $s0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[16]; + /* 0xBFC2BC30: 9042DED0 lbu $v0, -8496($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-8496))); + /* 0xBFC2BC34: 00000000 nop */ + /* nop */ + /* 0xBFC2BC38: 00021082 srl $v0, $v0, 2 */ + cpu->gpr[2] = cpu->gpr[2] >> 2u; + /* 0xBFC2BC3C: 03C27823 subu $t7, $fp, $v0 */ + cpu->gpr[15] = cpu->gpr[30] - cpu->gpr[2]; + /* 0xBFC2BC40: 024F9021 addu $s2, $s2, $t7 */ + cpu->gpr[18] = cpu->gpr[18] + cpu->gpr[15]; + /* 0xBFC2BC44: 02629821 addu $s3, $s3, $v0 */ + cpu->gpr[19] = cpu->gpr[19] + cpu->gpr[2]; +label_BFC2BC48: + psx_check_interrupts(cpu); + /* 0xBFC2BC48: 26310001 addiu $s1, $s1, 1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[17] + (1)); + /* 0xBFC2BC4C: 1637FF3A bne $s1, $s7, 0xBFC2B938 */ + uint32_t psx_brA_BFC2BC4C = cpu->gpr[17]; uint32_t psx_brB_BFC2BC4C = cpu->gpr[23]; + int psx_taken_BFC2BC4C = (psx_brA_BFC2BC4C != psx_brB_BFC2BC4C); + /* 0xBFC2BC50: 27FF0001 addiu $ra, $ra, 1 */ + cpu->gpr[31] = (uint32_t)((int32_t)cpu->gpr[31] + (1)); + if (psx_taken_BFC2BC4C) goto label_BFC2B938; +label_BFC2BC54: + psx_check_interrupts(cpu); + /* 0xBFC2BC54: 26940001 addiu $s4, $s4, 1 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (1)); + /* 0xBFC2BC58: 2A810010 slti $at, $s4, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[20] < (16) ? 1 : 0); + /* 0xBFC2BC5C: 1420FF33 bne $at, $zero, 0xBFC2B92C */ + uint32_t psx_brA_BFC2BC5C = cpu->gpr[1]; uint32_t psx_brB_BFC2BC5C = cpu->gpr[0]; + int psx_taken_BFC2BC5C = (psx_brA_BFC2BC5C != psx_brB_BFC2BC5C); + /* 0xBFC2BC60: 02729821 addu $s3, $s3, $s2 */ + cpu->gpr[19] = cpu->gpr[19] + cpu->gpr[18]; + if (psx_taken_BFC2BC5C) goto label_BFC2B92C; +label_BFC2BC64: + psx_check_interrupts(cpu); + /* 0xBFC2BC64: 02A4082A slt $at, $s5, $a0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[21] < (int32_t)cpu->gpr[4] ? 1 : 0); + /* 0xBFC2BC68: 10200008 beq $at, $zero, 0xBFC2BC8C */ + uint32_t psx_brA_BFC2BC68 = cpu->gpr[1]; uint32_t psx_brB_BFC2BC68 = cpu->gpr[0]; + int psx_taken_BFC2BC68 = (psx_brA_BFC2BC68 == psx_brB_BFC2BC68); + /* 0xBFC2BC6C: 28810010 slti $at, $a0, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (16) ? 1 : 0); + if (psx_taken_BFC2BC68) goto label_BFC2BC8C; +label_BFC2BC70: + psx_check_interrupts(cpu); + /* 0xBFC2BC70: 8FB8008C lw $t8, 140($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (140)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BC70u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2BC74: 00000000 nop */ + /* nop */ + /* 0xBFC2BC78: 270E0010 addiu $t6, $t8, 16 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[24] + (16)); + /* 0xBFC2BC7C: 29C10100 slti $at, $t6, 256 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[14] < (256) ? 1 : 0); + /* 0xBFC2BC80: 1420FF28 bne $at, $zero, 0xBFC2B924 */ + uint32_t psx_brA_BFC2BC80 = cpu->gpr[1]; uint32_t psx_brB_BFC2BC80 = cpu->gpr[0]; + int psx_taken_BFC2BC80 = (psx_brA_BFC2BC80 != psx_brB_BFC2BC80); + /* 0xBFC2BC84: AFAE008C sw $t6, 140($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (140)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BC84u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC2BC80) goto label_BFC2B924; +label_BFC2BC88: + psx_check_interrupts(cpu); + /* 0xBFC2BC88: 28810010 slti $at, $a0, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (16) ? 1 : 0); +label_BFC2BC8C: + psx_check_interrupts(cpu); + /* 0xBFC2BC8C: 1020000A beq $at, $zero, 0xBFC2BCB8 */ + uint32_t psx_brA_BFC2BC8C = cpu->gpr[1]; uint32_t psx_brB_BFC2BC8C = cpu->gpr[0]; + int psx_taken_BFC2BC8C = (psx_brA_BFC2BC8C == psx_brB_BFC2BC8C); + /* 0xBFC2BC90: 2491FFFF addiu $s1, $a0, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[4] + (-1)); + if (psx_taken_BFC2BC8C) goto label_BFC2BCB8; +label_BFC2BC94: + psx_check_interrupts(cpu); + /* 0xBFC2BC94: 2491FFFF addiu $s1, $a0, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[4] + (-1)); + /* 0xBFC2BC98: 0004B140 sll $s6, $a0, 5 */ + cpu->gpr[22] = cpu->gpr[4] << 5u; + /* 0xBFC2BC9C: 06210002 bgez $s1, 0xBFC2BCA8 */ + uint32_t psx_brA_BFC2BC9C = cpu->gpr[17]; + int psx_taken_BFC2BC9C = ((int32_t)psx_brA_BFC2BC9C >= 0); + /* 0xBFC2BCA0: 02200821 addu $at, $s1, $zero */ + cpu->gpr[1] = cpu->gpr[17] + cpu->gpr[0]; + if (psx_taken_BFC2BC9C) goto label_BFC2BCA8; +label_BFC2BCA4: + psx_check_interrupts(cpu); + /* 0xBFC2BCA4: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2BCA8: + psx_check_interrupts(cpu); + /* 0xBFC2BCA8: 00019903 sra $s3, $at, 4 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2BCAC: 10000009 beq $zero, $zero, 0xBFC2BCD4 */ + uint32_t psx_brA_BFC2BCAC = cpu->gpr[0]; uint32_t psx_brB_BFC2BCAC = cpu->gpr[0]; + int psx_taken_BFC2BCAC = (psx_brA_BFC2BCAC == psx_brB_BFC2BCAC); + /* 0xBFC2BCB0: 3C120001 lui $s2, 0x1 */ + cpu->gpr[18] = 0x00010000u; + if (psx_taken_BFC2BCAC) goto label_BFC2BCD4; +label_BFC2BCB4: + psx_check_interrupts(cpu); + /* 0xBFC2BCB4: 2491FFFF addiu $s1, $a0, -1 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[4] + (-1)); +label_BFC2BCB8: + psx_check_interrupts(cpu); + /* 0xBFC2BCB8: 06210002 bgez $s1, 0xBFC2BCC4 */ + uint32_t psx_brA_BFC2BCB8 = cpu->gpr[17]; + int psx_taken_BFC2BCB8 = ((int32_t)psx_brA_BFC2BCB8 >= 0); + /* 0xBFC2BCBC: 02200821 addu $at, $s1, $zero */ + cpu->gpr[1] = cpu->gpr[17] + cpu->gpr[0]; + if (psx_taken_BFC2BCB8) goto label_BFC2BCC4; +label_BFC2BCC0: + psx_check_interrupts(cpu); + /* 0xBFC2BCC0: 2421000F addiu $at, $at, 15 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (15)); +label_BFC2BCC4: + psx_check_interrupts(cpu); + /* 0xBFC2BCC4: 00019903 sra $s3, $at, 4 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[1] >> 4u); + /* 0xBFC2BCC8: 0013B240 sll $s6, $s3, 9 */ + cpu->gpr[22] = cpu->gpr[19] << 9u; + /* 0xBFC2BCCC: 26D60200 addiu $s6, $s6, 512 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] + (512)); + /* 0xBFC2BCD0: 3C120001 lui $s2, 0x1 */ + cpu->gpr[18] = 0x00010000u; +label_BFC2BCD4: + psx_check_interrupts(cpu); + /* 0xBFC2BCD4: 025D9021 addu $s2, $s2, $sp */ + cpu->gpr[18] = cpu->gpr[18] + cpu->gpr[29]; + /* 0xBFC2BCD8: 8E5221D4 lw $s2, 8660($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (8660)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BCD8u); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC2BCDC: 00168080 sll $s0, $s6, 2 */ + cpu->gpr[16] = cpu->gpr[22] << 2u; + /* 0xBFC2BCE0: 26050040 addiu $a1, $s0, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[16] + (64)); + /* 0xBFC2BCE4: 0C010C8B jal 0xB004322C */ + /* 0xBFC2BCE8: 02402021 addu $a0, $s2, $zero */ + cpu->gpr[4] = cpu->gpr[18] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC2BCECu; + psx_dispatch(cpu, 0x8004322Cu); +label_BFC2BCEC: + psx_check_interrupts(cpu); + /* 0xBFC2BCEC: 8FA301C0 lw $v1, 448($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (448)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BCECu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2BCF0: 240F0008 addiu $t7, $zero, 8 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (8)); + /* 0xBFC2BCF4: 24190010 addiu $t9, $zero, 16 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC2BCF8: AE4F0004 sw $t7, 4($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BCF8u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC2BCFC: 2418002C addiu $t8, $zero, 44 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (44)); + /* 0xBFC2BD00: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2BD04: AE590000 sw $t9, 0($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD04u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC2BD08: AE580008 sw $t8, 8($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD08u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC2BD0C: 01DD7021 addu $t6, $t6, $sp */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[29]; + /* 0xBFC2BD10: 3C0F0001 lui $t7, 0x1 */ + cpu->gpr[15] = 0x00010000u; + /* 0xBFC2BD14: 8DCE21E4 lw $t6, 8676($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8676)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD14u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2BD18: 01FD7821 addu $t7, $t7, $sp */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[29]; + /* 0xBFC2BD1C: 8DEF21E0 lw $t7, 8672($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8672)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD1Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2BD20: 000ECC00 sll $t9, $t6, 16 */ + cpu->gpr[25] = cpu->gpr[14] << 16u; + /* 0xBFC2BD24: 032FC025 or $t8, $t9, $t7 */ + cpu->gpr[24] = cpu->gpr[25] | cpu->gpr[15]; + /* 0xBFC2BD28: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2BD2C: AE58000C sw $t8, 12($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD2Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC2BD30: 35CE0010 ori $t6, $t6, 0x10 */ + cpu->gpr[14] = cpu->gpr[14] | 0x10u; + /* 0xBFC2BD34: 3C190001 lui $t9, 0x1 */ + cpu->gpr[25] = 0x00010000u; + /* 0xBFC2BD38: AE4E0010 sw $t6, 16($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD38u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2BD3C: 033DC821 addu $t9, $t9, $sp */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[29]; + /* 0xBFC2BD40: 3C180001 lui $t8, 0x1 */ + cpu->gpr[24] = 0x00010000u; + /* 0xBFC2BD44: 8F3921E8 lw $t9, 8680($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (8680)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD44u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2BD48: 031DC021 addu $t8, $t8, $sp */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[29]; + /* 0xBFC2BD4C: 8F1821EC lw $t8, 8684($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (8684)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD4Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2BD50: 00197C00 sll $t7, $t9, 16 */ + cpu->gpr[15] = cpu->gpr[25] << 16u; + /* 0xBFC2BD54: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2BD58: AE4E0014 sw $t6, 20($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD58u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2BD5C: 2619000C addiu $t9, $s0, 12 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[16] + (12)); + /* 0xBFC2BD60: 3C0F0001 lui $t7, 0x1 */ + cpu->gpr[15] = 0x00010000u; + /* 0xBFC2BD64: AE590034 sw $t9, 52($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD64u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC2BD68: 01FD7821 addu $t7, $t7, $sp */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[29]; + /* 0xBFC2BD6C: 3C0E0001 lui $t6, 0x1 */ + cpu->gpr[14] = 0x00010000u; + /* 0xBFC2BD70: 8DEF21DC lw $t7, 8668($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD70u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2BD74: 01DD7021 addu $t6, $t6, $sp */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[29]; + /* 0xBFC2BD78: 8DCE21D8 lw $t6, 8664($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8664)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD78u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2BD7C: 000FC400 sll $t8, $t7, 16 */ + cpu->gpr[24] = cpu->gpr[15] << 16u; + /* 0xBFC2BD80: 28610011 slti $at, $v1, 17 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (17) ? 1 : 0); + /* 0xBFC2BD84: 030EC825 or $t9, $t8, $t6 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[14]; + /* 0xBFC2BD88: 14200003 bne $at, $zero, 0xBFC2BD98 */ + uint32_t psx_brA_BFC2BD88 = cpu->gpr[1]; uint32_t psx_brB_BFC2BD88 = cpu->gpr[0]; + int psx_taken_BFC2BD88 = (psx_brA_BFC2BD88 != psx_brB_BFC2BD88); + /* 0xBFC2BD8C: AE590038 sw $t9, 56($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BD8Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + if (psx_taken_BFC2BD88) goto label_BFC2BD98; +label_BFC2BD90: + psx_check_interrupts(cpu); + /* 0xBFC2BD90: 10000008 beq $zero, $zero, 0xBFC2BDB4 */ + uint32_t psx_brA_BFC2BD90 = cpu->gpr[0]; uint32_t psx_brB_BFC2BD90 = cpu->gpr[0]; + int psx_taken_BFC2BD90 = (psx_brA_BFC2BD90 == psx_brB_BFC2BD90); + /* 0xBFC2BD94: 24020040 addiu $v0, $zero, 64 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + if (psx_taken_BFC2BD90) goto label_BFC2BDB4; +label_BFC2BD98: + psx_check_interrupts(cpu); + /* 0xBFC2BD98: 06210004 bgez $s1, 0xBFC2BDAC */ + uint32_t psx_brA_BFC2BD98 = cpu->gpr[17]; + int psx_taken_BFC2BD98 = ((int32_t)psx_brA_BFC2BD98 >= 0); + /* 0xBFC2BD9C: 3222000F andi $v0, $s1, 0xF */ + cpu->gpr[2] = cpu->gpr[17] & 0xFu; + if (psx_taken_BFC2BD98) goto label_BFC2BDAC; +label_BFC2BDA0: + psx_check_interrupts(cpu); + /* 0xBFC2BDA0: 10400002 beq $v0, $zero, 0xBFC2BDAC */ + uint32_t psx_brA_BFC2BDA0 = cpu->gpr[2]; uint32_t psx_brB_BFC2BDA0 = cpu->gpr[0]; + int psx_taken_BFC2BDA0 = (psx_brA_BFC2BDA0 == psx_brB_BFC2BDA0); + /* 0xBFC2BDA4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2BDA0) goto label_BFC2BDAC; +label_BFC2BDA8: + psx_check_interrupts(cpu); + /* 0xBFC2BDA8: 2442FFF0 addiu $v0, $v0, -16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-16)); +label_BFC2BDAC: + psx_check_interrupts(cpu); + /* 0xBFC2BDAC: 00021080 sll $v0, $v0, 2 */ + cpu->gpr[2] = cpu->gpr[2] << 2u; + /* 0xBFC2BDB0: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); +label_BFC2BDB4: + psx_check_interrupts(cpu); + /* 0xBFC2BDB4: 00137900 sll $t7, $s3, 4 */ + cpu->gpr[15] = cpu->gpr[19] << 4u; + /* 0xBFC2BDB8: 25F80010 addiu $t8, $t7, 16 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[15] + (16)); + /* 0xBFC2BDBC: 00187400 sll $t6, $t8, 16 */ + cpu->gpr[14] = cpu->gpr[24] << 16u; + /* 0xBFC2BDC0: 01C2C825 or $t9, $t6, $v0 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[2]; + /* 0xBFC2BDC4: 28610010 slti $at, $v1, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (16) ? 1 : 0); + /* 0xBFC2BDC8: 10200025 beq $at, $zero, 0xBFC2BE60 */ + uint32_t psx_brA_BFC2BDC8 = cpu->gpr[1]; uint32_t psx_brB_BFC2BDC8 = cpu->gpr[0]; + int psx_taken_BFC2BDC8 = (psx_brA_BFC2BDC8 == psx_brB_BFC2BDC8); + /* 0xBFC2BDCC: AE59003C sw $t9, 60($s2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[18] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BDCCu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + if (psx_taken_BFC2BDC8) goto label_BFC2BE60; +label_BFC2BDD0: + psx_check_interrupts(cpu); + /* 0xBFC2BDD0: 0000A021 addu $s4, $zero, $zero */ + cpu->gpr[20] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2BDD4: 0000A821 addu $s5, $zero, $zero */ + cpu->gpr[21] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2BDD8: 1AC0003A blez $s6, 0xBFC2BEC4 */ + uint32_t psx_brA_BFC2BDD8 = cpu->gpr[22]; + int psx_taken_BFC2BDD8 = ((int32_t)psx_brA_BFC2BDD8 <= 0); + /* 0xBFC2BDDC: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2BDD8) goto label_BFC2BEC4; +label_BFC2BDE0: + psx_check_interrupts(cpu); + /* 0xBFC2BDE0: 00032080 sll $a0, $v1, 2 */ + cpu->gpr[4] = cpu->gpr[3] << 2u; + /* 0xBFC2BDE4: 02401021 addu $v0, $s2, $zero */ + cpu->gpr[2] = cpu->gpr[18] + cpu->gpr[0]; +label_BFC2BDE8: + psx_check_interrupts(cpu); + /* 0xBFC2BDE8: 06A10004 bgez $s5, 0xBFC2BDFC */ + uint32_t psx_brA_BFC2BDE8 = cpu->gpr[21]; + int psx_taken_BFC2BDE8 = ((int32_t)psx_brA_BFC2BDE8 >= 0); + /* 0xBFC2BDEC: 32AF003F andi $t7, $s5, 0x3F */ + cpu->gpr[15] = cpu->gpr[21] & 0x3Fu; + if (psx_taken_BFC2BDE8) goto label_BFC2BDFC; +label_BFC2BDF0: + psx_check_interrupts(cpu); + /* 0xBFC2BDF0: 11E00002 beq $t7, $zero, 0xBFC2BDFC */ + uint32_t psx_brA_BFC2BDF0 = cpu->gpr[15]; uint32_t psx_brB_BFC2BDF0 = cpu->gpr[0]; + int psx_taken_BFC2BDF0 = (psx_brA_BFC2BDF0 == psx_brB_BFC2BDF0); + /* 0xBFC2BDF4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2BDF0) goto label_BFC2BDFC; +label_BFC2BDF8: + psx_check_interrupts(cpu); + /* 0xBFC2BDF8: 25EFFFC0 addiu $t7, $t7, -64 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-64)); +label_BFC2BDFC: + psx_check_interrupts(cpu); + /* 0xBFC2BDFC: 01E4082A slt $at, $t7, $a0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[15] < (int32_t)cpu->gpr[4] ? 1 : 0); + /* 0xBFC2BE00: 14200004 bne $at, $zero, 0xBFC2BE14 */ + uint32_t psx_brA_BFC2BE00 = cpu->gpr[1]; uint32_t psx_brB_BFC2BE00 = cpu->gpr[0]; + int psx_taken_BFC2BE00 = (psx_brA_BFC2BE00 != psx_brB_BFC2BE00); + /* 0xBFC2BE04: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC2BE00) goto label_BFC2BE14; +label_BFC2BE08: + psx_check_interrupts(cpu); + /* 0xBFC2BE08: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC2BE0C: 0005A980 sll $s5, $a1, 6 */ + cpu->gpr[21] = cpu->gpr[5] << 6u; + /* 0xBFC2BE10: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; +label_BFC2BE14: + psx_check_interrupts(cpu); + /* 0xBFC2BE14: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2BE18: 03A17021 addu $t6, $sp, $at */ + cpu->gpr[14] = cpu->gpr[29] + cpu->gpr[1]; + /* 0xBFC2BE1C: 0015C040 sll $t8, $s5, 1 */ + cpu->gpr[24] = cpu->gpr[21] << 1u; + /* 0xBFC2BE20: 030E1821 addu $v1, $t8, $t6 */ + cpu->gpr[3] = cpu->gpr[24] + cpu->gpr[14]; + /* 0xBFC2BE24: 3C0FFFFF lui $t7, 0xFFFF */ + cpu->gpr[15] = 0xFFFF0000u; + /* 0xBFC2BE28: 01E37821 addu $t7, $t7, $v1 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[3]; + /* 0xBFC2BE2C: 3C19FFFF lui $t9, 0xFFFF */ + cpu->gpr[25] = 0xFFFF0000u; + /* 0xBFC2BE30: 95EFDFF6 lhu $t7, -8202($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BE30u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2BE34: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2BE38: 9739DFF4 lhu $t9, -8204($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BE38u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2BE3C: 000FC400 sll $t8, $t7, 16 */ + cpu->gpr[24] = cpu->gpr[15] << 16u; + /* 0xBFC2BE40: 26940001 addiu $s4, $s4, 1 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (1)); + /* 0xBFC2BE44: 03387025 or $t6, $t9, $t8 */ + cpu->gpr[14] = cpu->gpr[25] | cpu->gpr[24]; + /* 0xBFC2BE48: AC4E0040 sw $t6, 64($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BE48u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2BE4C: 26B50002 addiu $s5, $s5, 2 */ + cpu->gpr[21] = (uint32_t)((int32_t)cpu->gpr[21] + (2)); + /* 0xBFC2BE50: 1696FFE5 bne $s4, $s6, 0xBFC2BDE8 */ + uint32_t psx_brA_BFC2BE50 = cpu->gpr[20]; uint32_t psx_brB_BFC2BE50 = cpu->gpr[22]; + int psx_taken_BFC2BE50 = (psx_brA_BFC2BE50 != psx_brB_BFC2BE50); + /* 0xBFC2BE54: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + if (psx_taken_BFC2BE50) goto label_BFC2BDE8; +label_BFC2BE58: + psx_check_interrupts(cpu); + /* 0xBFC2BE58: 1000001B beq $zero, $zero, 0xBFC2BEC8 */ + uint32_t psx_brA_BFC2BE58 = cpu->gpr[0]; uint32_t psx_brB_BFC2BE58 = cpu->gpr[0]; + int psx_taken_BFC2BE58 = (psx_brA_BFC2BE58 == psx_brB_BFC2BE58); + /* 0xBFC2BE5C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2BE58) goto label_BFC2BEC8; +label_BFC2BE60: + psx_check_interrupts(cpu); + /* 0xBFC2BE60: 00161040 sll $v0, $s6, 1 */ + cpu->gpr[2] = cpu->gpr[22] << 1u; + /* 0xBFC2BE64: 18400017 blez $v0, 0xBFC2BEC4 */ + uint32_t psx_brA_BFC2BE64 = cpu->gpr[2]; + int psx_taken_BFC2BE64 = ((int32_t)psx_brA_BFC2BE64 <= 0); + /* 0xBFC2BE68: 0000A021 addu $s4, $zero, $zero */ + cpu->gpr[20] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2BE64) goto label_BFC2BEC4; +label_BFC2BE6C: + psx_check_interrupts(cpu); + /* 0xBFC2BE6C: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2BE70: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2BE74: 03A11821 addu $v1, $sp, $at */ + cpu->gpr[3] = cpu->gpr[29] + cpu->gpr[1]; +label_BFC2BE78: + psx_check_interrupts(cpu); + /* 0xBFC2BE78: 3C19FFFF lui $t9, 0xFFFF */ + cpu->gpr[25] = 0xFFFF0000u; + /* 0xBFC2BE7C: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2BE80: 9739DFF6 lhu $t9, -8202($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-8202)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BE80u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2BE84: 3C0FFFFF lui $t7, 0xFFFF */ + cpu->gpr[15] = 0xFFFF0000u; + /* 0xBFC2BE88: 0019C400 sll $t8, $t9, 16 */ + cpu->gpr[24] = cpu->gpr[25] << 16u; + /* 0xBFC2BE8C: 01E37821 addu $t7, $t7, $v1 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[3]; + /* 0xBFC2BE90: 95EFDFF4 lhu $t7, -8204($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-8204)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BE90u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC2BE94: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC2BE98: 01F87025 or $t6, $t7, $t8 */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC2BE9C: 06810002 bgez $s4, 0xBFC2BEA8 */ + uint32_t psx_brA_BFC2BE9C = cpu->gpr[20]; + int psx_taken_BFC2BE9C = ((int32_t)psx_brA_BFC2BE9C >= 0); + /* 0xBFC2BEA0: 02800821 addu $at, $s4, $zero */ + cpu->gpr[1] = cpu->gpr[20] + cpu->gpr[0]; + if (psx_taken_BFC2BE9C) goto label_BFC2BEA8; +label_BFC2BEA4: + psx_check_interrupts(cpu); + /* 0xBFC2BEA4: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2BEA8: + psx_check_interrupts(cpu); + /* 0xBFC2BEA8: 0001C843 sra $t9, $at, 1 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2BEAC: 00197880 sll $t7, $t9, 2 */ + cpu->gpr[15] = cpu->gpr[25] << 2u; + /* 0xBFC2BEB0: 26940002 addiu $s4, $s4, 2 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] + (2)); + /* 0xBFC2BEB4: 024FC021 addu $t8, $s2, $t7 */ + cpu->gpr[24] = cpu->gpr[18] + cpu->gpr[15]; + /* 0xBFC2BEB8: 0282082A slt $at, $s4, $v0 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[20] < (int32_t)cpu->gpr[2] ? 1 : 0); + /* 0xBFC2BEBC: 1420FFEE bne $at, $zero, 0xBFC2BE78 */ + uint32_t psx_brA_BFC2BEBC = cpu->gpr[1]; uint32_t psx_brB_BFC2BEBC = cpu->gpr[0]; + int psx_taken_BFC2BEBC = (psx_brA_BFC2BEBC != psx_brB_BFC2BEBC); + /* 0xBFC2BEC0: AF0E0040 sw $t6, 64($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEC0u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC2BEBC) goto label_BFC2BE78; +label_BFC2BEC4: + psx_check_interrupts(cpu); + /* 0xBFC2BEC4: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC2BEC8: + psx_check_interrupts(cpu); + /* 0xBFC2BEC8: 8FBF005C lw $ra, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEC8u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2BECC: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC2BED0: 342121D0 ori $at, $at, 0x21D0 */ + cpu->gpr[1] = cpu->gpr[1] | 0x21D0u; + /* 0xBFC2BED4: 8FB00038 lw $s0, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BED4u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC2BED8: 8FB1003C lw $s1, 60($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BED8u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC2BEDC: 8FB20040 lw $s2, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEDCu); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC2BEE0: 8FB30044 lw $s3, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEE0u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC2BEE4: 8FB40048 lw $s4, 72($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (72)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEE4u); return; } cpu->gpr[20] = cpu->read_word(psx_addr); } + /* 0xBFC2BEE8: 8FB5004C lw $s5, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEE8u); return; } cpu->gpr[21] = cpu->read_word(psx_addr); } + /* 0xBFC2BEEC: 8FB60050 lw $s6, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEECu); return; } cpu->gpr[22] = cpu->read_word(psx_addr); } + /* 0xBFC2BEF0: 8FB70054 lw $s7, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEF0u); return; } cpu->gpr[23] = cpu->read_word(psx_addr); } + /* 0xBFC2BEF4: 8FBE0058 lw $fp, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BEF4u); return; } cpu->gpr[30] = cpu->read_word(psx_addr); } + /* 0xBFC2BEF8: 03E00008 jr $ra */ + /* 0xBFC2BEFC: 03A1E821 addu $sp, $sp, $at */ + cpu->gpr[29] = cpu->gpr[29] + cpu->gpr[1]; + return; +} + +void func_1FC2BF00(CPUState* cpu) { +label_BFC2BF00: + psx_check_interrupts(cpu); + /* 0xBFC2BF00: 3C028009 lui $v0, 0x8009 */ + cpu->gpr[2] = 0x80090000u; + /* 0xBFC2BF04: 8C429D6C lw $v0, -25236($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25236)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BF04u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2BF08: 03E00008 jr $ra */ + /* 0xBFC2BF0C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2BF10(CPUState* cpu) { +label_BFC2BF10: + psx_check_interrupts(cpu); + /* 0xBFC2BF10: 3C018009 lui $at, 0x8009 */ + cpu->gpr[1] = 0x80090000u; + /* 0xBFC2BF14: 03E00008 jr $ra */ + /* 0xBFC2BF18: AC249D6C sw $a0, -25236($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25236)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2BF18u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + return; +} + void func_1FC2BF1C(CPUState* cpu) { label_BFC2BF1C: psx_check_interrupts(cpu); @@ -91462,6 +100839,161 @@ label_BFC2C1B4: return; } +void func_1FC2C1C4(CPUState* cpu) { +label_BFC2C1C4: + psx_check_interrupts(cpu); + /* 0xBFC2C1C4: 8C8E0000 lw $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, 0xBFC2C1C4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2C1C8: 00000000 nop */ + /* nop */ + /* 0xBFC2C1CC: 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, 0xBFC2C1CCu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2C1D0: 8CAF0000 lw $t7, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C1D0u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2C1D4: 00000000 nop */ + /* nop */ + /* 0xBFC2C1D8: 000FC0C2 srl $t8, $t7, 3 */ + cpu->gpr[24] = cpu->gpr[15] >> 3u; + /* 0xBFC2C1DC: 33190001 andi $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1u; + /* 0xBFC2C1E0: 1320002B beq $t9, $zero, 0xBFC2C290 */ + uint32_t psx_brA_BFC2C1E0 = cpu->gpr[25]; uint32_t psx_brB_BFC2C1E0 = cpu->gpr[0]; + int psx_taken_BFC2C1E0 = (psx_brA_BFC2C1E0 == psx_brB_BFC2C1E0); + /* 0xBFC2C1E4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2C1E0) goto label_BFC2C290; +label_BFC2C1E8: + psx_check_interrupts(cpu); + /* 0xBFC2C1E8: 8C8B0008 lw $t3, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C1E8u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC2C1EC: 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, 0xBFC2C1ECu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC2C1F0: 316CFFFF andi $t4, $t3, 0xFFFF */ + cpu->gpr[12] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC2C1F4: A4AC0010 sh $t4, 16($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C1F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC2C1F8: 8C8D0008 lw $t5, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C1F8u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC2C1FC: 00084882 srl $t1, $t0, 2 */ + cpu->gpr[9] = cpu->gpr[8] >> 2u; + /* 0xBFC2C200: 000D7402 srl $t6, $t5, 16 */ + cpu->gpr[14] = cpu->gpr[13] >> 16u; + /* 0xBFC2C204: 31CFFFFF andi $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFFu; + /* 0xBFC2C208: A4AF0012 sh $t7, 18($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C208u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2C20C: 8C98000C lw $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, 0xBFC2C20Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2C210: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C214: 3319FFFF andi $t9, $t8, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFFFu; + /* 0xBFC2C218: 00095080 sll $t2, $t1, 2 */ + cpu->gpr[10] = cpu->gpr[9] << 2u; + /* 0xBFC2C21C: A4B90014 sh $t9, 20($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (20)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C21Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2C220: 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, 0xBFC2C220u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC2C224: 008A1021 addu $v0, $a0, $t2 */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[10]; + /* 0xBFC2C228: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C22C: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C230: 00084C02 srl $t1, $t0, 16 */ + cpu->gpr[9] = cpu->gpr[8] >> 16u; + /* 0xBFC2C234: 312AFFFF andi $t2, $t1, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC2C238: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C23C: A4AA0016 sh $t2, 22($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (22)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C23Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC2C240: ACA40018 sw $a0, 24($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C240u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC2C244: 8C4B0004 lw $t3, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C244u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC2C248: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC2C24C: 316CFFFF andi $t4, $t3, 0xFFFF */ + cpu->gpr[12] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC2C250: A4AC0004 sh $t4, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C250u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC2C254: 8C4D0000 lw $t5, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C254u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC2C258: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC2C25C: 000D7402 srl $t6, $t5, 16 */ + cpu->gpr[14] = cpu->gpr[13] >> 16u; + /* 0xBFC2C260: 31CFFFFF andi $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFFu; + /* 0xBFC2C264: A4AF0006 sh $t7, 6($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C264u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2C268: 8C580000 lw $t8, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C268u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2C26C: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC2C270: 3319FFFF andi $t9, $t8, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFFFu; + /* 0xBFC2C274: A4B90008 sh $t9, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C274u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2C278: 8C48FFFC lw $t0, -4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C278u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC2C27C: ACA2000C sw $v0, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C27Cu); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC2C280: 00084C02 srl $t1, $t0, 16 */ + cpu->gpr[9] = cpu->gpr[8] >> 16u; + /* 0xBFC2C284: 312AFFFF andi $t2, $t1, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC2C288: 03E00008 jr $ra */ + /* 0xBFC2C28C: A4AA000A sh $t2, 10($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C28Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + return; +label_BFC2C290: + psx_check_interrupts(cpu); + /* 0xBFC2C290: 8C8B0008 lw $t3, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C290u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC2C294: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C298: 316CFFFF andi $t4, $t3, 0xFFFF */ + cpu->gpr[12] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC2C29C: A4AC0004 sh $t4, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C29Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC2C2A0: 8C8D0004 lw $t5, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2A0u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC2C2A4: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C2A8: 000D7402 srl $t6, $t5, 16 */ + cpu->gpr[14] = cpu->gpr[13] >> 16u; + /* 0xBFC2C2AC: 31CFFFFF andi $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFFu; + /* 0xBFC2C2B0: A4AF0006 sh $t7, 6($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2B0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC2C2B4: 8C980004 lw $t8, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2B4u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2C2B8: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C2BC: 3319FFFF andi $t9, $t8, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFFFu; + /* 0xBFC2C2C0: A4B90008 sh $t9, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2C0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC2C2C4: 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, 0xBFC2C2C4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC2C2C8: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC2C2CC: 00084C02 srl $t1, $t0, 16 */ + cpu->gpr[9] = cpu->gpr[8] >> 16u; + /* 0xBFC2C2D0: 312AFFFF andi $t2, $t1, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC2C2D4: A4AA000A sh $t2, 10($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2D4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC2C2D8: ACA4000C sw $a0, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C2D8u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC2C2DC: 03E00008 jr $ra */ + /* 0xBFC2C2E0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2C2F0(CPUState* cpu) { label_BFC2C2F0: psx_check_interrupts(cpu); @@ -92270,6 +101802,431 @@ label_BFC2C7E4: return; } +void func_1FC2C7F4(CPUState* cpu) { +label_BFC2C7F4: + psx_check_interrupts(cpu); + /* 0xBFC2C7F4: 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, 0xBFC2C7F4u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C7F8: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC2C7FC: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC2C800: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC2C804: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC2C808: A4850042 sh $a1, 66($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C808u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC2C80C: 11C0001C beq $t6, $zero, 0xBFC2C880 */ + uint32_t psx_brA_BFC2C80C = cpu->gpr[14]; uint32_t psx_brB_BFC2C80C = cpu->gpr[0]; + int psx_taken_BFC2C80C = (psx_brA_BFC2C80C == psx_brB_BFC2C80C); + /* 0xBFC2C810: A4860044 sh $a2, 68($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C810u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + if (psx_taken_BFC2C80C) goto label_BFC2C880; +label_BFC2C814: + psx_check_interrupts(cpu); + /* 0xBFC2C814: 8498005C lh $t8, 92($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C814u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C818: 848E0048 lh $t6, 72($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (72)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C818u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C81C: 848F005A lh $t7, 90($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (90)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C81Cu); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C820: 00D83823 subu $a3, $a2, $t8 */ + cpu->gpr[7] = cpu->gpr[6] - cpu->gpr[24]; + /* 0xBFC2C824: A487002A sh $a3, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C824u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC2C828: 84990046 lh $t9, 70($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C828u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C82C: 00EE6021 addu $t4, $a3, $t6 */ + cpu->gpr[12] = cpu->gpr[7] + cpu->gpr[14]; + /* 0xBFC2C830: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC2C834: 00AF1023 subu $v0, $a1, $t7 */ + cpu->gpr[2] = cpu->gpr[5] - cpu->gpr[15]; + /* 0xBFC2C838: A4820020 sh $v0, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C838u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC2C83C: 000C6403 sra $t4, $t4, 16 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[12] >> 16u); + /* 0xBFC2C840: 00594821 addu $t1, $v0, $t9 */ + cpu->gpr[9] = cpu->gpr[2] + cpu->gpr[25]; + /* 0xBFC2C844: A4890038 sh $t1, 56($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (56)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C844u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC2C848: 00094400 sll $t0, $t1, 16 */ + cpu->gpr[8] = cpu->gpr[9] << 16u; + /* 0xBFC2C84C: 00025400 sll $t2, $v0, 16 */ + cpu->gpr[10] = cpu->gpr[2] << 16u; + /* 0xBFC2C850: 00071C00 sll $v1, $a3, 16 */ + cpu->gpr[3] = cpu->gpr[7] << 16u; + /* 0xBFC2C854: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC2C858: A4830022 sh $v1, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C858u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC2C85C: 000A5403 sra $t2, $t2, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 16u); + /* 0xBFC2C860: A48A0030 sh $t2, 48($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (48)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C860u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC2C864: 00084403 sra $t0, $t0, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC2C868: 01805821 addu $t3, $t4, $zero */ + cpu->gpr[11] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2C86C: 01806821 addu $t5, $t4, $zero */ + cpu->gpr[13] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2C870: A48D003A sh $t5, 58($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (58)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C870u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC2C874: A48B0032 sh $t3, 50($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (50)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C874u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC2C878: 03E00008 jr $ra */ + /* 0xBFC2C87C: A4880028 sh $t0, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C87Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + return; +label_BFC2C880: + psx_check_interrupts(cpu); + /* 0xBFC2C880: 8499005C lh $t9, 92($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C880u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C884: 848F005A lh $t7, 90($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (90)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C884u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C888: 00D91823 subu $v1, $a2, $t9 */ + cpu->gpr[3] = cpu->gpr[6] - cpu->gpr[25]; + /* 0xBFC2C88C: 00031C00 sll $v1, $v1, 16 */ + cpu->gpr[3] = cpu->gpr[3] << 16u; + /* 0xBFC2C890: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC2C894: 00AFC023 subu $t8, $a1, $t7 */ + cpu->gpr[24] = cpu->gpr[5] - cpu->gpr[15]; + /* 0xBFC2C898: A498000C sh $t8, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C898u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2C89C: A483000E sh $v1, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C89Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC2C8A0: 03E00008 jr $ra */ + /* 0xBFC2C8A4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2C8A8(CPUState* cpu) { +label_BFC2C8A8: + psx_check_interrupts(cpu); + /* 0xBFC2C8A8: 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, 0xBFC2C8A8u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C8AC: 00000000 nop */ + /* nop */ + /* 0xBFC2C8B0: 11C00033 beq $t6, $zero, 0xBFC2C980 */ + uint32_t psx_brA_BFC2C8B0 = cpu->gpr[14]; uint32_t psx_brB_BFC2C8B0 = cpu->gpr[0]; + int psx_taken_BFC2C8B0 = (psx_brA_BFC2C8B0 == psx_brB_BFC2C8B0); + /* 0xBFC2C8B4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2C8B0) goto label_BFC2C980; +label_BFC2C8B8: + psx_check_interrupts(cpu); + /* 0xBFC2C8B8: 848F0046 lh $t7, 70($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C8B8u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C8BC: 84980048 lh $t8, 72($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (72)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C8BCu); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C8C0: 01E50019 multu $t7, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[15] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2C8C4: 848F0044 lh $t7, 68($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C8C4u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C8C8: 84990042 lh $t9, 66($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C8C8u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C8CC: 00002812 mflo $a1 */ + cpu->gpr[5] = cpu->lo; + /* 0xBFC2C8D0: 00000000 nop */ + /* nop */ + /* 0xBFC2C8D4: 00000000 nop */ + /* nop */ + /* 0xBFC2C8D8: 03060019 multu $t8, $a2 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[24] * (uint64_t)cpu->gpr[6]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2C8DC: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC2C8E0: 04A10002 bgez $a1, 0xBFC2C8EC */ + uint32_t psx_brA_BFC2C8E0 = cpu->gpr[5]; + int psx_taken_BFC2C8E0 = ((int32_t)psx_brA_BFC2C8E0 >= 0); + /* 0xBFC2C8E4: 00A00821 addu $at, $a1, $zero */ + cpu->gpr[1] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC2C8E0) goto label_BFC2C8EC; +label_BFC2C8E8: + psx_check_interrupts(cpu); + /* 0xBFC2C8E8: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC2C8EC: + psx_check_interrupts(cpu); + /* 0xBFC2C8EC: 00012B03 sra $a1, $at, 12 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC2C8F0: 04C10002 bgez $a2, 0xBFC2C8FC */ + uint32_t psx_brA_BFC2C8F0 = cpu->gpr[6]; + int psx_taken_BFC2C8F0 = ((int32_t)psx_brA_BFC2C8F0 >= 0); + /* 0xBFC2C8F4: 00C00821 addu $at, $a2, $zero */ + cpu->gpr[1] = cpu->gpr[6] + cpu->gpr[0]; + if (psx_taken_BFC2C8F0) goto label_BFC2C8FC; +label_BFC2C8F8: + psx_check_interrupts(cpu); + /* 0xBFC2C8F8: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC2C8FC: + psx_check_interrupts(cpu); + /* 0xBFC2C8FC: 00013303 sra $a2, $at, 12 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC2C900: 04A10002 bgez $a1, 0xBFC2C90C */ + uint32_t psx_brA_BFC2C900 = cpu->gpr[5]; + int psx_taken_BFC2C900 = ((int32_t)psx_brA_BFC2C900 >= 0); + /* 0xBFC2C904: 00A00821 addu $at, $a1, $zero */ + cpu->gpr[1] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC2C900) goto label_BFC2C90C; +label_BFC2C908: + psx_check_interrupts(cpu); + /* 0xBFC2C908: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2C90C: + psx_check_interrupts(cpu); + /* 0xBFC2C90C: 00017043 sra $t6, $at, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2C910: 032E1023 subu $v0, $t9, $t6 */ + cpu->gpr[2] = cpu->gpr[25] - cpu->gpr[14]; + /* 0xBFC2C914: A4820020 sh $v0, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C914u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC2C918: 04C10002 bgez $a2, 0xBFC2C924 */ + uint32_t psx_brA_BFC2C918 = cpu->gpr[6]; + int psx_taken_BFC2C918 = ((int32_t)psx_brA_BFC2C918 >= 0); + /* 0xBFC2C91C: 00C00821 addu $at, $a2, $zero */ + cpu->gpr[1] = cpu->gpr[6] + cpu->gpr[0]; + if (psx_taken_BFC2C918) goto label_BFC2C924; +label_BFC2C920: + psx_check_interrupts(cpu); + /* 0xBFC2C920: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2C924: + psx_check_interrupts(cpu); + /* 0xBFC2C924: 0001C043 sra $t8, $at, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2C928: 01F83823 subu $a3, $t7, $t8 */ + cpu->gpr[7] = cpu->gpr[15] - cpu->gpr[24]; + /* 0xBFC2C92C: A487002A sh $a3, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C92Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC2C930: 00E66021 addu $t4, $a3, $a2 */ + cpu->gpr[12] = cpu->gpr[7] + cpu->gpr[6]; + /* 0xBFC2C934: 00454821 addu $t1, $v0, $a1 */ + cpu->gpr[9] = cpu->gpr[2] + cpu->gpr[5]; + /* 0xBFC2C938: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC2C93C: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC2C940: 000C6403 sra $t4, $t4, 16 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[12] >> 16u); + /* 0xBFC2C944: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC2C948: 00025400 sll $t2, $v0, 16 */ + cpu->gpr[10] = cpu->gpr[2] << 16u; + /* 0xBFC2C94C: 00071C00 sll $v1, $a3, 16 */ + cpu->gpr[3] = cpu->gpr[7] << 16u; + /* 0xBFC2C950: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC2C954: A4830022 sh $v1, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C954u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC2C958: 000A5403 sra $t2, $t2, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 16u); + /* 0xBFC2C95C: A48A0030 sh $t2, 48($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (48)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C95Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC2C960: 01801021 addu $v0, $t4, $zero */ + cpu->gpr[2] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2C964: A482003A sh $v0, 58($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (58)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C964u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC2C968: 01204021 addu $t0, $t1, $zero */ + cpu->gpr[8] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC2C96C: A4880028 sh $t0, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C96Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC2C970: 01206821 addu $t5, $t1, $zero */ + cpu->gpr[13] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC2C974: 01805821 addu $t3, $t4, $zero */ + cpu->gpr[11] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2C978: A48B0032 sh $t3, 50($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (50)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C978u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC2C97C: A48D0038 sh $t5, 56($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (56)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C97Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC2C980: + psx_check_interrupts(cpu); + /* 0xBFC2C980: 03E00008 jr $ra */ + /* 0xBFC2C984: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2C988(CPUState* cpu) { +label_BFC2C988: + psx_check_interrupts(cpu); + /* 0xBFC2C988: 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, 0xBFC2C988u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C98C: 00000000 nop */ + /* nop */ + /* 0xBFC2C990: 11C0002D beq $t6, $zero, 0xBFC2CA48 */ + uint32_t psx_brA_BFC2C990 = cpu->gpr[14]; uint32_t psx_brB_BFC2C990 = cpu->gpr[0]; + int psx_taken_BFC2C990 = (psx_brA_BFC2C990 == psx_brB_BFC2C990); + /* 0xBFC2C994: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2C990) goto label_BFC2CA48; +label_BFC2C998: + psx_check_interrupts(cpu); + /* 0xBFC2C998: A4850046 sh $a1, 70($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C998u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC2C99C: 848F0046 lh $t7, 70($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C99Cu); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9A0: A4860048 sh $a2, 72($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (72)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9A0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC2C9A4: 84990048 lh $t9, 72($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (72)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9A4u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9A8: 848E0042 lh $t6, 66($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9A8u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9AC: 00000000 nop */ + /* nop */ + /* 0xBFC2C9B0: 05E10002 bgez $t7, 0xBFC2C9BC */ + uint32_t psx_brA_BFC2C9B0 = cpu->gpr[15]; + int psx_taken_BFC2C9B0 = ((int32_t)psx_brA_BFC2C9B0 >= 0); + /* 0xBFC2C9B4: 01E00821 addu $at, $t7, $zero */ + cpu->gpr[1] = cpu->gpr[15] + cpu->gpr[0]; + if (psx_taken_BFC2C9B0) goto label_BFC2C9BC; +label_BFC2C9B8: + psx_check_interrupts(cpu); + /* 0xBFC2C9B8: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2C9BC: + psx_check_interrupts(cpu); + /* 0xBFC2C9BC: 0001C043 sra $t8, $at, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2C9C0: A498005A sh $t8, 90($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (90)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9C0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC2C9C4: 00000000 nop */ + /* nop */ + /* 0xBFC2C9C8: 07210002 bgez $t9, 0xBFC2C9D4 */ + uint32_t psx_brA_BFC2C9C8 = cpu->gpr[25]; + int psx_taken_BFC2C9C8 = ((int32_t)psx_brA_BFC2C9C8 >= 0); + /* 0xBFC2C9CC: 03200821 addu $at, $t9, $zero */ + cpu->gpr[1] = cpu->gpr[25] + cpu->gpr[0]; + if (psx_taken_BFC2C9C8) goto label_BFC2C9D4; +label_BFC2C9D0: + psx_check_interrupts(cpu); + /* 0xBFC2C9D0: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC2C9D4: + psx_check_interrupts(cpu); + /* 0xBFC2C9D4: 00016843 sra $t5, $at, 1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC2C9D8: A48D005C sh $t5, 92($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC2C9DC: 8499005C lh $t9, 92($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9DCu); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9E0: 848F005A lh $t7, 90($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (90)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9E0u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9E4: 84980044 lh $t8, 68($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9E4u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2C9E8: 01CF1023 subu $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] - cpu->gpr[15]; + /* 0xBFC2C9EC: A4820020 sh $v0, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC2C9F0: 03193823 subu $a3, $t8, $t9 */ + cpu->gpr[7] = cpu->gpr[24] - cpu->gpr[25]; + /* 0xBFC2C9F4: A487002A sh $a3, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2C9F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC2C9F8: 00E66021 addu $t4, $a3, $a2 */ + cpu->gpr[12] = cpu->gpr[7] + cpu->gpr[6]; + /* 0xBFC2C9FC: 00454821 addu $t1, $v0, $a1 */ + cpu->gpr[9] = cpu->gpr[2] + cpu->gpr[5]; + /* 0xBFC2CA00: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC2CA04: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC2CA08: 00071C00 sll $v1, $a3, 16 */ + cpu->gpr[3] = cpu->gpr[7] << 16u; + /* 0xBFC2CA0C: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC2CA10: A4830022 sh $v1, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA10u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC2CA14: 000C6403 sra $t4, $t4, 16 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[12] >> 16u); + /* 0xBFC2CA18: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC2CA1C: 00025400 sll $t2, $v0, 16 */ + cpu->gpr[10] = cpu->gpr[2] << 16u; + /* 0xBFC2CA20: 000A5403 sra $t2, $t2, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 16u); + /* 0xBFC2CA24: A48A0030 sh $t2, 48($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (48)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA24u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC2CA28: 01201021 addu $v0, $t1, $zero */ + cpu->gpr[2] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC2CA2C: A4820038 sh $v0, 56($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (56)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA2Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC2CA30: 01204021 addu $t0, $t1, $zero */ + cpu->gpr[8] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC2CA34: A4880028 sh $t0, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA34u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC2CA38: 01805821 addu $t3, $t4, $zero */ + cpu->gpr[11] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2CA3C: 01801821 addu $v1, $t4, $zero */ + cpu->gpr[3] = cpu->gpr[12] + cpu->gpr[0]; + /* 0xBFC2CA40: A483003A sh $v1, 58($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (58)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA40u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC2CA44: A48B0032 sh $t3, 50($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (50)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA44u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC2CA48: + psx_check_interrupts(cpu); + /* 0xBFC2CA48: 03E00008 jr $ra */ + /* 0xBFC2CA4C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2CA50(CPUState* cpu) { +label_BFC2CA50: + psx_check_interrupts(cpu); + /* 0xBFC2CA50: 03E00008 jr $ra */ + /* 0xBFC2CA54: AC85006C sw $a1, 108($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (108)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2CA54u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + return; +} + +void func_1FC2CA58(CPUState* cpu) { +label_BFC2CA58: + psx_check_interrupts(cpu); + /* 0xBFC2CA58: 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, 0xBFC2CA58u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2CA5C: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC2CA60: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC2CA64: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC2CA68: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC2CA6C: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC2CA70: 11C00005 beq $t6, $zero, 0xBFC2CA88 */ + uint32_t psx_brA_BFC2CA70 = cpu->gpr[14]; uint32_t psx_brB_BFC2CA70 = cpu->gpr[0]; + int psx_taken_BFC2CA70 = (psx_brA_BFC2CA70 == psx_brB_BFC2CA70); + /* 0xBFC2CA74: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC2CA70) goto label_BFC2CA88; +label_BFC2CA78: + psx_check_interrupts(cpu); + /* 0xBFC2CA78: A085001C sb $a1, 28($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (28)), (uint8_t)(cpu->gpr[5] & 0xFFu)); + /* 0xBFC2CA7C: A086001D sb $a2, 29($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (29)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC2CA80: 03E00008 jr $ra */ + /* 0xBFC2CA84: A087001E sb $a3, 30($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (30)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + return; +label_BFC2CA88: + psx_check_interrupts(cpu); + /* 0xBFC2CA88: A0850008 sb $a1, 8($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (8)), (uint8_t)(cpu->gpr[5] & 0xFFu)); + /* 0xBFC2CA8C: A0860009 sb $a2, 9($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (9)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC2CA90: A087000A sb $a3, 10($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (10)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC2CA94: 03E00008 jr $ra */ + /* 0xBFC2CA98: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2CA9C(CPUState* cpu) { label_BFC2CA9C: psx_check_interrupts(cpu); @@ -93251,6 +103208,53 @@ label_BFC2D094: return; } +void func_1FC2D0A4(CPUState* cpu) { +label_BFC2D0A4: + psx_check_interrupts(cpu); + /* 0xBFC2D0A4: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2D0A8: 3C028014 lui $v0, 0x8014 */ + cpu->gpr[2] = 0x80140000u; + /* 0xBFC2D0AC: 3C038011 lui $v1, 0x8011 */ + cpu->gpr[3] = 0x80110000u; + /* 0xBFC2D0B0: 24630EC8 addiu $v1, $v1, 3784 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (3784)); + /* 0xBFC2D0B4: 244281C8 addiu $v0, $v0, -32312 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-32312)); +label_BFC2D0B8: + psx_check_interrupts(cpu); + /* 0xBFC2D0B8: 8C6E0004 lw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2D0B8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2D0BC: 00000000 nop */ + /* nop */ + /* 0xBFC2D0C0: 148E0002 bne $a0, $t6, 0xBFC2D0CC */ + uint32_t psx_brA_BFC2D0C0 = cpu->gpr[4]; uint32_t psx_brB_BFC2D0C0 = cpu->gpr[14]; + int psx_taken_BFC2D0C0 = (psx_brA_BFC2D0C0 != psx_brB_BFC2D0C0); + /* 0xBFC2D0C4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2D0C0) goto label_BFC2D0CC; +label_BFC2D0C8: + psx_check_interrupts(cpu); + /* 0xBFC2D0C8: AC600004 sw $zero, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2D0C8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC2D0CC: + psx_check_interrupts(cpu); + /* 0xBFC2D0CC: 24630688 addiu $v1, $v1, 1672 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1672)); + /* 0xBFC2D0D0: 1462FFF9 bne $v1, $v0, 0xBFC2D0B8 */ + uint32_t psx_brA_BFC2D0D0 = cpu->gpr[3]; uint32_t psx_brB_BFC2D0D0 = cpu->gpr[2]; + int psx_taken_BFC2D0D0 = (psx_brA_BFC2D0D0 != psx_brB_BFC2D0D0); + /* 0xBFC2D0D4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2D0D0) goto label_BFC2D0B8; +label_BFC2D0D8: + psx_check_interrupts(cpu); + /* 0xBFC2D0D8: 03E00008 jr $ra */ + /* 0xBFC2D0DC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2D0E0(CPUState* cpu) { label_BFC2D0E0: psx_check_interrupts(cpu); @@ -96526,6 +106530,171 @@ label_BFC2E4C0: return; } +void func_1FC2E4D0(CPUState* cpu) { +label_BFC2E4D0: + psx_check_interrupts(cpu); + /* 0xBFC2E4D0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC2E4D4: 8DCE8320 lw $t6, -31968($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-31968)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E4D4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2E4D8: 3C028011 lui $v0, 0x8011 */ + cpu->gpr[2] = 0x80110000u; + /* 0xBFC2E4DC: 000E7880 sll $t7, $t6, 2 */ + cpu->gpr[15] = cpu->gpr[14] << 2u; + /* 0xBFC2E4E0: 01EE7823 subu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] - cpu->gpr[14]; + /* 0xBFC2E4E4: 000F7880 sll $t7, $t7, 2 */ + cpu->gpr[15] = cpu->gpr[15] << 2u; + /* 0xBFC2E4E8: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC2E4EC: 000F7900 sll $t7, $t7, 4 */ + cpu->gpr[15] = cpu->gpr[15] << 4u; + /* 0xBFC2E4F0: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC2E4F4: 000F78C0 sll $t7, $t7, 3 */ + cpu->gpr[15] = cpu->gpr[15] << 3u; + /* 0xBFC2E4F8: 004F1021 addu $v0, $v0, $t7 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[15]; + /* 0xBFC2E4FC: 8C420ECC lw $v0, 3788($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (3788)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E4FCu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2E500: 03E00008 jr $ra */ + /* 0xBFC2E504: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2E544(CPUState* cpu) { +label_BFC2E544: + psx_check_interrupts(cpu); + /* 0xBFC2E544: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC2E548: 8C428348 lw $v0, -31928($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-31928)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E548u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2E54C: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC2E550: 8DCE8324 lw $t6, -31964($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-31964)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E550u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2E554: 3C018009 lui $at, 0x8009 */ + cpu->gpr[1] = 0x80090000u; + /* 0xBFC2E558: 00027880 sll $t7, $v0, 2 */ + cpu->gpr[15] = cpu->gpr[2] << 2u; + /* 0xBFC2E55C: 002F0821 addu $at, $at, $t7 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[15]; + /* 0xBFC2E560: AC2E9D70 sw $t6, -25232($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25232)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E560u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC2E564: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2E568: 24420001 addiu $v0, $v0, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1)); + /* 0xBFC2E56C: 03E00008 jr $ra */ + /* 0xBFC2E570: AC228348 sw $v0, -31928($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31928)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E570u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + return; +} + +void func_1FC2E574(CPUState* cpu) { +label_BFC2E574: + psx_check_interrupts(cpu); + /* 0xBFC2E574: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC2E578: 8C638348 lw $v1, -31928($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-31928)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E578u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2E57C: 00000000 nop */ + /* nop */ + /* 0xBFC2E580: 1C600003 bgtz $v1, 0xBFC2E590 */ + uint32_t psx_brA_BFC2E580 = cpu->gpr[3]; + int psx_taken_BFC2E580 = ((int32_t)psx_brA_BFC2E580 > 0); + /* 0xBFC2E584: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2E580) goto label_BFC2E590; +label_BFC2E588: + psx_check_interrupts(cpu); + /* 0xBFC2E588: 03E00008 jr $ra */ + /* 0xBFC2E58C: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + return; +label_BFC2E590: + psx_check_interrupts(cpu); + /* 0xBFC2E590: 2463FFFF addiu $v1, $v1, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + /* 0xBFC2E594: 00037080 sll $t6, $v1, 2 */ + cpu->gpr[14] = cpu->gpr[3] << 2u; + /* 0xBFC2E598: 3C028009 lui $v0, 0x8009 */ + cpu->gpr[2] = 0x80090000u; + /* 0xBFC2E59C: 004E1021 addu $v0, $v0, $t6 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[14]; + /* 0xBFC2E5A0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2E5A4: 8C429D70 lw $v0, -25232($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25232)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E5A4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2E5A8: AC238348 sw $v1, -31928($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31928)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E5A8u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC2E5AC: 03E00008 jr $ra */ + /* 0xBFC2E5B0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2E5B4(CPUState* cpu) { +label_BFC2E5B4: + psx_check_interrupts(cpu); + /* 0xBFC2E5B4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2E5B8: 03E00008 jr $ra */ + /* 0xBFC2E5BC: AC208348 sw $zero, -31928($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31928)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E5BCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + return; +} + +void func_1FC2E5C0(CPUState* cpu) { +label_BFC2E5C0: + psx_check_interrupts(cpu); + /* 0xBFC2E5C0: 3C028011 lui $v0, 0x8011 */ + cpu->gpr[2] = 0x80110000u; + /* 0xBFC2E5C4: 24420EC8 addiu $v0, $v0, 3784 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (3784)); + /* 0xBFC2E5C8: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2E5CC: 24050060 addiu $a1, $zero, 96 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (96)); +label_BFC2E5D0: + psx_check_interrupts(cpu); + /* 0xBFC2E5D0: 8C4E0004 lw $t6, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E5D0u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2E5D4: 00000000 nop */ + /* nop */ + /* 0xBFC2E5D8: 148E0003 bne $a0, $t6, 0xBFC2E5E8 */ + uint32_t psx_brA_BFC2E5D8 = cpu->gpr[4]; uint32_t psx_brB_BFC2E5D8 = cpu->gpr[14]; + int psx_taken_BFC2E5D8 = (psx_brA_BFC2E5D8 != psx_brB_BFC2E5D8); + /* 0xBFC2E5DC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2E5D8) goto label_BFC2E5E8; +label_BFC2E5E0: + psx_check_interrupts(cpu); + /* 0xBFC2E5E0: 03E00008 jr $ra */ + /* 0xBFC2E5E4: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +label_BFC2E5E8: + psx_check_interrupts(cpu); + /* 0xBFC2E5E8: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); + /* 0xBFC2E5EC: 1465FFF8 bne $v1, $a1, 0xBFC2E5D0 */ + uint32_t psx_brA_BFC2E5EC = cpu->gpr[3]; uint32_t psx_brB_BFC2E5EC = cpu->gpr[5]; + int psx_taken_BFC2E5EC = (psx_brA_BFC2E5EC != psx_brB_BFC2E5EC); + /* 0xBFC2E5F0: 24420688 addiu $v0, $v0, 1672 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1672)); + if (psx_taken_BFC2E5EC) goto label_BFC2E5D0; +label_BFC2E5F4: + psx_check_interrupts(cpu); + /* 0xBFC2E5F4: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC2E5F8: 03E00008 jr $ra */ + /* 0xBFC2E5FC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2E600(CPUState* cpu) { label_BFC2E600: psx_check_interrupts(cpu); @@ -96634,6 +106803,1009 @@ label_BFC2E66C: return; } +void func_1FC2E6B8(CPUState* cpu) { +label_BFC2E6B8: + psx_check_interrupts(cpu); + /* 0xBFC2E6B8: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC2E6BC: 8C638320 lw $v1, -31968($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-31968)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E6BCu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2E6C0: 3C078011 lui $a3, 0x8011 */ + cpu->gpr[7] = 0x80110000u; + /* 0xBFC2E6C4: 00037080 sll $t6, $v1, 2 */ + cpu->gpr[14] = cpu->gpr[3] << 2u; + /* 0xBFC2E6C8: 01C37023 subu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[3]; + /* 0xBFC2E6CC: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC2E6D0: 01C37021 addu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[3]; + /* 0xBFC2E6D4: 000E7100 sll $t6, $t6, 4 */ + cpu->gpr[14] = cpu->gpr[14] << 4u; + /* 0xBFC2E6D8: 01C37021 addu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[3]; + /* 0xBFC2E6DC: 24E70EC8 addiu $a3, $a3, 3784 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (3784)); + /* 0xBFC2E6E0: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC2E6E4: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC2E6E8: 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, 0xBFC2E6E8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2E6EC: 00EE1021 addu $v0, $a3, $t6 */ + cpu->gpr[2] = cpu->gpr[7] + cpu->gpr[14]; + /* 0xBFC2E6F0: 8C4F0038 lw $t7, 56($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E6F0u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2E6F4: 00802821 addu $a1, $a0, $zero */ + cpu->gpr[5] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2E6F8: 00AFC024 and $t8, $a1, $t7 */ + cpu->gpr[24] = cpu->gpr[5] & cpu->gpr[15]; + /* 0xBFC2E6FC: 13000013 beq $t8, $zero, 0xBFC2E74C */ + uint32_t psx_brA_BFC2E6FC = cpu->gpr[24]; uint32_t psx_brB_BFC2E6FC = cpu->gpr[0]; + int psx_taken_BFC2E6FC = (psx_brA_BFC2E6FC == psx_brB_BFC2E6FC); + /* 0xBFC2E700: 00603021 addu $a2, $v1, $zero */ + cpu->gpr[6] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC2E6FC) goto label_BFC2E74C; +label_BFC2E704: + psx_check_interrupts(cpu); + /* 0xBFC2E704: 8C590034 lw $t9, 52($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E704u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2E708: 00000000 nop */ + /* nop */ + /* 0xBFC2E70C: 13200010 beq $t9, $zero, 0xBFC2E750 */ + uint32_t psx_brA_BFC2E70C = cpu->gpr[25]; uint32_t psx_brB_BFC2E70C = cpu->gpr[0]; + int psx_taken_BFC2E70C = (psx_brA_BFC2E70C == psx_brB_BFC2E70C); + /* 0xBFC2E710: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC2E70C) goto label_BFC2E750; +label_BFC2E714: + psx_check_interrupts(cpu); + /* 0xBFC2E714: 00064080 sll $t0, $a2, 2 */ + cpu->gpr[8] = cpu->gpr[6] << 2u; + /* 0xBFC2E718: 01064023 subu $t0, $t0, $a2 */ + cpu->gpr[8] = cpu->gpr[8] - cpu->gpr[6]; + /* 0xBFC2E71C: 00084080 sll $t0, $t0, 2 */ + cpu->gpr[8] = cpu->gpr[8] << 2u; + /* 0xBFC2E720: 01064021 addu $t0, $t0, $a2 */ + cpu->gpr[8] = cpu->gpr[8] + cpu->gpr[6]; + /* 0xBFC2E724: 00084100 sll $t0, $t0, 4 */ + cpu->gpr[8] = cpu->gpr[8] << 4u; + /* 0xBFC2E728: 01064021 addu $t0, $t0, $a2 */ + cpu->gpr[8] = cpu->gpr[8] + cpu->gpr[6]; + /* 0xBFC2E72C: 000840C0 sll $t0, $t0, 3 */ + cpu->gpr[8] = cpu->gpr[8] << 3u; + /* 0xBFC2E730: 00E84821 addu $t1, $a3, $t0 */ + cpu->gpr[9] = cpu->gpr[7] + cpu->gpr[8]; + /* 0xBFC2E734: 8D2A0034 lw $t2, 52($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E734u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC2E738: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC2E73C: 0140F809 jalr $ra, $t2 */ + /* 0xBFC2E740: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2E744u; + psx_dispatch(cpu, cpu->gpr[10]); +label_BFC2E744: + psx_check_interrupts(cpu); + /* 0xBFC2E744: 1000005E beq $zero, $zero, 0xBFC2E8C0 */ + uint32_t psx_brA_BFC2E744 = cpu->gpr[0]; uint32_t psx_brB_BFC2E744 = cpu->gpr[0]; + int psx_taken_BFC2E744 = (psx_brA_BFC2E744 == psx_brB_BFC2E744); + /* 0xBFC2E748: 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, 0xBFC2E748u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2E744) goto label_BFC2E8C0; +label_BFC2E74C: + psx_check_interrupts(cpu); + /* 0xBFC2E74C: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; +label_BFC2E750: + psx_check_interrupts(cpu); + /* 0xBFC2E750: 34218000 ori $at, $at, 0x8000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x8000u; + /* 0xBFC2E754: 00A15824 and $t3, $a1, $at */ + cpu->gpr[11] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E758: 11600016 beq $t3, $zero, 0xBFC2E7B4 */ + uint32_t psx_brA_BFC2E758 = cpu->gpr[11]; uint32_t psx_brB_BFC2E758 = cpu->gpr[0]; + int psx_taken_BFC2E758 = (psx_brA_BFC2E758 == psx_brB_BFC2E758); + /* 0xBFC2E75C: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; + if (psx_taken_BFC2E758) goto label_BFC2E7B4; +label_BFC2E760: + psx_check_interrupts(cpu); + /* 0xBFC2E760: 8C4C001C lw $t4, 28($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E760u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC2E764: 00000000 nop */ + /* nop */ + /* 0xBFC2E768: 11800012 beq $t4, $zero, 0xBFC2E7B4 */ + uint32_t psx_brA_BFC2E768 = cpu->gpr[12]; uint32_t psx_brB_BFC2E768 = cpu->gpr[0]; + int psx_taken_BFC2E768 = (psx_brA_BFC2E768 == psx_brB_BFC2E768); + /* 0xBFC2E76C: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; + if (psx_taken_BFC2E768) goto label_BFC2E7B4; +label_BFC2E770: + psx_check_interrupts(cpu); + /* 0xBFC2E770: 00066880 sll $t5, $a2, 2 */ + cpu->gpr[13] = cpu->gpr[6] << 2u; + /* 0xBFC2E774: 01A66823 subu $t5, $t5, $a2 */ + cpu->gpr[13] = cpu->gpr[13] - cpu->gpr[6]; + /* 0xBFC2E778: 000D6880 sll $t5, $t5, 2 */ + cpu->gpr[13] = cpu->gpr[13] << 2u; + /* 0xBFC2E77C: 01A66821 addu $t5, $t5, $a2 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[6]; + /* 0xBFC2E780: 000D6900 sll $t5, $t5, 4 */ + cpu->gpr[13] = cpu->gpr[13] << 4u; + /* 0xBFC2E784: 01A66821 addu $t5, $t5, $a2 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[6]; + /* 0xBFC2E788: 000D68C0 sll $t5, $t5, 3 */ + cpu->gpr[13] = cpu->gpr[13] << 3u; + /* 0xBFC2E78C: 00ED7021 addu $t6, $a3, $t5 */ + cpu->gpr[14] = cpu->gpr[7] + cpu->gpr[13]; + /* 0xBFC2E790: 8DC4001C lw $a0, 28($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E790u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E794: AFA6001C sw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E794u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC2E798: 0C011913 jal 0xB004644C */ + /* 0xBFC2E79C: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E79Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + cpu->gpr[31] = 0xBFC2E7A0u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E7A0: + psx_check_interrupts(cpu); + /* 0xBFC2E7A0: 3C078011 lui $a3, 0x8011 */ + cpu->gpr[7] = 0x80110000u; + /* 0xBFC2E7A4: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E7A4u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2E7A8: 8FA6001C lw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E7A8u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC2E7AC: 24E70EC8 addiu $a3, $a3, 3784 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (3784)); + /* 0xBFC2E7B0: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; +label_BFC2E7B4: + psx_check_interrupts(cpu); + /* 0xBFC2E7B4: 34212000 ori $at, $at, 0x2000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x2000u; + /* 0xBFC2E7B8: 00A17824 and $t7, $a1, $at */ + cpu->gpr[15] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E7BC: 11E00015 beq $t7, $zero, 0xBFC2E814 */ + uint32_t psx_brA_BFC2E7BC = cpu->gpr[15]; uint32_t psx_brB_BFC2E7BC = cpu->gpr[0]; + int psx_taken_BFC2E7BC = (psx_brA_BFC2E7BC == psx_brB_BFC2E7BC); + /* 0xBFC2E7C0: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + if (psx_taken_BFC2E7BC) goto label_BFC2E814; +label_BFC2E7C4: + psx_check_interrupts(cpu); + /* 0xBFC2E7C4: 0006C080 sll $t8, $a2, 2 */ + cpu->gpr[24] = cpu->gpr[6] << 2u; + /* 0xBFC2E7C8: 0306C023 subu $t8, $t8, $a2 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[6]; + /* 0xBFC2E7CC: 0018C080 sll $t8, $t8, 2 */ + cpu->gpr[24] = cpu->gpr[24] << 2u; + /* 0xBFC2E7D0: 0306C021 addu $t8, $t8, $a2 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[6]; + /* 0xBFC2E7D4: 0018C100 sll $t8, $t8, 4 */ + cpu->gpr[24] = cpu->gpr[24] << 4u; + /* 0xBFC2E7D8: 0306C021 addu $t8, $t8, $a2 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[6]; + /* 0xBFC2E7DC: 0018C0C0 sll $t8, $t8, 3 */ + cpu->gpr[24] = cpu->gpr[24] << 3u; + /* 0xBFC2E7E0: 00F8C821 addu $t9, $a3, $t8 */ + cpu->gpr[25] = cpu->gpr[7] + cpu->gpr[24]; + /* 0xBFC2E7E4: 8F240020 lw $a0, 32($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E7E4u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E7E8: 00000000 nop */ + /* nop */ + /* 0xBFC2E7EC: 10800009 beq $a0, $zero, 0xBFC2E814 */ + uint32_t psx_brA_BFC2E7EC = cpu->gpr[4]; uint32_t psx_brB_BFC2E7EC = cpu->gpr[0]; + int psx_taken_BFC2E7EC = (psx_brA_BFC2E7EC == psx_brB_BFC2E7EC); + /* 0xBFC2E7F0: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + if (psx_taken_BFC2E7EC) goto label_BFC2E814; +label_BFC2E7F4: + psx_check_interrupts(cpu); + /* 0xBFC2E7F4: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E7F4u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC2E7F8: 0C011913 jal 0xB004644C */ + /* 0xBFC2E7FC: AFA6001C sw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E7FCu); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + cpu->gpr[31] = 0xBFC2E800u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E800: + psx_check_interrupts(cpu); + /* 0xBFC2E800: 3C078011 lui $a3, 0x8011 */ + cpu->gpr[7] = 0x80110000u; + /* 0xBFC2E804: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E804u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2E808: 8FA6001C lw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E808u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC2E80C: 24E70EC8 addiu $a3, $a3, 3784 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (3784)); + /* 0xBFC2E810: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; +label_BFC2E814: + psx_check_interrupts(cpu); + /* 0xBFC2E814: 34211000 ori $at, $at, 0x1000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1000u; + /* 0xBFC2E818: 00A14024 and $t0, $a1, $at */ + cpu->gpr[8] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E81C: 11000015 beq $t0, $zero, 0xBFC2E874 */ + uint32_t psx_brA_BFC2E81C = cpu->gpr[8]; uint32_t psx_brB_BFC2E81C = cpu->gpr[0]; + int psx_taken_BFC2E81C = (psx_brA_BFC2E81C == psx_brB_BFC2E81C); + /* 0xBFC2E820: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + if (psx_taken_BFC2E81C) goto label_BFC2E874; +label_BFC2E824: + psx_check_interrupts(cpu); + /* 0xBFC2E824: 00064880 sll $t1, $a2, 2 */ + cpu->gpr[9] = cpu->gpr[6] << 2u; + /* 0xBFC2E828: 01264823 subu $t1, $t1, $a2 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[6]; + /* 0xBFC2E82C: 00094880 sll $t1, $t1, 2 */ + cpu->gpr[9] = cpu->gpr[9] << 2u; + /* 0xBFC2E830: 01264821 addu $t1, $t1, $a2 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[6]; + /* 0xBFC2E834: 00094900 sll $t1, $t1, 4 */ + cpu->gpr[9] = cpu->gpr[9] << 4u; + /* 0xBFC2E838: 01264821 addu $t1, $t1, $a2 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[6]; + /* 0xBFC2E83C: 000948C0 sll $t1, $t1, 3 */ + cpu->gpr[9] = cpu->gpr[9] << 3u; + /* 0xBFC2E840: 00E95021 addu $t2, $a3, $t1 */ + cpu->gpr[10] = cpu->gpr[7] + cpu->gpr[9]; + /* 0xBFC2E844: 8D440024 lw $a0, 36($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E844u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E848: 00000000 nop */ + /* nop */ + /* 0xBFC2E84C: 10800009 beq $a0, $zero, 0xBFC2E874 */ + uint32_t psx_brA_BFC2E84C = cpu->gpr[4]; uint32_t psx_brB_BFC2E84C = cpu->gpr[0]; + int psx_taken_BFC2E84C = (psx_brA_BFC2E84C == psx_brB_BFC2E84C); + /* 0xBFC2E850: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + if (psx_taken_BFC2E84C) goto label_BFC2E874; +label_BFC2E854: + psx_check_interrupts(cpu); + /* 0xBFC2E854: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E854u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC2E858: 0C011913 jal 0xB004644C */ + /* 0xBFC2E85C: AFA6001C sw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E85Cu); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + cpu->gpr[31] = 0xBFC2E860u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E860: + psx_check_interrupts(cpu); + /* 0xBFC2E860: 3C078011 lui $a3, 0x8011 */ + cpu->gpr[7] = 0x80110000u; + /* 0xBFC2E864: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E864u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2E868: 8FA6001C lw $a2, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E868u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC2E86C: 24E70EC8 addiu $a3, $a3, 3784 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (3784)); + /* 0xBFC2E870: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; +label_BFC2E874: + psx_check_interrupts(cpu); + /* 0xBFC2E874: 34214000 ori $at, $at, 0x4000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x4000u; + /* 0xBFC2E878: 00A15824 and $t3, $a1, $at */ + cpu->gpr[11] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E87C: 11600010 beq $t3, $zero, 0xBFC2E8C0 */ + uint32_t psx_brA_BFC2E87C = cpu->gpr[11]; uint32_t psx_brB_BFC2E87C = cpu->gpr[0]; + int psx_taken_BFC2E87C = (psx_brA_BFC2E87C == psx_brB_BFC2E87C); + /* 0xBFC2E880: 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, 0xBFC2E880u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2E87C) goto label_BFC2E8C0; +label_BFC2E884: + psx_check_interrupts(cpu); + /* 0xBFC2E884: 00066080 sll $t4, $a2, 2 */ + cpu->gpr[12] = cpu->gpr[6] << 2u; + /* 0xBFC2E888: 01866023 subu $t4, $t4, $a2 */ + cpu->gpr[12] = cpu->gpr[12] - cpu->gpr[6]; + /* 0xBFC2E88C: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC2E890: 01866021 addu $t4, $t4, $a2 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[6]; + /* 0xBFC2E894: 000C6100 sll $t4, $t4, 4 */ + cpu->gpr[12] = cpu->gpr[12] << 4u; + /* 0xBFC2E898: 01866021 addu $t4, $t4, $a2 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[6]; + /* 0xBFC2E89C: 000C60C0 sll $t4, $t4, 3 */ + cpu->gpr[12] = cpu->gpr[12] << 3u; + /* 0xBFC2E8A0: 00EC6821 addu $t5, $a3, $t4 */ + cpu->gpr[13] = cpu->gpr[7] + cpu->gpr[12]; + /* 0xBFC2E8A4: 8DA40028 lw $a0, 40($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E8A4u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E8A8: 00000000 nop */ + /* nop */ + /* 0xBFC2E8AC: 10800004 beq $a0, $zero, 0xBFC2E8C0 */ + uint32_t psx_brA_BFC2E8AC = cpu->gpr[4]; uint32_t psx_brB_BFC2E8AC = cpu->gpr[0]; + int psx_taken_BFC2E8AC = (psx_brA_BFC2E8AC == psx_brB_BFC2E8AC); + /* 0xBFC2E8B0: 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, 0xBFC2E8B0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2E8AC) goto label_BFC2E8C0; +label_BFC2E8B4: + psx_check_interrupts(cpu); + /* 0xBFC2E8B4: 0C011913 jal 0xB004644C */ + /* 0xBFC2E8B8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2E8BCu; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E8BC: + psx_check_interrupts(cpu); + /* 0xBFC2E8BC: 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, 0xBFC2E8BCu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } +label_BFC2E8C0: + psx_check_interrupts(cpu); + /* 0xBFC2E8C0: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC2E8C4: 03E00008 jr $ra */ + /* 0xBFC2E8C8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2E8CC(CPUState* cpu) { +label_BFC2E8CC: + psx_check_interrupts(cpu); + /* 0xBFC2E8CC: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC2E8D0: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + /* 0xBFC2E8D4: 8C428320 lw $v0, -31968($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-31968)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E8D4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2E8D8: 00802821 addu $a1, $a0, $zero */ + cpu->gpr[5] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2E8DC: 34218000 ori $at, $at, 0x8000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x8000u; + /* 0xBFC2E8E0: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC2E8E4: 00A17024 and $t6, $a1, $at */ + cpu->gpr[14] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E8E8: 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, 0xBFC2E8E8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2E8EC: 15C00004 bne $t6, $zero, 0xBFC2E900 */ + uint32_t psx_brA_BFC2E8EC = cpu->gpr[14]; uint32_t psx_brB_BFC2E8EC = cpu->gpr[0]; + int psx_taken_BFC2E8EC = (psx_brA_BFC2E8EC != psx_brB_BFC2E8EC); + /* 0xBFC2E8F0: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC2E8EC) goto label_BFC2E900; +label_BFC2E8F4: + psx_check_interrupts(cpu); + /* 0xBFC2E8F4: 3C068011 lui $a2, 0x8011 */ + cpu->gpr[6] = 0x80110000u; + /* 0xBFC2E8F8: 1000001F beq $zero, $zero, 0xBFC2E978 */ + uint32_t psx_brA_BFC2E8F8 = cpu->gpr[0]; uint32_t psx_brB_BFC2E8F8 = cpu->gpr[0]; + int psx_taken_BFC2E8F8 = (psx_brA_BFC2E8F8 == psx_brB_BFC2E8F8); + /* 0xBFC2E8FC: 24C60EC8 addiu $a2, $a2, 3784 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (3784)); + if (psx_taken_BFC2E8F8) goto label_BFC2E978; +label_BFC2E900: + psx_check_interrupts(cpu); + /* 0xBFC2E900: 00027880 sll $t7, $v0, 2 */ + cpu->gpr[15] = cpu->gpr[2] << 2u; + /* 0xBFC2E904: 01E27823 subu $t7, $t7, $v0 */ + cpu->gpr[15] = cpu->gpr[15] - cpu->gpr[2]; + /* 0xBFC2E908: 000F7880 sll $t7, $t7, 2 */ + cpu->gpr[15] = cpu->gpr[15] << 2u; + /* 0xBFC2E90C: 01E27821 addu $t7, $t7, $v0 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[2]; + /* 0xBFC2E910: 000F7900 sll $t7, $t7, 4 */ + cpu->gpr[15] = cpu->gpr[15] << 4u; + /* 0xBFC2E914: 01E27821 addu $t7, $t7, $v0 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[2]; + /* 0xBFC2E918: 3C068011 lui $a2, 0x8011 */ + cpu->gpr[6] = 0x80110000u; + /* 0xBFC2E91C: 24C60EC8 addiu $a2, $a2, 3784 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (3784)); + /* 0xBFC2E920: 000F78C0 sll $t7, $t7, 3 */ + cpu->gpr[15] = cpu->gpr[15] << 3u; + /* 0xBFC2E924: 00CFC021 addu $t8, $a2, $t7 */ + cpu->gpr[24] = cpu->gpr[6] + cpu->gpr[15]; + /* 0xBFC2E928: 8F19001C lw $t9, 28($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E928u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2E92C: 00000000 nop */ + /* nop */ + /* 0xBFC2E930: 13200012 beq $t9, $zero, 0xBFC2E97C */ + uint32_t psx_brA_BFC2E930 = cpu->gpr[25]; uint32_t psx_brB_BFC2E930 = cpu->gpr[0]; + int psx_taken_BFC2E930 = (psx_brA_BFC2E930 == psx_brB_BFC2E930); + /* 0xBFC2E934: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; + if (psx_taken_BFC2E930) goto label_BFC2E97C; +label_BFC2E938: + psx_check_interrupts(cpu); + /* 0xBFC2E938: 00034080 sll $t0, $v1, 2 */ + cpu->gpr[8] = cpu->gpr[3] << 2u; + /* 0xBFC2E93C: 01034023 subu $t0, $t0, $v1 */ + cpu->gpr[8] = cpu->gpr[8] - cpu->gpr[3]; + /* 0xBFC2E940: 00084080 sll $t0, $t0, 2 */ + cpu->gpr[8] = cpu->gpr[8] << 2u; + /* 0xBFC2E944: 01034021 addu $t0, $t0, $v1 */ + cpu->gpr[8] = cpu->gpr[8] + cpu->gpr[3]; + /* 0xBFC2E948: 00084100 sll $t0, $t0, 4 */ + cpu->gpr[8] = cpu->gpr[8] << 4u; + /* 0xBFC2E94C: 01034021 addu $t0, $t0, $v1 */ + cpu->gpr[8] = cpu->gpr[8] + cpu->gpr[3]; + /* 0xBFC2E950: 000840C0 sll $t0, $t0, 3 */ + cpu->gpr[8] = cpu->gpr[8] << 3u; + /* 0xBFC2E954: 00C84821 addu $t1, $a2, $t0 */ + cpu->gpr[9] = cpu->gpr[6] + cpu->gpr[8]; + /* 0xBFC2E958: 8D24001C lw $a0, 28($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E958u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E95C: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E95Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC2E960: 0C011913 jal 0xB004644C */ + /* 0xBFC2E964: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E964u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + cpu->gpr[31] = 0xBFC2E968u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E968: + psx_check_interrupts(cpu); + /* 0xBFC2E968: 3C068011 lui $a2, 0x8011 */ + cpu->gpr[6] = 0x80110000u; + /* 0xBFC2E96C: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E96Cu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2E970: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E970u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2E974: 24C60EC8 addiu $a2, $a2, 3784 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (3784)); +label_BFC2E978: + psx_check_interrupts(cpu); + /* 0xBFC2E978: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; +label_BFC2E97C: + psx_check_interrupts(cpu); + /* 0xBFC2E97C: 34212000 ori $at, $at, 0x2000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x2000u; + /* 0xBFC2E980: 00A15024 and $t2, $a1, $at */ + cpu->gpr[10] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E984: 11400015 beq $t2, $zero, 0xBFC2E9DC */ + uint32_t psx_brA_BFC2E984 = cpu->gpr[10]; uint32_t psx_brB_BFC2E984 = cpu->gpr[0]; + int psx_taken_BFC2E984 = (psx_brA_BFC2E984 == psx_brB_BFC2E984); + /* 0xBFC2E988: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + if (psx_taken_BFC2E984) goto label_BFC2E9DC; +label_BFC2E98C: + psx_check_interrupts(cpu); + /* 0xBFC2E98C: 00035880 sll $t3, $v1, 2 */ + cpu->gpr[11] = cpu->gpr[3] << 2u; + /* 0xBFC2E990: 01635823 subu $t3, $t3, $v1 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[3]; + /* 0xBFC2E994: 000B5880 sll $t3, $t3, 2 */ + cpu->gpr[11] = cpu->gpr[11] << 2u; + /* 0xBFC2E998: 01635821 addu $t3, $t3, $v1 */ + cpu->gpr[11] = cpu->gpr[11] + cpu->gpr[3]; + /* 0xBFC2E99C: 000B5900 sll $t3, $t3, 4 */ + cpu->gpr[11] = cpu->gpr[11] << 4u; + /* 0xBFC2E9A0: 01635821 addu $t3, $t3, $v1 */ + cpu->gpr[11] = cpu->gpr[11] + cpu->gpr[3]; + /* 0xBFC2E9A4: 000B58C0 sll $t3, $t3, 3 */ + cpu->gpr[11] = cpu->gpr[11] << 3u; + /* 0xBFC2E9A8: 00CB6021 addu $t4, $a2, $t3 */ + cpu->gpr[12] = cpu->gpr[6] + cpu->gpr[11]; + /* 0xBFC2E9AC: 8D840020 lw $a0, 32($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E9ACu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2E9B0: 00000000 nop */ + /* nop */ + /* 0xBFC2E9B4: 10800009 beq $a0, $zero, 0xBFC2E9DC */ + uint32_t psx_brA_BFC2E9B4 = cpu->gpr[4]; uint32_t psx_brB_BFC2E9B4 = cpu->gpr[0]; + int psx_taken_BFC2E9B4 = (psx_brA_BFC2E9B4 == psx_brB_BFC2E9B4); + /* 0xBFC2E9B8: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + if (psx_taken_BFC2E9B4) goto label_BFC2E9DC; +label_BFC2E9BC: + psx_check_interrupts(cpu); + /* 0xBFC2E9BC: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E9BCu); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC2E9C0: 0C011913 jal 0xB004644C */ + /* 0xBFC2E9C4: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E9C4u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + cpu->gpr[31] = 0xBFC2E9C8u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2E9C8: + psx_check_interrupts(cpu); + /* 0xBFC2E9C8: 3C068011 lui $a2, 0x8011 */ + cpu->gpr[6] = 0x80110000u; + /* 0xBFC2E9CC: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E9CCu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2E9D0: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2E9D0u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2E9D4: 24C60EC8 addiu $a2, $a2, 3784 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (3784)); + /* 0xBFC2E9D8: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; +label_BFC2E9DC: + psx_check_interrupts(cpu); + /* 0xBFC2E9DC: 34211000 ori $at, $at, 0x1000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1000u; + /* 0xBFC2E9E0: 00A16824 and $t5, $a1, $at */ + cpu->gpr[13] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2E9E4: 11A00015 beq $t5, $zero, 0xBFC2EA3C */ + uint32_t psx_brA_BFC2E9E4 = cpu->gpr[13]; uint32_t psx_brB_BFC2E9E4 = cpu->gpr[0]; + int psx_taken_BFC2E9E4 = (psx_brA_BFC2E9E4 == psx_brB_BFC2E9E4); + /* 0xBFC2E9E8: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + if (psx_taken_BFC2E9E4) goto label_BFC2EA3C; +label_BFC2E9EC: + psx_check_interrupts(cpu); + /* 0xBFC2E9EC: 00037080 sll $t6, $v1, 2 */ + cpu->gpr[14] = cpu->gpr[3] << 2u; + /* 0xBFC2E9F0: 01C37023 subu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[3]; + /* 0xBFC2E9F4: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC2E9F8: 01C37021 addu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[3]; + /* 0xBFC2E9FC: 000E7100 sll $t6, $t6, 4 */ + cpu->gpr[14] = cpu->gpr[14] << 4u; + /* 0xBFC2EA00: 01C37021 addu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[3]; + /* 0xBFC2EA04: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC2EA08: 00CE7821 addu $t7, $a2, $t6 */ + cpu->gpr[15] = cpu->gpr[6] + cpu->gpr[14]; + /* 0xBFC2EA0C: 8DE40024 lw $a0, 36($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA0Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2EA10: 00000000 nop */ + /* nop */ + /* 0xBFC2EA14: 10800009 beq $a0, $zero, 0xBFC2EA3C */ + uint32_t psx_brA_BFC2EA14 = cpu->gpr[4]; uint32_t psx_brB_BFC2EA14 = cpu->gpr[0]; + int psx_taken_BFC2EA14 = (psx_brA_BFC2EA14 == psx_brB_BFC2EA14); + /* 0xBFC2EA18: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + if (psx_taken_BFC2EA14) goto label_BFC2EA3C; +label_BFC2EA1C: + psx_check_interrupts(cpu); + /* 0xBFC2EA1C: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA1Cu); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC2EA20: 0C011913 jal 0xB004644C */ + /* 0xBFC2EA24: AFA50020 sw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA24u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + cpu->gpr[31] = 0xBFC2EA28u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2EA28: + psx_check_interrupts(cpu); + /* 0xBFC2EA28: 3C068011 lui $a2, 0x8011 */ + cpu->gpr[6] = 0x80110000u; + /* 0xBFC2EA2C: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA2Cu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2EA30: 8FA50020 lw $a1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA30u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC2EA34: 24C60EC8 addiu $a2, $a2, 3784 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (3784)); + /* 0xBFC2EA38: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; +label_BFC2EA3C: + psx_check_interrupts(cpu); + /* 0xBFC2EA3C: 34214000 ori $at, $at, 0x4000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x4000u; + /* 0xBFC2EA40: 00A1C024 and $t8, $a1, $at */ + cpu->gpr[24] = cpu->gpr[5] & cpu->gpr[1]; + /* 0xBFC2EA44: 13000010 beq $t8, $zero, 0xBFC2EA88 */ + uint32_t psx_brA_BFC2EA44 = cpu->gpr[24]; uint32_t psx_brB_BFC2EA44 = cpu->gpr[0]; + int psx_taken_BFC2EA44 = (psx_brA_BFC2EA44 == psx_brB_BFC2EA44); + /* 0xBFC2EA48: 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, 0xBFC2EA48u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2EA44) goto label_BFC2EA88; +label_BFC2EA4C: + psx_check_interrupts(cpu); + /* 0xBFC2EA4C: 0003C880 sll $t9, $v1, 2 */ + cpu->gpr[25] = cpu->gpr[3] << 2u; + /* 0xBFC2EA50: 0323C823 subu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[3]; + /* 0xBFC2EA54: 0019C880 sll $t9, $t9, 2 */ + cpu->gpr[25] = cpu->gpr[25] << 2u; + /* 0xBFC2EA58: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2EA5C: 0019C900 sll $t9, $t9, 4 */ + cpu->gpr[25] = cpu->gpr[25] << 4u; + /* 0xBFC2EA60: 0323C821 addu $t9, $t9, $v1 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[3]; + /* 0xBFC2EA64: 0019C8C0 sll $t9, $t9, 3 */ + cpu->gpr[25] = cpu->gpr[25] << 3u; + /* 0xBFC2EA68: 00D94021 addu $t0, $a2, $t9 */ + cpu->gpr[8] = cpu->gpr[6] + cpu->gpr[25]; + /* 0xBFC2EA6C: 8D040028 lw $a0, 40($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EA6Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC2EA70: 00000000 nop */ + /* nop */ + /* 0xBFC2EA74: 10800004 beq $a0, $zero, 0xBFC2EA88 */ + uint32_t psx_brA_BFC2EA74 = cpu->gpr[4]; uint32_t psx_brB_BFC2EA74 = cpu->gpr[0]; + int psx_taken_BFC2EA74 = (psx_brA_BFC2EA74 == psx_brB_BFC2EA74); + /* 0xBFC2EA78: 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, 0xBFC2EA78u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC2EA74) goto label_BFC2EA88; +label_BFC2EA7C: + psx_check_interrupts(cpu); + /* 0xBFC2EA7C: 0C011913 jal 0xB004644C */ + /* 0xBFC2EA80: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2EA84u; + psx_dispatch(cpu, 0x8004644Cu); +label_BFC2EA84: + psx_check_interrupts(cpu); + /* 0xBFC2EA84: 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, 0xBFC2EA84u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } +label_BFC2EA88: + psx_check_interrupts(cpu); + /* 0xBFC2EA88: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC2EA8C: 03E00008 jr $ra */ + /* 0xBFC2EA90: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2EA94(CPUState* cpu) { +label_BFC2EA94: + psx_check_interrupts(cpu); + /* 0xBFC2EA94: 00804021 addu $t0, $a0, $zero */ + cpu->gpr[8] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2EA98: 00087080 sll $t6, $t0, 2 */ + cpu->gpr[14] = cpu->gpr[8] << 2u; + /* 0xBFC2EA9C: 01C87023 subu $t6, $t6, $t0 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[8]; + /* 0xBFC2EAA0: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC2EAA4: 01C87021 addu $t6, $t6, $t0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[8]; + /* 0xBFC2EAA8: 000E7100 sll $t6, $t6, 4 */ + cpu->gpr[14] = cpu->gpr[14] << 4u; + /* 0xBFC2EAAC: 01C87021 addu $t6, $t6, $t0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[8]; + /* 0xBFC2EAB0: 3C0F8011 lui $t7, 0x8011 */ + cpu->gpr[15] = 0x80110000u; + /* 0xBFC2EAB4: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC2EAB8: 25EF0EC8 addiu $t7, $t7, 3784 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (3784)); + /* 0xBFC2EABC: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC2EAC0: 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, 0xBFC2EAC0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2EAC4: 01CF1821 addu $v1, $t6, $t7 */ + cpu->gpr[3] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC2EAC8: 8C670684 lw $a3, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EAC8u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC2EACC: 00A04821 addu $t1, $a1, $zero */ + cpu->gpr[9] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC2EAD0: 14E0002D bne $a3, $zero, 0xBFC2EB88 */ + uint32_t psx_brA_BFC2EAD0 = cpu->gpr[7]; uint32_t psx_brB_BFC2EAD0 = cpu->gpr[0]; + int psx_taken_BFC2EAD0 = (psx_brA_BFC2EAD0 != psx_brB_BFC2EAD0); + /* 0xBFC2EAD4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2EAD0) goto label_BFC2EB88; +label_BFC2EAD8: + psx_check_interrupts(cpu); + /* 0xBFC2EAD8: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC2EADC: 8C429E24 lw $v0, -25052($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EADCu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2EAE0: 00085080 sll $t2, $t0, 2 */ + cpu->gpr[10] = cpu->gpr[8] << 2u; + /* 0xBFC2EAE4: 01485023 subu $t2, $t2, $t0 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[8]; + /* 0xBFC2EAE8: 000A5080 sll $t2, $t2, 2 */ + cpu->gpr[10] = cpu->gpr[10] << 2u; + /* 0xBFC2EAEC: 01485021 addu $t2, $t2, $t0 */ + cpu->gpr[10] = cpu->gpr[10] + cpu->gpr[8]; + /* 0xBFC2EAF0: 000A5100 sll $t2, $t2, 4 */ + cpu->gpr[10] = cpu->gpr[10] << 4u; + /* 0xBFC2EAF4: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC2EAF8: 000258C0 sll $t3, $v0, 3 */ + cpu->gpr[11] = cpu->gpr[2] << 3u; + /* 0xBFC2EAFC: 01485021 addu $t2, $t2, $t0 */ + cpu->gpr[10] = cpu->gpr[10] + cpu->gpr[8]; + /* 0xBFC2EB00: 01625823 subu $t3, $t3, $v0 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[2]; + /* 0xBFC2EB04: 0302C021 addu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[2]; + /* 0xBFC2EB08: 0018C080 sll $t8, $t8, 2 */ + cpu->gpr[24] = cpu->gpr[24] << 2u; + /* 0xBFC2EB0C: 000B5900 sll $t3, $t3, 4 */ + cpu->gpr[11] = cpu->gpr[11] << 4u; + /* 0xBFC2EB10: 000A50C0 sll $t2, $t2, 3 */ + cpu->gpr[10] = cpu->gpr[10] << 3u; + /* 0xBFC2EB14: 3C0D8011 lui $t5, 0x8011 */ + cpu->gpr[13] = 0x80110000u; + /* 0xBFC2EB18: 25AD0F04 addiu $t5, $t5, 3844 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[13] + (3844)); + /* 0xBFC2EB1C: 014B6021 addu $t4, $t2, $t3 */ + cpu->gpr[12] = cpu->gpr[10] + cpu->gpr[11]; + /* 0xBFC2EB20: 0302C021 addu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[2]; + /* 0xBFC2EB24: 0018C140 sll $t8, $t8, 5 */ + cpu->gpr[24] = cpu->gpr[24] << 5u; + /* 0xBFC2EB28: 018D7021 addu $t6, $t4, $t5 */ + cpu->gpr[14] = cpu->gpr[12] + cpu->gpr[13]; + /* 0xBFC2EB2C: 25CF006C addiu $t7, $t6, 108 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[14] + (108)); + /* 0xBFC2EB30: 0078C821 addu $t9, $v1, $t8 */ + cpu->gpr[25] = cpu->gpr[3] + cpu->gpr[24]; +label_BFC2EB34: + psx_check_interrupts(cpu); + /* 0xBFC2EB34: 8DC10000 lw $at, 0($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB34u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EB38: 25CE000C addiu $t6, $t6, 12 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[14] + (12)); + /* 0xBFC2EB3C: AF21011C sw $at, 284($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (284)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB3Cu); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EB40: 8DC1FFF8 lw $at, -8($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB40u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EB44: 2739000C addiu $t9, $t9, 12 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (12)); + /* 0xBFC2EB48: AF210114 sw $at, 276($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (276)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB48u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EB4C: 8DC1FFFC lw $at, -4($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB4Cu); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EB50: 15CFFFF8 bne $t6, $t7, 0xBFC2EB34 */ + uint32_t psx_brA_BFC2EB50 = cpu->gpr[14]; uint32_t psx_brB_BFC2EB50 = cpu->gpr[15]; + int psx_taken_BFC2EB50 = (psx_brA_BFC2EB50 != psx_brB_BFC2EB50); + /* 0xBFC2EB54: AF210118 sw $at, 280($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (280)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB54u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + if (psx_taken_BFC2EB50) goto label_BFC2EB34; +label_BFC2EB58: + psx_check_interrupts(cpu); + /* 0xBFC2EB58: 8DC10000 lw $at, 0($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB58u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EB5C: 00000000 nop */ + /* nop */ + /* 0xBFC2EB60: AF21011C sw $at, 284($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (284)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB60u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EB64: 8C780684 lw $t8, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB64u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2EB68: 8C6B002C lw $t3, 44($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB68u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC2EB6C: 270A0001 addiu $t2, $t8, 1 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[24] + (1)); + /* 0xBFC2EB70: AC6A0684 sw $t2, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB70u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC2EB74: AC60067C sw $zero, 1660($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1660)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB74u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC2EB78: 356C0004 ori $t4, $t3, 0x4 */ + cpu->gpr[12] = cpu->gpr[11] | 0x4u; + /* 0xBFC2EB7C: 8C670684 lw $a3, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB7Cu); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC2EB80: AC600680 sw $zero, 1664($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1664)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB80u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC2EB84: AC6C002C sw $t4, 44($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB84u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } +label_BFC2EB88: + psx_check_interrupts(cpu); + /* 0xBFC2EB88: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC2EB8C: 8DAD9E24 lw $t5, -25052($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EB8Cu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC2EB90: 0007C8C0 sll $t9, $a3, 3 */ + cpu->gpr[25] = cpu->gpr[7] << 3u; + /* 0xBFC2EB94: 000D7880 sll $t7, $t5, 2 */ + cpu->gpr[15] = cpu->gpr[13] << 2u; + /* 0xBFC2EB98: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2EB9C: 000F7880 sll $t7, $t7, 2 */ + cpu->gpr[15] = cpu->gpr[15] << 2u; + /* 0xBFC2EBA0: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2EBA4: 000F7940 sll $t7, $t7, 5 */ + cpu->gpr[15] = cpu->gpr[15] << 5u; + /* 0xBFC2EBA8: 0327C823 subu $t9, $t9, $a3 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[7]; + /* 0xBFC2EBAC: 0019C900 sll $t9, $t9, 4 */ + cpu->gpr[25] = cpu->gpr[25] << 4u; + /* 0xBFC2EBB0: 006F7021 addu $t6, $v1, $t7 */ + cpu->gpr[14] = cpu->gpr[3] + cpu->gpr[15]; + /* 0xBFC2EBB4: 01205821 addu $t3, $t1, $zero */ + cpu->gpr[11] = cpu->gpr[9] + cpu->gpr[0]; + /* 0xBFC2EBB8: 256A006C addiu $t2, $t3, 108 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[11] + (108)); + /* 0xBFC2EBBC: 01D9C021 addu $t8, $t6, $t9 */ + cpu->gpr[24] = cpu->gpr[14] + cpu->gpr[25]; +label_BFC2EBC0: + psx_check_interrupts(cpu); + /* 0xBFC2EBC0: 8D610000 lw $at, 0($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBC0u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EBC4: 256B000C addiu $t3, $t3, 12 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[11] + (12)); + /* 0xBFC2EBC8: AF01011C sw $at, 284($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (284)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBC8u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EBCC: 8D61FFF8 lw $at, -8($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBCCu); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EBD0: 2718000C addiu $t8, $t8, 12 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[24] + (12)); + /* 0xBFC2EBD4: AF010114 sw $at, 276($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (276)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBD4u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EBD8: 8D61FFFC lw $at, -4($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBD8u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EBDC: 156AFFF8 bne $t3, $t2, 0xBFC2EBC0 */ + uint32_t psx_brA_BFC2EBDC = cpu->gpr[11]; uint32_t psx_brB_BFC2EBDC = cpu->gpr[10]; + int psx_taken_BFC2EBDC = (psx_brA_BFC2EBDC != psx_brB_BFC2EBDC); + /* 0xBFC2EBE0: AF010118 sw $at, 280($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (280)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBE0u); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + if (psx_taken_BFC2EBDC) goto label_BFC2EBC0; +label_BFC2EBE4: + psx_check_interrupts(cpu); + /* 0xBFC2EBE4: 8D610000 lw $at, 0($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBE4u); return; } cpu->gpr[1] = cpu->read_word(psx_addr); } + /* 0xBFC2EBE8: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC2EBEC: AF01011C sw $at, 284($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (284)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBECu); return; } cpu->write_word(psx_addr, cpu->gpr[1]); } + /* 0xBFC2EBF0: 8DAD9E24 lw $t5, -25052($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EBF0u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC2EBF4: 00086080 sll $t4, $t0, 2 */ + cpu->gpr[12] = cpu->gpr[8] << 2u; + /* 0xBFC2EBF8: 01886023 subu $t4, $t4, $t0 */ + cpu->gpr[12] = cpu->gpr[12] - cpu->gpr[8]; + /* 0xBFC2EBFC: 000C6080 sll $t4, $t4, 2 */ + cpu->gpr[12] = cpu->gpr[12] << 2u; + /* 0xBFC2EC00: 000D7880 sll $t7, $t5, 2 */ + cpu->gpr[15] = cpu->gpr[13] << 2u; + /* 0xBFC2EC04: 01886021 addu $t4, $t4, $t0 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[8]; + /* 0xBFC2EC08: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2EC0C: 000F7880 sll $t7, $t7, 2 */ + cpu->gpr[15] = cpu->gpr[15] << 2u; + /* 0xBFC2EC10: 000C6100 sll $t4, $t4, 4 */ + cpu->gpr[12] = cpu->gpr[12] << 4u; + /* 0xBFC2EC14: 01886021 addu $t4, $t4, $t0 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[8]; + /* 0xBFC2EC18: 01ED7821 addu $t7, $t7, $t5 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC2EC1C: 000F7940 sll $t7, $t7, 5 */ + cpu->gpr[15] = cpu->gpr[15] << 5u; + /* 0xBFC2EC20: 000C60C0 sll $t4, $t4, 3 */ + cpu->gpr[12] = cpu->gpr[12] << 3u; + /* 0xBFC2EC24: 018F7021 addu $t6, $t4, $t7 */ + cpu->gpr[14] = cpu->gpr[12] + cpu->gpr[15]; + /* 0xBFC2EC28: 8C790684 lw $t9, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC28u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2EC2C: 000D60C0 sll $t4, $t5, 3 */ + cpu->gpr[12] = cpu->gpr[13] << 3u; + /* 0xBFC2EC30: 018D6023 subu $t4, $t4, $t5 */ + cpu->gpr[12] = cpu->gpr[12] - cpu->gpr[13]; + /* 0xBFC2EC34: 000C6100 sll $t4, $t4, 4 */ + cpu->gpr[12] = cpu->gpr[12] << 4u; + /* 0xBFC2EC38: 001950C0 sll $t2, $t9, 3 */ + cpu->gpr[10] = cpu->gpr[25] << 3u; + /* 0xBFC2EC3C: 006C1021 addu $v0, $v1, $t4 */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[12]; + /* 0xBFC2EC40: 01595023 subu $t2, $t2, $t9 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[25]; + /* 0xBFC2EC44: 000A5100 sll $t2, $t2, 4 */ + cpu->gpr[10] = cpu->gpr[10] << 4u; + /* 0xBFC2EC48: 3C188011 lui $t8, 0x8011 */ + cpu->gpr[24] = 0x80110000u; + /* 0xBFC2EC4C: 27180FE4 addiu $t8, $t8, 4068 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[24] + (4068)); + /* 0xBFC2EC50: 01CA5821 addu $t3, $t6, $t2 */ + cpu->gpr[11] = cpu->gpr[14] + cpu->gpr[10]; + /* 0xBFC2EC54: 8445007E lh $a1, 126($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (126)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC54u); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2EC58: 84460080 lh $a2, 128($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (128)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC58u); return; } cpu->gpr[6] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC2EC5C: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC2EC60: 0C0111FD jal 0xB00447F4 */ + /* 0xBFC2EC64: 01782021 addu $a0, $t3, $t8 */ + cpu->gpr[4] = cpu->gpr[11] + cpu->gpr[24]; + cpu->gpr[31] = 0xBFC2EC68u; + psx_dispatch(cpu, 0x800447F4u); +label_BFC2EC68: + psx_check_interrupts(cpu); + /* 0xBFC2EC68: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC68u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC2EC6C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EC70: 8C6F0684 lw $t7, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC70u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2EC74: 00000000 nop */ + /* nop */ + /* 0xBFC2EC78: 25F90001 addiu $t9, $t7, 1 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[15] + (1)); + /* 0xBFC2EC7C: AC790684 sw $t9, 1668($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (1668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EC7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC2EC80: 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, 0xBFC2EC80u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2EC84: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC2EC88: 03E00008 jr $ra */ + /* 0xBFC2EC8C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2EC90(CPUState* cpu) { +label_BFC2EC90: + psx_check_interrupts(cpu); + /* 0xBFC2EC90: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EC94: 3C028014 lui $v0, 0x8014 */ + cpu->gpr[2] = 0x80140000u; + /* 0xBFC2EC98: 3C038011 lui $v1, 0x8011 */ + cpu->gpr[3] = 0x80110000u; + /* 0xBFC2EC9C: 24630EC8 addiu $v1, $v1, 3784 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (3784)); + /* 0xBFC2ECA0: 244281C8 addiu $v0, $v0, -32312 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-32312)); +label_BFC2ECA4: + psx_check_interrupts(cpu); + /* 0xBFC2ECA4: 8C6E0004 lw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ECA4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2ECA8: 00000000 nop */ + /* nop */ + /* 0xBFC2ECAC: 148E0005 bne $a0, $t6, 0xBFC2ECC4 */ + uint32_t psx_brA_BFC2ECAC = cpu->gpr[4]; uint32_t psx_brB_BFC2ECAC = cpu->gpr[14]; + int psx_taken_BFC2ECAC = (psx_brA_BFC2ECAC != psx_brB_BFC2ECAC); + /* 0xBFC2ECB0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2ECAC) goto label_BFC2ECC4; +label_BFC2ECB4: + psx_check_interrupts(cpu); + /* 0xBFC2ECB4: 8C6F002C lw $t7, 44($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ECB4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2ECB8: 00000000 nop */ + /* nop */ + /* 0xBFC2ECBC: 01E5C025 or $t8, $t7, $a1 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[5]; + /* 0xBFC2ECC0: AC78002C sw $t8, 44($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ECC0u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } +label_BFC2ECC4: + psx_check_interrupts(cpu); + /* 0xBFC2ECC4: 24630688 addiu $v1, $v1, 1672 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1672)); + /* 0xBFC2ECC8: 1462FFF6 bne $v1, $v0, 0xBFC2ECA4 */ + uint32_t psx_brA_BFC2ECC8 = cpu->gpr[3]; uint32_t psx_brB_BFC2ECC8 = cpu->gpr[2]; + int psx_taken_BFC2ECC8 = (psx_brA_BFC2ECC8 != psx_brB_BFC2ECC8); + /* 0xBFC2ECCC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2ECC8) goto label_BFC2ECA4; +label_BFC2ECD0: + psx_check_interrupts(cpu); + /* 0xBFC2ECD0: 03E00008 jr $ra */ + /* 0xBFC2ECD4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC2ECD8(CPUState* cpu) { +label_BFC2ECD8: + psx_check_interrupts(cpu); + /* 0xBFC2ECD8: 00047080 sll $t6, $a0, 2 */ + cpu->gpr[14] = cpu->gpr[4] << 2u; + /* 0xBFC2ECDC: 01C47023 subu $t6, $t6, $a0 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[4]; + /* 0xBFC2ECE0: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC2ECE4: 8DEF9E24 lw $t7, -25052($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25052)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2ECE4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2ECE8: 000E7080 sll $t6, $t6, 2 */ + cpu->gpr[14] = cpu->gpr[14] << 2u; + /* 0xBFC2ECEC: 01C47021 addu $t6, $t6, $a0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[4]; + /* 0xBFC2ECF0: 000E7100 sll $t6, $t6, 4 */ + cpu->gpr[14] = cpu->gpr[14] << 4u; + /* 0xBFC2ECF4: 000FC0C0 sll $t8, $t7, 3 */ + cpu->gpr[24] = cpu->gpr[15] << 3u; + /* 0xBFC2ECF8: 01C47021 addu $t6, $t6, $a0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[4]; + /* 0xBFC2ECFC: 030FC023 subu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[15]; + /* 0xBFC2ED00: 0018C100 sll $t8, $t8, 4 */ + cpu->gpr[24] = cpu->gpr[24] << 4u; + /* 0xBFC2ED04: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC2ED08: 3C088011 lui $t0, 0x8011 */ + cpu->gpr[8] = 0x80110000u; + /* 0xBFC2ED0C: 25080F04 addiu $t0, $t0, 3844 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (3844)); + /* 0xBFC2ED10: 01D8C821 addu $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] + cpu->gpr[24]; + /* 0xBFC2ED14: 03E00008 jr $ra */ + /* 0xBFC2ED18: 03281021 addu $v0, $t9, $t0 */ + cpu->gpr[2] = cpu->gpr[25] + cpu->gpr[8]; + return; +} + void func_1FC2ED1C(CPUState* cpu) { label_BFC2ED1C: psx_check_interrupts(cpu); @@ -96787,6 +107959,104 @@ label_BFC2EEB4: return; } +void func_1FC2EEC0(CPUState* cpu) { +label_BFC2EEC0: + psx_check_interrupts(cpu); + /* 0xBFC2EEC0: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EEC4: 3C028014 lui $v0, 0x8014 */ + cpu->gpr[2] = 0x80140000u; + /* 0xBFC2EEC8: 3C058011 lui $a1, 0x8011 */ + cpu->gpr[5] = 0x80110000u; + /* 0xBFC2EECC: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EED0: 24A50EC8 addiu $a1, $a1, 3784 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (3784)); + /* 0xBFC2EED4: 244281C8 addiu $v0, $v0, -32312 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-32312)); +label_BFC2EED8: + psx_check_interrupts(cpu); + /* 0xBFC2EED8: 8CAE0004 lw $t6, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EED8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2EEDC: 00000000 nop */ + /* nop */ + /* 0xBFC2EEE0: 148E0002 bne $a0, $t6, 0xBFC2EEEC */ + uint32_t psx_brA_BFC2EEE0 = cpu->gpr[4]; uint32_t psx_brB_BFC2EEE0 = cpu->gpr[14]; + int psx_taken_BFC2EEE0 = (psx_brA_BFC2EEE0 != psx_brB_BFC2EEE0); + /* 0xBFC2EEE4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2EEE0) goto label_BFC2EEEC; +label_BFC2EEE8: + psx_check_interrupts(cpu); + /* 0xBFC2EEE8: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); +label_BFC2EEEC: + psx_check_interrupts(cpu); + /* 0xBFC2EEEC: 24A50688 addiu $a1, $a1, 1672 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1672)); + /* 0xBFC2EEF0: 14A2FFF9 bne $a1, $v0, 0xBFC2EED8 */ + uint32_t psx_brA_BFC2EEF0 = cpu->gpr[5]; uint32_t psx_brB_BFC2EEF0 = cpu->gpr[2]; + int psx_taken_BFC2EEF0 = (psx_brA_BFC2EEF0 != psx_brB_BFC2EEF0); + /* 0xBFC2EEF4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2EEF0) goto label_BFC2EED8; +label_BFC2EEF8: + psx_check_interrupts(cpu); + /* 0xBFC2EEF8: 03E00008 jr $ra */ + /* 0xBFC2EEFC: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + +void func_1FC2EF00(CPUState* cpu) { +label_BFC2EF00: + psx_check_interrupts(cpu); + /* 0xBFC2EF00: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EF04: 3C028014 lui $v0, 0x8014 */ + cpu->gpr[2] = 0x80140000u; + /* 0xBFC2EF08: 3C058011 lui $a1, 0x8011 */ + cpu->gpr[5] = 0x80110000u; + /* 0xBFC2EF0C: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC2EF10: 24A50EC8 addiu $a1, $a1, 3784 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (3784)); + /* 0xBFC2EF14: 244281C8 addiu $v0, $v0, -32312 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-32312)); +label_BFC2EF18: + psx_check_interrupts(cpu); + /* 0xBFC2EF18: 8CAE0004 lw $t6, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2EF18u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2EF1C: 00000000 nop */ + /* nop */ + /* 0xBFC2EF20: 148E0002 bne $a0, $t6, 0xBFC2EF2C */ + uint32_t psx_brA_BFC2EF20 = cpu->gpr[4]; uint32_t psx_brB_BFC2EF20 = cpu->gpr[14]; + int psx_taken_BFC2EF20 = (psx_brA_BFC2EF20 != psx_brB_BFC2EF20); + /* 0xBFC2EF24: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2EF20) goto label_BFC2EF2C; +label_BFC2EF28: + psx_check_interrupts(cpu); + /* 0xBFC2EF28: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); +label_BFC2EF2C: + psx_check_interrupts(cpu); + /* 0xBFC2EF2C: 24A50688 addiu $a1, $a1, 1672 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1672)); + /* 0xBFC2EF30: 14A2FFF9 bne $a1, $v0, 0xBFC2EF18 */ + uint32_t psx_brA_BFC2EF30 = cpu->gpr[5]; uint32_t psx_brB_BFC2EF30 = cpu->gpr[2]; + int psx_taken_BFC2EF30 = (psx_brA_BFC2EF30 != psx_brB_BFC2EF30); + /* 0xBFC2EF34: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2EF30) goto label_BFC2EF18; +label_BFC2EF38: + psx_check_interrupts(cpu); + /* 0xBFC2EF38: 03E00008 jr $ra */ + /* 0xBFC2EF3C: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + void func_1FC2EF40(CPUState* cpu) { label_BFC2EF40: psx_check_interrupts(cpu); @@ -97028,6 +108298,43 @@ label_BFC2F084: return; } +void func_1FC2F1D4(CPUState* cpu) { +label_BFC2F1D4: + psx_check_interrupts(cpu); + /* 0xBFC2F1D4: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2F1D8: 10400008 beq $v0, $zero, 0xBFC2F1FC */ + uint32_t psx_brA_BFC2F1D8 = cpu->gpr[2]; uint32_t psx_brB_BFC2F1D8 = cpu->gpr[0]; + int psx_taken_BFC2F1D8 = (psx_brA_BFC2F1D8 == psx_brB_BFC2F1D8); + /* 0xBFC2F1DC: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC2F1D8) goto label_BFC2F1FC; +label_BFC2F1E0: + psx_check_interrupts(cpu); + /* 0xBFC2F1E0: 808E0000 lb $t6, 0($a0) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC2F1E4: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2F1E8: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC2F1EC: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC2F1F0: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC2F1F4: 1440FFFA bne $v0, $zero, 0xBFC2F1E0 */ + uint32_t psx_brA_BFC2F1F4 = cpu->gpr[2]; uint32_t psx_brB_BFC2F1F4 = cpu->gpr[0]; + int psx_taken_BFC2F1F4 = (psx_brA_BFC2F1F4 != psx_brB_BFC2F1F4); + /* 0xBFC2F1F8: A0AEFFFF sb $t6, -1($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (-1)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + if (psx_taken_BFC2F1F4) goto label_BFC2F1E0; +label_BFC2F1FC: + psx_check_interrupts(cpu); + /* 0xBFC2F1FC: 03E00008 jr $ra */ + /* 0xBFC2F200: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2F210(CPUState* cpu) { label_BFC2F210: psx_check_interrupts(cpu); @@ -97738,6 +109045,94 @@ label_BFC2F690: return; } +void func_1FC2F6A0(CPUState* cpu) { +label_BFC2F6A0: + psx_check_interrupts(cpu); + /* 0xBFC2F6A0: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC2F6A4: 8C42AE2C lw $v0, -20948($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F6A4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2F6A8: 3C03800F lui $v1, 0x800F */ + cpu->gpr[3] = 0x800F0000u; + /* 0xBFC2F6AC: 2463A868 addiu $v1, $v1, -22424 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-22424)); + /* 0xBFC2F6B0: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC2F6B4: 14430004 bne $v0, $v1, 0xBFC2F6C8 */ + uint32_t psx_brA_BFC2F6B4 = cpu->gpr[2]; uint32_t psx_brB_BFC2F6B4 = cpu->gpr[3]; + int psx_taken_BFC2F6B4 = (psx_brA_BFC2F6B4 != psx_brB_BFC2F6B4); + /* 0xBFC2F6B8: 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, 0xBFC2F6B8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC2F6B4) goto label_BFC2F6C8; +label_BFC2F6BC: + psx_check_interrupts(cpu); + /* 0xBFC2F6BC: 3C02800F lui $v0, 0x800F */ + cpu->gpr[2] = 0x800F0000u; + /* 0xBFC2F6C0: 10000002 beq $zero, $zero, 0xBFC2F6CC */ + uint32_t psx_brA_BFC2F6C0 = cpu->gpr[0]; uint32_t psx_brB_BFC2F6C0 = cpu->gpr[0]; + int psx_taken_BFC2F6C0 = (psx_brA_BFC2F6C0 == psx_brB_BFC2F6C0); + /* 0xBFC2F6C4: 2442BC88 addiu $v0, $v0, -17272 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-17272)); + if (psx_taken_BFC2F6C0) goto label_BFC2F6CC; +label_BFC2F6C8: + psx_check_interrupts(cpu); + /* 0xBFC2F6C8: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; +label_BFC2F6CC: + psx_check_interrupts(cpu); + /* 0xBFC2F6CC: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC2F6D0: AC22AE2C sw $v0, -20948($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F6D0u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC2F6D4: 24440070 addiu $a0, $v0, 112 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[2] + (112)); + /* 0xBFC2F6D8: 0C013CCD jal 0xB004F334 */ + /* 0xBFC2F6DC: 24050400 addiu $a1, $zero, 1024 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (1024)); + cpu->gpr[31] = 0xBFC2F6E0u; + psx_dispatch(cpu, 0x8004F334u); +label_BFC2F6E0: + psx_check_interrupts(cpu); + /* 0xBFC2F6E0: 3C028006 lui $v0, 0x8006 */ + cpu->gpr[2] = 0x80060000u; + /* 0xBFC2F6E4: 8C42AE2C lw $v0, -20948($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F6E4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC2F6E8: 3C03800F lui $v1, 0x800F */ + cpu->gpr[3] = 0x800F0000u; + /* 0xBFC2F6EC: 2463A868 addiu $v1, $v1, -22424 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-22424)); + /* 0xBFC2F6F0: 14430004 bne $v0, $v1, 0xBFC2F704 */ + uint32_t psx_brA_BFC2F6F0 = cpu->gpr[2]; uint32_t psx_brB_BFC2F6F0 = cpu->gpr[3]; + int psx_taken_BFC2F6F0 = (psx_brA_BFC2F6F0 != psx_brB_BFC2F6F0); + /* 0xBFC2F6F4: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC2F6F0) goto label_BFC2F704; +label_BFC2F6F8: + psx_check_interrupts(cpu); + /* 0xBFC2F6F8: 10000002 beq $zero, $zero, 0xBFC2F704 */ + uint32_t psx_brA_BFC2F6F8 = cpu->gpr[0]; uint32_t psx_brB_BFC2F6F8 = cpu->gpr[0]; + int psx_taken_BFC2F6F8 = (psx_brA_BFC2F6F8 == psx_brB_BFC2F6F8); + /* 0xBFC2F6FC: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC2F6F8) goto label_BFC2F704; +label_BFC2F700: + psx_check_interrupts(cpu); + /* 0xBFC2F700: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC2F704: + psx_check_interrupts(cpu); + /* 0xBFC2F704: 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, 0xBFC2F704u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2F708: 00031400 sll $v0, $v1, 16 */ + cpu->gpr[2] = cpu->gpr[3] << 16u; + /* 0xBFC2F70C: 00021403 sra $v0, $v0, 16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 16u); + /* 0xBFC2F710: 03E00008 jr $ra */ + /* 0xBFC2F714: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + return; +} + void func_1FC2F718(CPUState* cpu) { label_BFC2F718: psx_check_interrupts(cpu); @@ -97834,6 +109229,68 @@ label_BFC2F78C: return; } +void func_1FC2F79C(CPUState* cpu) { +label_BFC2F79C: + psx_check_interrupts(cpu); + /* 0xBFC2F79C: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC2F7A0: 3C0F8006 lui $t7, 0x8006 */ + cpu->gpr[15] = 0x80060000u; + /* 0xBFC2F7A4: 8DEFAE2C lw $t7, -20948($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7A4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2F7A8: 8DCE8354 lw $t6, -31916($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-31916)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7A8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2F7AC: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC2F7B0: 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, 0xBFC2F7B0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2F7B4: A1EE1074 sb $t6, 4212($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (4212)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC2F7B8: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC2F7BC: 3C198006 lui $t9, 0x8006 */ + cpu->gpr[25] = 0x80060000u; + /* 0xBFC2F7C0: 8F39AE2C lw $t9, -20948($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7C0u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC2F7C4: 8F188358 lw $t8, -31912($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-31912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7C4u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2F7C8: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC2F7CC: A3381075 sb $t8, 4213($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (4213)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC2F7D0: 3C098006 lui $t1, 0x8006 */ + cpu->gpr[9] = 0x80060000u; + /* 0xBFC2F7D4: 8D29AE2C lw $t1, -20948($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7D4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC2F7D8: 8D08835C lw $t0, -31908($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-31908)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7D8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC2F7DC: 3C0A8006 lui $t2, 0x8006 */ + cpu->gpr[10] = 0x80060000u; + /* 0xBFC2F7E0: A1281076 sb $t0, 4214($t1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[9] + (4214)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + /* 0xBFC2F7E4: 8D4AAE2C lw $t2, -20948($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-20948)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2F7E4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC2F7E8: 00000000 nop */ + /* nop */ + /* 0xBFC2F7EC: 2544106C addiu $a0, $t2, 4204 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[10] + (4204)); + /* 0xBFC2F7F0: 0C014601 jal 0xB0051804 */ + /* 0xBFC2F7F4: 25451070 addiu $a1, $t2, 4208 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[10] + (4208)); + cpu->gpr[31] = 0xBFC2F7F8u; + psx_dispatch(cpu, 0x80051804u); +label_BFC2F7F8: + psx_check_interrupts(cpu); + /* 0xBFC2F7F8: 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, 0xBFC2F7F8u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2F7FC: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC2F800: 03E00008 jr $ra */ + /* 0xBFC2F804: 00000000 nop */ + /* nop */ + return; +} + void func_1FC2F808(CPUState* cpu) { label_BFC2F808: psx_check_interrupts(cpu); @@ -98277,6 +109734,321 @@ label_BFC2FA5C: return; } +void func_1FC2FA78(CPUState* cpu) { +label_BFC2FA78: + psx_check_interrupts(cpu); + /* 0xBFC2FA78: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC2FA7C: 8DCE8354 lw $t6, -31916($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-31916)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FA7Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC2FA80: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC2FA84: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC2FA88: 01C4001A div $t6, $a0 */ + { int32_t psx_n = (int32_t)cpu->gpr[14]; int32_t psx_d = (int32_t)cpu->gpr[4]; 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; } } + /* 0xBFC2FA8C: 27BDFFA0 addiu $sp, $sp, -96 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-96)); + /* 0xBFC2FA90: AFB40018 sw $s4, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FA90u); return; } cpu->write_word(psx_addr, cpu->gpr[20]); } + /* 0xBFC2FA94: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC2FA98: 8DEF8358 lw $t7, -31912($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-31912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FA98u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC2FA9C: AFB5001C sw $s5, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FA9Cu); return; } cpu->write_word(psx_addr, cpu->gpr[21]); } + /* 0xBFC2FAA0: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC2FAA4: 8F18835C lw $t8, -31908($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-31908)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FAA4u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC2FAA8: AFB60020 sw $s6, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FAA8u); return; } cpu->write_word(psx_addr, cpu->gpr[22]); } + /* 0xBFC2FAAC: AFB30014 sw $s3, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FAACu); return; } cpu->write_word(psx_addr, cpu->gpr[19]); } + /* 0xBFC2FAB0: AFBF0024 sw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FAB0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC2FAB4: 00809821 addu $s3, $a0, $zero */ + cpu->gpr[19] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC2FAB8: 0000A012 mflo $s4 */ + cpu->gpr[20] = cpu->lo; + /* 0xBFC2FABC: 0014A400 sll $s4, $s4, 16 */ + cpu->gpr[20] = cpu->gpr[20] << 16u; + /* 0xBFC2FAC0: 0014A403 sra $s4, $s4, 16 */ + cpu->gpr[20] = (uint32_t)((int32_t)cpu->gpr[20] >> 16u); + /* 0xBFC2FAC4: 01E4001A div $t7, $a0 */ + { int32_t psx_n = (int32_t)cpu->gpr[15]; int32_t psx_d = (int32_t)cpu->gpr[4]; 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; } } + /* 0xBFC2FAC8: 0000A812 mflo $s5 */ + cpu->gpr[21] = cpu->lo; + /* 0xBFC2FACC: 0015AC00 sll $s5, $s5, 16 */ + cpu->gpr[21] = cpu->gpr[21] << 16u; + /* 0xBFC2FAD0: 0015AC03 sra $s5, $s5, 16 */ + cpu->gpr[21] = (uint32_t)((int32_t)cpu->gpr[21] >> 16u); + /* 0xBFC2FAD4: 0304001A div $t8, $a0 */ + { int32_t psx_n = (int32_t)cpu->gpr[24]; int32_t psx_d = (int32_t)cpu->gpr[4]; 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; } } + /* 0xBFC2FAD8: 0000B012 mflo $s6 */ + cpu->gpr[22] = cpu->lo; + /* 0xBFC2FADC: 0016B400 sll $s6, $s6, 16 */ + cpu->gpr[22] = cpu->gpr[22] << 16u; + /* 0xBFC2FAE0: 0016B403 sra $s6, $s6, 16 */ + cpu->gpr[22] = (uint32_t)((int32_t)cpu->gpr[22] >> 16u); + /* 0xBFC2FAE4: 14800002 bne $a0, $zero, 0xBFC2FAF0 */ + uint32_t psx_brA_BFC2FAE4 = cpu->gpr[4]; uint32_t psx_brB_BFC2FAE4 = cpu->gpr[0]; + int psx_taken_BFC2FAE4 = (psx_brA_BFC2FAE4 != psx_brB_BFC2FAE4); + /* 0xBFC2FAE8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FAE4) goto label_BFC2FAF0; +label_BFC2FAEC: + psx_check_interrupts(cpu); + /* 0xBFC2FAEC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC2FAECu); return; +label_BFC2FAF0: + psx_check_interrupts(cpu); + /* 0xBFC2FAF0: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC2FAF4: 14810004 bne $a0, $at, 0xBFC2FB08 */ + uint32_t psx_brA_BFC2FAF4 = cpu->gpr[4]; uint32_t psx_brB_BFC2FAF4 = cpu->gpr[1]; + int psx_taken_BFC2FAF4 = (psx_brA_BFC2FAF4 != psx_brB_BFC2FAF4); + /* 0xBFC2FAF8: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC2FAF4) goto label_BFC2FB08; +label_BFC2FAFC: + psx_check_interrupts(cpu); + /* 0xBFC2FAFC: 15C10002 bne $t6, $at, 0xBFC2FB08 */ + uint32_t psx_brA_BFC2FAFC = cpu->gpr[14]; uint32_t psx_brB_BFC2FAFC = cpu->gpr[1]; + int psx_taken_BFC2FAFC = (psx_brA_BFC2FAFC != psx_brB_BFC2FAFC); + /* 0xBFC2FB00: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FAFC) goto label_BFC2FB08; +label_BFC2FB04: + psx_check_interrupts(cpu); + /* 0xBFC2FB04: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC2FB04u); return; +label_BFC2FB08: + psx_check_interrupts(cpu); + /* 0xBFC2FB08: 14800002 bne $a0, $zero, 0xBFC2FB14 */ + uint32_t psx_brA_BFC2FB08 = cpu->gpr[4]; uint32_t psx_brB_BFC2FB08 = cpu->gpr[0]; + int psx_taken_BFC2FB08 = (psx_brA_BFC2FB08 != psx_brB_BFC2FB08); + /* 0xBFC2FB0C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FB08) goto label_BFC2FB14; +label_BFC2FB10: + psx_check_interrupts(cpu); + /* 0xBFC2FB10: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC2FB10u); return; +label_BFC2FB14: + psx_check_interrupts(cpu); + /* 0xBFC2FB14: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC2FB18: 14810004 bne $a0, $at, 0xBFC2FB2C */ + uint32_t psx_brA_BFC2FB18 = cpu->gpr[4]; uint32_t psx_brB_BFC2FB18 = cpu->gpr[1]; + int psx_taken_BFC2FB18 = (psx_brA_BFC2FB18 != psx_brB_BFC2FB18); + /* 0xBFC2FB1C: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC2FB18) goto label_BFC2FB2C; +label_BFC2FB20: + psx_check_interrupts(cpu); + /* 0xBFC2FB20: 15E10002 bne $t7, $at, 0xBFC2FB2C */ + uint32_t psx_brA_BFC2FB20 = cpu->gpr[15]; uint32_t psx_brB_BFC2FB20 = cpu->gpr[1]; + int psx_taken_BFC2FB20 = (psx_brA_BFC2FB20 != psx_brB_BFC2FB20); + /* 0xBFC2FB24: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FB20) goto label_BFC2FB2C; +label_BFC2FB28: + psx_check_interrupts(cpu); + /* 0xBFC2FB28: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC2FB28u); return; +label_BFC2FB2C: + psx_check_interrupts(cpu); + /* 0xBFC2FB2C: 14800002 bne $a0, $zero, 0xBFC2FB38 */ + uint32_t psx_brA_BFC2FB2C = cpu->gpr[4]; uint32_t psx_brB_BFC2FB2C = cpu->gpr[0]; + int psx_taken_BFC2FB2C = (psx_brA_BFC2FB2C != psx_brB_BFC2FB2C); + /* 0xBFC2FB30: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FB2C) goto label_BFC2FB38; +label_BFC2FB34: + psx_check_interrupts(cpu); + /* 0xBFC2FB34: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC2FB34u); return; +label_BFC2FB38: + psx_check_interrupts(cpu); + /* 0xBFC2FB38: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC2FB3C: 14810004 bne $a0, $at, 0xBFC2FB50 */ + uint32_t psx_brA_BFC2FB3C = cpu->gpr[4]; uint32_t psx_brB_BFC2FB3C = cpu->gpr[1]; + int psx_taken_BFC2FB3C = (psx_brA_BFC2FB3C != psx_brB_BFC2FB3C); + /* 0xBFC2FB40: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC2FB3C) goto label_BFC2FB50; +label_BFC2FB44: + psx_check_interrupts(cpu); + /* 0xBFC2FB44: 17010002 bne $t8, $at, 0xBFC2FB50 */ + uint32_t psx_brA_BFC2FB44 = cpu->gpr[24]; uint32_t psx_brB_BFC2FB44 = cpu->gpr[1]; + int psx_taken_BFC2FB44 = (psx_brA_BFC2FB44 != psx_brB_BFC2FB44); + /* 0xBFC2FB48: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FB44) goto label_BFC2FB50; +label_BFC2FB4C: + psx_check_interrupts(cpu); + /* 0xBFC2FB4C: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC2FB4Cu); return; +label_BFC2FB50: + psx_check_interrupts(cpu); + /* 0xBFC2FB50: 18800026 blez $a0, 0xBFC2FBEC */ + uint32_t psx_brA_BFC2FB50 = cpu->gpr[4]; + int psx_taken_BFC2FB50 = ((int32_t)psx_brA_BFC2FB50 <= 0); + /* 0xBFC2FB54: 00000000 nop */ + /* nop */ + if (psx_taken_BFC2FB50) goto label_BFC2FBEC; +label_BFC2FB58: + psx_check_interrupts(cpu); + /* 0xBFC2FB58: 02930019 multu $s4, $s3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[20] * (uint64_t)cpu->gpr[19]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2FB5C: AFB00034 sw $s0, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FB5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC2FB60: AFB10030 sw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FB60u); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC2FB64: AFB2002C sw $s2, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FB64u); return; } cpu->write_word(psx_addr, cpu->gpr[18]); } + /* 0xBFC2FB68: 00008012 mflo $s0 */ + cpu->gpr[16] = cpu->lo; + /* 0xBFC2FB6C: 00000000 nop */ + /* nop */ + /* 0xBFC2FB70: 00000000 nop */ + /* nop */ + /* 0xBFC2FB74: 02B30019 multu $s5, $s3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[21] * (uint64_t)cpu->gpr[19]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2FB78: 00008812 mflo $s1 */ + cpu->gpr[17] = cpu->lo; + /* 0xBFC2FB7C: 00000000 nop */ + /* nop */ + /* 0xBFC2FB80: 00000000 nop */ + /* nop */ + /* 0xBFC2FB84: 02D30019 multu $s6, $s3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[22] * (uint64_t)cpu->gpr[19]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC2FB88: 00009012 mflo $s2 */ + cpu->gpr[18] = cpu->lo; + /* 0xBFC2FB8C: 00000000 nop */ + /* nop */ + /* 0xBFC2FB90: 00000000 nop */ + /* nop */ +label_BFC2FB94: + psx_check_interrupts(cpu); + /* 0xBFC2FB94: 0C011DA8 jal 0xB00476A0 */ + /* 0xBFC2FB98: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2FB9Cu; + psx_dispatch(cpu, 0x800476A0u); +label_BFC2FB9C: + psx_check_interrupts(cpu); + /* 0xBFC2FB9C: 00102400 sll $a0, $s0, 16 */ + cpu->gpr[4] = cpu->gpr[16] << 16u; + /* 0xBFC2FBA0: 00112C00 sll $a1, $s1, 16 */ + cpu->gpr[5] = cpu->gpr[17] << 16u; + /* 0xBFC2FBA4: 00123400 sll $a2, $s2, 16 */ + cpu->gpr[6] = cpu->gpr[18] << 16u; + /* 0xBFC2FBA8: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC2FBAC: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC2FBB0: 0C011F04 jal 0xB0047C10 */ + /* 0xBFC2FBB4: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + cpu->gpr[31] = 0xBFC2FBB8u; + psx_dispatch(cpu, 0x80047C10u); +label_BFC2FBB8: + psx_check_interrupts(cpu); + /* 0xBFC2FBB8: 0C011DE7 jal 0xB004779C */ + /* 0xBFC2FBBC: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2FBC0u; + psx_dispatch(cpu, 0x8004779Cu); +label_BFC2FBC0: + psx_check_interrupts(cpu); + /* 0xBFC2FBC0: 0C011DC6 jal 0xB0047718 */ + /* 0xBFC2FBC4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2FBC8u; + psx_dispatch(cpu, 0x80047718u); +label_BFC2FBC8: + psx_check_interrupts(cpu); + /* 0xBFC2FBC8: 2673FFFF addiu $s3, $s3, -1 */ + cpu->gpr[19] = (uint32_t)((int32_t)cpu->gpr[19] + (-1)); + /* 0xBFC2FBCC: 02148023 subu $s0, $s0, $s4 */ + cpu->gpr[16] = cpu->gpr[16] - cpu->gpr[20]; + /* 0xBFC2FBD0: 02358823 subu $s1, $s1, $s5 */ + cpu->gpr[17] = cpu->gpr[17] - cpu->gpr[21]; + /* 0xBFC2FBD4: 1E60FFEF bgtz $s3, 0xBFC2FB94 */ + uint32_t psx_brA_BFC2FBD4 = cpu->gpr[19]; + int psx_taken_BFC2FBD4 = ((int32_t)psx_brA_BFC2FBD4 > 0); + /* 0xBFC2FBD8: 02569023 subu $s2, $s2, $s6 */ + cpu->gpr[18] = cpu->gpr[18] - cpu->gpr[22]; + if (psx_taken_BFC2FBD4) goto label_BFC2FB94; +label_BFC2FBDC: + psx_check_interrupts(cpu); + /* 0xBFC2FBDC: 8FB00034 lw $s0, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBDCu); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC2FBE0: 8FB10030 lw $s1, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBE0u); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC2FBE4: 8FB2002C lw $s2, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBE4u); return; } cpu->gpr[18] = cpu->read_word(psx_addr); } + /* 0xBFC2FBE8: 00000000 nop */ + /* nop */ +label_BFC2FBEC: + psx_check_interrupts(cpu); + /* 0xBFC2FBEC: 0C011E17 jal 0xB004785C */ + /* 0xBFC2FBF0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC2FBF4u; + psx_dispatch(cpu, 0x8004785Cu); +label_BFC2FBF4: + psx_check_interrupts(cpu); + /* 0xBFC2FBF4: 8FBF0024 lw $ra, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBF4u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC2FBF8: 8FB30014 lw $s3, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBF8u); return; } cpu->gpr[19] = cpu->read_word(psx_addr); } + /* 0xBFC2FBFC: 8FB40018 lw $s4, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FBFCu); return; } cpu->gpr[20] = cpu->read_word(psx_addr); } + /* 0xBFC2FC00: 8FB5001C lw $s5, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FC00u); return; } cpu->gpr[21] = cpu->read_word(psx_addr); } + /* 0xBFC2FC04: 8FB60020 lw $s6, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FC04u); return; } cpu->gpr[22] = cpu->read_word(psx_addr); } + /* 0xBFC2FC08: 03E00008 jr $ra */ + /* 0xBFC2FC0C: 27BD0060 addiu $sp, $sp, 96 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (96)); + return; +} + +void func_1FC2FC10(CPUState* cpu) { +label_BFC2FC10: + psx_check_interrupts(cpu); + /* 0xBFC2FC10: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC2FC14: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC2FC18: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2FC1C: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC2FC20: AC248354 sw $a0, -31916($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31916)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FC20u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC2FC24: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC2FC28: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2FC2C: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC2FC30: AC258358 sw $a1, -31912($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31912)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FC30u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC2FC34: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC2FC38: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC2FC3C: 03E00008 jr $ra */ + /* 0xBFC2FC40: AC26835C sw $a2, -31908($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31908)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC2FC40u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + return; +} + void func_1FC2FCC4(CPUState* cpu) { label_BFC2FCC4: psx_check_interrupts(cpu); @@ -98666,6 +110438,43 @@ label_BFC2FF24: return; } +void func_1FC2FF34(CPUState* cpu) { +label_BFC2FF34: + psx_check_interrupts(cpu); + /* 0xBFC2FF34: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2FF38: 10400008 beq $v0, $zero, 0xBFC2FF5C */ + uint32_t psx_brA_BFC2FF38 = cpu->gpr[2]; uint32_t psx_brB_BFC2FF38 = cpu->gpr[0]; + int psx_taken_BFC2FF38 = (psx_brA_BFC2FF38 == psx_brB_BFC2FF38); + /* 0xBFC2FF3C: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC2FF38) goto label_BFC2FF5C; +label_BFC2FF40: + psx_check_interrupts(cpu); + /* 0xBFC2FF40: 808E0000 lb $t6, 0($a0) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC2FF44: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC2FF48: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC2FF4C: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC2FF50: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC2FF54: 1440FFFA bne $v0, $zero, 0xBFC2FF40 */ + uint32_t psx_brA_BFC2FF54 = cpu->gpr[2]; uint32_t psx_brB_BFC2FF54 = cpu->gpr[0]; + int psx_taken_BFC2FF54 = (psx_brA_BFC2FF54 != psx_brB_BFC2FF54); + /* 0xBFC2FF58: A0AEFFFF sb $t6, -1($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (-1)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + if (psx_taken_BFC2FF54) goto label_BFC2FF40; +label_BFC2FF5C: + psx_check_interrupts(cpu); + /* 0xBFC2FF5C: 03E00008 jr $ra */ + /* 0xBFC2FF60: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3010C(CPUState* cpu) { label_BFC3010C: psx_check_interrupts(cpu); @@ -99141,6 +110950,712 @@ label_BFC30384: return; } +void func_1FC303A4(CPUState* cpu) { +label_BFC303A4: + psx_check_interrupts(cpu); + /* 0xBFC303A4: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC303A8: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC303AC: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC303B0: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC303B4: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC303B8: 10000010 beq $zero, $zero, 0xBFC303FC */ + uint32_t psx_brA_BFC303B8 = cpu->gpr[0]; uint32_t psx_brB_BFC303B8 = cpu->gpr[0]; + int psx_taken_BFC303B8 = (psx_brA_BFC303B8 == psx_brB_BFC303B8); + /* 0xBFC303BC: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC303B8) goto label_BFC303FC; +label_BFC303C0: + psx_check_interrupts(cpu); + /* 0xBFC303C0: A0860004 sb $a2, 4($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (4)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC303C4: A0870005 sb $a3, 5($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (5)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC303C8: 87AE0010 lh $t6, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC303C8u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC303CC: 03E00008 jr $ra */ + /* 0xBFC303D0: A08E0006 sb $t6, 6($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (6)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + return; +label_BFC303D4: + psx_check_interrupts(cpu); + /* 0xBFC303D4: A086000C sb $a2, 12($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (12)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC303D8: A087000D sb $a3, 13($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (13)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC303DC: 87AF0010 lh $t7, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC303DCu); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC303E0: 03E00008 jr $ra */ + /* 0xBFC303E4: A08F000E sb $t7, 14($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (14)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + return; +label_BFC303E8: + psx_check_interrupts(cpu); + /* 0xBFC303E8: A0860014 sb $a2, 20($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (20)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC303EC: A0870015 sb $a3, 21($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (21)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC303F0: 87B80010 lh $t8, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC303F0u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC303F4: 03E00008 jr $ra */ + /* 0xBFC303F8: A0980016 sb $t8, 22($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (22)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + return; +label_BFC303FC: + psx_check_interrupts(cpu); + /* 0xBFC303FC: 10A0FFF0 beq $a1, $zero, 0xBFC303C0 */ + uint32_t psx_brA_BFC303FC = cpu->gpr[5]; uint32_t psx_brB_BFC303FC = cpu->gpr[0]; + int psx_taken_BFC303FC = (psx_brA_BFC303FC == psx_brB_BFC303FC); + /* 0xBFC30400: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC303FC) goto label_BFC303C0; +label_BFC30404: + psx_check_interrupts(cpu); + /* 0xBFC30404: 10A1FFF3 beq $a1, $at, 0xBFC303D4 */ + uint32_t psx_brA_BFC30404 = cpu->gpr[5]; uint32_t psx_brB_BFC30404 = cpu->gpr[1]; + int psx_taken_BFC30404 = (psx_brA_BFC30404 == psx_brB_BFC30404); + /* 0xBFC30408: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + if (psx_taken_BFC30404) goto label_BFC303D4; +label_BFC3040C: + psx_check_interrupts(cpu); + /* 0xBFC3040C: 10A1FFF6 beq $a1, $at, 0xBFC303E8 */ + uint32_t psx_brA_BFC3040C = cpu->gpr[5]; uint32_t psx_brB_BFC3040C = cpu->gpr[1]; + int psx_taken_BFC3040C = (psx_brA_BFC3040C == psx_brB_BFC3040C); + /* 0xBFC30410: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3040C) goto label_BFC303E8; +label_BFC30414: + psx_check_interrupts(cpu); + /* 0xBFC30414: 03E00008 jr $ra */ + /* 0xBFC30418: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3041C(CPUState* cpu) { +label_BFC3041C: + psx_check_interrupts(cpu); + /* 0xBFC3041C: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC30420: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC30424: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC30428: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC3042C: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC30430: 2C410004 sltiu $at, $v0, 4 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < 0x00000004u ? 1 : 0); + /* 0xBFC30434: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC30438: 1020001C beq $at, $zero, 0xBFC304AC */ + uint32_t psx_brA_BFC30438 = cpu->gpr[1]; uint32_t psx_brB_BFC30438 = cpu->gpr[0]; + int psx_taken_BFC30438 = (psx_brA_BFC30438 == psx_brB_BFC30438); + /* 0xBFC3043C: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + if (psx_taken_BFC30438) { cpu->pc = 0xBFC304ACu; return; } +label_BFC30440: + psx_check_interrupts(cpu); + /* 0xBFC30440: 00027080 sll $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] << 2u; + /* 0xBFC30444: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC30448: 002E0821 addu $at, $at, $t6 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[14]; + /* 0xBFC3044C: 8C2EADA0 lw $t6, -21088($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-21088)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3044Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC30450: 00000000 nop */ + /* nop */ + /* 0xBFC30454: 01C00008 jr $t6 */ + /* 0xBFC30458: 00000000 nop */ + /* nop */ + cpu->pc = cpu->gpr[14]; return; +} + +void func_1FC3045C(CPUState* cpu) { +label_BFC3045C: + psx_check_interrupts(cpu); + /* 0xBFC3045C: A0860004 sb $a2, 4($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (4)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC30460: A0870005 sb $a3, 5($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (5)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC30464: 87AF0010 lh $t7, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30464u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30468: 03E00008 jr $ra */ + /* 0xBFC3046C: A08F0006 sb $t7, 6($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (6)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + return; +} + +void func_1FC30470(CPUState* cpu) { +label_BFC30470: + psx_check_interrupts(cpu); + /* 0xBFC30470: A086000C sb $a2, 12($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (12)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC30474: A087000D sb $a3, 13($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (13)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC30478: 87B80010 lh $t8, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30478u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3047C: 03E00008 jr $ra */ + /* 0xBFC30480: A098000E sb $t8, 14($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (14)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + return; +} + +void func_1FC30484(CPUState* cpu) { +label_BFC30484: + psx_check_interrupts(cpu); + /* 0xBFC30484: A0860014 sb $a2, 20($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (20)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC30488: A0870015 sb $a3, 21($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (21)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC3048C: 87B90010 lh $t9, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3048Cu); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30490: 03E00008 jr $ra */ + /* 0xBFC30494: A0990016 sb $t9, 22($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (22)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + return; +} + +void func_1FC30498(CPUState* cpu) { +label_BFC30498: + psx_check_interrupts(cpu); + /* 0xBFC30498: A086001C sb $a2, 28($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (28)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC3049C: A087001D sb $a3, 29($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (29)), (uint8_t)(cpu->gpr[7] & 0xFFu)); + /* 0xBFC304A0: 87A80010 lh $t0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304A0u); return; } cpu->gpr[8] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC304A4: 03E00008 jr $ra */ + /* 0xBFC304A8: A088001E sb $t0, 30($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (30)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + return; +} + +void func_1FC304B4(CPUState* cpu) { +label_BFC304B4: + psx_check_interrupts(cpu); + /* 0xBFC304B4: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC304B8: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC304BC: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC304C0: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC304C4: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC304C8: 1000000A beq $zero, $zero, 0xBFC304F4 */ + uint32_t psx_brA_BFC304C8 = cpu->gpr[0]; uint32_t psx_brB_BFC304C8 = cpu->gpr[0]; + int psx_taken_BFC304C8 = (psx_brA_BFC304C8 == psx_brB_BFC304C8); + /* 0xBFC304CC: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC304C8) goto label_BFC304F4; +label_BFC304D0: + psx_check_interrupts(cpu); + /* 0xBFC304D0: A4860008 sh $a2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304D0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC304D4: 03E00008 jr $ra */ + /* 0xBFC304D8: A487000A sh $a3, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +label_BFC304DC: + psx_check_interrupts(cpu); + /* 0xBFC304DC: A4860010 sh $a2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304DCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC304E0: 03E00008 jr $ra */ + /* 0xBFC304E4: A4870012 sh $a3, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304E4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +label_BFC304E8: + psx_check_interrupts(cpu); + /* 0xBFC304E8: A4860018 sh $a2, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304E8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC304EC: 03E00008 jr $ra */ + /* 0xBFC304F0: A487001A sh $a3, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC304F0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +label_BFC304F4: + psx_check_interrupts(cpu); + /* 0xBFC304F4: 10A0FFF6 beq $a1, $zero, 0xBFC304D0 */ + uint32_t psx_brA_BFC304F4 = cpu->gpr[5]; uint32_t psx_brB_BFC304F4 = cpu->gpr[0]; + int psx_taken_BFC304F4 = (psx_brA_BFC304F4 == psx_brB_BFC304F4); + /* 0xBFC304F8: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC304F4) goto label_BFC304D0; +label_BFC304FC: + psx_check_interrupts(cpu); + /* 0xBFC304FC: 10A1FFF7 beq $a1, $at, 0xBFC304DC */ + uint32_t psx_brA_BFC304FC = cpu->gpr[5]; uint32_t psx_brB_BFC304FC = cpu->gpr[1]; + int psx_taken_BFC304FC = (psx_brA_BFC304FC == psx_brB_BFC304FC); + /* 0xBFC30500: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + if (psx_taken_BFC304FC) goto label_BFC304DC; +label_BFC30504: + psx_check_interrupts(cpu); + /* 0xBFC30504: 10A1FFF8 beq $a1, $at, 0xBFC304E8 */ + uint32_t psx_brA_BFC30504 = cpu->gpr[5]; uint32_t psx_brB_BFC30504 = cpu->gpr[1]; + int psx_taken_BFC30504 = (psx_brA_BFC30504 == psx_brB_BFC30504); + /* 0xBFC30508: 00000000 nop */ + /* nop */ + if (psx_taken_BFC30504) goto label_BFC304E8; +label_BFC3050C: + psx_check_interrupts(cpu); + /* 0xBFC3050C: 03E00008 jr $ra */ + /* 0xBFC30510: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC30514(CPUState* cpu) { +label_BFC30514: + psx_check_interrupts(cpu); + /* 0xBFC30514: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC30518: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC3051C: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC30520: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC30524: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC30528: 2C410004 sltiu $at, $v0, 4 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < 0x00000004u ? 1 : 0); + /* 0xBFC3052C: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC30530: 10200014 beq $at, $zero, 0xBFC30584 */ + uint32_t psx_brA_BFC30530 = cpu->gpr[1]; uint32_t psx_brB_BFC30530 = cpu->gpr[0]; + int psx_taken_BFC30530 = (psx_brA_BFC30530 == psx_brB_BFC30530); + /* 0xBFC30534: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + if (psx_taken_BFC30530) { cpu->pc = 0xBFC30584u; return; } +label_BFC30538: + psx_check_interrupts(cpu); + /* 0xBFC30538: 00027080 sll $t6, $v0, 2 */ + cpu->gpr[14] = cpu->gpr[2] << 2u; + /* 0xBFC3053C: 3C018006 lui $at, 0x8006 */ + cpu->gpr[1] = 0x80060000u; + /* 0xBFC30540: 002E0821 addu $at, $at, $t6 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[14]; + /* 0xBFC30544: 8C2EADB0 lw $t6, -21072($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-21072)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30544u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC30548: 00000000 nop */ + /* nop */ + /* 0xBFC3054C: 01C00008 jr $t6 */ + /* 0xBFC30550: 00000000 nop */ + /* nop */ + cpu->pc = cpu->gpr[14]; return; +} + +void func_1FC30554(CPUState* cpu) { +label_BFC30554: + psx_check_interrupts(cpu); + /* 0xBFC30554: A4860008 sh $a2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30554u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC30558: 03E00008 jr $ra */ + /* 0xBFC3055C: A487000A sh $a3, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3055Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +} + +void func_1FC30560(CPUState* cpu) { +label_BFC30560: + psx_check_interrupts(cpu); + /* 0xBFC30560: A4860010 sh $a2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30560u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC30564: 03E00008 jr $ra */ + /* 0xBFC30568: A4870012 sh $a3, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30568u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +} + +void func_1FC3056C(CPUState* cpu) { +label_BFC3056C: + psx_check_interrupts(cpu); + /* 0xBFC3056C: A4860018 sh $a2, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3056Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC30570: 03E00008 jr $ra */ + /* 0xBFC30574: A487001A sh $a3, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30574u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +} + +void func_1FC30578(CPUState* cpu) { +label_BFC30578: + psx_check_interrupts(cpu); + /* 0xBFC30578: A4860020 sh $a2, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30578u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3057C: 03E00008 jr $ra */ + /* 0xBFC30580: A4870022 sh $a3, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30580u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + return; +} + +void func_1FC3058C(CPUState* cpu) { +label_BFC3058C: + psx_check_interrupts(cpu); + /* 0xBFC3058C: 848E0008 lh $t6, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3058Cu); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30590: 8499000A lh $t9, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30590u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30594: 01C50019 multu $t6, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[14] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC30598: 848A0010 lh $t2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30598u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3059C: 848D0012 lh $t5, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3059Cu); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC305A0: 00007812 mflo $t7 */ + cpu->gpr[15] = cpu->lo; + /* 0xBFC305A4: 00000000 nop */ + /* nop */ + /* 0xBFC305A8: 00000000 nop */ + /* nop */ + /* 0xBFC305AC: 03250019 multu $t9, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[25] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC305B0: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC305B4: 00000000 nop */ + /* nop */ + /* 0xBFC305B8: 00000000 nop */ + /* nop */ + /* 0xBFC305BC: 01450019 multu $t2, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC305C0: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC305C4: 00000000 nop */ + /* nop */ + /* 0xBFC305C8: 00000000 nop */ + /* nop */ + /* 0xBFC305CC: 01A50019 multu $t5, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[13] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC305D0: 00007012 mflo $t6 */ + cpu->gpr[14] = cpu->lo; + /* 0xBFC305D4: 05E10002 bgez $t7, 0xBFC305E0 */ + uint32_t psx_brA_BFC305D4 = cpu->gpr[15]; + int psx_taken_BFC305D4 = ((int32_t)psx_brA_BFC305D4 >= 0); + /* 0xBFC305D8: 01E00821 addu $at, $t7, $zero */ + cpu->gpr[1] = cpu->gpr[15] + cpu->gpr[0]; + if (psx_taken_BFC305D4) goto label_BFC305E0; +label_BFC305DC: + psx_check_interrupts(cpu); + /* 0xBFC305DC: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC305E0: + psx_check_interrupts(cpu); + /* 0xBFC305E0: 0001C303 sra $t8, $at, 12 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC305E4: A4980008 sh $t8, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC305E4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC305E8: 84980018 lh $t8, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC305E8u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC305EC: 00000000 nop */ + /* nop */ + /* 0xBFC305F0: 03050019 multu $t8, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[24] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC305F4: 0000C812 mflo $t9 */ + cpu->gpr[25] = cpu->lo; + /* 0xBFC305F8: 05010002 bgez $t0, 0xBFC30604 */ + uint32_t psx_brA_BFC305F8 = cpu->gpr[8]; + int psx_taken_BFC305F8 = ((int32_t)psx_brA_BFC305F8 >= 0); + /* 0xBFC305FC: 01000821 addu $at, $t0, $zero */ + cpu->gpr[1] = cpu->gpr[8] + cpu->gpr[0]; + if (psx_taken_BFC305F8) goto label_BFC30604; +label_BFC30600: + psx_check_interrupts(cpu); + /* 0xBFC30600: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30604: + psx_check_interrupts(cpu); + /* 0xBFC30604: 00014B03 sra $t1, $at, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30608: A489000A sh $t1, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30608u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC3060C: 8489001A lh $t1, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3060Cu); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30610: 00000000 nop */ + /* nop */ + /* 0xBFC30614: 01250019 multu $t1, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC30618: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC3061C: 05610002 bgez $t3, 0xBFC30628 */ + uint32_t psx_brA_BFC3061C = cpu->gpr[11]; + int psx_taken_BFC3061C = ((int32_t)psx_brA_BFC3061C >= 0); + /* 0xBFC30620: 01600821 addu $at, $t3, $zero */ + cpu->gpr[1] = cpu->gpr[11] + cpu->gpr[0]; + if (psx_taken_BFC3061C) goto label_BFC30628; +label_BFC30624: + psx_check_interrupts(cpu); + /* 0xBFC30624: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30628: + psx_check_interrupts(cpu); + /* 0xBFC30628: 00016303 sra $t4, $at, 12 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC3062C: A48C0010 sh $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3062Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC30630: 05C10002 bgez $t6, 0xBFC3063C */ + uint32_t psx_brA_BFC30630 = cpu->gpr[14]; + int psx_taken_BFC30630 = ((int32_t)psx_brA_BFC30630 >= 0); + /* 0xBFC30634: 01C00821 addu $at, $t6, $zero */ + cpu->gpr[1] = cpu->gpr[14] + cpu->gpr[0]; + if (psx_taken_BFC30630) goto label_BFC3063C; +label_BFC30638: + psx_check_interrupts(cpu); + /* 0xBFC30638: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC3063C: + psx_check_interrupts(cpu); + /* 0xBFC3063C: 00017B03 sra $t7, $at, 12 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30640: A48F0012 sh $t7, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30640u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC30644: 07210002 bgez $t9, 0xBFC30650 */ + uint32_t psx_brA_BFC30644 = cpu->gpr[25]; + int psx_taken_BFC30644 = ((int32_t)psx_brA_BFC30644 >= 0); + /* 0xBFC30648: 03200821 addu $at, $t9, $zero */ + cpu->gpr[1] = cpu->gpr[25] + cpu->gpr[0]; + if (psx_taken_BFC30644) goto label_BFC30650; +label_BFC3064C: + psx_check_interrupts(cpu); + /* 0xBFC3064C: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30650: + psx_check_interrupts(cpu); + /* 0xBFC30650: 00014303 sra $t0, $at, 12 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30654: A4880018 sh $t0, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30654u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC30658: 05410002 bgez $t2, 0xBFC30664 */ + uint32_t psx_brA_BFC30658 = cpu->gpr[10]; + int psx_taken_BFC30658 = ((int32_t)psx_brA_BFC30658 >= 0); + /* 0xBFC3065C: 01400821 addu $at, $t2, $zero */ + cpu->gpr[1] = cpu->gpr[10] + cpu->gpr[0]; + if (psx_taken_BFC30658) goto label_BFC30664; +label_BFC30660: + psx_check_interrupts(cpu); + /* 0xBFC30660: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30664: + psx_check_interrupts(cpu); + /* 0xBFC30664: 00015B03 sra $t3, $at, 12 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30668: 03E00008 jr $ra */ + /* 0xBFC3066C: A48B001A sh $t3, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3066Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + return; +} + +void func_1FC30670(CPUState* cpu) { +label_BFC30670: + psx_check_interrupts(cpu); + /* 0xBFC30670: 848E0008 lh $t6, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30670u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30674: 8499000A lh $t9, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30674u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30678: 01C50019 multu $t6, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[14] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3067C: 848A0010 lh $t2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3067Cu); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30680: 848D0012 lh $t5, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30680u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30684: 00007812 mflo $t7 */ + cpu->gpr[15] = cpu->lo; + /* 0xBFC30688: 00000000 nop */ + /* nop */ + /* 0xBFC3068C: 00000000 nop */ + /* nop */ + /* 0xBFC30690: 03250019 multu $t9, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[25] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC30694: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC30698: 00000000 nop */ + /* nop */ + /* 0xBFC3069C: 00000000 nop */ + /* nop */ + /* 0xBFC306A0: 01450019 multu $t2, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC306A4: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC306A8: 00000000 nop */ + /* nop */ + /* 0xBFC306AC: 00000000 nop */ + /* nop */ + /* 0xBFC306B0: 01A50019 multu $t5, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[13] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC306B4: 00007012 mflo $t6 */ + cpu->gpr[14] = cpu->lo; + /* 0xBFC306B8: 05E10002 bgez $t7, 0xBFC306C4 */ + uint32_t psx_brA_BFC306B8 = cpu->gpr[15]; + int psx_taken_BFC306B8 = ((int32_t)psx_brA_BFC306B8 >= 0); + /* 0xBFC306BC: 01E00821 addu $at, $t7, $zero */ + cpu->gpr[1] = cpu->gpr[15] + cpu->gpr[0]; + if (psx_taken_BFC306B8) goto label_BFC306C4; +label_BFC306C0: + psx_check_interrupts(cpu); + /* 0xBFC306C0: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC306C4: + psx_check_interrupts(cpu); + /* 0xBFC306C4: 0001C303 sra $t8, $at, 12 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC306C8: A4980008 sh $t8, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC306C8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC306CC: 84980018 lh $t8, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC306CCu); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC306D0: 00000000 nop */ + /* nop */ + /* 0xBFC306D4: 03050019 multu $t8, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[24] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC306D8: 0000C812 mflo $t9 */ + cpu->gpr[25] = cpu->lo; + /* 0xBFC306DC: 05010002 bgez $t0, 0xBFC306E8 */ + uint32_t psx_brA_BFC306DC = cpu->gpr[8]; + int psx_taken_BFC306DC = ((int32_t)psx_brA_BFC306DC >= 0); + /* 0xBFC306E0: 01000821 addu $at, $t0, $zero */ + cpu->gpr[1] = cpu->gpr[8] + cpu->gpr[0]; + if (psx_taken_BFC306DC) goto label_BFC306E8; +label_BFC306E4: + psx_check_interrupts(cpu); + /* 0xBFC306E4: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC306E8: + psx_check_interrupts(cpu); + /* 0xBFC306E8: 00014B03 sra $t1, $at, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC306EC: A489000A sh $t1, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC306ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC306F0: 8489001A lh $t1, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC306F0u); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC306F4: 00000000 nop */ + /* nop */ + /* 0xBFC306F8: 01250019 multu $t1, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC306FC: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC30700: 05610002 bgez $t3, 0xBFC3070C */ + uint32_t psx_brA_BFC30700 = cpu->gpr[11]; + int psx_taken_BFC30700 = ((int32_t)psx_brA_BFC30700 >= 0); + /* 0xBFC30704: 01600821 addu $at, $t3, $zero */ + cpu->gpr[1] = cpu->gpr[11] + cpu->gpr[0]; + if (psx_taken_BFC30700) goto label_BFC3070C; +label_BFC30708: + psx_check_interrupts(cpu); + /* 0xBFC30708: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC3070C: + psx_check_interrupts(cpu); + /* 0xBFC3070C: 00016303 sra $t4, $at, 12 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30710: A48C0010 sh $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30710u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC30714: 848C0020 lh $t4, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30714u); return; } cpu->gpr[12] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC30718: 00000000 nop */ + /* nop */ + /* 0xBFC3071C: 01850019 multu $t4, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[12] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC30720: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC30724: 05C10002 bgez $t6, 0xBFC30730 */ + uint32_t psx_brA_BFC30724 = cpu->gpr[14]; + int psx_taken_BFC30724 = ((int32_t)psx_brA_BFC30724 >= 0); + /* 0xBFC30728: 01C00821 addu $at, $t6, $zero */ + cpu->gpr[1] = cpu->gpr[14] + cpu->gpr[0]; + if (psx_taken_BFC30724) goto label_BFC30730; +label_BFC3072C: + psx_check_interrupts(cpu); + /* 0xBFC3072C: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30730: + psx_check_interrupts(cpu); + /* 0xBFC30730: 00017B03 sra $t7, $at, 12 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30734: A48F0012 sh $t7, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30734u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC30738: 848F0022 lh $t7, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30738u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3073C: 00000000 nop */ + /* nop */ + /* 0xBFC30740: 01E50019 multu $t7, $a1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[15] * (uint64_t)cpu->gpr[5]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC30744: 0000C012 mflo $t8 */ + cpu->gpr[24] = cpu->lo; + /* 0xBFC30748: 07210002 bgez $t9, 0xBFC30754 */ + uint32_t psx_brA_BFC30748 = cpu->gpr[25]; + int psx_taken_BFC30748 = ((int32_t)psx_brA_BFC30748 >= 0); + /* 0xBFC3074C: 03200821 addu $at, $t9, $zero */ + cpu->gpr[1] = cpu->gpr[25] + cpu->gpr[0]; + if (psx_taken_BFC30748) goto label_BFC30754; +label_BFC30750: + psx_check_interrupts(cpu); + /* 0xBFC30750: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30754: + psx_check_interrupts(cpu); + /* 0xBFC30754: 00014303 sra $t0, $at, 12 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30758: A4880018 sh $t0, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30758u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3075C: 05410002 bgez $t2, 0xBFC30768 */ + uint32_t psx_brA_BFC3075C = cpu->gpr[10]; + int psx_taken_BFC3075C = ((int32_t)psx_brA_BFC3075C >= 0); + /* 0xBFC30760: 01400821 addu $at, $t2, $zero */ + cpu->gpr[1] = cpu->gpr[10] + cpu->gpr[0]; + if (psx_taken_BFC3075C) goto label_BFC30768; +label_BFC30764: + psx_check_interrupts(cpu); + /* 0xBFC30764: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30768: + psx_check_interrupts(cpu); + /* 0xBFC30768: 00015B03 sra $t3, $at, 12 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC3076C: A48B001A sh $t3, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3076Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC30770: 05A10002 bgez $t5, 0xBFC3077C */ + uint32_t psx_brA_BFC30770 = cpu->gpr[13]; + int psx_taken_BFC30770 = ((int32_t)psx_brA_BFC30770 >= 0); + /* 0xBFC30774: 01A00821 addu $at, $t5, $zero */ + cpu->gpr[1] = cpu->gpr[13] + cpu->gpr[0]; + if (psx_taken_BFC30770) goto label_BFC3077C; +label_BFC30778: + psx_check_interrupts(cpu); + /* 0xBFC30778: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC3077C: + psx_check_interrupts(cpu); + /* 0xBFC3077C: 00017303 sra $t6, $at, 12 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30780: A48E0020 sh $t6, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30780u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC30784: 07010002 bgez $t8, 0xBFC30790 */ + uint32_t psx_brA_BFC30784 = cpu->gpr[24]; + int psx_taken_BFC30784 = ((int32_t)psx_brA_BFC30784 >= 0); + /* 0xBFC30788: 03000821 addu $at, $t8, $zero */ + cpu->gpr[1] = cpu->gpr[24] + cpu->gpr[0]; + if (psx_taken_BFC30784) goto label_BFC30790; +label_BFC3078C: + psx_check_interrupts(cpu); + /* 0xBFC3078C: 24210FFF addiu $at, $at, 4095 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (4095)); +label_BFC30790: + psx_check_interrupts(cpu); + /* 0xBFC30790: 0001CB03 sra $t9, $at, 12 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[1] >> 12u); + /* 0xBFC30794: 03E00008 jr $ra */ + /* 0xBFC30798: A4990022 sh $t9, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC30798u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + return; +} + void func_1FC3079C(CPUState* cpu) { label_BFC3079C: psx_check_interrupts(cpu); @@ -102011,6 +114526,417 @@ label_BFC319DC: return; } +void func_1FC319EC(CPUState* cpu) { +label_BFC319EC: + psx_check_interrupts(cpu); + /* 0xBFC319EC: 00041C00 sll $v1, $a0, 16 */ + cpu->gpr[3] = cpu->gpr[4] << 16u; + /* 0xBFC319F0: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC319F4: 27BDFFA8 addiu $sp, $sp, -88 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-88)); + /* 0xBFC319F8: AFB00030 sw $s0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC319F8u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC319FC: 00068400 sll $s0, $a2, 16 */ + cpu->gpr[16] = cpu->gpr[6] << 16u; + /* 0xBFC31A00: AFBF0034 sw $ra, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A00u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC31A04: AFA5005C sw $a1, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A04u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC31A08: 00108403 sra $s0, $s0, 16 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] >> 16u); + /* 0xBFC31A0C: AFA70064 sw $a3, 100($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (100)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A0Cu); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + /* 0xBFC31A10: 04610004 bgez $v1, 0xBFC31A24 */ + uint32_t psx_brA_BFC31A10 = cpu->gpr[3]; + int psx_taken_BFC31A10 = ((int32_t)psx_brA_BFC31A10 >= 0); + /* 0xBFC31A14: 306E003F andi $t6, $v1, 0x3F */ + cpu->gpr[14] = cpu->gpr[3] & 0x3Fu; + if (psx_taken_BFC31A10) goto label_BFC31A24; +label_BFC31A18: + psx_check_interrupts(cpu); + /* 0xBFC31A18: 11C00002 beq $t6, $zero, 0xBFC31A24 */ + uint32_t psx_brA_BFC31A18 = cpu->gpr[14]; uint32_t psx_brB_BFC31A18 = cpu->gpr[0]; + int psx_taken_BFC31A18 = (psx_brA_BFC31A18 == psx_brB_BFC31A18); + /* 0xBFC31A1C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC31A18) goto label_BFC31A24; +label_BFC31A20: + psx_check_interrupts(cpu); + /* 0xBFC31A20: 25CEFFC0 addiu $t6, $t6, -64 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[14] + (-64)); +label_BFC31A24: + psx_check_interrupts(cpu); + /* 0xBFC31A24: 11C00004 beq $t6, $zero, 0xBFC31A38 */ + uint32_t psx_brA_BFC31A24 = cpu->gpr[14]; uint32_t psx_brB_BFC31A24 = cpu->gpr[0]; + int psx_taken_BFC31A24 = (psx_brA_BFC31A24 == psx_brB_BFC31A24); + /* 0xBFC31A28: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC31A24) goto label_BFC31A38; +label_BFC31A2C: + psx_check_interrupts(cpu); + /* 0xBFC31A2C: 10000002 beq $zero, $zero, 0xBFC31A38 */ + uint32_t psx_brA_BFC31A2C = cpu->gpr[0]; uint32_t psx_brB_BFC31A2C = cpu->gpr[0]; + int psx_taken_BFC31A2C = (psx_brA_BFC31A2C == psx_brB_BFC31A2C); + /* 0xBFC31A30: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC31A2C) goto label_BFC31A38; +label_BFC31A34: + psx_check_interrupts(cpu); + /* 0xBFC31A34: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC31A38: + psx_check_interrupts(cpu); + /* 0xBFC31A38: A7A00040 sh $zero, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A38u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31A3C: A7A00042 sh $zero, 66($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A3Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31A40: AFA00018 sw $zero, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A40u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC31A44: 04610002 bgez $v1, 0xBFC31A50 */ + uint32_t psx_brA_BFC31A44 = cpu->gpr[3]; + int psx_taken_BFC31A44 = ((int32_t)psx_brA_BFC31A44 >= 0); + /* 0xBFC31A48: 00600821 addu $at, $v1, $zero */ + cpu->gpr[1] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC31A44) goto label_BFC31A50; +label_BFC31A4C: + psx_check_interrupts(cpu); + /* 0xBFC31A4C: 2421003F addiu $at, $at, 63 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (63)); +label_BFC31A50: + psx_check_interrupts(cpu); + /* 0xBFC31A50: 00017983 sra $t7, $at, 6 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[1] >> 6u); + /* 0xBFC31A54: 01E21821 addu $v1, $t7, $v0 */ + cpu->gpr[3] = cpu->gpr[15] + cpu->gpr[2]; + /* 0xBFC31A58: 00031C00 sll $v1, $v1, 16 */ + cpu->gpr[3] = cpu->gpr[3] << 16u; + /* 0xBFC31A5C: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC31A60: A7A30058 sh $v1, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A60u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC31A64: 24180010 addiu $t8, $zero, 16 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC31A68: A7B80044 sh $t8, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A68u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC31A6C: 24190100 addiu $t9, $zero, 256 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31A70: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC31A74: 87A7005C lh $a3, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A74u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31A78: 27A90054 addiu $t1, $sp, 84 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[29] + (84)); + /* 0xBFC31A7C: 27AA0050 addiu $t2, $sp, 80 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC31A80: A7B90046 sh $t9, 70($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A80u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC31A84: AFAA0014 sw $t2, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A84u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC31A88: AFA90010 sw $t1, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A88u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC31A8C: 2484DDF0 addiu $a0, $a0, -8720 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-8720)); + /* 0xBFC31A90: 00603021 addu $a2, $v1, $zero */ + cpu->gpr[6] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC31A94: 0C012914 jal 0xB004A450 */ + /* 0xBFC31A98: 27A50040 addiu $a1, $sp, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + cpu->gpr[31] = 0xBFC31A9Cu; + psx_dispatch(cpu, 0x8004A450u); +label_BFC31A9C: + psx_check_interrupts(cpu); + /* 0xBFC31A9C: 87A30058 lh $v1, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31A9Cu); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31AA0: 14400016 bne $v0, $zero, 0xBFC31AFC */ + uint32_t psx_brA_BFC31AA0 = cpu->gpr[2]; uint32_t psx_brB_BFC31AA0 = cpu->gpr[0]; + int psx_taken_BFC31AA0 = (psx_brA_BFC31AA0 != psx_brB_BFC31AA0); + /* 0xBFC31AA4: 00404021 addu $t0, $v0, $zero */ + cpu->gpr[8] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC31AA0) goto label_BFC31AFC; +label_BFC31AA8: + psx_check_interrupts(cpu); + /* 0xBFC31AA8: A7A00040 sh $zero, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AA8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31AAC: AFA00018 sw $zero, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AACu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC31AB0: A7A30058 sh $v1, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AB0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC31AB4: 240B0100 addiu $t3, $zero, 256 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31AB8: A7AB0042 sh $t3, 66($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AB8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC31ABC: 240C0010 addiu $t4, $zero, 16 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC31AC0: A7AC0044 sh $t4, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AC0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC31AC4: 240D0100 addiu $t5, $zero, 256 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31AC8: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC31ACC: 87A7005C lh $a3, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31ACCu); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31AD0: 27AE0054 addiu $t6, $sp, 84 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[29] + (84)); + /* 0xBFC31AD4: 27AF0050 addiu $t7, $sp, 80 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC31AD8: A7AD0046 sh $t5, 70($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AD8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC31ADC: 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, 0xBFC31ADCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC31AE0: AFAE0010 sw $t6, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AE0u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC31AE4: 2484DDF0 addiu $a0, $a0, -8720 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-8720)); + /* 0xBFC31AE8: 27A50040 addiu $a1, $sp, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + /* 0xBFC31AEC: 0C012914 jal 0xB004A450 */ + /* 0xBFC31AF0: 00603021 addu $a2, $v1, $zero */ + cpu->gpr[6] = cpu->gpr[3] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC31AF4u; + psx_dispatch(cpu, 0x8004A450u); +label_BFC31AF4: + psx_check_interrupts(cpu); + /* 0xBFC31AF4: 87A30058 lh $v1, 88($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (88)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AF4u); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31AF8: 00404021 addu $t0, $v0, $zero */ + cpu->gpr[8] = cpu->gpr[2] + cpu->gpr[0]; +label_BFC31AFC: + psx_check_interrupts(cpu); + /* 0xBFC31AFC: 87B80054 lh $t8, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31AFCu); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31B00: 8FA20068 lw $v0, 104($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (104)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B00u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC31B04: 0018C980 sll $t9, $t8, 6 */ + cpu->gpr[25] = cpu->gpr[24] << 6u; + /* 0xBFC31B08: A4590000 sh $t9, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B08u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC31B0C: 87A90050 lh $t1, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B0Cu); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31B10: 00035180 sll $t2, $v1, 6 */ + cpu->gpr[10] = cpu->gpr[3] << 6u; + /* 0xBFC31B14: A44A0004 sh $t2, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B14u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC31B18: A4490002 sh $t1, 2($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B18u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC31B1C: 87AB005C lh $t3, 92($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (92)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B1Cu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31B20: 1A00004A blez $s0, 0xBFC31C4C */ + uint32_t psx_brA_BFC31B20 = cpu->gpr[16]; + int psx_taken_BFC31B20 = ((int32_t)psx_brA_BFC31B20 <= 0); + /* 0xBFC31B24: A44B0006 sh $t3, 6($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B24u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + if (psx_taken_BFC31B20) goto label_BFC31C4C; +label_BFC31B28: + psx_check_interrupts(cpu); + /* 0xBFC31B28: 87A70064 lh $a3, 100($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (100)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B28u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31B2C: 00000000 nop */ + /* nop */ + /* 0xBFC31B30: 18E00047 blez $a3, 0xBFC31C50 */ + uint32_t psx_brA_BFC31B30 = cpu->gpr[7]; + int psx_taken_BFC31B30 = ((int32_t)psx_brA_BFC31B30 <= 0); + /* 0xBFC31B34: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC31B30) goto label_BFC31C50; +label_BFC31B38: + psx_check_interrupts(cpu); + /* 0xBFC31B38: 06010004 bgez $s0, 0xBFC31B4C */ + uint32_t psx_brA_BFC31B38 = cpu->gpr[16]; + int psx_taken_BFC31B38 = ((int32_t)psx_brA_BFC31B38 >= 0); + /* 0xBFC31B3C: 320C003F andi $t4, $s0, 0x3F */ + cpu->gpr[12] = cpu->gpr[16] & 0x3Fu; + if (psx_taken_BFC31B38) goto label_BFC31B4C; +label_BFC31B40: + psx_check_interrupts(cpu); + /* 0xBFC31B40: 11800002 beq $t4, $zero, 0xBFC31B4C */ + uint32_t psx_brA_BFC31B40 = cpu->gpr[12]; uint32_t psx_brB_BFC31B40 = cpu->gpr[0]; + int psx_taken_BFC31B40 = (psx_brA_BFC31B40 == psx_brB_BFC31B40); + /* 0xBFC31B44: 00000000 nop */ + /* nop */ + if (psx_taken_BFC31B40) goto label_BFC31B4C; +label_BFC31B48: + psx_check_interrupts(cpu); + /* 0xBFC31B48: 258CFFC0 addiu $t4, $t4, -64 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[12] + (-64)); +label_BFC31B4C: + psx_check_interrupts(cpu); + /* 0xBFC31B4C: 11800004 beq $t4, $zero, 0xBFC31B60 */ + uint32_t psx_brA_BFC31B4C = cpu->gpr[12]; uint32_t psx_brB_BFC31B4C = cpu->gpr[0]; + int psx_taken_BFC31B4C = (psx_brA_BFC31B4C == psx_brB_BFC31B4C); + /* 0xBFC31B50: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC31B4C) goto label_BFC31B60; +label_BFC31B54: + psx_check_interrupts(cpu); + /* 0xBFC31B54: 10000002 beq $zero, $zero, 0xBFC31B60 */ + uint32_t psx_brA_BFC31B54 = cpu->gpr[0]; uint32_t psx_brB_BFC31B54 = cpu->gpr[0]; + int psx_taken_BFC31B54 = (psx_brA_BFC31B54 == psx_brB_BFC31B54); + /* 0xBFC31B58: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC31B54) goto label_BFC31B60; +label_BFC31B5C: + psx_check_interrupts(cpu); + /* 0xBFC31B5C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC31B60: + psx_check_interrupts(cpu); + /* 0xBFC31B60: A7A00040 sh $zero, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B60u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31B64: A7A00042 sh $zero, 66($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B64u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31B68: AFA00018 sw $zero, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B68u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC31B6C: 06010002 bgez $s0, 0xBFC31B78 */ + uint32_t psx_brA_BFC31B6C = cpu->gpr[16]; + int psx_taken_BFC31B6C = ((int32_t)psx_brA_BFC31B6C >= 0); + /* 0xBFC31B70: 02000821 addu $at, $s0, $zero */ + cpu->gpr[1] = cpu->gpr[16] + cpu->gpr[0]; + if (psx_taken_BFC31B6C) goto label_BFC31B78; +label_BFC31B74: + psx_check_interrupts(cpu); + /* 0xBFC31B74: 2421003F addiu $at, $at, 63 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (63)); +label_BFC31B78: + psx_check_interrupts(cpu); + /* 0xBFC31B78: 00016983 sra $t5, $at, 6 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[1] >> 6u); + /* 0xBFC31B7C: 01A28021 addu $s0, $t5, $v0 */ + cpu->gpr[16] = cpu->gpr[13] + cpu->gpr[2]; + /* 0xBFC31B80: AFA8004C sw $t0, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B80u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC31B84: 00108400 sll $s0, $s0, 16 */ + cpu->gpr[16] = cpu->gpr[16] << 16u; + /* 0xBFC31B88: 00108403 sra $s0, $s0, 16 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] >> 16u); + /* 0xBFC31B8C: 240E0010 addiu $t6, $zero, 16 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC31B90: A7AE0044 sh $t6, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31B90u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC31B94: 240F0100 addiu $t7, $zero, 256 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31B98: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC31B9C: 27B80054 addiu $t8, $sp, 84 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[29] + (84)); + /* 0xBFC31BA0: 27B90050 addiu $t9, $sp, 80 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC31BA4: A7AF0046 sh $t7, 70($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BA4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC31BA8: AFB90014 sw $t9, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BA8u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC31BAC: AFB80010 sw $t8, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BACu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC31BB0: 2484DE00 addiu $a0, $a0, -8704 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-8704)); + /* 0xBFC31BB4: 02003021 addu $a2, $s0, $zero */ + cpu->gpr[6] = cpu->gpr[16] + cpu->gpr[0]; + /* 0xBFC31BB8: 0C012914 jal 0xB004A450 */ + /* 0xBFC31BBC: 27A50040 addiu $a1, $sp, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + cpu->gpr[31] = 0xBFC31BC0u; + psx_dispatch(cpu, 0x8004A450u); +label_BFC31BC0: + psx_check_interrupts(cpu); + /* 0xBFC31BC0: 8FA8004C lw $t0, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BC0u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC31BC4: 14400016 bne $v0, $zero, 0xBFC31C20 */ + uint32_t psx_brA_BFC31BC4 = cpu->gpr[2]; uint32_t psx_brB_BFC31BC4 = cpu->gpr[0]; + int psx_taken_BFC31BC4 = (psx_brA_BFC31BC4 != psx_brB_BFC31BC4); + /* 0xBFC31BC8: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC31BC4) goto label_BFC31C20; +label_BFC31BCC: + psx_check_interrupts(cpu); + /* 0xBFC31BCC: A7A00040 sh $zero, 64($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (64)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BCCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC31BD0: AFA00018 sw $zero, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BD0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC31BD4: AFA8004C sw $t0, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BD4u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC31BD8: 24090100 addiu $t1, $zero, 256 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31BDC: A7A90042 sh $t1, 66($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BDCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC31BE0: 240A0010 addiu $t2, $zero, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + /* 0xBFC31BE4: A7AA0044 sh $t2, 68($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (68)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BE4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC31BE8: 240B0100 addiu $t3, $zero, 256 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC31BEC: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC31BF0: 87A70064 lh $a3, 100($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (100)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BF0u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31BF4: 27AC0054 addiu $t4, $sp, 84 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[29] + (84)); + /* 0xBFC31BF8: 27AD0050 addiu $t5, $sp, 80 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC31BFC: A7AB0046 sh $t3, 70($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (70)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31BFCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC31C00: AFAD0014 sw $t5, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C00u); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } + /* 0xBFC31C04: AFAC0010 sw $t4, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C04u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC31C08: 2484DE00 addiu $a0, $a0, -8704 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-8704)); + /* 0xBFC31C0C: 27A50040 addiu $a1, $sp, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + /* 0xBFC31C10: 0C012914 jal 0xB004A450 */ + /* 0xBFC31C14: 02003021 addu $a2, $s0, $zero */ + cpu->gpr[6] = cpu->gpr[16] + cpu->gpr[0]; + cpu->gpr[31] = 0xBFC31C18u; + psx_dispatch(cpu, 0x8004A450u); +label_BFC31C18: + psx_check_interrupts(cpu); + /* 0xBFC31C18: 8FA8004C lw $t0, 76($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (76)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C18u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC31C1C: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; +label_BFC31C20: + psx_check_interrupts(cpu); + /* 0xBFC31C20: 87AE0054 lh $t6, 84($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (84)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C20u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31C24: 8FA2006C lw $v0, 108($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (108)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C24u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC31C28: 000E7980 sll $t7, $t6, 6 */ + cpu->gpr[15] = cpu->gpr[14] << 6u; + /* 0xBFC31C2C: A44F0000 sh $t7, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C2Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC31C30: 87B80050 lh $t8, 80($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (80)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C30u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31C34: 0010C980 sll $t9, $s0, 6 */ + cpu->gpr[25] = cpu->gpr[16] << 6u; + /* 0xBFC31C38: A4590004 sh $t9, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C38u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC31C3C: A4580002 sh $t8, 2($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C3Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC31C40: 87A90064 lh $t1, 100($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (100)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C40u); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC31C44: 10000002 beq $zero, $zero, 0xBFC31C50 */ + uint32_t psx_brA_BFC31C44 = cpu->gpr[0]; uint32_t psx_brB_BFC31C44 = cpu->gpr[0]; + int psx_taken_BFC31C44 = (psx_brA_BFC31C44 == psx_brB_BFC31C44); + /* 0xBFC31C48: A4490006 sh $t1, 6($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C48u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + if (psx_taken_BFC31C44) goto label_BFC31C50; +label_BFC31C4C: + psx_check_interrupts(cpu); + /* 0xBFC31C4C: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC31C50: + psx_check_interrupts(cpu); + /* 0xBFC31C50: 8FBF0034 lw $ra, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C50u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC31C54: 8FB00030 lw $s0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC31C54u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC31C58: 27BD0058 addiu $sp, $sp, 88 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (88)); + /* 0xBFC31C5C: 03E00008 jr $ra */ + /* 0xBFC31C60: 01031024 and $v0, $t0, $v1 */ + cpu->gpr[2] = cpu->gpr[8] & cpu->gpr[3]; + return; +} + void func_1FC31C64(CPUState* cpu) { label_BFC31C64: psx_check_interrupts(cpu); @@ -102523,6 +115449,500 @@ label_BFC31F14: return; } +void func_1FC32010(CPUState* cpu) { +label_BFC32010: + psx_check_interrupts(cpu); + /* 0xBFC32010: 8C830008 lw $v1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32010u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC32014: 8C82000C lw $v0, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32014u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC32018: 00602821 addu $a1, $v1, $zero */ + cpu->gpr[5] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC3201C: 10A00006 beq $a1, $zero, 0xBFC32038 */ + uint32_t psx_brA_BFC3201C = cpu->gpr[5]; uint32_t psx_brB_BFC3201C = cpu->gpr[0]; + int psx_taken_BFC3201C = (psx_brA_BFC3201C == psx_brB_BFC3201C); + /* 0xBFC32020: 2463FFFF addiu $v1, $v1, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + if (psx_taken_BFC3201C) goto label_BFC32038; +label_BFC32024: + psx_check_interrupts(cpu); + /* 0xBFC32024: 00602821 addu $a1, $v1, $zero */ + cpu->gpr[5] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC32028: AC400000 sw $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32028u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3202C: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC32030: 14A0FFFC bne $a1, $zero, 0xBFC32024 */ + uint32_t psx_brA_BFC32030 = cpu->gpr[5]; uint32_t psx_brB_BFC32030 = cpu->gpr[0]; + int psx_taken_BFC32030 = (psx_brA_BFC32030 != psx_brB_BFC32030); + /* 0xBFC32034: 2463FFFF addiu $v1, $v1, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + if (psx_taken_BFC32030) goto label_BFC32024; +label_BFC32038: + psx_check_interrupts(cpu); + /* 0xBFC32038: 03E00008 jr $ra */ + /* 0xBFC3203C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC32040(CPUState* cpu) { +label_BFC32040: + psx_check_interrupts(cpu); + /* 0xBFC32040: 8C830008 lw $v1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32040u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC32044: 8C82000C lw $v0, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32044u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC32048: 00602821 addu $a1, $v1, $zero */ + cpu->gpr[5] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC3204C: 10A00008 beq $a1, $zero, 0xBFC32070 */ + uint32_t psx_brA_BFC3204C = cpu->gpr[5]; uint32_t psx_brB_BFC3204C = cpu->gpr[0]; + int psx_taken_BFC3204C = (psx_brA_BFC3204C == psx_brB_BFC3204C); + /* 0xBFC32050: 2463FFFF addiu $v1, $v1, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + if (psx_taken_BFC3204C) goto label_BFC32070; +label_BFC32054: + psx_check_interrupts(cpu); + /* 0xBFC32054: 8C4E0000 lw $t6, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32054u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC32058: 00602821 addu $a1, $v1, $zero */ + cpu->gpr[5] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC3205C: 01C07827 nor $t7, $t6, $zero */ + cpu->gpr[15] = ~(cpu->gpr[14] | cpu->gpr[0]); + /* 0xBFC32060: AC4F0000 sw $t7, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32060u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC32064: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC32068: 14A0FFFA bne $a1, $zero, 0xBFC32054 */ + uint32_t psx_brA_BFC32068 = cpu->gpr[5]; uint32_t psx_brB_BFC32068 = cpu->gpr[0]; + int psx_taken_BFC32068 = (psx_brA_BFC32068 != psx_brB_BFC32068); + /* 0xBFC3206C: 2463FFFF addiu $v1, $v1, -1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + if (psx_taken_BFC32068) goto label_BFC32054; +label_BFC32070: + psx_check_interrupts(cpu); + /* 0xBFC32070: 03E00008 jr $ra */ + /* 0xBFC32074: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC32078(CPUState* cpu) { +label_BFC32078: + psx_check_interrupts(cpu); + /* 0xBFC32078: 8C860008 lw $a2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32078u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC3207C: 8C82000C lw $v0, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3207Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC32080: 8CA3000C lw $v1, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32080u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC32084: 00C03821 addu $a3, $a2, $zero */ + cpu->gpr[7] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC32088: 10E00008 beq $a3, $zero, 0xBFC320AC */ + uint32_t psx_brA_BFC32088 = cpu->gpr[7]; uint32_t psx_brB_BFC32088 = cpu->gpr[0]; + int psx_taken_BFC32088 = (psx_brA_BFC32088 == psx_brB_BFC32088); + /* 0xBFC3208C: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC32088) goto label_BFC320AC; +label_BFC32090: + psx_check_interrupts(cpu); + /* 0xBFC32090: 8C4E0000 lw $t6, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32090u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC32094: 00C03821 addu $a3, $a2, $zero */ + cpu->gpr[7] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC32098: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC3209C: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC320A0: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC320A4: 14E0FFFA bne $a3, $zero, 0xBFC32090 */ + uint32_t psx_brA_BFC320A4 = cpu->gpr[7]; uint32_t psx_brB_BFC320A4 = cpu->gpr[0]; + int psx_taken_BFC320A4 = (psx_brA_BFC320A4 != psx_brB_BFC320A4); + /* 0xBFC320A8: AC6EFFFC sw $t6, -4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320A8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC320A4) goto label_BFC32090; +label_BFC320AC: + psx_check_interrupts(cpu); + /* 0xBFC320AC: 03E00008 jr $ra */ + /* 0xBFC320B0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC320B4(CPUState* cpu) { +label_BFC320B4: + psx_check_interrupts(cpu); + /* 0xBFC320B4: 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, 0xBFC320B4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC320B8: 8C82000C lw $v0, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320B8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC320BC: 8CA3000C lw $v1, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320BCu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC320C0: 8CC7000C lw $a3, 12($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320C0u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC320C4: 01004821 addu $t1, $t0, $zero */ + cpu->gpr[9] = cpu->gpr[8] + cpu->gpr[0]; + /* 0xBFC320C8: 1120000B beq $t1, $zero, 0xBFC320F8 */ + uint32_t psx_brA_BFC320C8 = cpu->gpr[9]; uint32_t psx_brB_BFC320C8 = cpu->gpr[0]; + int psx_taken_BFC320C8 = (psx_brA_BFC320C8 == psx_brB_BFC320C8); + /* 0xBFC320CC: 2508FFFF addiu $t0, $t0, -1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (-1)); + if (psx_taken_BFC320C8) goto label_BFC320F8; +label_BFC320D0: + psx_check_interrupts(cpu); + /* 0xBFC320D0: 8C4E0000 lw $t6, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320D0u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC320D4: 8C6F0000 lw $t7, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320D4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC320D8: 01004821 addu $t1, $t0, $zero */ + cpu->gpr[9] = cpu->gpr[8] + cpu->gpr[0]; + /* 0xBFC320DC: 01CFC024 and $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] & cpu->gpr[15]; + /* 0xBFC320E0: ACF80000 sw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC320E0u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC320E4: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC320E8: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC320EC: 24E70004 addiu $a3, $a3, 4 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (4)); + /* 0xBFC320F0: 1520FFF7 bne $t1, $zero, 0xBFC320D0 */ + uint32_t psx_brA_BFC320F0 = cpu->gpr[9]; uint32_t psx_brB_BFC320F0 = cpu->gpr[0]; + int psx_taken_BFC320F0 = (psx_brA_BFC320F0 != psx_brB_BFC320F0); + /* 0xBFC320F4: 2508FFFF addiu $t0, $t0, -1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (-1)); + if (psx_taken_BFC320F0) goto label_BFC320D0; +label_BFC320F8: + psx_check_interrupts(cpu); + /* 0xBFC320F8: 03E00008 jr $ra */ + /* 0xBFC320FC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC32100(CPUState* cpu) { +label_BFC32100: + psx_check_interrupts(cpu); + /* 0xBFC32100: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC32104: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC32108: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC3210C: 04A0000D bltz $a1, 0xBFC32144 */ + uint32_t psx_brA_BFC3210C = cpu->gpr[5]; + int psx_taken_BFC3210C = ((int32_t)psx_brA_BFC3210C < 0); + /* 0xBFC32110: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + if (psx_taken_BFC3210C) goto label_BFC32144; +label_BFC32114: + psx_check_interrupts(cpu); + /* 0xBFC32114: 04C0000B bltz $a2, 0xBFC32144 */ + uint32_t psx_brA_BFC32114 = cpu->gpr[6]; + int psx_taken_BFC32114 = ((int32_t)psx_brA_BFC32114 < 0); + /* 0xBFC32118: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32114) goto label_BFC32144; +label_BFC3211C: + psx_check_interrupts(cpu); + /* 0xBFC3211C: 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, 0xBFC3211Cu); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32120: 00000000 nop */ + /* nop */ + /* 0xBFC32124: 00AE082A slt $at, $a1, $t6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[5] < (int32_t)cpu->gpr[14] ? 1 : 0); + /* 0xBFC32128: 10200006 beq $at, $zero, 0xBFC32144 */ + uint32_t psx_brA_BFC32128 = cpu->gpr[1]; uint32_t psx_brB_BFC32128 = cpu->gpr[0]; + int psx_taken_BFC32128 = (psx_brA_BFC32128 == psx_brB_BFC32128); + /* 0xBFC3212C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32128) goto label_BFC32144; +label_BFC32130: + psx_check_interrupts(cpu); + /* 0xBFC32130: 848F0002 lh $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, 0xBFC32130u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32134: 00000000 nop */ + /* nop */ + /* 0xBFC32138: 00CF082A slt $at, $a2, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[6] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC3213C: 14200003 bne $at, $zero, 0xBFC3214C */ + uint32_t psx_brA_BFC3213C = cpu->gpr[1]; uint32_t psx_brB_BFC3213C = cpu->gpr[0]; + int psx_taken_BFC3213C = (psx_brA_BFC3213C != psx_brB_BFC3213C); + /* 0xBFC32140: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3213C) goto label_BFC3214C; +label_BFC32144: + psx_check_interrupts(cpu); + /* 0xBFC32144: 03E00008 jr $ra */ + /* 0xBFC32148: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + return; +label_BFC3214C: + psx_check_interrupts(cpu); + /* 0xBFC3214C: 84880006 lh $t0, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3214Cu); return; } cpu->gpr[8] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32150: 24180020 addiu $t8, $zero, 32 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC32154: 0308001B divu $t8, $t0 */ + { uint32_t psx_n = cpu->gpr[24]; uint32_t psx_d = cpu->gpr[8]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32158: 00A03821 addu $a3, $a1, $zero */ + cpu->gpr[7] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC3215C: 84980004 lh $t8, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3215Cu); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32160: 24190020 addiu $t9, $zero, 32 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC32164: 03285823 subu $t3, $t9, $t0 */ + cpu->gpr[11] = cpu->gpr[25] - cpu->gpr[8]; + /* 0xBFC32168: 240DFFFF addiu $t5, $zero, -1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC3216C: 016D7004 sllv $t6, $t5, $t3 */ + cpu->gpr[14] = cpu->gpr[13] << (cpu->gpr[11] & 0x1Fu); + /* 0xBFC32170: 8C8F000C lw $t7, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32170u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC32174: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC32178: 00000000 nop */ + /* nop */ + /* 0xBFC3217C: 00000000 nop */ + /* nop */ + /* 0xBFC32180: 00E9001B divu $a3, $t1 */ + { uint32_t psx_n = cpu->gpr[7]; uint32_t psx_d = cpu->gpr[9]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32184: 00001810 mfhi $v1 */ + cpu->gpr[3] = cpu->hi; + /* 0xBFC32188: 006E5006 srlv $t2, $t6, $v1 */ + cpu->gpr[10] = cpu->gpr[14] >> (cpu->gpr[3] & 0x1Fu); + /* 0xBFC3218C: 00000000 nop */ + /* nop */ + /* 0xBFC32190: 03060019 multu $t8, $a2 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[24] * (uint64_t)cpu->gpr[6]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC32194: 0000C812 mflo $t9 */ + cpu->gpr[25] = cpu->lo; + /* 0xBFC32198: 00196880 sll $t5, $t9, 2 */ + cpu->gpr[13] = cpu->gpr[25] << 2u; + /* 0xBFC3219C: 01ED6021 addu $t4, $t7, $t5 */ + cpu->gpr[12] = cpu->gpr[15] + cpu->gpr[13]; + /* 0xBFC321A0: 00E9001B divu $a3, $t1 */ + { uint32_t psx_n = cpu->gpr[7]; uint32_t psx_d = cpu->gpr[9]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC321A4: 01636823 subu $t5, $t3, $v1 */ + cpu->gpr[13] = cpu->gpr[11] - cpu->gpr[3]; + /* 0xBFC321A8: 00007012 mflo $t6 */ + cpu->gpr[14] = cpu->lo; + /* 0xBFC321AC: 000EC080 sll $t8, $t6, 2 */ + cpu->gpr[24] = cpu->gpr[14] << 2u; + /* 0xBFC321B0: 01986021 addu $t4, $t4, $t8 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[24]; + /* 0xBFC321B4: 8D990000 lw $t9, 0($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC321B4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC321B8: 00000000 nop */ + /* nop */ + /* 0xBFC321BC: 032A7824 and $t7, $t9, $t2 */ + cpu->gpr[15] = cpu->gpr[25] & cpu->gpr[10]; + /* 0xBFC321C0: 01AF1006 srlv $v0, $t7, $t5 */ + cpu->gpr[2] = cpu->gpr[15] >> (cpu->gpr[13] & 0x1Fu); + /* 0xBFC321C4: 15000002 bne $t0, $zero, 0xBFC321D0 */ + uint32_t psx_brA_BFC321C4 = cpu->gpr[8]; uint32_t psx_brB_BFC321C4 = cpu->gpr[0]; + int psx_taken_BFC321C4 = (psx_brA_BFC321C4 != psx_brB_BFC321C4); + /* 0xBFC321C8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC321C4) goto label_BFC321D0; +label_BFC321CC: + psx_check_interrupts(cpu); + /* 0xBFC321CC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC321CCu); return; +label_BFC321D0: + psx_check_interrupts(cpu); + /* 0xBFC321D0: 15200002 bne $t1, $zero, 0xBFC321DC */ + uint32_t psx_brA_BFC321D0 = cpu->gpr[9]; uint32_t psx_brB_BFC321D0 = cpu->gpr[0]; + int psx_taken_BFC321D0 = (psx_brA_BFC321D0 != psx_brB_BFC321D0); + /* 0xBFC321D4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC321D0) goto label_BFC321DC; +label_BFC321D8: + psx_check_interrupts(cpu); + /* 0xBFC321D8: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC321D8u); return; +label_BFC321DC: + psx_check_interrupts(cpu); + /* 0xBFC321DC: 15200002 bne $t1, $zero, 0xBFC321E8 */ + uint32_t psx_brA_BFC321DC = cpu->gpr[9]; uint32_t psx_brB_BFC321DC = cpu->gpr[0]; + int psx_taken_BFC321DC = (psx_brA_BFC321DC != psx_brB_BFC321DC); + /* 0xBFC321E0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC321DC) goto label_BFC321E8; +label_BFC321E4: + psx_check_interrupts(cpu); + /* 0xBFC321E4: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC321E4u); return; +label_BFC321E8: + psx_check_interrupts(cpu); + /* 0xBFC321E8: 03E00008 jr $ra */ + /* 0xBFC321EC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC321F0(CPUState* cpu) { +label_BFC321F0: + psx_check_interrupts(cpu); + /* 0xBFC321F0: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC321F4: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC321F8: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC321FC: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC32200: 04A00036 bltz $a1, 0xBFC322DC */ + uint32_t psx_brA_BFC32200 = cpu->gpr[5]; + int psx_taken_BFC32200 = ((int32_t)psx_brA_BFC32200 < 0); + /* 0xBFC32204: 00E05821 addu $t3, $a3, $zero */ + cpu->gpr[11] = cpu->gpr[7] + cpu->gpr[0]; + if (psx_taken_BFC32200) goto label_BFC322DC; +label_BFC32208: + psx_check_interrupts(cpu); + /* 0xBFC32208: 04C00034 bltz $a2, 0xBFC322DC */ + uint32_t psx_brA_BFC32208 = cpu->gpr[6]; + int psx_taken_BFC32208 = ((int32_t)psx_brA_BFC32208 < 0); + /* 0xBFC3220C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32208) goto label_BFC322DC; +label_BFC32210: + psx_check_interrupts(cpu); + /* 0xBFC32210: 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, 0xBFC32210u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32214: 00000000 nop */ + /* nop */ + /* 0xBFC32218: 00AE082A slt $at, $a1, $t6 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[5] < (int32_t)cpu->gpr[14] ? 1 : 0); + /* 0xBFC3221C: 1020002F beq $at, $zero, 0xBFC322DC */ + uint32_t psx_brA_BFC3221C = cpu->gpr[1]; uint32_t psx_brB_BFC3221C = cpu->gpr[0]; + int psx_taken_BFC3221C = (psx_brA_BFC3221C == psx_brB_BFC3221C); + /* 0xBFC32220: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3221C) goto label_BFC322DC; +label_BFC32224: + psx_check_interrupts(cpu); + /* 0xBFC32224: 848F0002 lh $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, 0xBFC32224u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32228: 00000000 nop */ + /* nop */ + /* 0xBFC3222C: 00CF082A slt $at, $a2, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[6] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC32230: 1020002A beq $at, $zero, 0xBFC322DC */ + uint32_t psx_brA_BFC32230 = cpu->gpr[1]; uint32_t psx_brB_BFC32230 = cpu->gpr[0]; + int psx_taken_BFC32230 = (psx_brA_BFC32230 == psx_brB_BFC32230); + /* 0xBFC32234: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32230) goto label_BFC322DC; +label_BFC32238: + psx_check_interrupts(cpu); + /* 0xBFC32238: 84870006 lh $a3, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32238u); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3223C: 24180020 addiu $t8, $zero, 32 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC32240: 0307001B divu $t8, $a3 */ + { uint32_t psx_n = cpu->gpr[24]; uint32_t psx_d = cpu->gpr[7]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32244: 00A01821 addu $v1, $a1, $zero */ + cpu->gpr[3] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC32248: 24190020 addiu $t9, $zero, 32 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC3224C: 03275023 subu $t2, $t9, $a3 */ + cpu->gpr[10] = cpu->gpr[25] - cpu->gpr[7]; + /* 0xBFC32250: 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, 0xBFC32250u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32254: 240DFFFF addiu $t5, $zero, -1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC32258: 014D7004 sllv $t6, $t5, $t2 */ + cpu->gpr[14] = cpu->gpr[13] << (cpu->gpr[10] & 0x1Fu); + /* 0xBFC3225C: 8C98000C lw $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, 0xBFC3225Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC32260: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC32264: 00000000 nop */ + /* nop */ + /* 0xBFC32268: 00000000 nop */ + /* nop */ + /* 0xBFC3226C: 0068001B divu $v1, $t0 */ + { uint32_t psx_n = cpu->gpr[3]; uint32_t psx_d = cpu->gpr[8]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32270: 00001010 mfhi $v0 */ + cpu->gpr[2] = cpu->hi; + /* 0xBFC32274: 01427823 subu $t7, $t2, $v0 */ + cpu->gpr[15] = cpu->gpr[10] - cpu->gpr[2]; + /* 0xBFC32278: 004E4806 srlv $t1, $t6, $v0 */ + cpu->gpr[9] = cpu->gpr[14] >> (cpu->gpr[2] & 0x1Fu); + /* 0xBFC3227C: 03260019 multu $t9, $a2 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[25] * (uint64_t)cpu->gpr[6]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC32280: 01EB5804 sllv $t3, $t3, $t7 */ + cpu->gpr[11] = cpu->gpr[11] << (cpu->gpr[15] & 0x1Fu); + /* 0xBFC32284: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC32288: 000D7080 sll $t6, $t5, 2 */ + cpu->gpr[14] = cpu->gpr[13] << 2u; + /* 0xBFC3228C: 030E6021 addu $t4, $t8, $t6 */ + cpu->gpr[12] = cpu->gpr[24] + cpu->gpr[14]; + /* 0xBFC32290: 0068001B divu $v1, $t0 */ + { uint32_t psx_n = cpu->gpr[3]; uint32_t psx_d = cpu->gpr[8]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32294: 0120C027 nor $t8, $t1, $zero */ + cpu->gpr[24] = ~(cpu->gpr[9] | cpu->gpr[0]); + /* 0xBFC32298: 00007812 mflo $t7 */ + cpu->gpr[15] = cpu->lo; + /* 0xBFC3229C: 000FC880 sll $t9, $t7, 2 */ + cpu->gpr[25] = cpu->gpr[15] << 2u; + /* 0xBFC322A0: 01996021 addu $t4, $t4, $t9 */ + cpu->gpr[12] = cpu->gpr[12] + cpu->gpr[25]; + /* 0xBFC322A4: 8D8D0000 lw $t5, 0($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC322A4u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC322A8: 00000000 nop */ + /* nop */ + /* 0xBFC322AC: 01B87024 and $t6, $t5, $t8 */ + cpu->gpr[14] = cpu->gpr[13] & cpu->gpr[24]; + /* 0xBFC322B0: 01CB7825 or $t7, $t6, $t3 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC322B4: AD8F0000 sw $t7, 0($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC322B4u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC322B8: 14E00002 bne $a3, $zero, 0xBFC322C4 */ + uint32_t psx_brA_BFC322B8 = cpu->gpr[7]; uint32_t psx_brB_BFC322B8 = cpu->gpr[0]; + int psx_taken_BFC322B8 = (psx_brA_BFC322B8 != psx_brB_BFC322B8); + /* 0xBFC322BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC322B8) goto label_BFC322C4; +label_BFC322C0: + psx_check_interrupts(cpu); + /* 0xBFC322C0: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC322C0u); return; +label_BFC322C4: + psx_check_interrupts(cpu); + /* 0xBFC322C4: 15000002 bne $t0, $zero, 0xBFC322D0 */ + uint32_t psx_brA_BFC322C4 = cpu->gpr[8]; uint32_t psx_brB_BFC322C4 = cpu->gpr[0]; + int psx_taken_BFC322C4 = (psx_brA_BFC322C4 != psx_brB_BFC322C4); + /* 0xBFC322C8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC322C4) goto label_BFC322D0; +label_BFC322CC: + psx_check_interrupts(cpu); + /* 0xBFC322CC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC322CCu); return; +label_BFC322D0: + psx_check_interrupts(cpu); + /* 0xBFC322D0: 15000002 bne $t0, $zero, 0xBFC322DC */ + uint32_t psx_brA_BFC322D0 = cpu->gpr[8]; uint32_t psx_brB_BFC322D0 = cpu->gpr[0]; + int psx_taken_BFC322D0 = (psx_brA_BFC322D0 != psx_brB_BFC322D0); + /* 0xBFC322D4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC322D0) goto label_BFC322DC; +label_BFC322D8: + psx_check_interrupts(cpu); + /* 0xBFC322D8: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC322D8u); return; +label_BFC322DC: + psx_check_interrupts(cpu); + /* 0xBFC322DC: 03E00008 jr $ra */ + /* 0xBFC322E0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC322E4(CPUState* cpu) { label_BFC322E4: psx_check_interrupts(cpu); @@ -102603,6 +116023,143 @@ label_BFC32354: return; } +void func_1FC32368(CPUState* cpu) { +label_BFC32368: + psx_check_interrupts(cpu); + /* 0xBFC32368: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC3236C: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC32370: 240E0020 addiu $t6, $zero, 32 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC32374: 01C5001B divu $t6, $a1 */ + { uint32_t psx_n = cpu->gpr[14]; uint32_t psx_d = cpu->gpr[5]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC32378: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC3237C: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC32380: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC32384: 00000000 nop */ + /* nop */ + /* 0xBFC32388: 00000000 nop */ + /* nop */ + /* 0xBFC3238C: 0083001A div $a0, $v1 */ + { int32_t psx_n = (int32_t)cpu->gpr[4]; int32_t psx_d = (int32_t)cpu->gpr[3]; 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; } } + /* 0xBFC32390: 00007810 mfhi $t7 */ + cpu->gpr[15] = cpu->hi; + /* 0xBFC32394: 14A00002 bne $a1, $zero, 0xBFC323A0 */ + uint32_t psx_brA_BFC32394 = cpu->gpr[5]; uint32_t psx_brB_BFC32394 = cpu->gpr[0]; + int psx_taken_BFC32394 = (psx_brA_BFC32394 != psx_brB_BFC32394); + /* 0xBFC32398: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32394) goto label_BFC323A0; +label_BFC3239C: + psx_check_interrupts(cpu); + /* 0xBFC3239C: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC3239Cu); return; +label_BFC323A0: + psx_check_interrupts(cpu); + /* 0xBFC323A0: 14600002 bne $v1, $zero, 0xBFC323AC */ + uint32_t psx_brA_BFC323A0 = cpu->gpr[3]; uint32_t psx_brB_BFC323A0 = cpu->gpr[0]; + int psx_taken_BFC323A0 = (psx_brA_BFC323A0 != psx_brB_BFC323A0); + /* 0xBFC323A4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC323A0) goto label_BFC323AC; +label_BFC323A8: + psx_check_interrupts(cpu); + /* 0xBFC323A8: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC323A8u); return; +label_BFC323AC: + psx_check_interrupts(cpu); + /* 0xBFC323AC: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC323B0: 14610004 bne $v1, $at, 0xBFC323C4 */ + uint32_t psx_brA_BFC323B0 = cpu->gpr[3]; uint32_t psx_brB_BFC323B0 = cpu->gpr[1]; + int psx_taken_BFC323B0 = (psx_brA_BFC323B0 != psx_brB_BFC323B0); + /* 0xBFC323B4: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC323B0) goto label_BFC323C4; +label_BFC323B8: + psx_check_interrupts(cpu); + /* 0xBFC323B8: 14810002 bne $a0, $at, 0xBFC323C4 */ + uint32_t psx_brA_BFC323B8 = cpu->gpr[4]; uint32_t psx_brB_BFC323B8 = cpu->gpr[1]; + int psx_taken_BFC323B8 = (psx_brA_BFC323B8 != psx_brB_BFC323B8); + /* 0xBFC323BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC323B8) goto label_BFC323C4; +label_BFC323C0: + psx_check_interrupts(cpu); + /* 0xBFC323C0: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC323C0u); return; +label_BFC323C4: + psx_check_interrupts(cpu); + /* 0xBFC323C4: 11E00004 beq $t7, $zero, 0xBFC323D8 */ + uint32_t psx_brA_BFC323C4 = cpu->gpr[15]; uint32_t psx_brB_BFC323C4 = cpu->gpr[0]; + int psx_taken_BFC323C4 = (psx_brA_BFC323C4 == psx_brB_BFC323C4); + /* 0xBFC323C8: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC323C4) goto label_BFC323D8; +label_BFC323CC: + psx_check_interrupts(cpu); + /* 0xBFC323CC: 10000002 beq $zero, $zero, 0xBFC323D8 */ + uint32_t psx_brA_BFC323CC = cpu->gpr[0]; uint32_t psx_brB_BFC323CC = cpu->gpr[0]; + int psx_taken_BFC323CC = (psx_brA_BFC323CC == psx_brB_BFC323CC); + /* 0xBFC323D0: 24050001 addiu $a1, $zero, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC323CC) goto label_BFC323D8; +label_BFC323D4: + psx_check_interrupts(cpu); + /* 0xBFC323D4: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC323D8: + psx_check_interrupts(cpu); + /* 0xBFC323D8: 0083001A div $a0, $v1 */ + { int32_t psx_n = (int32_t)cpu->gpr[4]; int32_t psx_d = (int32_t)cpu->gpr[3]; 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; } } + /* 0xBFC323DC: 0000C012 mflo $t8 */ + cpu->gpr[24] = cpu->lo; + /* 0xBFC323E0: 03051021 addu $v0, $t8, $a1 */ + cpu->gpr[2] = cpu->gpr[24] + cpu->gpr[5]; + /* 0xBFC323E4: 14600002 bne $v1, $zero, 0xBFC323F0 */ + uint32_t psx_brA_BFC323E4 = cpu->gpr[3]; uint32_t psx_brB_BFC323E4 = cpu->gpr[0]; + int psx_taken_BFC323E4 = (psx_brA_BFC323E4 != psx_brB_BFC323E4); + /* 0xBFC323E8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC323E4) goto label_BFC323F0; +label_BFC323EC: + psx_check_interrupts(cpu); + /* 0xBFC323EC: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC323ECu); return; +label_BFC323F0: + psx_check_interrupts(cpu); + /* 0xBFC323F0: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC323F4: 14610004 bne $v1, $at, 0xBFC32408 */ + uint32_t psx_brA_BFC323F4 = cpu->gpr[3]; uint32_t psx_brB_BFC323F4 = cpu->gpr[1]; + int psx_taken_BFC323F4 = (psx_brA_BFC323F4 != psx_brB_BFC323F4); + /* 0xBFC323F8: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC323F4) goto label_BFC32408; +label_BFC323FC: + psx_check_interrupts(cpu); + /* 0xBFC323FC: 14810002 bne $a0, $at, 0xBFC32408 */ + uint32_t psx_brA_BFC323FC = cpu->gpr[4]; uint32_t psx_brB_BFC323FC = cpu->gpr[1]; + int psx_taken_BFC323FC = (psx_brA_BFC323FC != psx_brB_BFC323FC); + /* 0xBFC32400: 00000000 nop */ + /* nop */ + if (psx_taken_BFC323FC) goto label_BFC32408; +label_BFC32404: + psx_check_interrupts(cpu); + /* 0xBFC32404: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC32404u); return; +label_BFC32408: + psx_check_interrupts(cpu); + /* 0xBFC32408: 03E00008 jr $ra */ + /* 0xBFC3240C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC32410(CPUState* cpu) { label_BFC32410: psx_check_interrupts(cpu); @@ -103127,6 +116684,21 @@ label_BFC326F8: return; } +void func_1FC32710(CPUState* cpu) { +label_BFC32710: + psx_check_interrupts(cpu); + /* 0xBFC32710: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC32714: AC249EF0 sw $a0, -24848($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24848)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32714u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC32718: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3271C: 03E00008 jr $ra */ + /* 0xBFC32720: AC259EF4 sw $a1, -24844($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24844)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32720u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + return; +} + void func_1FC32724(CPUState* cpu) { label_BFC32724: psx_check_interrupts(cpu); @@ -103469,6 +117041,113 @@ label_BFC32934: return; } +void func_1FC32944(CPUState* cpu) { +label_BFC32944: + psx_check_interrupts(cpu); + /* 0xBFC32944: 10000018 beq $zero, $zero, 0xBFC329A8 */ + uint32_t psx_brA_BFC32944 = cpu->gpr[0]; uint32_t psx_brB_BFC32944 = cpu->gpr[0]; + int psx_taken_BFC32944 = (psx_brA_BFC32944 == psx_brB_BFC32944); + /* 0xBFC32948: 00000000 nop */ + /* nop */ + if (psx_taken_BFC32944) goto label_BFC329A8; +label_BFC3294C: + psx_check_interrupts(cpu); + /* 0xBFC3294C: 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, 0xBFC3294Cu); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32950: 00000000 nop */ + /* nop */ + /* 0xBFC32954: A4AE0000 sh $t6, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32954u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC32958: 848F0002 lh $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, 0xBFC32958u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3295C: 00000000 nop */ + /* nop */ + /* 0xBFC32960: 25F8FFFF addiu $t8, $t7, -1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[15] + (-1)); + /* 0xBFC32964: 03E00008 jr $ra */ + /* 0xBFC32968: A4B80002 sh $t8, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32968u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + return; +label_BFC3296C: + psx_check_interrupts(cpu); + /* 0xBFC3296C: 84990000 lh $t9, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3296Cu); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32970: 00000000 nop */ + /* nop */ + /* 0xBFC32974: 27280001 addiu $t0, $t9, 1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[25] + (1)); + /* 0xBFC32978: A4A80000 sh $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, 0xBFC32978u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3297C: 84890002 lh $t1, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3297Cu); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32980: 03E00008 jr $ra */ + /* 0xBFC32984: A4A90002 sh $t1, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32984u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + return; +label_BFC32988: + psx_check_interrupts(cpu); + /* 0xBFC32988: 848A0000 lh $t2, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32988u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3298C: 00000000 nop */ + /* nop */ + /* 0xBFC32990: A4AA0000 sh $t2, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32990u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC32994: 848B0002 lh $t3, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC32994u); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC32998: 00000000 nop */ + /* nop */ + /* 0xBFC3299C: 256C0001 addiu $t4, $t3, 1 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[11] + (1)); + /* 0xBFC329A0: 03E00008 jr $ra */ + /* 0xBFC329A4: A4AC0002 sh $t4, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC329A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + return; +label_BFC329A8: + psx_check_interrupts(cpu); + /* 0xBFC329A8: 10C0FFE8 beq $a2, $zero, 0xBFC3294C */ + uint32_t psx_brA_BFC329A8 = cpu->gpr[6]; uint32_t psx_brB_BFC329A8 = cpu->gpr[0]; + int psx_taken_BFC329A8 = (psx_brA_BFC329A8 == psx_brB_BFC329A8); + /* 0xBFC329AC: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC329A8) goto label_BFC3294C; +label_BFC329B0: + psx_check_interrupts(cpu); + /* 0xBFC329B0: 10C1FFEE beq $a2, $at, 0xBFC3296C */ + uint32_t psx_brA_BFC329B0 = cpu->gpr[6]; uint32_t psx_brB_BFC329B0 = cpu->gpr[1]; + int psx_taken_BFC329B0 = (psx_brA_BFC329B0 == psx_brB_BFC329B0); + /* 0xBFC329B4: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + if (psx_taken_BFC329B0) goto label_BFC3296C; +label_BFC329B8: + psx_check_interrupts(cpu); + /* 0xBFC329B8: 10C1FFF3 beq $a2, $at, 0xBFC32988 */ + uint32_t psx_brA_BFC329B8 = cpu->gpr[6]; uint32_t psx_brB_BFC329B8 = cpu->gpr[1]; + int psx_taken_BFC329B8 = (psx_brA_BFC329B8 == psx_brB_BFC329B8); + /* 0xBFC329BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC329B8) goto label_BFC32988; +label_BFC329C0: + psx_check_interrupts(cpu); + /* 0xBFC329C0: 848D0000 lh $t5, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC329C0u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC329C4: 00000000 nop */ + /* nop */ + /* 0xBFC329C8: 25AEFFFF addiu $t6, $t5, -1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[13] + (-1)); + /* 0xBFC329CC: A4AE0000 sh $t6, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC329CCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC329D0: 848F0002 lh $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, 0xBFC329D0u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC329D4: 00000000 nop */ + /* nop */ + /* 0xBFC329D8: A4AF0002 sh $t7, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC329D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC329DC: 03E00008 jr $ra */ + /* 0xBFC329E0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC329F0(CPUState* cpu) { label_BFC329F0: psx_check_interrupts(cpu); @@ -105496,6 +119175,457 @@ label_BFC33528: return; } +void func_1FC33538(CPUState* cpu) { +label_BFC33538: + psx_check_interrupts(cpu); + /* 0xBFC33538: 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, 0xBFC33538u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3353C: 8CAA0000 lw $t2, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3353Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33540: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC33544: 8C830000 lw $v1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33544u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC33548: 8C870004 lw $a3, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33548u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC3354C: 24A50004 addiu $a1, $a1, 4 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (4)); + /* 0xBFC33550: 8CA90000 lw $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, 0xBFC33550u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC33554: 8CA80004 lw $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, 0xBFC33554u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33558: 01426023 subu $t4, $t2, $v0 */ + cpu->gpr[12] = cpu->gpr[10] - cpu->gpr[2]; + /* 0xBFC3355C: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC33560: 24A50004 addiu $a1, $a1, 4 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (4)); + /* 0xBFC33564: 05810003 bgez $t4, 0xBFC33574 */ + uint32_t psx_brA_BFC33564 = cpu->gpr[12]; + int psx_taken_BFC33564 = ((int32_t)psx_brA_BFC33564 >= 0); + /* 0xBFC33568: 01805821 addu $t3, $t4, $zero */ + cpu->gpr[11] = cpu->gpr[12] + cpu->gpr[0]; + if (psx_taken_BFC33564) goto label_BFC33574; +label_BFC3356C: + psx_check_interrupts(cpu); + /* 0xBFC3356C: 004B1021 addu $v0, $v0, $t3 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[11]; + /* 0xBFC33570: 014B5023 subu $t2, $t2, $t3 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[11]; +label_BFC33574: + psx_check_interrupts(cpu); + /* 0xBFC33574: 01232823 subu $a1, $t1, $v1 */ + cpu->gpr[5] = cpu->gpr[9] - cpu->gpr[3]; + /* 0xBFC33578: 04A10003 bgez $a1, 0xBFC33588 */ + uint32_t psx_brA_BFC33578 = cpu->gpr[5]; + int psx_taken_BFC33578 = ((int32_t)psx_brA_BFC33578 >= 0); + /* 0xBFC3357C: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC33578) goto label_BFC33588; +label_BFC33580: + psx_check_interrupts(cpu); + /* 0xBFC33580: 00641821 addu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] + cpu->gpr[4]; + /* 0xBFC33584: 01244823 subu $t1, $t1, $a0 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[4]; +label_BFC33588: + psx_check_interrupts(cpu); + /* 0xBFC33588: 01072823 subu $a1, $t0, $a3 */ + cpu->gpr[5] = cpu->gpr[8] - cpu->gpr[7]; + /* 0xBFC3358C: 04A10003 bgez $a1, 0xBFC3359C */ + uint32_t psx_brA_BFC3358C = cpu->gpr[5]; + int psx_taken_BFC3358C = ((int32_t)psx_brA_BFC3358C >= 0); + /* 0xBFC33590: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3358C) goto label_BFC3359C; +label_BFC33594: + psx_check_interrupts(cpu); + /* 0xBFC33594: 00E43821 addu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] + cpu->gpr[4]; + /* 0xBFC33598: 01044023 subu $t0, $t0, $a0 */ + cpu->gpr[8] = cpu->gpr[8] - cpu->gpr[4]; +label_BFC3359C: + psx_check_interrupts(cpu); + /* 0xBFC3359C: 00622823 subu $a1, $v1, $v0 */ + cpu->gpr[5] = cpu->gpr[3] - cpu->gpr[2]; + /* 0xBFC335A0: 04A10003 bgez $a1, 0xBFC335B0 */ + uint32_t psx_brA_BFC335A0 = cpu->gpr[5]; + int psx_taken_BFC335A0 = ((int32_t)psx_brA_BFC335A0 >= 0); + /* 0xBFC335A4: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC335A0) goto label_BFC335B0; +label_BFC335A8: + psx_check_interrupts(cpu); + /* 0xBFC335A8: 00441021 addu $v0, $v0, $a0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[4]; + /* 0xBFC335AC: 00641823 subu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] - cpu->gpr[4]; +label_BFC335B0: + psx_check_interrupts(cpu); + /* 0xBFC335B0: 00E22823 subu $a1, $a3, $v0 */ + cpu->gpr[5] = cpu->gpr[7] - cpu->gpr[2]; + /* 0xBFC335B4: 04A10002 bgez $a1, 0xBFC335C0 */ + uint32_t psx_brA_BFC335B4 = cpu->gpr[5]; + int psx_taken_BFC335B4 = ((int32_t)psx_brA_BFC335B4 >= 0); + /* 0xBFC335B8: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC335B4) goto label_BFC335C0; +label_BFC335BC: + psx_check_interrupts(cpu); + /* 0xBFC335BC: 00E43823 subu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] - cpu->gpr[4]; +label_BFC335C0: + psx_check_interrupts(cpu); + /* 0xBFC335C0: 01092023 subu $a0, $t0, $t1 */ + cpu->gpr[4] = cpu->gpr[8] - cpu->gpr[9]; + /* 0xBFC335C4: 04810003 bgez $a0, 0xBFC335D4 */ + uint32_t psx_brA_BFC335C4 = cpu->gpr[4]; + int psx_taken_BFC335C4 = ((int32_t)psx_brA_BFC335C4 >= 0); + /* 0xBFC335C8: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC335C4) goto label_BFC335D4; +label_BFC335CC: + psx_check_interrupts(cpu); + /* 0xBFC335CC: 01224821 addu $t1, $t1, $v0 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[2]; + /* 0xBFC335D0: 01024023 subu $t0, $t0, $v0 */ + cpu->gpr[8] = cpu->gpr[8] - cpu->gpr[2]; +label_BFC335D4: + psx_check_interrupts(cpu); + /* 0xBFC335D4: 010A2023 subu $a0, $t0, $t2 */ + cpu->gpr[4] = cpu->gpr[8] - cpu->gpr[10]; + /* 0xBFC335D8: 04810002 bgez $a0, 0xBFC335E4 */ + uint32_t psx_brA_BFC335D8 = cpu->gpr[4]; + int psx_taken_BFC335D8 = ((int32_t)psx_brA_BFC335D8 >= 0); + /* 0xBFC335DC: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC335D8) goto label_BFC335E4; +label_BFC335E0: + psx_check_interrupts(cpu); + /* 0xBFC335E0: 01425021 addu $t2, $t2, $v0 */ + cpu->gpr[10] = cpu->gpr[10] + cpu->gpr[2]; +label_BFC335E4: + psx_check_interrupts(cpu); + /* 0xBFC335E4: 8CC20000 lw $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, 0xBFC335E4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC335E8: 24C60004 addiu $a2, $a2, 4 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (4)); + /* 0xBFC335EC: 00622823 subu $a1, $v1, $v0 */ + cpu->gpr[5] = cpu->gpr[3] - cpu->gpr[2]; + /* 0xBFC335F0: 04A10003 bgez $a1, 0xBFC33600 */ + uint32_t psx_brA_BFC335F0 = cpu->gpr[5]; + int psx_taken_BFC335F0 = ((int32_t)psx_brA_BFC335F0 >= 0); + /* 0xBFC335F4: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC335F0) goto label_BFC33600; +label_BFC335F8: + psx_check_interrupts(cpu); + /* 0xBFC335F8: 00441021 addu $v0, $v0, $a0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[4]; + /* 0xBFC335FC: 00641823 subu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] - cpu->gpr[4]; +label_BFC33600: + psx_check_interrupts(cpu); + /* 0xBFC33600: 01474023 subu $t0, $t2, $a3 */ + cpu->gpr[8] = cpu->gpr[10] - cpu->gpr[7]; + /* 0xBFC33604: 05010003 bgez $t0, 0xBFC33614 */ + uint32_t psx_brA_BFC33604 = cpu->gpr[8]; + int psx_taken_BFC33604 = ((int32_t)psx_brA_BFC33604 >= 0); + /* 0xBFC33608: 01002021 addu $a0, $t0, $zero */ + cpu->gpr[4] = cpu->gpr[8] + cpu->gpr[0]; + if (psx_taken_BFC33604) goto label_BFC33614; +label_BFC3360C: + psx_check_interrupts(cpu); + /* 0xBFC3360C: 00E43821 addu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] + cpu->gpr[4]; + /* 0xBFC33610: 01445023 subu $t2, $t2, $a0 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[4]; +label_BFC33614: + psx_check_interrupts(cpu); + /* 0xBFC33614: 00E22823 subu $a1, $a3, $v0 */ + cpu->gpr[5] = cpu->gpr[7] - cpu->gpr[2]; + /* 0xBFC33618: 04A10003 bgez $a1, 0xBFC33628 */ + uint32_t psx_brA_BFC33618 = cpu->gpr[5]; + int psx_taken_BFC33618 = ((int32_t)psx_brA_BFC33618 >= 0); + /* 0xBFC3361C: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC33618) goto label_BFC33628; +label_BFC33620: + psx_check_interrupts(cpu); + /* 0xBFC33620: 00441021 addu $v0, $v0, $a0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[4]; + /* 0xBFC33624: 00E43823 subu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] - cpu->gpr[4]; +label_BFC33628: + psx_check_interrupts(cpu); + /* 0xBFC33628: 01222823 subu $a1, $t1, $v0 */ + cpu->gpr[5] = cpu->gpr[9] - cpu->gpr[2]; + /* 0xBFC3362C: 04A10002 bgez $a1, 0xBFC33638 */ + uint32_t psx_brA_BFC3362C = cpu->gpr[5]; + int psx_taken_BFC3362C = ((int32_t)psx_brA_BFC3362C >= 0); + /* 0xBFC33630: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3362C) goto label_BFC33638; +label_BFC33634: + psx_check_interrupts(cpu); + /* 0xBFC33634: 01244823 subu $t1, $t1, $a0 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[4]; +label_BFC33638: + psx_check_interrupts(cpu); + /* 0xBFC33638: 012A2023 subu $a0, $t1, $t2 */ + cpu->gpr[4] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC3363C: 04810003 bgez $a0, 0xBFC3364C */ + uint32_t psx_brA_BFC3363C = cpu->gpr[4]; + int psx_taken_BFC3363C = ((int32_t)psx_brA_BFC3363C >= 0); + /* 0xBFC33640: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC3363C) goto label_BFC3364C; +label_BFC33644: + psx_check_interrupts(cpu); + /* 0xBFC33644: 01425021 addu $t2, $t2, $v0 */ + cpu->gpr[10] = cpu->gpr[10] + cpu->gpr[2]; + /* 0xBFC33648: 01224823 subu $t1, $t1, $v0 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[2]; +label_BFC3364C: + psx_check_interrupts(cpu); + /* 0xBFC3364C: 01232823 subu $a1, $t1, $v1 */ + cpu->gpr[5] = cpu->gpr[9] - cpu->gpr[3]; + /* 0xBFC33650: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC33654: 04A10002 bgez $a1, 0xBFC33660 */ + uint32_t psx_brA_BFC33654 = cpu->gpr[5]; + int psx_taken_BFC33654 = ((int32_t)psx_brA_BFC33654 >= 0); + /* 0xBFC33658: 01474023 subu $t0, $t2, $a3 */ + cpu->gpr[8] = cpu->gpr[10] - cpu->gpr[7]; + if (psx_taken_BFC33654) goto label_BFC33660; +label_BFC3365C: + psx_check_interrupts(cpu); + /* 0xBFC3365C: 00621821 addu $v1, $v1, $v0 */ + cpu->gpr[3] = cpu->gpr[3] + cpu->gpr[2]; +label_BFC33660: + psx_check_interrupts(cpu); + /* 0xBFC33660: 8CC20000 lw $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, 0xBFC33660u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC33664: 24C60004 addiu $a2, $a2, 4 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (4)); + /* 0xBFC33668: 00622823 subu $a1, $v1, $v0 */ + cpu->gpr[5] = cpu->gpr[3] - cpu->gpr[2]; + /* 0xBFC3366C: 04A10003 bgez $a1, 0xBFC3367C */ + uint32_t psx_brA_BFC3366C = cpu->gpr[5]; + int psx_taken_BFC3366C = ((int32_t)psx_brA_BFC3366C >= 0); + /* 0xBFC33670: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3366C) goto label_BFC3367C; +label_BFC33674: + psx_check_interrupts(cpu); + /* 0xBFC33674: 00441021 addu $v0, $v0, $a0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[4]; + /* 0xBFC33678: 00641823 subu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] - cpu->gpr[4]; +label_BFC3367C: + psx_check_interrupts(cpu); + /* 0xBFC3367C: 05010003 bgez $t0, 0xBFC3368C */ + uint32_t psx_brA_BFC3367C = cpu->gpr[8]; + int psx_taken_BFC3367C = ((int32_t)psx_brA_BFC3367C >= 0); + /* 0xBFC33680: 01002021 addu $a0, $t0, $zero */ + cpu->gpr[4] = cpu->gpr[8] + cpu->gpr[0]; + if (psx_taken_BFC3367C) goto label_BFC3368C; +label_BFC33684: + psx_check_interrupts(cpu); + /* 0xBFC33684: 00E43821 addu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] + cpu->gpr[4]; + /* 0xBFC33688: 01445023 subu $t2, $t2, $a0 */ + cpu->gpr[10] = cpu->gpr[10] - cpu->gpr[4]; +label_BFC3368C: + psx_check_interrupts(cpu); + /* 0xBFC3368C: 00E22823 subu $a1, $a3, $v0 */ + cpu->gpr[5] = cpu->gpr[7] - cpu->gpr[2]; + /* 0xBFC33690: 04A10002 bgez $a1, 0xBFC3369C */ + uint32_t psx_brA_BFC33690 = cpu->gpr[5]; + int psx_taken_BFC33690 = ((int32_t)psx_brA_BFC33690 >= 0); + /* 0xBFC33694: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC33690) goto label_BFC3369C; +label_BFC33698: + psx_check_interrupts(cpu); + /* 0xBFC33698: 00E43823 subu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] - cpu->gpr[4]; +label_BFC3369C: + psx_check_interrupts(cpu); + /* 0xBFC3369C: 01432023 subu $a0, $t2, $v1 */ + cpu->gpr[4] = cpu->gpr[10] - cpu->gpr[3]; + /* 0xBFC336A0: 04810002 bgez $a0, 0xBFC336AC */ + uint32_t psx_brA_BFC336A0 = cpu->gpr[4]; + int psx_taken_BFC336A0 = ((int32_t)psx_brA_BFC336A0 >= 0); + /* 0xBFC336A4: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC336A0) goto label_BFC336AC; +label_BFC336A8: + psx_check_interrupts(cpu); + /* 0xBFC336A8: 00621821 addu $v1, $v1, $v0 */ + cpu->gpr[3] = cpu->gpr[3] + cpu->gpr[2]; +label_BFC336AC: + psx_check_interrupts(cpu); + /* 0xBFC336AC: 8CC20000 lw $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, 0xBFC336ACu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC336B0: 00E32823 subu $a1, $a3, $v1 */ + cpu->gpr[5] = cpu->gpr[7] - cpu->gpr[3]; + /* 0xBFC336B4: 04A10003 bgez $a1, 0xBFC336C4 */ + uint32_t psx_brA_BFC336B4 = cpu->gpr[5]; + int psx_taken_BFC336B4 = ((int32_t)psx_brA_BFC336B4 >= 0); + /* 0xBFC336B8: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC336B4) goto label_BFC336C4; +label_BFC336BC: + psx_check_interrupts(cpu); + /* 0xBFC336BC: 00641821 addu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] + cpu->gpr[4]; + /* 0xBFC336C0: 00E43823 subu $a3, $a3, $a0 */ + cpu->gpr[7] = cpu->gpr[7] - cpu->gpr[4]; +label_BFC336C4: + psx_check_interrupts(cpu); + /* 0xBFC336C4: 00E22823 subu $a1, $a3, $v0 */ + cpu->gpr[5] = cpu->gpr[7] - cpu->gpr[2]; + /* 0xBFC336C8: 04A10002 bgez $a1, 0xBFC336D4 */ + uint32_t psx_brA_BFC336C8 = cpu->gpr[5]; + int psx_taken_BFC336C8 = ((int32_t)psx_brA_BFC336C8 >= 0); + /* 0xBFC336CC: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC336C8) goto label_BFC336D4; +label_BFC336D0: + psx_check_interrupts(cpu); + /* 0xBFC336D0: 00441021 addu $v0, $v0, $a0 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[4]; +label_BFC336D4: + psx_check_interrupts(cpu); + /* 0xBFC336D4: 00622823 subu $a1, $v1, $v0 */ + cpu->gpr[5] = cpu->gpr[3] - cpu->gpr[2]; + /* 0xBFC336D8: 04A10002 bgez $a1, 0xBFC336E4 */ + uint32_t psx_brA_BFC336D8 = cpu->gpr[5]; + int psx_taken_BFC336D8 = ((int32_t)psx_brA_BFC336D8 >= 0); + /* 0xBFC336DC: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC336D8) goto label_BFC336E4; +label_BFC336E0: + psx_check_interrupts(cpu); + /* 0xBFC336E0: 00641823 subu $v1, $v1, $a0 */ + cpu->gpr[3] = cpu->gpr[3] - cpu->gpr[4]; +label_BFC336E4: + psx_check_interrupts(cpu); + /* 0xBFC336E4: 03E00008 jr $ra */ + /* 0xBFC336E8: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + +void func_1FC339F0(CPUState* cpu) { +label_BFC339F0: + psx_check_interrupts(cpu); + /* 0xBFC339F0: 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, 0xBFC339F0u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC339F4: 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, 0xBFC339F4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC339F8: 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); } + /* 0xBFC339FC: 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, 0xBFC339FCu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33A00: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC33A04: 00000000 nop */ + /* nop */ + /* 0xBFC33A08: 00000000 nop */ + /* nop */ + /* 0xBFC33A0C: 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); } + /* 0xBFC33A10: 00006012 mflo $t4 */ + cpu->gpr[12] = cpu->lo; + /* 0xBFC33A14: 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; } + /* 0xBFC33A18: 00000000 nop */ + /* nop */ + /* 0xBFC33A1C: 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); } + /* 0xBFC33A20: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC33A24: 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; } + /* 0xBFC33A28: 00000000 nop */ + /* nop */ + /* 0xBFC33A2C: 00807821 addu $t7, $a0, $zero */ + cpu->gpr[15] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC33A30: 00A0C021 addu $t8, $a1, $zero */ + cpu->gpr[24] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC33A34: 00602021 addu $a0, $v1, $zero */ + cpu->gpr[4] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC33A38: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC33A3C: 24A583BC addiu $a1, $a1, -31812 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-31812)); + /* 0xBFC33A40: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC33A44: 24C683C0 addiu $a2, $a2, -31808 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-31808)); + /* 0xBFC33A48: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC33A4C: 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, 0xBFC33A4Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC33A50: 0C012F26 jal 0xB004BC98 */ + /* 0xBFC33A54: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC33A58u; + psx_dispatch(cpu, 0x8004BC98u); +label_BFC33A58: + psx_check_interrupts(cpu); + /* 0xBFC33A58: 3C1F8008 lui $ra, 0x8008 */ + cpu->gpr[31] = 0x80080000u; + /* 0xBFC33A5C: 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, 0xBFC33A5Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC33A60: 00000000 nop */ + /* nop */ + /* 0xBFC33A64: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC33A68: 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, 0xBFC33A68u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC33A6C: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC33A70: 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, 0xBFC33A70u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC33A74: 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, 0xBFC33A74u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33A78: 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, 0xBFC33A78u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC33A7C: 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); } + /* 0xBFC33A80: 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, 0xBFC33A80u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33A84: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC33A88: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC33A8C: 01A84007 srav $t0, $t0, $t5 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33A90: AF080000 sw $t0, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33A90u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC33A94: 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); } + /* 0xBFC33A98: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC33A9C: 01A94807 srav $t1, $t1, $t5 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33AA0: AF090004 sw $t1, 4($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33AA0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC33AA4: 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); } + /* 0xBFC33AA8: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC33AAC: 01AA5007 srav $t2, $t2, $t5 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33AB0: 03E00008 jr $ra */ + /* 0xBFC33AB4: AF0A0008 sw $t2, 8($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33AB4u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + return; +} + void func_1FC34160(CPUState* cpu) { label_BFC34160: psx_check_interrupts(cpu); @@ -106588,6 +120718,405 @@ label_BFC348EC: return; } +void func_1FC348FC(CPUState* cpu) { +label_BFC348FC: + psx_check_interrupts(cpu); + /* 0xBFC348FC: 04800009 bltz $a0, 0xBFC34924 */ + uint32_t psx_brA_BFC348FC = cpu->gpr[4]; + 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; +label_BFC34904: + psx_check_interrupts(cpu); + /* 0xBFC34904: 10200008 beq $at, $zero, 0xBFC34928 */ + uint32_t psx_brA_BFC34904 = cpu->gpr[1]; uint32_t psx_brB_BFC34904 = cpu->gpr[0]; + 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; +label_BFC3490C: + psx_check_interrupts(cpu); + /* 0xBFC3490C: 00047040 sll $t6, $a0, 1 */ + cpu->gpr[14] = cpu->gpr[4] << 1u; + /* 0xBFC34910: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC34914: 004E1021 addu $v0, $v0, $t6 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[14]; + /* 0xBFC34918: 844286D0 lh $v0, -31024($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-31024)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34918u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3491C: 03E00008 jr $ra */ + /* 0xBFC34920: 00000000 nop */ + /* nop */ + return; +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); +label_BFC34928: + psx_check_interrupts(cpu); + /* 0xBFC34928: 1420000A bne $at, $zero, 0xBFC34954 */ + uint32_t psx_brA_BFC34928 = cpu->gpr[1]; uint32_t psx_brB_BFC34928 = cpu->gpr[0]; + 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; +label_BFC34930: + psx_check_interrupts(cpu); + /* 0xBFC34930: 10200009 beq $at, $zero, 0xBFC34958 */ + uint32_t psx_brA_BFC34930 = cpu->gpr[1]; uint32_t psx_brB_BFC34930 = cpu->gpr[0]; + 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; +label_BFC34938: + psx_check_interrupts(cpu); + /* 0xBFC34938: 00047840 sll $t7, $a0, 1 */ + cpu->gpr[15] = cpu->gpr[4] << 1u; + /* 0xBFC3493C: 000F7823 subu $t7, $zero, $t7 */ + cpu->gpr[15] = cpu->gpr[0] - cpu->gpr[15]; + /* 0xBFC34940: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC34944: 004F1021 addu $v0, $v0, $t7 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[15]; + /* 0xBFC34948: 844296CE lh $v0, -26930($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-26930)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34948u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3494C: 03E00008 jr $ra */ + /* 0xBFC34950: 00000000 nop */ + /* nop */ + return; +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); +label_BFC34958: + psx_check_interrupts(cpu); + /* 0xBFC34958: 14200009 bne $at, $zero, 0xBFC34980 */ + uint32_t psx_brA_BFC34958 = cpu->gpr[1]; uint32_t psx_brB_BFC34958 = cpu->gpr[0]; + 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; +label_BFC34960: + psx_check_interrupts(cpu); + /* 0xBFC34960: 10200008 beq $at, $zero, 0xBFC34984 */ + uint32_t psx_brA_BFC34960 = cpu->gpr[1]; uint32_t psx_brB_BFC34960 = cpu->gpr[0]; + 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; +label_BFC34968: + psx_check_interrupts(cpu); + /* 0xBFC34968: 0004C040 sll $t8, $a0, 1 */ + cpu->gpr[24] = cpu->gpr[4] << 1u; + /* 0xBFC3496C: 3C028007 lui $v0, 0x8007 */ + cpu->gpr[2] = 0x80070000u; + /* 0xBFC34970: 00581021 addu $v0, $v0, $t8 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[24]; + /* 0xBFC34974: 844276D0 lh $v0, 30416($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (30416)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34974u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34978: 03E00008 jr $ra */ + /* 0xBFC3497C: 00021023 subu $v0, $zero, $v0 */ + cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; + return; +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); +label_BFC34984: + psx_check_interrupts(cpu); + /* 0xBFC34984: 1420000A bne $at, $zero, 0xBFC349B0 */ + uint32_t psx_brA_BFC34984 = cpu->gpr[1]; uint32_t psx_brB_BFC34984 = cpu->gpr[0]; + int psx_taken_BFC34984 = (psx_brA_BFC34984 != psx_brB_BFC34984); + /* 0xBFC34988: 28811000 slti $at, $a0, 4096 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (4096) ? 1 : 0); + if (psx_taken_BFC34984) goto label_BFC349B0; +label_BFC3498C: + psx_check_interrupts(cpu); + /* 0xBFC3498C: 10200008 beq $at, $zero, 0xBFC349B0 */ + uint32_t psx_brA_BFC3498C = cpu->gpr[1]; uint32_t psx_brB_BFC3498C = cpu->gpr[0]; + int psx_taken_BFC3498C = (psx_brA_BFC3498C == psx_brB_BFC3498C); + /* 0xBFC34990: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3498C) goto label_BFC349B0; +label_BFC34994: + psx_check_interrupts(cpu); + /* 0xBFC34994: 0004C840 sll $t9, $a0, 1 */ + cpu->gpr[25] = cpu->gpr[4] << 1u; + /* 0xBFC34998: 0019C823 subu $t9, $zero, $t9 */ + cpu->gpr[25] = cpu->gpr[0] - cpu->gpr[25]; + /* 0xBFC3499C: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC349A0: 00591021 addu $v0, $v0, $t9 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[25]; + /* 0xBFC349A4: 8442A6CE lh $v0, -22834($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-22834)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC349A4u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC349A8: 00000000 nop */ + /* nop */ + /* 0xBFC349AC: 00021023 subu $v0, $zero, $v0 */ + cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; +label_BFC349B0: + psx_check_interrupts(cpu); + /* 0xBFC349B0: 03E00008 jr $ra */ + /* 0xBFC349B4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC349B8(CPUState* cpu) { +label_BFC349B8: + psx_check_interrupts(cpu); + /* 0xBFC349B8: 04810002 bgez $a0, 0xBFC349C4 */ + uint32_t psx_brA_BFC349B8 = cpu->gpr[4]; + int psx_taken_BFC349B8 = ((int32_t)psx_brA_BFC349B8 >= 0); + /* 0xBFC349BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC349B8) goto label_BFC349C4; +label_BFC349C0: + psx_check_interrupts(cpu); + /* 0xBFC349C0: 00042023 subu $a0, $zero, $a0 */ + cpu->gpr[4] = cpu->gpr[0] - cpu->gpr[4]; +label_BFC349C4: + psx_check_interrupts(cpu); + /* 0xBFC349C4: 04810004 bgez $a0, 0xBFC349D8 */ + uint32_t psx_brA_BFC349C4 = cpu->gpr[4]; + int psx_taken_BFC349C4 = ((int32_t)psx_brA_BFC349C4 >= 0); + /* 0xBFC349C8: 30840FFF andi $a0, $a0, 0xFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFu; + if (psx_taken_BFC349C4) goto label_BFC349D8; +label_BFC349CC: + psx_check_interrupts(cpu); + /* 0xBFC349CC: 10800002 beq $a0, $zero, 0xBFC349D8 */ + uint32_t psx_brA_BFC349CC = cpu->gpr[4]; uint32_t psx_brB_BFC349CC = cpu->gpr[0]; + int psx_taken_BFC349CC = (psx_brA_BFC349CC == psx_brB_BFC349CC); + /* 0xBFC349D0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC349CC) goto label_BFC349D8; +label_BFC349D4: + psx_check_interrupts(cpu); + /* 0xBFC349D4: 2484F000 addiu $a0, $a0, -4096 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-4096)); +label_BFC349D8: + psx_check_interrupts(cpu); + /* 0xBFC349D8: 0480000A bltz $a0, 0xBFC34A04 */ + uint32_t psx_brA_BFC349D8 = cpu->gpr[4]; + 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; +label_BFC349E0: + psx_check_interrupts(cpu); + /* 0xBFC349E0: 10200009 beq $at, $zero, 0xBFC34A08 */ + uint32_t psx_brA_BFC349E0 = cpu->gpr[1]; uint32_t psx_brB_BFC349E0 = cpu->gpr[0]; + 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; +label_BFC349E8: + psx_check_interrupts(cpu); + /* 0xBFC349E8: 00047040 sll $t6, $a0, 1 */ + cpu->gpr[14] = cpu->gpr[4] << 1u; + /* 0xBFC349EC: 000E7023 subu $t6, $zero, $t6 */ + cpu->gpr[14] = cpu->gpr[0] - cpu->gpr[14]; + /* 0xBFC349F0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC349F4: 004E1021 addu $v0, $v0, $t6 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[14]; + /* 0xBFC349F8: 84428ECE lh $v0, -28978($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28978)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC349F8u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC349FC: 03E00008 jr $ra */ + /* 0xBFC34A00: 00000000 nop */ + /* nop */ + return; +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); +label_BFC34A08: + psx_check_interrupts(cpu); + /* 0xBFC34A08: 14200009 bne $at, $zero, 0xBFC34A30 */ + uint32_t psx_brA_BFC34A08 = cpu->gpr[1]; uint32_t psx_brB_BFC34A08 = cpu->gpr[0]; + 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; +label_BFC34A10: + psx_check_interrupts(cpu); + /* 0xBFC34A10: 10200008 beq $at, $zero, 0xBFC34A34 */ + uint32_t psx_brA_BFC34A10 = cpu->gpr[1]; uint32_t psx_brB_BFC34A10 = cpu->gpr[0]; + 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; +label_BFC34A18: + psx_check_interrupts(cpu); + /* 0xBFC34A18: 00047840 sll $t7, $a0, 1 */ + cpu->gpr[15] = cpu->gpr[4] << 1u; + /* 0xBFC34A1C: 3C028007 lui $v0, 0x8007 */ + cpu->gpr[2] = 0x80070000u; + /* 0xBFC34A20: 004F1021 addu $v0, $v0, $t7 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[15]; + /* 0xBFC34A24: 84427ED0 lh $v0, 32464($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (32464)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34A24u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34A28: 03E00008 jr $ra */ + /* 0xBFC34A2C: 00021023 subu $v0, $zero, $v0 */ + cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; + return; +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); +label_BFC34A34: + psx_check_interrupts(cpu); + /* 0xBFC34A34: 1420000A bne $at, $zero, 0xBFC34A60 */ + uint32_t psx_brA_BFC34A34 = cpu->gpr[1]; uint32_t psx_brB_BFC34A34 = cpu->gpr[0]; + 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; +label_BFC34A3C: + psx_check_interrupts(cpu); + /* 0xBFC34A3C: 10200009 beq $at, $zero, 0xBFC34A64 */ + uint32_t psx_brA_BFC34A3C = cpu->gpr[1]; uint32_t psx_brB_BFC34A3C = cpu->gpr[0]; + 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; +label_BFC34A44: + psx_check_interrupts(cpu); + /* 0xBFC34A44: 0004C040 sll $t8, $a0, 1 */ + cpu->gpr[24] = cpu->gpr[4] << 1u; + /* 0xBFC34A48: 0018C023 subu $t8, $zero, $t8 */ + cpu->gpr[24] = cpu->gpr[0] - cpu->gpr[24]; + /* 0xBFC34A4C: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC34A50: 00581021 addu $v0, $v0, $t8 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[24]; + /* 0xBFC34A54: 84429ECE lh $v0, -24882($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24882)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34A54u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34A58: 03E00008 jr $ra */ + /* 0xBFC34A5C: 00021023 subu $v0, $zero, $v0 */ + cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; + return; +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); +label_BFC34A64: + psx_check_interrupts(cpu); + /* 0xBFC34A64: 14200008 bne $at, $zero, 0xBFC34A88 */ + uint32_t psx_brA_BFC34A64 = cpu->gpr[1]; uint32_t psx_brB_BFC34A64 = cpu->gpr[0]; + int psx_taken_BFC34A64 = (psx_brA_BFC34A64 != psx_brB_BFC34A64); + /* 0xBFC34A68: 28811000 slti $at, $a0, 4096 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (4096) ? 1 : 0); + if (psx_taken_BFC34A64) goto label_BFC34A88; +label_BFC34A6C: + psx_check_interrupts(cpu); + /* 0xBFC34A6C: 10200006 beq $at, $zero, 0xBFC34A88 */ + uint32_t psx_brA_BFC34A6C = cpu->gpr[1]; uint32_t psx_brB_BFC34A6C = cpu->gpr[0]; + int psx_taken_BFC34A6C = (psx_brA_BFC34A6C == psx_brB_BFC34A6C); + /* 0xBFC34A70: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34A6C) goto label_BFC34A88; +label_BFC34A74: + psx_check_interrupts(cpu); + /* 0xBFC34A74: 0004C840 sll $t9, $a0, 1 */ + cpu->gpr[25] = cpu->gpr[4] << 1u; + /* 0xBFC34A78: 3C028007 lui $v0, 0x8007 */ + cpu->gpr[2] = 0x80070000u; + /* 0xBFC34A7C: 00591021 addu $v0, $v0, $t9 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[25]; + /* 0xBFC34A80: 84426ED0 lh $v0, 28368($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (28368)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34A80u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34A84: 00000000 nop */ + /* nop */ +label_BFC34A88: + psx_check_interrupts(cpu); + /* 0xBFC34A88: 03E00008 jr $ra */ + /* 0xBFC34A8C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34AF0(CPUState* cpu) { +label_BFC34AF0: + psx_check_interrupts(cpu); + /* 0xBFC34AF0: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC34AF4: 00037080 sll $t6, $v1, 2 */ + cpu->gpr[14] = cpu->gpr[3] << 2u; + /* 0xBFC34AF8: 01C37021 addu $t6, $t6, $v1 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[3]; + /* 0xBFC34AFC: 000E7180 sll $t6, $t6, 6 */ + cpu->gpr[14] = cpu->gpr[14] << 6u; + /* 0xBFC34B00: 000E7023 subu $t6, $zero, $t6 */ + 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; } } + /* 0xBFC34B08: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC34B0C: 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, 0xBFC34B0Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC34B10: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC34B14: 14A00002 bne $a1, $zero, 0xBFC34B20 */ + uint32_t psx_brA_BFC34B14 = cpu->gpr[5]; uint32_t psx_brB_BFC34B14 = cpu->gpr[0]; + int psx_taken_BFC34B14 = (psx_brA_BFC34B14 != psx_brB_BFC34B14); + /* 0xBFC34B18: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34B14) goto label_BFC34B20; +label_BFC34B1C: + psx_check_interrupts(cpu); + /* 0xBFC34B1C: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC34B1Cu); return; +label_BFC34B20: + psx_check_interrupts(cpu); + /* 0xBFC34B20: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC34B24: 14A10004 bne $a1, $at, 0xBFC34B38 */ + uint32_t psx_brA_BFC34B24 = cpu->gpr[5]; uint32_t psx_brB_BFC34B24 = cpu->gpr[1]; + int psx_taken_BFC34B24 = (psx_brA_BFC34B24 != psx_brB_BFC34B24); + /* 0xBFC34B28: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC34B24) goto label_BFC34B38; +label_BFC34B2C: + psx_check_interrupts(cpu); + /* 0xBFC34B2C: 15C10002 bne $t6, $at, 0xBFC34B38 */ + uint32_t psx_brA_BFC34B2C = cpu->gpr[14]; uint32_t psx_brB_BFC34B2C = cpu->gpr[1]; + int psx_taken_BFC34B2C = (psx_brA_BFC34B2C != psx_brB_BFC34B2C); + /* 0xBFC34B30: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34B2C) goto label_BFC34B38; +label_BFC34B34: + psx_check_interrupts(cpu); + /* 0xBFC34B34: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC34B34u); return; +label_BFC34B38: + psx_check_interrupts(cpu); + /* 0xBFC34B38: 0C012FF6 jal 0xB004BFD8 */ + /* 0xBFC34B3C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC34B40u; + psx_dispatch(cpu, 0x8004BFD8u); +label_BFC34B40: + psx_check_interrupts(cpu); + /* 0xBFC34B40: 0C012FF9 jal 0xB004BFE4 */ + /* 0xBFC34B44: 3C040140 lui $a0, 0x140 */ + cpu->gpr[4] = 0x01400000u; + cpu->gpr[31] = 0xBFC34B48u; + psx_dispatch(cpu, 0x8004BFE4u); +label_BFC34B48: + psx_check_interrupts(cpu); + /* 0xBFC34B48: 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, 0xBFC34B48u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC34B4C: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC34B50: 03E00008 jr $ra */ + /* 0xBFC34B54: 00000000 nop */ + /* nop */ + return; +} + void func_1FC34B58(CPUState* cpu) { label_BFC34B58: psx_check_interrupts(cpu); @@ -107024,6 +121553,180 @@ label_BFC34E8C: return; } +void func_1FC3586C(CPUState* cpu) { +label_BFC3586C: + psx_check_interrupts(cpu); + /* 0xBFC3586C: 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, 0xBFC3586Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35870: 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, 0xBFC35870u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35874: 8CAA0008 lw $t2, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35874u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35878: 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, 0xBFC35878u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3587C: 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, 0xBFC3587Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35880: 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, 0xBFC35880u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35884: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC35888: 03E00008 jr $ra */ + /* 0xBFC3588C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC359B4(CPUState* cpu) { +label_BFC359B4: + psx_check_interrupts(cpu); + /* 0xBFC359B4: 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, 0xBFC359B4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC359B8: 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, 0xBFC359B8u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC359BC: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC359C0: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC359C4: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC359C8: 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); } + /* 0xBFC359CC: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC359D0: 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, 0xBFC359D0u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC359D4: 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, 0xBFC359D4u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC359D8: 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, 0xBFC359D8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC359DC: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC359E0: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC359E4: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC359E8: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC359EC: 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); } + /* 0xBFC359F0: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC359F4: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC359F8: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC359FC: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35A00: 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, 0xBFC35A00u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35A04: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35A08: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35A0C: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35A10: 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); } + /* 0xBFC35A14: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC35A18: 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, 0xBFC35A18u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35A1C: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35A20: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35A24: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC35A28: 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); } + /* 0xBFC35A2C: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC35A30: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC35A34: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC35A38: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35A3C: 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, 0xBFC35A3Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35A40: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35A44: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35A48: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35A4C: 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); } + /* 0xBFC35A50: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC35A54: 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, 0xBFC35A54u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35A58: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35A5C: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35A60: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC35A64: 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); } + /* 0xBFC35A68: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC35A6C: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC35A70: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC35A74: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35A78: 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, 0xBFC35A78u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35A7C: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35A80: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35A84: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35A88: 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); } + /* 0xBFC35A8C: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC35A90: 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, 0xBFC35A90u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35A94: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35A98: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35A9C: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC35AA0: 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); } + /* 0xBFC35AA4: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC35AA8: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC35AAC: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC35AB0: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35AB4: 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, 0xBFC35AB4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35AB8: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35ABC: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35AC0: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35AC4: 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); } + /* 0xBFC35AC8: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35ACC: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35AD0: 03E00008 jr $ra */ + /* 0xBFC35AD4: 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, 0xBFC35AD4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + return; +} + void func_1FC36CF0(CPUState* cpu) { label_BFC36CF0: psx_check_interrupts(cpu); @@ -107081,6 +121784,273 @@ label_BFC36D1C: cpu->pc = cpu->gpr[14]; return; } +void func_1FC36D48(CPUState* cpu) { +label_BFC36D48: + psx_check_interrupts(cpu); + /* 0xBFC36D48: 0C016818 jal 0xB005A060 */ + /* 0xBFC36D4C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36D50u; + psx_dispatch(cpu, 0x8005A060u); +label_BFC36D50: + psx_check_interrupts(cpu); + /* 0xBFC36D50: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC36D54: 8DEF924C lw $t7, -28084($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D54u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC36D58: 24040002 addiu $a0, $zero, 2 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC36D5C: 8DE50024 lw $a1, 36($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D5Cu); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC36D60: 0C016830 jal 0xB005A0C0 */ + /* 0xBFC36D64: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36D68u; + psx_dispatch(cpu, 0x8005A0C0u); +label_BFC36D68: + psx_check_interrupts(cpu); + /* 0xBFC36D68: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC36D6C: 8C84924C lw $a0, -28084($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D6Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC36D70: 0C013B3C jal 0xB004ECF0 */ + /* 0xBFC36D74: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36D78u; + psx_dispatch(cpu, 0x8004ECF0u); +label_BFC36D78: + psx_check_interrupts(cpu); + /* 0xBFC36D78: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC36D7C: 8F18924C lw $t8, -28084($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D7Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC36D80: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC36D84: 8F190034 lw $t9, 52($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D84u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC36D88: 00000000 nop */ + /* nop */ + /* 0xBFC36D8C: 0320F809 jalr $ra, $t9 */ + /* 0xBFC36D90: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36D94u; + psx_dispatch(cpu, cpu->gpr[25]); +label_BFC36D94: + psx_check_interrupts(cpu); + /* 0xBFC36D94: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC36D98: 0C01429F jal 0xB0050A7C */ + /* 0xBFC36D9C: AC229254 sw $v0, -28076($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36D9Cu); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + cpu->gpr[31] = 0xBFC36DA0u; + psx_dispatch(cpu, 0x80050A7Cu); +label_BFC36DA0: + psx_check_interrupts(cpu); + /* 0xBFC36DA0: 10000015 beq $zero, $zero, 0xBFC36DF8 */ + uint32_t psx_brA_BFC36DA0 = cpu->gpr[0]; uint32_t psx_brB_BFC36DA0 = cpu->gpr[0]; + int psx_taken_BFC36DA0 = (psx_brA_BFC36DA0 == psx_brB_BFC36DA0); + /* 0xBFC36DA4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC36DA0) { cpu->pc = 0xBFC36DF8u; return; } +label_BFC36DA8: + psx_check_interrupts(cpu); + /* 0xBFC36DA8: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC36DAC: 8D08924C lw $t0, -28084($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DACu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC36DB0: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC36DB4: 8D090034 lw $t1, 52($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DB4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC36DB8: 00000000 nop */ + /* nop */ + /* 0xBFC36DBC: 0120F809 jalr $ra, $t1 */ + /* 0xBFC36DC0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36DC4u; + psx_dispatch(cpu, cpu->gpr[9]); +label_BFC36DC4: + psx_check_interrupts(cpu); + /* 0xBFC36DC4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC36DC8: 1000000B beq $zero, $zero, 0xBFC36DF8 */ + uint32_t psx_brA_BFC36DC8 = cpu->gpr[0]; uint32_t psx_brB_BFC36DC8 = cpu->gpr[0]; + int psx_taken_BFC36DC8 = (psx_brA_BFC36DC8 == psx_brB_BFC36DC8); + /* 0xBFC36DCC: AC229254 sw $v0, -28076($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DCCu); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC36DC8) { cpu->pc = 0xBFC36DF8u; return; } +} + +void func_1FC36DD0(CPUState* cpu) { +label_BFC36DD0: + psx_check_interrupts(cpu); + /* 0xBFC36DD0: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC36DD4: 8D4A924C lw $t2, -28084($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DD4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC36DD8: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC36DDC: 8D4B0034 lw $t3, 52($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DDCu); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC36DE0: 00000000 nop */ + /* nop */ + /* 0xBFC36DE4: 0160F809 jalr $ra, $t3 */ + /* 0xBFC36DE8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36DECu; + psx_dispatch(cpu, cpu->gpr[11]); +label_BFC36DEC: + psx_check_interrupts(cpu); + /* 0xBFC36DEC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC36DF0: 10000001 beq $zero, $zero, 0xBFC36DF8 */ + uint32_t psx_brA_BFC36DF0 = cpu->gpr[0]; uint32_t psx_brB_BFC36DF0 = cpu->gpr[0]; + int psx_taken_BFC36DF0 = (psx_brA_BFC36DF0 == psx_brB_BFC36DF0); + /* 0xBFC36DF4: AC229254 sw $v0, -28076($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DF4u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC36DF0) { cpu->pc = 0xBFC36DF8u; return; } +} + +void func_1FC36DF8(CPUState* cpu) { +label_BFC36DF8: + psx_check_interrupts(cpu); + /* 0xBFC36DF8: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC36DFC: 8D8C9258 lw $t4, -28072($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-28072)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36DFCu); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC36E00: 00000000 nop */ + /* nop */ + /* 0xBFC36E04: 11800004 beq $t4, $zero, 0xBFC36E18 */ + uint32_t psx_brA_BFC36E04 = cpu->gpr[12]; uint32_t psx_brB_BFC36E04 = cpu->gpr[0]; + int psx_taken_BFC36E04 = (psx_brA_BFC36E04 == psx_brB_BFC36E04); + /* 0xBFC36E08: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC36E04) goto label_BFC36E18; +label_BFC36E0C: + psx_check_interrupts(cpu); + /* 0xBFC36E0C: 10000002 beq $zero, $zero, 0xBFC36E18 */ + uint32_t psx_brA_BFC36E0C = cpu->gpr[0]; uint32_t psx_brB_BFC36E0C = cpu->gpr[0]; + int psx_taken_BFC36E0C = (psx_brA_BFC36E0C == psx_brB_BFC36E0C); + /* 0xBFC36E10: 24030080 addiu $v1, $zero, 128 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (128)); + if (psx_taken_BFC36E0C) goto label_BFC36E18; +label_BFC36E14: + psx_check_interrupts(cpu); + /* 0xBFC36E14: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC36E18: + psx_check_interrupts(cpu); + /* 0xBFC36E18: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC36E1C: 8DAD924C lw $t5, -28084($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E1Cu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC36E20: AFA30024 sw $v1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E20u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC36E24: 8DAE0028 lw $t6, 40($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E24u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC36E28: 24040008 addiu $a0, $zero, 8 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (8)); + /* 0xBFC36E2C: 01C0F809 jalr $ra, $t6 */ + /* 0xBFC36E30: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36E34u; + psx_dispatch(cpu, cpu->gpr[14]); +label_BFC36E34: + psx_check_interrupts(cpu); + /* 0xBFC36E34: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC36E38: 8DEF924C lw $t7, -28084($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E38u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC36E3C: 8FA30024 lw $v1, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E3Cu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC36E40: 8DF80010 lw $t8, 16($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E40u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC36E44: 3C010800 lui $at, 0x800 */ + cpu->gpr[1] = 0x08000000u; + /* 0xBFC36E48: 00622025 or $a0, $v1, $v0 */ + cpu->gpr[4] = cpu->gpr[3] | cpu->gpr[2]; + /* 0xBFC36E4C: 0300F809 jalr $ra, $t8 */ + /* 0xBFC36E50: 00812025 or $a0, $a0, $at */ + cpu->gpr[4] = cpu->gpr[4] | cpu->gpr[1]; + cpu->gpr[31] = 0xBFC36E54u; + psx_dispatch(cpu, cpu->gpr[24]); +label_BFC36E54: + psx_check_interrupts(cpu); + /* 0xBFC36E54: 8FB90028 lw $t9, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E54u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC36E58: 00000000 nop */ + /* nop */ + /* 0xBFC36E5C: 33280008 andi $t0, $t9, 0x8 */ + cpu->gpr[8] = cpu->gpr[25] & 0x8u; + /* 0xBFC36E60: 11000014 beq $t0, $zero, 0xBFC36EB4 */ + uint32_t psx_brA_BFC36E60 = cpu->gpr[8]; uint32_t psx_brB_BFC36E60 = cpu->gpr[0]; + int psx_taken_BFC36E60 = (psx_brA_BFC36E60 == psx_brB_BFC36E60); + /* 0xBFC36E64: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E64u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + if (psx_taken_BFC36E60) goto label_BFC36EB4; +label_BFC36E68: + psx_check_interrupts(cpu); + /* 0xBFC36E68: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC36E6C: 8D4A9258 lw $t2, -28072($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-28072)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E6Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC36E70: 24090002 addiu $t1, $zero, 2 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC36E74: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC36E78: 11400004 beq $t2, $zero, 0xBFC36E8C */ + uint32_t psx_brA_BFC36E78 = cpu->gpr[10]; uint32_t psx_brB_BFC36E78 = cpu->gpr[0]; + int psx_taken_BFC36E78 = (psx_brA_BFC36E78 == psx_brB_BFC36E78); + /* 0xBFC36E7C: AC299254 sw $t1, -28076($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + if (psx_taken_BFC36E78) goto label_BFC36E8C; +label_BFC36E80: + psx_check_interrupts(cpu); + /* 0xBFC36E80: 3C032000 lui $v1, 0x2000 */ + cpu->gpr[3] = 0x20000000u; + /* 0xBFC36E84: 10000003 beq $zero, $zero, 0xBFC36E94 */ + uint32_t psx_brA_BFC36E84 = cpu->gpr[0]; uint32_t psx_brB_BFC36E84 = cpu->gpr[0]; + int psx_taken_BFC36E84 = (psx_brA_BFC36E84 == psx_brB_BFC36E84); + /* 0xBFC36E88: 34630501 ori $v1, $v1, 0x501 */ + cpu->gpr[3] = cpu->gpr[3] | 0x501u; + if (psx_taken_BFC36E84) goto label_BFC36E94; +label_BFC36E8C: + psx_check_interrupts(cpu); + /* 0xBFC36E8C: 3C032000 lui $v1, 0x2000 */ + cpu->gpr[3] = 0x20000000u; + /* 0xBFC36E90: 34630504 ori $v1, $v1, 0x504 */ + cpu->gpr[3] = cpu->gpr[3] | 0x504u; +label_BFC36E94: + psx_check_interrupts(cpu); + /* 0xBFC36E94: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC36E98: 8D6B924C lw $t3, -28084($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-28084)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36E98u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC36E9C: 00602021 addu $a0, $v1, $zero */ + cpu->gpr[4] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC36EA0: 8D6C0010 lw $t4, 16($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36EA0u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC36EA4: 00000000 nop */ + /* nop */ + /* 0xBFC36EA8: 0180F809 jalr $ra, $t4 */ + /* 0xBFC36EAC: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC36EB0u; + psx_dispatch(cpu, cpu->gpr[12]); +label_BFC36EB0: + psx_check_interrupts(cpu); + /* 0xBFC36EB0: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36EB0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } +label_BFC36EB4: + psx_check_interrupts(cpu); + /* 0xBFC36EB4: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + /* 0xBFC36EB8: 03E00008 jr $ra */ + /* 0xBFC36EBC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC36EC0(CPUState* cpu) { label_BFC36EC0: psx_check_interrupts(cpu); @@ -107289,6 +122259,19 @@ label_BFC36FE0: return; } +void func_1FC36FF0(CPUState* cpu) { +label_BFC36FF0: + psx_check_interrupts(cpu); + /* 0xBFC36FF0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC36FF4: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC36FF4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC36FF8: 03E00008 jr $ra */ + /* 0xBFC36FFC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC37028(CPUState* cpu) { label_BFC37028: psx_check_interrupts(cpu); @@ -109339,6 +124322,804 @@ label_BFC37D90: return; } +void func_1FC37DC8(CPUState* cpu) { +label_BFC37DC8: + psx_check_interrupts(cpu); + /* 0xBFC37DC8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC37DCC: 8DCE9254 lw $t6, -28076($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC37DCCu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC37DD0: 30C6FFFF andi $a2, $a2, 0xFFFF */ + cpu->gpr[6] = cpu->gpr[6] & 0xFFFFu; + /* 0xBFC37DD4: 11C00011 beq $t6, $zero, 0xBFC37E1C */ + uint32_t psx_brA_BFC37DD4 = cpu->gpr[14]; uint32_t psx_brB_BFC37DD4 = cpu->gpr[0]; + int psx_taken_BFC37DD4 = (psx_brA_BFC37DD4 == psx_brB_BFC37DD4); + /* 0xBFC37DD8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC37DD4) goto label_BFC37E1C; +label_BFC37DDC: + psx_check_interrupts(cpu); + /* 0xBFC37DDC: 10A00004 beq $a1, $zero, 0xBFC37DF0 */ + uint32_t psx_brA_BFC37DDC = cpu->gpr[5]; uint32_t psx_brB_BFC37DDC = cpu->gpr[0]; + int psx_taken_BFC37DDC = (psx_brA_BFC37DDC == psx_brB_BFC37DDC); + /* 0xBFC37DE0: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37DDC) goto label_BFC37DF0; +label_BFC37DE4: + psx_check_interrupts(cpu); + /* 0xBFC37DE4: 10000002 beq $zero, $zero, 0xBFC37DF0 */ + uint32_t psx_brA_BFC37DE4 = cpu->gpr[0]; uint32_t psx_brB_BFC37DE4 = cpu->gpr[0]; + int psx_taken_BFC37DE4 = (psx_brA_BFC37DE4 == psx_brB_BFC37DE4); + /* 0xBFC37DE8: 24030800 addiu $v1, $zero, 2048 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (2048)); + if (psx_taken_BFC37DE4) goto label_BFC37DF0; +label_BFC37DEC: + psx_check_interrupts(cpu); + /* 0xBFC37DEC: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC37DF0: + psx_check_interrupts(cpu); + /* 0xBFC37DF0: 10800004 beq $a0, $zero, 0xBFC37E04 */ + uint32_t psx_brA_BFC37DF0 = cpu->gpr[4]; uint32_t psx_brB_BFC37DF0 = cpu->gpr[0]; + int psx_taken_BFC37DF0 = (psx_brA_BFC37DF0 == psx_brB_BFC37DF0); + /* 0xBFC37DF4: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37DF0) goto label_BFC37E04; +label_BFC37DF8: + psx_check_interrupts(cpu); + /* 0xBFC37DF8: 10000002 beq $zero, $zero, 0xBFC37E04 */ + uint32_t psx_brA_BFC37DF8 = cpu->gpr[0]; uint32_t psx_brB_BFC37DF8 = cpu->gpr[0]; + int psx_taken_BFC37DF8 = (psx_brA_BFC37DF8 == psx_brB_BFC37DF8); + /* 0xBFC37DFC: 24041000 addiu $a0, $zero, 4096 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (4096)); + if (psx_taken_BFC37DF8) goto label_BFC37E04; +label_BFC37E00: + psx_check_interrupts(cpu); + /* 0xBFC37E00: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC37E04: + psx_check_interrupts(cpu); + /* 0xBFC37E04: 3C01E100 lui $at, 0xE100 */ + cpu->gpr[1] = 0xE1000000u; + /* 0xBFC37E08: 00617825 or $t7, $v1, $at */ + cpu->gpr[15] = cpu->gpr[3] | cpu->gpr[1]; + /* 0xBFC37E0C: 01E4C025 or $t8, $t7, $a0 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[4]; + /* 0xBFC37E10: 30D927FF andi $t9, $a2, 0x27FF */ + cpu->gpr[25] = cpu->gpr[6] & 0x27FFu; + /* 0xBFC37E14: 03E00008 jr $ra */ + /* 0xBFC37E18: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + return; +label_BFC37E1C: + psx_check_interrupts(cpu); + /* 0xBFC37E1C: 10A00004 beq $a1, $zero, 0xBFC37E30 */ + uint32_t psx_brA_BFC37E1C = cpu->gpr[5]; uint32_t psx_brB_BFC37E1C = cpu->gpr[0]; + int psx_taken_BFC37E1C = (psx_brA_BFC37E1C == psx_brB_BFC37E1C); + /* 0xBFC37E20: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37E1C) goto label_BFC37E30; +label_BFC37E24: + psx_check_interrupts(cpu); + /* 0xBFC37E24: 10000002 beq $zero, $zero, 0xBFC37E30 */ + uint32_t psx_brA_BFC37E24 = cpu->gpr[0]; uint32_t psx_brB_BFC37E24 = cpu->gpr[0]; + int psx_taken_BFC37E24 = (psx_brA_BFC37E24 == psx_brB_BFC37E24); + /* 0xBFC37E28: 24030200 addiu $v1, $zero, 512 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (512)); + if (psx_taken_BFC37E24) goto label_BFC37E30; +label_BFC37E2C: + psx_check_interrupts(cpu); + /* 0xBFC37E2C: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC37E30: + psx_check_interrupts(cpu); + /* 0xBFC37E30: 10800004 beq $a0, $zero, 0xBFC37E44 */ + uint32_t psx_brA_BFC37E30 = cpu->gpr[4]; uint32_t psx_brB_BFC37E30 = cpu->gpr[0]; + int psx_taken_BFC37E30 = (psx_brA_BFC37E30 == psx_brB_BFC37E30); + /* 0xBFC37E34: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37E30) goto label_BFC37E44; +label_BFC37E38: + psx_check_interrupts(cpu); + /* 0xBFC37E38: 10000002 beq $zero, $zero, 0xBFC37E44 */ + uint32_t psx_brA_BFC37E38 = cpu->gpr[0]; uint32_t psx_brB_BFC37E38 = cpu->gpr[0]; + int psx_taken_BFC37E38 = (psx_brA_BFC37E38 == psx_brB_BFC37E38); + /* 0xBFC37E3C: 24040400 addiu $a0, $zero, 1024 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1024)); + if (psx_taken_BFC37E38) goto label_BFC37E44; +label_BFC37E40: + psx_check_interrupts(cpu); + /* 0xBFC37E40: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC37E44: + psx_check_interrupts(cpu); + /* 0xBFC37E44: 3C01E100 lui $at, 0xE100 */ + cpu->gpr[1] = 0xE1000000u; + /* 0xBFC37E48: 00614025 or $t0, $v1, $at */ + cpu->gpr[8] = cpu->gpr[3] | cpu->gpr[1]; + /* 0xBFC37E4C: 01044825 or $t1, $t0, $a0 */ + cpu->gpr[9] = cpu->gpr[8] | cpu->gpr[4]; + /* 0xBFC37E50: 30CA01FF andi $t2, $a2, 0x1FF */ + cpu->gpr[10] = cpu->gpr[6] & 0x1FFu; + /* 0xBFC37E54: 012A1025 or $v0, $t1, $t2 */ + cpu->gpr[2] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC37E58: 03E00008 jr $ra */ + /* 0xBFC37E5C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC37E60(CPUState* cpu) { +label_BFC37E60: + psx_check_interrupts(cpu); + /* 0xBFC37E60: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC37E64: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC37E68: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC37E6C: 04810003 bgez $a0, 0xBFC37E7C */ + uint32_t psx_brA_BFC37E6C = cpu->gpr[4]; + int psx_taken_BFC37E6C = ((int32_t)psx_brA_BFC37E6C >= 0); + /* 0xBFC37E70: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC37E6C) goto label_BFC37E7C; +label_BFC37E74: + psx_check_interrupts(cpu); + /* 0xBFC37E74: 10000009 beq $zero, $zero, 0xBFC37E9C */ + uint32_t psx_brA_BFC37E74 = cpu->gpr[0]; uint32_t psx_brB_BFC37E74 = cpu->gpr[0]; + int psx_taken_BFC37E74 = (psx_brA_BFC37E74 == psx_brB_BFC37E74); + /* 0xBFC37E78: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37E74) goto label_BFC37E9C; +label_BFC37E7C: + psx_check_interrupts(cpu); + /* 0xBFC37E7C: 28810400 slti $at, $a0, 1024 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); + /* 0xBFC37E80: 14200004 bne $at, $zero, 0xBFC37E94 */ + uint32_t psx_brA_BFC37E80 = cpu->gpr[1]; uint32_t psx_brB_BFC37E80 = cpu->gpr[0]; + int psx_taken_BFC37E80 = (psx_brA_BFC37E80 != psx_brB_BFC37E80); + /* 0xBFC37E84: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC37E80) goto label_BFC37E94; +label_BFC37E88: + psx_check_interrupts(cpu); + /* 0xBFC37E88: 10000002 beq $zero, $zero, 0xBFC37E94 */ + uint32_t psx_brA_BFC37E88 = cpu->gpr[0]; uint32_t psx_brB_BFC37E88 = cpu->gpr[0]; + int psx_taken_BFC37E88 = (psx_brA_BFC37E88 == psx_brB_BFC37E88); + /* 0xBFC37E8C: 240203FF addiu $v0, $zero, 1023 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37E88) goto label_BFC37E94; +label_BFC37E90: + psx_check_interrupts(cpu); + /* 0xBFC37E90: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC37E94: + psx_check_interrupts(cpu); + /* 0xBFC37E94: 00022400 sll $a0, $v0, 16 */ + cpu->gpr[4] = cpu->gpr[2] << 16u; + /* 0xBFC37E98: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); +label_BFC37E9C: + psx_check_interrupts(cpu); + /* 0xBFC37E9C: 04A10005 bgez $a1, 0xBFC37EB4 */ + uint32_t psx_brA_BFC37E9C = cpu->gpr[5]; + int psx_taken_BFC37E9C = ((int32_t)psx_brA_BFC37E9C >= 0); + /* 0xBFC37EA0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC37E9C) goto label_BFC37EB4; +label_BFC37EA4: + psx_check_interrupts(cpu); + /* 0xBFC37EA4: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC37EA8: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC37EA8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC37EAC: 10000016 beq $zero, $zero, 0xBFC37F08 */ + uint32_t psx_brA_BFC37EAC = cpu->gpr[0]; uint32_t psx_brB_BFC37EAC = cpu->gpr[0]; + int psx_taken_BFC37EAC = (psx_brA_BFC37EAC == psx_brB_BFC37EAC); + /* 0xBFC37EB0: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37EAC) goto label_BFC37F08; +label_BFC37EB4: + psx_check_interrupts(cpu); + /* 0xBFC37EB4: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC37EB8: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC37EB8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC37EBC: 00000000 nop */ + /* nop */ + /* 0xBFC37EC0: 10400004 beq $v0, $zero, 0xBFC37ED4 */ + uint32_t psx_brA_BFC37EC0 = cpu->gpr[2]; uint32_t psx_brB_BFC37EC0 = cpu->gpr[0]; + int psx_taken_BFC37EC0 = (psx_brA_BFC37EC0 == psx_brB_BFC37EC0); + /* 0xBFC37EC4: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); + if (psx_taken_BFC37EC0) goto label_BFC37ED4; +label_BFC37EC8: + psx_check_interrupts(cpu); + /* 0xBFC37EC8: 10000002 beq $zero, $zero, 0xBFC37ED4 */ + uint32_t psx_brA_BFC37EC8 = cpu->gpr[0]; uint32_t psx_brB_BFC37EC8 = cpu->gpr[0]; + int psx_taken_BFC37EC8 = (psx_brA_BFC37EC8 == psx_brB_BFC37EC8); + /* 0xBFC37ECC: 240303FF addiu $v1, $zero, 1023 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37EC8) goto label_BFC37ED4; +label_BFC37ED0: + psx_check_interrupts(cpu); + /* 0xBFC37ED0: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); +label_BFC37ED4: + psx_check_interrupts(cpu); + /* 0xBFC37ED4: 0065082A slt $at, $v1, $a1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (int32_t)cpu->gpr[5] ? 1 : 0); + /* 0xBFC37ED8: 10200009 beq $at, $zero, 0xBFC37F00 */ + uint32_t psx_brA_BFC37ED8 = cpu->gpr[1]; uint32_t psx_brB_BFC37ED8 = cpu->gpr[0]; + int psx_taken_BFC37ED8 = (psx_brA_BFC37ED8 == psx_brB_BFC37ED8); + /* 0xBFC37EDC: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC37ED8) goto label_BFC37F00; +label_BFC37EE0: + psx_check_interrupts(cpu); + /* 0xBFC37EE0: 10400004 beq $v0, $zero, 0xBFC37EF4 */ + uint32_t psx_brA_BFC37EE0 = cpu->gpr[2]; uint32_t psx_brB_BFC37EE0 = cpu->gpr[0]; + int psx_taken_BFC37EE0 = (psx_brA_BFC37EE0 == psx_brB_BFC37EE0); + /* 0xBFC37EE4: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); + if (psx_taken_BFC37EE0) goto label_BFC37EF4; +label_BFC37EE8: + psx_check_interrupts(cpu); + /* 0xBFC37EE8: 10000002 beq $zero, $zero, 0xBFC37EF4 */ + uint32_t psx_brA_BFC37EE8 = cpu->gpr[0]; uint32_t psx_brB_BFC37EE8 = cpu->gpr[0]; + int psx_taken_BFC37EE8 = (psx_brA_BFC37EE8 == psx_brB_BFC37EE8); + /* 0xBFC37EEC: 240303FF addiu $v1, $zero, 1023 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37EE8) goto label_BFC37EF4; +label_BFC37EF0: + psx_check_interrupts(cpu); + /* 0xBFC37EF0: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); +label_BFC37EF4: + psx_check_interrupts(cpu); + /* 0xBFC37EF4: 10000002 beq $zero, $zero, 0xBFC37F00 */ + uint32_t psx_brA_BFC37EF4 = cpu->gpr[0]; uint32_t psx_brB_BFC37EF4 = cpu->gpr[0]; + int psx_taken_BFC37EF4 = (psx_brA_BFC37EF4 == psx_brB_BFC37EF4); + /* 0xBFC37EF8: 00603021 addu $a2, $v1, $zero */ + cpu->gpr[6] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC37EF4) goto label_BFC37F00; +label_BFC37EFC: + psx_check_interrupts(cpu); + /* 0xBFC37EFC: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; +label_BFC37F00: + psx_check_interrupts(cpu); + /* 0xBFC37F00: 00062C00 sll $a1, $a2, 16 */ + cpu->gpr[5] = cpu->gpr[6] << 16u; + /* 0xBFC37F04: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); +label_BFC37F08: + psx_check_interrupts(cpu); + /* 0xBFC37F08: 10400009 beq $v0, $zero, 0xBFC37F30 */ + uint32_t psx_brA_BFC37F08 = cpu->gpr[2]; uint32_t psx_brB_BFC37F08 = cpu->gpr[0]; + int psx_taken_BFC37F08 = (psx_brA_BFC37F08 == psx_brB_BFC37F08); + /* 0xBFC37F0C: 30A803FF andi $t0, $a1, 0x3FF */ + cpu->gpr[8] = cpu->gpr[5] & 0x3FFu; + if (psx_taken_BFC37F08) goto label_BFC37F30; +label_BFC37F10: + psx_check_interrupts(cpu); + /* 0xBFC37F10: 30AE0FFF andi $t6, $a1, 0xFFF */ + cpu->gpr[14] = cpu->gpr[5] & 0xFFFu; + /* 0xBFC37F14: 000E7B00 sll $t7, $t6, 12 */ + cpu->gpr[15] = cpu->gpr[14] << 12u; + /* 0xBFC37F18: 3C01E300 lui $at, 0xE300 */ + cpu->gpr[1] = 0xE3000000u; + /* 0xBFC37F1C: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC37F20: 30990FFF andi $t9, $a0, 0xFFF */ + cpu->gpr[25] = cpu->gpr[4] & 0xFFFu; + /* 0xBFC37F24: 03E00008 jr $ra */ + /* 0xBFC37F28: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + return; +label_BFC37F30: + psx_check_interrupts(cpu); + /* 0xBFC37F30: 00084A80 sll $t1, $t0, 10 */ + cpu->gpr[9] = cpu->gpr[8] << 10u; + /* 0xBFC37F34: 3C01E300 lui $at, 0xE300 */ + cpu->gpr[1] = 0xE3000000u; + /* 0xBFC37F38: 01215025 or $t2, $t1, $at */ + cpu->gpr[10] = cpu->gpr[9] | cpu->gpr[1]; + /* 0xBFC37F3C: 308B03FF andi $t3, $a0, 0x3FF */ + cpu->gpr[11] = cpu->gpr[4] & 0x3FFu; + /* 0xBFC37F40: 014B1025 or $v0, $t2, $t3 */ + cpu->gpr[2] = cpu->gpr[10] | cpu->gpr[11]; + /* 0xBFC37F44: 03E00008 jr $ra */ + /* 0xBFC37F48: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC37F4C(CPUState* cpu) { +label_BFC37F4C: + psx_check_interrupts(cpu); + /* 0xBFC37F4C: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC37F50: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC37F54: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC37F58: 04810003 bgez $a0, 0xBFC37F68 */ + uint32_t psx_brA_BFC37F58 = cpu->gpr[4]; + int psx_taken_BFC37F58 = ((int32_t)psx_brA_BFC37F58 >= 0); + /* 0xBFC37F5C: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC37F58) goto label_BFC37F68; +label_BFC37F60: + psx_check_interrupts(cpu); + /* 0xBFC37F60: 10000009 beq $zero, $zero, 0xBFC37F88 */ + uint32_t psx_brA_BFC37F60 = cpu->gpr[0]; uint32_t psx_brB_BFC37F60 = cpu->gpr[0]; + int psx_taken_BFC37F60 = (psx_brA_BFC37F60 == psx_brB_BFC37F60); + /* 0xBFC37F64: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37F60) goto label_BFC37F88; +label_BFC37F68: + psx_check_interrupts(cpu); + /* 0xBFC37F68: 28810400 slti $at, $a0, 1024 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); + /* 0xBFC37F6C: 14200004 bne $at, $zero, 0xBFC37F80 */ + uint32_t psx_brA_BFC37F6C = cpu->gpr[1]; uint32_t psx_brB_BFC37F6C = cpu->gpr[0]; + int psx_taken_BFC37F6C = (psx_brA_BFC37F6C != psx_brB_BFC37F6C); + /* 0xBFC37F70: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC37F6C) goto label_BFC37F80; +label_BFC37F74: + psx_check_interrupts(cpu); + /* 0xBFC37F74: 10000002 beq $zero, $zero, 0xBFC37F80 */ + uint32_t psx_brA_BFC37F74 = cpu->gpr[0]; uint32_t psx_brB_BFC37F74 = cpu->gpr[0]; + int psx_taken_BFC37F74 = (psx_brA_BFC37F74 == psx_brB_BFC37F74); + /* 0xBFC37F78: 240203FF addiu $v0, $zero, 1023 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37F74) goto label_BFC37F80; +label_BFC37F7C: + psx_check_interrupts(cpu); + /* 0xBFC37F7C: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC37F80: + psx_check_interrupts(cpu); + /* 0xBFC37F80: 00022400 sll $a0, $v0, 16 */ + cpu->gpr[4] = cpu->gpr[2] << 16u; + /* 0xBFC37F84: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); +label_BFC37F88: + psx_check_interrupts(cpu); + /* 0xBFC37F88: 04A10005 bgez $a1, 0xBFC37FA0 */ + uint32_t psx_brA_BFC37F88 = cpu->gpr[5]; + int psx_taken_BFC37F88 = ((int32_t)psx_brA_BFC37F88 >= 0); + /* 0xBFC37F8C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC37F88) goto label_BFC37FA0; +label_BFC37F90: + psx_check_interrupts(cpu); + /* 0xBFC37F90: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC37F94: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC37F94u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC37F98: 10000016 beq $zero, $zero, 0xBFC37FF4 */ + uint32_t psx_brA_BFC37F98 = cpu->gpr[0]; uint32_t psx_brB_BFC37F98 = cpu->gpr[0]; + int psx_taken_BFC37F98 = (psx_brA_BFC37F98 == psx_brB_BFC37F98); + /* 0xBFC37F9C: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC37F98) goto label_BFC37FF4; +label_BFC37FA0: + psx_check_interrupts(cpu); + /* 0xBFC37FA0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC37FA4: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC37FA4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC37FA8: 00000000 nop */ + /* nop */ + /* 0xBFC37FAC: 10400004 beq $v0, $zero, 0xBFC37FC0 */ + uint32_t psx_brA_BFC37FAC = cpu->gpr[2]; uint32_t psx_brB_BFC37FAC = cpu->gpr[0]; + int psx_taken_BFC37FAC = (psx_brA_BFC37FAC == psx_brB_BFC37FAC); + /* 0xBFC37FB0: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); + if (psx_taken_BFC37FAC) goto label_BFC37FC0; +label_BFC37FB4: + psx_check_interrupts(cpu); + /* 0xBFC37FB4: 10000002 beq $zero, $zero, 0xBFC37FC0 */ + uint32_t psx_brA_BFC37FB4 = cpu->gpr[0]; uint32_t psx_brB_BFC37FB4 = cpu->gpr[0]; + int psx_taken_BFC37FB4 = (psx_brA_BFC37FB4 == psx_brB_BFC37FB4); + /* 0xBFC37FB8: 240303FF addiu $v1, $zero, 1023 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37FB4) goto label_BFC37FC0; +label_BFC37FBC: + psx_check_interrupts(cpu); + /* 0xBFC37FBC: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); +label_BFC37FC0: + psx_check_interrupts(cpu); + /* 0xBFC37FC0: 0065082A slt $at, $v1, $a1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (int32_t)cpu->gpr[5] ? 1 : 0); + /* 0xBFC37FC4: 10200009 beq $at, $zero, 0xBFC37FEC */ + uint32_t psx_brA_BFC37FC4 = cpu->gpr[1]; uint32_t psx_brB_BFC37FC4 = cpu->gpr[0]; + int psx_taken_BFC37FC4 = (psx_brA_BFC37FC4 == psx_brB_BFC37FC4); + /* 0xBFC37FC8: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC37FC4) goto label_BFC37FEC; +label_BFC37FCC: + psx_check_interrupts(cpu); + /* 0xBFC37FCC: 10400004 beq $v0, $zero, 0xBFC37FE0 */ + uint32_t psx_brA_BFC37FCC = cpu->gpr[2]; uint32_t psx_brB_BFC37FCC = cpu->gpr[0]; + int psx_taken_BFC37FCC = (psx_brA_BFC37FCC == psx_brB_BFC37FCC); + /* 0xBFC37FD0: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); + if (psx_taken_BFC37FCC) goto label_BFC37FE0; +label_BFC37FD4: + psx_check_interrupts(cpu); + /* 0xBFC37FD4: 10000002 beq $zero, $zero, 0xBFC37FE0 */ + uint32_t psx_brA_BFC37FD4 = cpu->gpr[0]; uint32_t psx_brB_BFC37FD4 = cpu->gpr[0]; + int psx_taken_BFC37FD4 = (psx_brA_BFC37FD4 == psx_brB_BFC37FD4); + /* 0xBFC37FD8: 240303FF addiu $v1, $zero, 1023 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1023)); + if (psx_taken_BFC37FD4) goto label_BFC37FE0; +label_BFC37FDC: + psx_check_interrupts(cpu); + /* 0xBFC37FDC: 240301FF addiu $v1, $zero, 511 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (511)); +label_BFC37FE0: + psx_check_interrupts(cpu); + /* 0xBFC37FE0: 10000002 beq $zero, $zero, 0xBFC37FEC */ + uint32_t psx_brA_BFC37FE0 = cpu->gpr[0]; uint32_t psx_brB_BFC37FE0 = cpu->gpr[0]; + int psx_taken_BFC37FE0 = (psx_brA_BFC37FE0 == psx_brB_BFC37FE0); + /* 0xBFC37FE4: 00603021 addu $a2, $v1, $zero */ + cpu->gpr[6] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC37FE0) goto label_BFC37FEC; +label_BFC37FE8: + psx_check_interrupts(cpu); + /* 0xBFC37FE8: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; +label_BFC37FEC: + psx_check_interrupts(cpu); + /* 0xBFC37FEC: 00062C00 sll $a1, $a2, 16 */ + cpu->gpr[5] = cpu->gpr[6] << 16u; + /* 0xBFC37FF0: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); +label_BFC37FF4: + psx_check_interrupts(cpu); + /* 0xBFC37FF4: 10400009 beq $v0, $zero, 0xBFC3801C */ + uint32_t psx_brA_BFC37FF4 = cpu->gpr[2]; uint32_t psx_brB_BFC37FF4 = cpu->gpr[0]; + int psx_taken_BFC37FF4 = (psx_brA_BFC37FF4 == psx_brB_BFC37FF4); + /* 0xBFC37FF8: 30A801FF andi $t0, $a1, 0x1FF */ + cpu->gpr[8] = cpu->gpr[5] & 0x1FFu; + if (psx_taken_BFC37FF4) goto label_BFC3801C; +label_BFC37FFC: + psx_check_interrupts(cpu); + /* 0xBFC37FFC: 30AE0FFF andi $t6, $a1, 0xFFF */ + cpu->gpr[14] = cpu->gpr[5] & 0xFFFu; + /* 0xBFC38000: 000E7B00 sll $t7, $t6, 12 */ + cpu->gpr[15] = cpu->gpr[14] << 12u; + /* 0xBFC38004: 3C01E400 lui $at, 0xE400 */ + cpu->gpr[1] = 0xE4000000u; + /* 0xBFC38008: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC3800C: 30990FFF andi $t9, $a0, 0xFFF */ + cpu->gpr[25] = cpu->gpr[4] & 0xFFFu; + /* 0xBFC38010: 03E00008 jr $ra */ + /* 0xBFC38014: 03191025 or $v0, $t8, $t9 */ + cpu->gpr[2] = cpu->gpr[24] | cpu->gpr[25]; + return; +label_BFC3801C: + psx_check_interrupts(cpu); + /* 0xBFC3801C: 00084A80 sll $t1, $t0, 10 */ + cpu->gpr[9] = cpu->gpr[8] << 10u; + /* 0xBFC38020: 3C01E400 lui $at, 0xE400 */ + cpu->gpr[1] = 0xE4000000u; + /* 0xBFC38024: 01215025 or $t2, $t1, $at */ + cpu->gpr[10] = cpu->gpr[9] | cpu->gpr[1]; + /* 0xBFC38028: 308B03FF andi $t3, $a0, 0x3FF */ + cpu->gpr[11] = cpu->gpr[4] & 0x3FFu; + /* 0xBFC3802C: 014B1025 or $v0, $t2, $t3 */ + cpu->gpr[2] = cpu->gpr[10] | cpu->gpr[11]; + /* 0xBFC38030: 03E00008 jr $ra */ + /* 0xBFC38034: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC38038(CPUState* cpu) { +label_BFC38038: + psx_check_interrupts(cpu); + /* 0xBFC38038: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3803C: 8DCE9254 lw $t6, -28076($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3803Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC38040: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC38044: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC38048: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC3804C: 11C00008 beq $t6, $zero, 0xBFC38070 */ + uint32_t psx_brA_BFC3804C = cpu->gpr[14]; uint32_t psx_brB_BFC3804C = cpu->gpr[0]; + int psx_taken_BFC3804C = (psx_brA_BFC3804C == psx_brB_BFC3804C); + /* 0xBFC38050: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + if (psx_taken_BFC3804C) goto label_BFC38070; +label_BFC38054: + psx_check_interrupts(cpu); + /* 0xBFC38054: 30AF0FFF andi $t7, $a1, 0xFFF */ + cpu->gpr[15] = cpu->gpr[5] & 0xFFFu; + /* 0xBFC38058: 000FC300 sll $t8, $t7, 12 */ + cpu->gpr[24] = cpu->gpr[15] << 12u; + /* 0xBFC3805C: 3C01E500 lui $at, 0xE500 */ + cpu->gpr[1] = 0xE5000000u; + /* 0xBFC38060: 0301C825 or $t9, $t8, $at */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[1]; + /* 0xBFC38064: 30880FFF andi $t0, $a0, 0xFFF */ + cpu->gpr[8] = cpu->gpr[4] & 0xFFFu; + /* 0xBFC38068: 03E00008 jr $ra */ + /* 0xBFC3806C: 03281025 or $v0, $t9, $t0 */ + cpu->gpr[2] = cpu->gpr[25] | cpu->gpr[8]; + return; +label_BFC38070: + psx_check_interrupts(cpu); + /* 0xBFC38070: 30A907FF andi $t1, $a1, 0x7FF */ + cpu->gpr[9] = cpu->gpr[5] & 0x7FFu; + /* 0xBFC38074: 000952C0 sll $t2, $t1, 11 */ + cpu->gpr[10] = cpu->gpr[9] << 11u; + /* 0xBFC38078: 3C01E500 lui $at, 0xE500 */ + cpu->gpr[1] = 0xE5000000u; + /* 0xBFC3807C: 01415825 or $t3, $t2, $at */ + cpu->gpr[11] = cpu->gpr[10] | cpu->gpr[1]; + /* 0xBFC38080: 308C07FF andi $t4, $a0, 0x7FF */ + cpu->gpr[12] = cpu->gpr[4] & 0x7FFu; + /* 0xBFC38084: 016C1025 or $v0, $t3, $t4 */ + cpu->gpr[2] = cpu->gpr[11] | cpu->gpr[12]; + /* 0xBFC38088: 03E00008 jr $ra */ + /* 0xBFC3808C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC38090(CPUState* cpu) { +label_BFC38090: + psx_check_interrupts(cpu); + /* 0xBFC38090: 1080001B beq $a0, $zero, 0xBFC38100 */ + uint32_t psx_brA_BFC38090 = cpu->gpr[4]; uint32_t psx_brB_BFC38090 = cpu->gpr[0]; + int psx_taken_BFC38090 = (psx_brA_BFC38090 == psx_brB_BFC38090); + /* 0xBFC38094: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC38090) goto label_BFC38100; +label_BFC38098: + psx_check_interrupts(cpu); + /* 0xBFC38098: 84860002 lh $a2, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38098u); return; } cpu->gpr[6] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3809C: 84870006 lh $a3, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3809Cu); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC380A0: 84830000 lh $v1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC380A0u); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC380A4: 84850004 lh $a1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC380A4u); return; } cpu->gpr[5] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC380A8: 30C600FF andi $a2, $a2, 0xFF */ + cpu->gpr[6] = cpu->gpr[6] & 0xFFu; + /* 0xBFC380AC: 24E7FFFF addiu $a3, $a3, -1 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (-1)); + /* 0xBFC380B0: 000630C3 sra $a2, $a2, 3 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 3u); + /* 0xBFC380B4: 00E03827 nor $a3, $a3, $zero */ + cpu->gpr[7] = ~(cpu->gpr[7] | cpu->gpr[0]); + /* 0xBFC380B8: 306300FF andi $v1, $v1, 0xFF */ + cpu->gpr[3] = cpu->gpr[3] & 0xFFu; + /* 0xBFC380BC: 000318C3 sra $v1, $v1, 3 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 3u); + /* 0xBFC380C0: 30E700FF andi $a3, $a3, 0xFF */ + cpu->gpr[7] = cpu->gpr[7] & 0xFFu; + /* 0xBFC380C4: 000673C0 sll $t6, $a2, 15 */ + cpu->gpr[14] = cpu->gpr[6] << 15u; + /* 0xBFC380C8: 3C01E200 lui $at, 0xE200 */ + cpu->gpr[1] = 0xE2000000u; + /* 0xBFC380CC: 24A5FFFF addiu $a1, $a1, -1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-1)); + /* 0xBFC380D0: 00A02827 nor $a1, $a1, $zero */ + cpu->gpr[5] = ~(cpu->gpr[5] | cpu->gpr[0]); + /* 0xBFC380D4: 000738C3 sra $a3, $a3, 3 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 3u); + /* 0xBFC380D8: 01C17825 or $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[1]; + /* 0xBFC380DC: 0003C280 sll $t8, $v1, 10 */ + cpu->gpr[24] = cpu->gpr[3] << 10u; + /* 0xBFC380E0: 30A500FF andi $a1, $a1, 0xFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFu; + /* 0xBFC380E4: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC380E8: 00074140 sll $t0, $a3, 5 */ + cpu->gpr[8] = cpu->gpr[7] << 5u; + /* 0xBFC380EC: 000528C3 sra $a1, $a1, 3 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 3u); + /* 0xBFC380F0: 03284825 or $t1, $t9, $t0 */ + cpu->gpr[9] = cpu->gpr[25] | cpu->gpr[8]; + /* 0xBFC380F4: 03E00008 jr $ra */ + /* 0xBFC380F8: 01251025 or $v0, $t1, $a1 */ + cpu->gpr[2] = cpu->gpr[9] | cpu->gpr[5]; + return; +label_BFC38100: + psx_check_interrupts(cpu); + /* 0xBFC38100: 03E00008 jr $ra */ + /* 0xBFC38104: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC38108(CPUState* cpu) { +label_BFC38108: + psx_check_interrupts(cpu); + /* 0xBFC38108: 1000002D beq $zero, $zero, 0xBFC381C0 */ + uint32_t psx_brA_BFC38108 = cpu->gpr[0]; uint32_t psx_brB_BFC38108 = cpu->gpr[0]; + int psx_taken_BFC38108 = (psx_brA_BFC38108 == psx_brB_BFC38108); + /* 0xBFC3810C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC38108) goto label_BFC381C0; +label_BFC38110: + psx_check_interrupts(cpu); + /* 0xBFC38110: 84820000 lh $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, 0xBFC38110u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC38114: 03E00008 jr $ra */ + /* 0xBFC38118: 00000000 nop */ + /* nop */ + return; +label_BFC3811C: + psx_check_interrupts(cpu); + /* 0xBFC3811C: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC38120: 8DCE9258 lw $t6, -28072($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-28072)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38120u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC38124: 00000000 nop */ + /* nop */ + /* 0xBFC38128: 11C00007 beq $t6, $zero, 0xBFC38148 */ + uint32_t psx_brA_BFC38128 = cpu->gpr[14]; uint32_t psx_brB_BFC38128 = cpu->gpr[0]; + int psx_taken_BFC38128 = (psx_brA_BFC38128 == psx_brB_BFC38128); + /* 0xBFC3812C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC38128) goto label_BFC38148; +label_BFC38130: + psx_check_interrupts(cpu); + /* 0xBFC38130: 848F0000 lh $t7, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38130u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC38134: 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, 0xBFC38134u); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC38138: 000FC023 subu $t8, $zero, $t7 */ + cpu->gpr[24] = cpu->gpr[0] - cpu->gpr[15]; + /* 0xBFC3813C: 03191823 subu $v1, $t8, $t9 */ + cpu->gpr[3] = cpu->gpr[24] - cpu->gpr[25]; + /* 0xBFC38140: 10000003 beq $zero, $zero, 0xBFC38150 */ + uint32_t psx_brA_BFC38140 = cpu->gpr[0]; uint32_t psx_brB_BFC38140 = cpu->gpr[0]; + int psx_taken_BFC38140 = (psx_brA_BFC38140 == psx_brB_BFC38140); + /* 0xBFC38144: 24630400 addiu $v1, $v1, 1024 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1024)); + if (psx_taken_BFC38140) goto label_BFC38150; +label_BFC38148: + psx_check_interrupts(cpu); + /* 0xBFC38148: 84830000 lh $v1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38148u); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3814C: 00000000 nop */ + /* nop */ +label_BFC38150: + psx_check_interrupts(cpu); + /* 0xBFC38150: 03E00008 jr $ra */ + /* 0xBFC38154: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +label_BFC38158: + psx_check_interrupts(cpu); + /* 0xBFC38158: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC3815C: 8D089258 lw $t0, -28072($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-28072)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3815Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC38160: 00000000 nop */ + /* nop */ + /* 0xBFC38164: 1100000D beq $t0, $zero, 0xBFC3819C */ + uint32_t psx_brA_BFC38164 = cpu->gpr[8]; uint32_t psx_brB_BFC38164 = cpu->gpr[0]; + int psx_taken_BFC38164 = (psx_brA_BFC38164 == psx_brB_BFC38164); + /* 0xBFC38168: 00000000 nop */ + /* nop */ + if (psx_taken_BFC38164) goto label_BFC3819C; +label_BFC3816C: + psx_check_interrupts(cpu); + /* 0xBFC3816C: 848B0004 lh $t3, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3816Cu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC38170: 84890000 lh $t1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38170u); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC38174: 00000000 nop */ + /* nop */ + /* 0xBFC38178: 00095023 subu $t2, $zero, $t1 */ + cpu->gpr[10] = cpu->gpr[0] - cpu->gpr[9]; + /* 0xBFC3817C: 00000000 nop */ + /* nop */ + /* 0xBFC38180: 05610002 bgez $t3, 0xBFC3818C */ + uint32_t psx_brA_BFC38180 = cpu->gpr[11]; + int psx_taken_BFC38180 = ((int32_t)psx_brA_BFC38180 >= 0); + /* 0xBFC38184: 01600821 addu $at, $t3, $zero */ + cpu->gpr[1] = cpu->gpr[11] + cpu->gpr[0]; + if (psx_taken_BFC38180) goto label_BFC3818C; +label_BFC38188: + psx_check_interrupts(cpu); + /* 0xBFC38188: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC3818C: + psx_check_interrupts(cpu); + /* 0xBFC3818C: 00016043 sra $t4, $at, 1 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC38190: 014C1823 subu $v1, $t2, $t4 */ + cpu->gpr[3] = cpu->gpr[10] - cpu->gpr[12]; + /* 0xBFC38194: 10000008 beq $zero, $zero, 0xBFC381B8 */ + uint32_t psx_brA_BFC38194 = cpu->gpr[0]; uint32_t psx_brB_BFC38194 = cpu->gpr[0]; + int psx_taken_BFC38194 = (psx_brA_BFC38194 == psx_brB_BFC38194); + /* 0xBFC38198: 24630400 addiu $v1, $v1, 1024 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1024)); + if (psx_taken_BFC38194) goto label_BFC381B8; +label_BFC3819C: + psx_check_interrupts(cpu); + /* 0xBFC3819C: 84830000 lh $v1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3819Cu); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC381A0: 00000000 nop */ + /* nop */ + /* 0xBFC381A4: 00000000 nop */ + /* nop */ + /* 0xBFC381A8: 04610002 bgez $v1, 0xBFC381B4 */ + uint32_t psx_brA_BFC381A8 = cpu->gpr[3]; + int psx_taken_BFC381A8 = ((int32_t)psx_brA_BFC381A8 >= 0); + /* 0xBFC381AC: 00600821 addu $at, $v1, $zero */ + cpu->gpr[1] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC381A8) goto label_BFC381B4; +label_BFC381B0: + psx_check_interrupts(cpu); + /* 0xBFC381B0: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC381B4: + psx_check_interrupts(cpu); + /* 0xBFC381B4: 00011843 sra $v1, $at, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); +label_BFC381B8: + psx_check_interrupts(cpu); + /* 0xBFC381B8: 03E00008 jr $ra */ + /* 0xBFC381BC: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +label_BFC381C0: + psx_check_interrupts(cpu); + /* 0xBFC381C0: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC381C4: 8C429254 lw $v0, -28076($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-28076)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC381C4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC381C8: 00000000 nop */ + /* nop */ + /* 0xBFC381CC: 1040FFD0 beq $v0, $zero, 0xBFC38110 */ + uint32_t psx_brA_BFC381CC = cpu->gpr[2]; uint32_t psx_brB_BFC381CC = cpu->gpr[0]; + int psx_taken_BFC381CC = (psx_brA_BFC381CC == psx_brB_BFC381CC); + /* 0xBFC381D0: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC381CC) goto label_BFC38110; +label_BFC381D4: + psx_check_interrupts(cpu); + /* 0xBFC381D4: 1041FFD1 beq $v0, $at, 0xBFC3811C */ + uint32_t psx_brA_BFC381D4 = cpu->gpr[2]; uint32_t psx_brB_BFC381D4 = cpu->gpr[1]; + int psx_taken_BFC381D4 = (psx_brA_BFC381D4 == psx_brB_BFC381D4); + /* 0xBFC381D8: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + if (psx_taken_BFC381D4) goto label_BFC3811C; +label_BFC381DC: + psx_check_interrupts(cpu); + /* 0xBFC381DC: 1041FFDE beq $v0, $at, 0xBFC38158 */ + uint32_t psx_brA_BFC381DC = cpu->gpr[2]; uint32_t psx_brB_BFC381DC = cpu->gpr[1]; + int psx_taken_BFC381DC = (psx_brA_BFC381DC == psx_brB_BFC381DC); + /* 0xBFC381E0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC381DC) goto label_BFC38158; +label_BFC381E4: + psx_check_interrupts(cpu); + /* 0xBFC381E4: 03E00008 jr $ra */ + /* 0xBFC381E8: 00000000 nop */ + /* nop */ + return; +} + void func_1FC38204(CPUState* cpu) { label_BFC38204: psx_check_interrupts(cpu); @@ -110874,6 +126655,132 @@ label_BFC38A94: return; } +void func_1FC38AA4(CPUState* cpu) { +label_BFC38AA4: + psx_check_interrupts(cpu); + /* 0xBFC38AA4: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC38AA8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC38AAC: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC38AB0: 8DCE92A4 lw $t6, -27996($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38AB0u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC38AB4: 00817824 and $t7, $a0, $at */ + cpu->gpr[15] = cpu->gpr[4] & cpu->gpr[1]; + /* 0xBFC38AB8: 0004C602 srl $t8, $a0, 24 */ + cpu->gpr[24] = cpu->gpr[4] >> 24u; + /* 0xBFC38ABC: 0018C880 sll $t9, $t8, 2 */ + cpu->gpr[25] = cpu->gpr[24] << 2u; + /* 0xBFC38AC0: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC38AC4: 00390821 addu $at, $at, $t9 */ + cpu->gpr[1] = cpu->gpr[1] + cpu->gpr[25]; + /* 0xBFC38AC8: ADC40000 sw $a0, 0($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38AC8u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC38ACC: 03E00008 jr $ra */ + /* 0xBFC38AD0: AC2FE9D8 sw $t7, -5672($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-5672)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38AD0u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + return; +} + +void func_1FC38AD4(CPUState* cpu) { +label_BFC38AD4: + psx_check_interrupts(cpu); + /* 0xBFC38AD4: 00047080 sll $t6, $a0, 2 */ + cpu->gpr[14] = cpu->gpr[4] << 2u; + /* 0xBFC38AD8: 3C0F800E lui $t7, 0x800E */ + cpu->gpr[15] = 0x800E0000u; + /* 0xBFC38ADC: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC38AE0: 8DEFE9D8 lw $t7, -5672($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-5672)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38AE0u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC38AE4: 0004C600 sll $t8, $a0, 24 */ + cpu->gpr[24] = cpu->gpr[4] << 24u; + /* 0xBFC38AE8: 03E00008 jr $ra */ + /* 0xBFC38AEC: 01F81025 or $v0, $t7, $t8 */ + cpu->gpr[2] = cpu->gpr[15] | cpu->gpr[24]; + return; +} + +void func_1FC38B28(CPUState* cpu) { +label_BFC38B28: + psx_check_interrupts(cpu); + /* 0xBFC38B28: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC38B2C: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC38B30: 8C4292C0 lw $v0, -27968($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-27968)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B30u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC38B34: 8DEF92A4 lw $t7, -27996($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B34u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC38B38: 3C0E0400 lui $t6, 0x400 */ + cpu->gpr[14] = 0x04000000u; + /* 0xBFC38B3C: 35CE0002 ori $t6, $t6, 0x2 */ + cpu->gpr[14] = cpu->gpr[14] | 0x2u; + /* 0xBFC38B40: ADEE0000 sw $t6, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B40u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC38B44: 8C580000 lw $t8, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B44u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC38B48: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC38B4C: 37190800 ori $t9, $t8, 0x800 */ + cpu->gpr[25] = cpu->gpr[24] | 0x800u; + /* 0xBFC38B50: AC590000 sw $t9, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B50u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC38B54: 8D0892A8 lw $t0, -27992($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-27992)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B54u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC38B58: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC38B5C: AD040000 sw $a0, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B5Cu); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC38B60: 8D2992AC lw $t1, -27988($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-27988)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B60u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC38B64: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC38B68: AD200000 sw $zero, 0($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B68u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC38B6C: 8D6B92B0 lw $t3, -27984($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-27984)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B6Cu); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC38B70: 3C0A0100 lui $t2, 0x100 */ + cpu->gpr[10] = 0x01000000u; + /* 0xBFC38B74: 354A0401 ori $t2, $t2, 0x401 */ + cpu->gpr[10] = cpu->gpr[10] | 0x401u; + /* 0xBFC38B78: 03E00008 jr $ra */ + /* 0xBFC38B7C: AD6A0000 sw $t2, 0($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + return; +} + +void func_1FC38B80(CPUState* cpu) { +label_BFC38B80: + psx_check_interrupts(cpu); + /* 0xBFC38B80: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC38B84: 8DEF92A4 lw $t7, -27996($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B84u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC38B88: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + /* 0xBFC38B8C: 00817025 or $t6, $a0, $at */ + cpu->gpr[14] = cpu->gpr[4] | cpu->gpr[1]; + /* 0xBFC38B90: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC38B94: ADEE0000 sw $t6, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B94u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC38B98: 8F1892A0 lw $t8, -28000($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-28000)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38B98u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC38B9C: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC38BA0: 8F020000 lw $v0, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38BA0u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC38BA4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC38BA8: 03E00008 jr $ra */ + /* 0xBFC38BAC: 00411024 and $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] & cpu->gpr[1]; + return; +} + void func_1FC38BE8(CPUState* cpu) { label_BFC38BE8: psx_check_interrupts(cpu); @@ -111458,6 +127365,165 @@ label_BFC38F7C: return; } +void func_1FC38F8C(CPUState* cpu) { +label_BFC38F8C: + psx_check_interrupts(cpu); + /* 0xBFC38F8C: 10000022 beq $zero, $zero, 0xBFC39018 */ + uint32_t psx_brA_BFC38F8C = cpu->gpr[0]; uint32_t psx_brB_BFC38F8C = cpu->gpr[0]; + int psx_taken_BFC38F8C = (psx_brA_BFC38F8C == psx_brB_BFC38F8C); + /* 0xBFC38F90: 00000000 nop */ + /* nop */ + if (psx_taken_BFC38F8C) goto label_BFC39018; +label_BFC38F94: + psx_check_interrupts(cpu); + /* 0xBFC38F94: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC38F98: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC38F9C: 8C4292A4 lw $v0, -27996($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38F9Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC38FA0: 8DEF92B0 lw $t7, -27984($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27984)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FA0u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC38FA4: 240E0401 addiu $t6, $zero, 1025 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1025)); + /* 0xBFC38FA8: ADEE0000 sw $t6, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FA8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC38FAC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC38FB0: AC400000 sw $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FB0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC38FB4: AC20929C sw $zero, -28004($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FB4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC38FB8: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC38FBC: 8F18929C lw $t8, -28004($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-28004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FBCu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC38FC0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC38FC4: 1000001B beq $zero, $zero, 0xBFC39034 */ + uint32_t psx_brA_BFC38FC4 = cpu->gpr[0]; uint32_t psx_brB_BFC38FC4 = cpu->gpr[0]; + int psx_taken_BFC38FC4 = (psx_brA_BFC38FC4 == psx_brB_BFC38FC4); + /* 0xBFC38FC8: AC389298 sw $t8, -28008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FC8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + if (psx_taken_BFC38FC4) goto label_BFC39034; +label_BFC38FCC: + psx_check_interrupts(cpu); + /* 0xBFC38FCC: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC38FD0: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC38FD4: 8C4292A4 lw $v0, -27996($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FD4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC38FD8: 8D0892B0 lw $t0, -27984($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-27984)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FD8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC38FDC: 24190401 addiu $t9, $zero, 1025 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (1025)); + /* 0xBFC38FE0: 3C090400 lui $t1, 0x400 */ + cpu->gpr[9] = 0x04000000u; + /* 0xBFC38FE4: AD190000 sw $t9, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FE4u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC38FE8: 3C0A0200 lui $t2, 0x200 */ + cpu->gpr[10] = 0x02000000u; + /* 0xBFC38FEC: AC490000 sw $t1, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FECu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC38FF0: 3C0B0100 lui $t3, 0x100 */ + cpu->gpr[11] = 0x01000000u; + /* 0xBFC38FF4: AC4A0000 sw $t2, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FF4u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC38FF8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC38FFC: AC4B0000 sw $t3, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC38FFCu); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC39000: AC20929C sw $zero, -28004($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39000u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC39004: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC39008: 8D8C929C lw $t4, -28004($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-28004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39008u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC3900C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC39010: 10000008 beq $zero, $zero, 0xBFC39034 */ + uint32_t psx_brA_BFC39010 = cpu->gpr[0]; uint32_t psx_brB_BFC39010 = cpu->gpr[0]; + int psx_taken_BFC39010 = (psx_brA_BFC39010 == psx_brB_BFC39010); + /* 0xBFC39014: AC2C9298 sw $t4, -28008($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39014u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + if (psx_taken_BFC39010) goto label_BFC39034; +label_BFC39018: + psx_check_interrupts(cpu); + /* 0xBFC39018: 1080FFDE beq $a0, $zero, 0xBFC38F94 */ + uint32_t psx_brA_BFC39018 = cpu->gpr[4]; uint32_t psx_brB_BFC39018 = cpu->gpr[0]; + int psx_taken_BFC39018 = (psx_brA_BFC39018 == psx_brB_BFC39018); + /* 0xBFC3901C: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC39018) goto label_BFC38F94; +label_BFC39020: + psx_check_interrupts(cpu); + /* 0xBFC39020: 1081FFEA beq $a0, $at, 0xBFC38FCC */ + uint32_t psx_brA_BFC39020 = cpu->gpr[4]; uint32_t psx_brB_BFC39020 = cpu->gpr[1]; + int psx_taken_BFC39020 = (psx_brA_BFC39020 == psx_brB_BFC39020); + /* 0xBFC39024: 00000000 nop */ + /* nop */ + if (psx_taken_BFC39020) goto label_BFC38FCC; +label_BFC39028: + psx_check_interrupts(cpu); + /* 0xBFC39028: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC3902C: 8C4292A4 lw $v0, -27996($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3902Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC39030: 00000000 nop */ + /* nop */ +label_BFC39034: + psx_check_interrupts(cpu); + /* 0xBFC39034: 8C4D0000 lw $t5, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39034u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC39038: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC3903C: 3C01E100 lui $at, 0xE100 */ + cpu->gpr[1] = 0xE1000000u; + /* 0xBFC39040: 8C6392A0 lw $v1, -28000($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-28000)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39040u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC39044: 34211000 ori $at, $at, 0x1000 */ + cpu->gpr[1] = cpu->gpr[1] | 0x1000u; + /* 0xBFC39048: 31AE3FFF andi $t6, $t5, 0x3FFF */ + cpu->gpr[14] = cpu->gpr[13] & 0x3FFFu; + /* 0xBFC3904C: 01C17825 or $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[1]; + /* 0xBFC39050: AC6F0000 sw $t7, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39050u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC39054: 8C600000 lw $zero, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39054u); return; } (void)cpu->read_word(psx_addr); } + /* 0xBFC39058: 8C580000 lw $t8, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39058u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3905C: 00000000 nop */ + /* nop */ + /* 0xBFC39060: 33191000 andi $t9, $t8, 0x1000 */ + cpu->gpr[25] = cpu->gpr[24] & 0x1000u; + /* 0xBFC39064: 13200004 beq $t9, $zero, 0xBFC39078 */ + uint32_t psx_brA_BFC39064 = cpu->gpr[25]; uint32_t psx_brB_BFC39064 = cpu->gpr[0]; + int psx_taken_BFC39064 = (psx_brA_BFC39064 == psx_brB_BFC39064); + /* 0xBFC39068: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC39064) goto label_BFC39078; +label_BFC3906C: + psx_check_interrupts(cpu); + /* 0xBFC3906C: 10000002 beq $zero, $zero, 0xBFC39078 */ + uint32_t psx_brA_BFC3906C = cpu->gpr[0]; uint32_t psx_brB_BFC3906C = cpu->gpr[0]; + int psx_taken_BFC3906C = (psx_brA_BFC3906C == psx_brB_BFC3906C); + /* 0xBFC39070: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3906C) goto label_BFC39078; +label_BFC39074: + psx_check_interrupts(cpu); + /* 0xBFC39074: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC39078: + psx_check_interrupts(cpu); + /* 0xBFC39078: 03E00008 jr $ra */ + /* 0xBFC3907C: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + void func_1FC39080(CPUState* cpu) { label_BFC39080: psx_check_interrupts(cpu); @@ -111900,6 +127966,203 @@ label_BFC392D8: return; } +void func_1FC392E8(CPUState* cpu) { +label_BFC392E8: + psx_check_interrupts(cpu); + /* 0xBFC392E8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC392EC: 8DCE9D9C lw $t6, -25188($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25188)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC392ECu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC392F0: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC392F4: 25CF00F0 addiu $t7, $t6, 240 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[14] + (240)); + /* 0xBFC392F8: 03E00008 jr $ra */ + /* 0xBFC392FC: AC2FEA5C sw $t7, -5540($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-5540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC392FCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + return; +} + +void func_1FC39300(CPUState* cpu) { +label_BFC39300: + psx_check_interrupts(cpu); + /* 0xBFC39300: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC39304: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC39308: 8DEF9D9C lw $t7, -25188($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25188)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39308u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3930C: 8DCEEA5C lw $t6, -5540($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-5540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3930Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39310: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC39314: 01CF082A slt $at, $t6, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[14] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC39318: 10200027 beq $at, $zero, 0xBFC393B8 */ + uint32_t psx_brA_BFC39318 = cpu->gpr[1]; uint32_t psx_brB_BFC39318 = cpu->gpr[0]; + int psx_taken_BFC39318 = (psx_brA_BFC39318 == psx_brB_BFC39318); + /* 0xBFC3931C: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3931Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC39318) goto label_BFC393B8; +label_BFC39320: + psx_check_interrupts(cpu); + /* 0xBFC39320: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC39324: 8F1892A4 lw $t8, -27996($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-27996)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39324u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC39328: 3C010400 lui $at, 0x400 */ + cpu->gpr[1] = 0x04000000u; + /* 0xBFC3932C: 8F020000 lw $v0, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3932Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC39330: 00000000 nop */ + /* nop */ + /* 0xBFC39334: 0041C824 and $t9, $v0, $at */ + cpu->gpr[25] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC39338: 13200004 beq $t9, $zero, 0xBFC3934C */ + uint32_t psx_brA_BFC39338 = cpu->gpr[25]; uint32_t psx_brB_BFC39338 = cpu->gpr[0]; + int psx_taken_BFC39338 = (psx_brA_BFC39338 == psx_brB_BFC39338); + /* 0xBFC3933C: 00003821 addu $a3, $zero, $zero */ + cpu->gpr[7] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC39338) goto label_BFC3934C; +label_BFC39340: + psx_check_interrupts(cpu); + /* 0xBFC39340: 10000002 beq $zero, $zero, 0xBFC3934C */ + uint32_t psx_brA_BFC39340 = cpu->gpr[0]; uint32_t psx_brB_BFC39340 = cpu->gpr[0]; + int psx_taken_BFC39340 = (psx_brA_BFC39340 == psx_brB_BFC39340); + /* 0xBFC39344: 24070001 addiu $a3, $zero, 1 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC39340) goto label_BFC3934C; +label_BFC39348: + psx_check_interrupts(cpu); + /* 0xBFC39348: 00003821 addu $a3, $zero, $zero */ + cpu->gpr[7] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3934C: + psx_check_interrupts(cpu); + /* 0xBFC3934C: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC39350: 8D0892B0 lw $t0, -27984($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-27984)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39350u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC39354: 3C010100 lui $at, 0x100 */ + cpu->gpr[1] = 0x01000000u; + /* 0xBFC39358: 8D090000 lw $t1, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39358u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3935C: 00000000 nop */ + /* nop */ + /* 0xBFC39360: 01215024 and $t2, $t1, $at */ + cpu->gpr[10] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC39364: 11400004 beq $t2, $zero, 0xBFC39378 */ + uint32_t psx_brA_BFC39364 = cpu->gpr[10]; uint32_t psx_brB_BFC39364 = cpu->gpr[0]; + int psx_taken_BFC39364 = (psx_brA_BFC39364 == psx_brB_BFC39364); + /* 0xBFC39368: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC39364) goto label_BFC39378; +label_BFC3936C: + psx_check_interrupts(cpu); + /* 0xBFC3936C: 10000002 beq $zero, $zero, 0xBFC39378 */ + uint32_t psx_brA_BFC3936C = cpu->gpr[0]; uint32_t psx_brB_BFC3936C = cpu->gpr[0]; + int psx_taken_BFC3936C = (psx_brA_BFC3936C == psx_brB_BFC3936C); + /* 0xBFC39370: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3936C) goto label_BFC39378; +label_BFC39374: + psx_check_interrupts(cpu); + /* 0xBFC39374: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC39378: + psx_check_interrupts(cpu); + /* 0xBFC39378: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3937C: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC39380: 8D6B92A8 lw $t3, -27992($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-27992)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39380u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC39384: 8CA59298 lw $a1, -28008($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-28008)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39384u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC39388: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC3938C: 8CC6929C lw $a2, -28004($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-28004)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3938Cu); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC39390: AFA20010 sw $v0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39390u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC39394: 8D6C0000 lw $t4, 0($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39394u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC39398: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3939C: 248492C8 addiu $a0, $a0, -27960 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-27960)); + /* 0xBFC393A0: 0C016A44 jal 0xB005A910 */ + /* 0xBFC393A4: AFAC0014 sw $t4, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC393A4u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + cpu->gpr[31] = 0xBFC393A8u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC393A8: + psx_check_interrupts(cpu); + /* 0xBFC393A8: 0C0143E3 jal 0xB0050F8C */ + /* 0xBFC393AC: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + cpu->gpr[31] = 0xBFC393B0u; + psx_dispatch(cpu, 0x80050F8Cu); +label_BFC393B0: + psx_check_interrupts(cpu); + /* 0xBFC393B0: 10000002 beq $zero, $zero, 0xBFC393BC */ + uint32_t psx_brA_BFC393B0 = cpu->gpr[0]; uint32_t psx_brB_BFC393B0 = cpu->gpr[0]; + int psx_taken_BFC393B0 = (psx_brA_BFC393B0 == psx_brB_BFC393B0); + /* 0xBFC393B4: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC393B0) goto label_BFC393BC; +label_BFC393B8: + psx_check_interrupts(cpu); + /* 0xBFC393B8: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC393BC: + psx_check_interrupts(cpu); + /* 0xBFC393BC: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC393BCu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC393C0: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC393C4: 03E00008 jr $ra */ + /* 0xBFC393C8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC393CC(CPUState* cpu) { +label_BFC393CC: + psx_check_interrupts(cpu); + /* 0xBFC393CC: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC393D0: 10400008 beq $v0, $zero, 0xBFC393F4 */ + uint32_t psx_brA_BFC393D0 = cpu->gpr[2]; uint32_t psx_brB_BFC393D0 = cpu->gpr[0]; + int psx_taken_BFC393D0 = (psx_brA_BFC393D0 == psx_brB_BFC393D0); + /* 0xBFC393D4: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + if (psx_taken_BFC393D0) goto label_BFC393F4; +label_BFC393D8: + psx_check_interrupts(cpu); + /* 0xBFC393D8: 90AE0000 lbu $t6, 0($a1) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC393DC: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC393E0: 24C6FFFF addiu $a2, $a2, -1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-1)); + /* 0xBFC393E4: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC393E8: 24840001 addiu $a0, $a0, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (1)); + /* 0xBFC393EC: 1440FFFA bne $v0, $zero, 0xBFC393D8 */ + uint32_t psx_brA_BFC393EC = cpu->gpr[2]; uint32_t psx_brB_BFC393EC = cpu->gpr[0]; + int psx_taken_BFC393EC = (psx_brA_BFC393EC != psx_brB_BFC393EC); + /* 0xBFC393F0: A08EFFFF sb $t6, -1($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (-1)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + if (psx_taken_BFC393EC) goto label_BFC393D8; +label_BFC393F4: + psx_check_interrupts(cpu); + /* 0xBFC393F4: 03E00008 jr $ra */ + /* 0xBFC393F8: 00000000 nop */ + /* nop */ + return; +} + void func_1FC39410(CPUState* cpu) { label_BFC39410: psx_check_interrupts(cpu); @@ -112220,6 +128483,41 @@ label_BFC395CC: return; } +void func_1FC395EC(CPUState* cpu) { +label_BFC395EC: + psx_check_interrupts(cpu); + /* 0xBFC395EC: A4850000 sh $a1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC395ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC395F0: A4860002 sh $a2, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC395F0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC395F4: 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, 0xBFC395F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC395F8: 8FAE0010 lw $t6, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC395F8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC395FC: A480000E sh $zero, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC395FCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC39600: A480000C sh $zero, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39600u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC39604: A480000A sh $zero, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39604u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC39608: A4800008 sh $zero, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39608u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3960C: A0800011 sb $zero, 17($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (17)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC39610: A0800010 sb $zero, 16($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (16)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC39614: A0800012 sb $zero, 18($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (18)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC39618: A0800013 sb $zero, 19($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (19)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC3961C: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC39620: 03E00008 jr $ra */ + /* 0xBFC39624: A48E0006 sh $t6, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39624u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + return; +} + void func_1FC39630(CPUState* cpu) { label_BFC39630: psx_check_interrupts(cpu); @@ -112320,6 +128618,23 @@ label_BFC396C0: return; } +void func_1FC396D0(CPUState* cpu) { +label_BFC396D0: + psx_check_interrupts(cpu); + /* 0xBFC396D0: 00047903 sra $t7, $a0, 4 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[4] >> 4u); + /* 0xBFC396D4: 31F8003F andi $t8, $t7, 0x3F */ + cpu->gpr[24] = cpu->gpr[15] & 0x3Fu; + /* 0xBFC396D8: 00057180 sll $t6, $a1, 6 */ + cpu->gpr[14] = cpu->gpr[5] << 6u; + /* 0xBFC396DC: 01D81025 or $v0, $t6, $t8 */ + cpu->gpr[2] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC396E0: 03E00008 jr $ra */ + /* 0xBFC396E4: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + return; +} + void func_1FC396E8(CPUState* cpu) { label_BFC396E8: psx_check_interrupts(cpu); @@ -112428,6 +128743,327 @@ label_BFC39784: return; } +void func_1FC39804(CPUState* cpu) { +label_BFC39804: + psx_check_interrupts(cpu); + /* 0xBFC39804: 8C8E0000 lw $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, 0xBFC39804u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39808: 8CA30000 lw $v1, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39808u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3980C: 000E7A00 sll $t7, $t6, 8 */ + cpu->gpr[15] = cpu->gpr[14] << 8u; + /* 0xBFC39810: 000FC202 srl $t8, $t7, 8 */ + cpu->gpr[24] = cpu->gpr[15] >> 8u; + /* 0xBFC39814: 0303C826 xor $t9, $t8, $v1 */ + cpu->gpr[25] = cpu->gpr[24] ^ cpu->gpr[3]; + /* 0xBFC39818: 00194200 sll $t0, $t9, 8 */ + cpu->gpr[8] = cpu->gpr[25] << 8u; + /* 0xBFC3981C: 00084A02 srl $t1, $t0, 8 */ + cpu->gpr[9] = cpu->gpr[8] >> 8u; + /* 0xBFC39820: 01235026 xor $t2, $t1, $v1 */ + cpu->gpr[10] = cpu->gpr[9] ^ cpu->gpr[3]; + /* 0xBFC39824: ACAA0000 sw $t2, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39824u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC39828: 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, 0xBFC39828u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3982C: 00000000 nop */ + /* nop */ + /* 0xBFC39830: 00A25826 xor $t3, $a1, $v0 */ + cpu->gpr[11] = cpu->gpr[5] ^ cpu->gpr[2]; + /* 0xBFC39834: 000B6200 sll $t4, $t3, 8 */ + cpu->gpr[12] = cpu->gpr[11] << 8u; + /* 0xBFC39838: 000C6A02 srl $t5, $t4, 8 */ + cpu->gpr[13] = cpu->gpr[12] >> 8u; + /* 0xBFC3983C: 01A27026 xor $t6, $t5, $v0 */ + cpu->gpr[14] = cpu->gpr[13] ^ cpu->gpr[2]; + /* 0xBFC39840: 03E00008 jr $ra */ + /* 0xBFC39844: 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, 0xBFC39844u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + return; +} + +void func_1FC398D4(CPUState* cpu) { +label_BFC398D4: + psx_check_interrupts(cpu); + /* 0xBFC398D4: 10A00007 beq $a1, $zero, 0xBFC398F4 */ + uint32_t psx_brA_BFC398D4 = cpu->gpr[5]; uint32_t psx_brB_BFC398D4 = cpu->gpr[0]; + int psx_taken_BFC398D4 = (psx_brA_BFC398D4 == psx_brB_BFC398D4); + /* 0xBFC398D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC398D4) goto label_BFC398F4; +label_BFC398DC: + psx_check_interrupts(cpu); + /* 0xBFC398DC: 90820007 lbu $v0, 7($a0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (7))); + /* 0xBFC398E0: 00000000 nop */ + /* nop */ + /* 0xBFC398E4: 34420002 ori $v0, $v0, 0x2 */ + cpu->gpr[2] = cpu->gpr[2] | 0x2u; + /* 0xBFC398E8: 304200FF andi $v0, $v0, 0xFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFu; + /* 0xBFC398EC: 03E00008 jr $ra */ + /* 0xBFC398F0: A0820007 sb $v0, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[2] & 0xFFu)); + return; +label_BFC398F4: + psx_check_interrupts(cpu); + /* 0xBFC398F4: 90820007 lbu $v0, 7($a0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (7))); + /* 0xBFC398F8: 2401FFFD addiu $at, $zero, -3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-3)); + /* 0xBFC398FC: 00411024 and $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC39900: 304200FF andi $v0, $v0, 0xFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFu; + /* 0xBFC39904: A0820007 sb $v0, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[2] & 0xFFu)); + /* 0xBFC39908: 03E00008 jr $ra */ + /* 0xBFC3990C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC39910(CPUState* cpu) { +label_BFC39910: + psx_check_interrupts(cpu); + /* 0xBFC39910: 10A00007 beq $a1, $zero, 0xBFC39930 */ + uint32_t psx_brA_BFC39910 = cpu->gpr[5]; uint32_t psx_brB_BFC39910 = cpu->gpr[0]; + int psx_taken_BFC39910 = (psx_brA_BFC39910 == psx_brB_BFC39910); + /* 0xBFC39914: 00000000 nop */ + /* nop */ + if (psx_taken_BFC39910) goto label_BFC39930; +label_BFC39918: + psx_check_interrupts(cpu); + /* 0xBFC39918: 90820007 lbu $v0, 7($a0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (7))); + /* 0xBFC3991C: 00000000 nop */ + /* nop */ + /* 0xBFC39920: 34420001 ori $v0, $v0, 0x1 */ + cpu->gpr[2] = cpu->gpr[2] | 0x1u; + /* 0xBFC39924: 304200FF andi $v0, $v0, 0xFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFu; + /* 0xBFC39928: 03E00008 jr $ra */ + /* 0xBFC3992C: A0820007 sb $v0, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[2] & 0xFFu)); + return; +label_BFC39930: + psx_check_interrupts(cpu); + /* 0xBFC39930: 90820007 lbu $v0, 7($a0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (7))); + /* 0xBFC39934: 2401FFFE addiu $at, $zero, -2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-2)); + /* 0xBFC39938: 00411024 and $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3993C: 304200FF andi $v0, $v0, 0xFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFu; + /* 0xBFC39940: A0820007 sb $v0, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[2] & 0xFFu)); + /* 0xBFC39944: 03E00008 jr $ra */ + /* 0xBFC39948: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3994C(CPUState* cpu) { +label_BFC3994C: + psx_check_interrupts(cpu); + /* 0xBFC3994C: 8C8E0000 lw $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, 0xBFC3994Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39950: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39954: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39958: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC3995C: 3C010400 lui $at, 0x400 */ + cpu->gpr[1] = 0x04000000u; + /* 0xBFC39960: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39964: 24190020 addiu $t9, $zero, 32 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC39968: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC3996C: 03E00008 jr $ra */ + /* 0xBFC39970: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39970u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC3999C(CPUState* cpu) { +label_BFC3999C: + psx_check_interrupts(cpu); + /* 0xBFC3999C: 8C8E0000 lw $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, 0xBFC3999Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC399A0: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC399A4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC399A8: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC399AC: 3C010600 lui $at, 0x600 */ + cpu->gpr[1] = 0x06000000u; + /* 0xBFC399B0: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC399B4: 24190030 addiu $t9, $zero, 48 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (48)); + /* 0xBFC399B8: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC399BC: 03E00008 jr $ra */ + /* 0xBFC399C0: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC399C0u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC399EC(CPUState* cpu) { +label_BFC399EC: + psx_check_interrupts(cpu); + /* 0xBFC399EC: 8C8E0000 lw $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, 0xBFC399ECu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC399F0: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC399F4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC399F8: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC399FC: 3C010500 lui $at, 0x500 */ + cpu->gpr[1] = 0x05000000u; + /* 0xBFC39A00: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39A04: 24190028 addiu $t9, $zero, 40 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (40)); + /* 0xBFC39A08: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39A0C: 03E00008 jr $ra */ + /* 0xBFC39A10: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39A10u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC39A14(CPUState* cpu) { +label_BFC39A14: + psx_check_interrupts(cpu); + /* 0xBFC39A14: 8C8E0000 lw $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, 0xBFC39A14u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39A18: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39A1C: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39A20: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC39A24: 3C010900 lui $at, 0x900 */ + cpu->gpr[1] = 0x09000000u; + /* 0xBFC39A28: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39A2C: 2419002C addiu $t9, $zero, 44 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (44)); + /* 0xBFC39A30: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39A34: 03E00008 jr $ra */ + /* 0xBFC39A38: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39A38u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC39A3C(CPUState* cpu) { +label_BFC39A3C: + psx_check_interrupts(cpu); + /* 0xBFC39A3C: 8C8E0000 lw $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, 0xBFC39A3Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39A40: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39A44: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39A48: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC39A4C: 3C010800 lui $at, 0x800 */ + cpu->gpr[1] = 0x08000000u; + /* 0xBFC39A50: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39A54: 24190038 addiu $t9, $zero, 56 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (56)); + /* 0xBFC39A58: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39A5C: 03E00008 jr $ra */ + /* 0xBFC39A60: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39A60u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC39ADC(CPUState* cpu) { +label_BFC39ADC: + psx_check_interrupts(cpu); + /* 0xBFC39ADC: 8C8E0000 lw $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, 0xBFC39ADCu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39AE0: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39AE4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39AE8: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC39AEC: 3C010400 lui $at, 0x400 */ + cpu->gpr[1] = 0x04000000u; + /* 0xBFC39AF0: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39AF4: 24190064 addiu $t9, $zero, 100 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (100)); + /* 0xBFC39AF8: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39AFC: 03E00008 jr $ra */ + /* 0xBFC39B00: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39B00u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC39BA4(CPUState* cpu) { +label_BFC39BA4: + psx_check_interrupts(cpu); + /* 0xBFC39BA4: 8C8E0000 lw $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, 0xBFC39BA4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39BA8: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39BAC: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39BB0: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC39BB4: 3C010300 lui $at, 0x300 */ + cpu->gpr[1] = 0x03000000u; + /* 0xBFC39BB8: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39BBC: 24190002 addiu $t9, $zero, 2 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC39BC0: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39BC4: 03E00008 jr $ra */ + /* 0xBFC39BC8: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39BC8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + +void func_1FC39BCC(CPUState* cpu) { +label_BFC39BCC: + psx_check_interrupts(cpu); + /* 0xBFC39BCC: 8C8E0000 lw $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, 0xBFC39BCCu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC39BD0: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC39BD4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC39BD8: 01C17824 and $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC39BDC: 3C010300 lui $at, 0x300 */ + cpu->gpr[1] = 0x03000000u; + /* 0xBFC39BE0: 01E1C025 or $t8, $t7, $at */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC39BE4: 24190040 addiu $t9, $zero, 64 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC39BE8: A0990007 sb $t9, 7($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (7)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + /* 0xBFC39BEC: 03E00008 jr $ra */ + /* 0xBFC39BF0: AC980000 sw $t8, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39BF0u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + return; +} + void func_1FC39D38(CPUState* cpu) { label_BFC39D38: psx_check_interrupts(cpu); @@ -112730,6 +129366,136 @@ label_BFC39F14: return; } +void func_1FC39F30(CPUState* cpu) { +label_BFC39F30: + psx_check_interrupts(cpu); + /* 0xBFC39F30: 308400FF andi $a0, $a0, 0xFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFu; + /* 0xBFC39F34: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC39F38: 14810005 bne $a0, $at, 0xBFC39F50 */ + uint32_t psx_brA_BFC39F38 = cpu->gpr[4]; uint32_t psx_brB_BFC39F38 = cpu->gpr[1]; + int psx_taken_BFC39F38 = (psx_brA_BFC39F38 != psx_brB_BFC39F38); + /* 0xBFC39F3C: 2C810020 sltiu $at, $a0, 32 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000020u ? 1 : 0); + if (psx_taken_BFC39F38) goto label_BFC39F50; +label_BFC39F40: + psx_check_interrupts(cpu); + /* 0xBFC39F40: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC39F44: 03E00008 jr $ra */ + /* 0xBFC39F48: 24429584 addiu $v0, $v0, -27260 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-27260)); + return; +label_BFC39F50: + psx_check_interrupts(cpu); + /* 0xBFC39F50: 1420000B bne $at, $zero, 0xBFC39F80 */ + uint32_t psx_brA_BFC39F50 = cpu->gpr[1]; uint32_t psx_brB_BFC39F50 = cpu->gpr[0]; + int psx_taken_BFC39F50 = (psx_brA_BFC39F50 != psx_brB_BFC39F50); + /* 0xBFC39F54: 2C810080 sltiu $at, $a0, 128 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000080u ? 1 : 0); + if (psx_taken_BFC39F50) goto label_BFC39F80; +label_BFC39F58: + psx_check_interrupts(cpu); + /* 0xBFC39F58: 10200009 beq $at, $zero, 0xBFC39F80 */ + uint32_t psx_brA_BFC39F58 = cpu->gpr[1]; uint32_t psx_brB_BFC39F58 = cpu->gpr[0]; + int psx_taken_BFC39F58 = (psx_brA_BFC39F58 == psx_brB_BFC39F58); + /* 0xBFC39F5C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC39F58) goto label_BFC39F80; +label_BFC39F60: + psx_check_interrupts(cpu); + /* 0xBFC39F60: 248EFFE0 addiu $t6, $a0, -32 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[4] + (-32)); + /* 0xBFC39F64: 000E7882 srl $t7, $t6, 2 */ + cpu->gpr[15] = cpu->gpr[14] >> 2u; + /* 0xBFC39F68: 000FC080 sll $t8, $t7, 2 */ + cpu->gpr[24] = cpu->gpr[15] << 2u; + /* 0xBFC39F6C: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC39F70: 00581021 addu $v0, $v0, $t8 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[24]; + /* 0xBFC39F74: 8C4294AC lw $v0, -27476($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-27476)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC39F74u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC39F78: 03E00008 jr $ra */ + /* 0xBFC39F7C: 00000000 nop */ + /* nop */ + return; +label_BFC39F80: + psx_check_interrupts(cpu); + /* 0xBFC39F80: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC39F84: 24429588 addiu $v0, $v0, -27256 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-27256)); + /* 0xBFC39F88: 03E00008 jr $ra */ + /* 0xBFC39F8C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC39F90(CPUState* cpu) { +label_BFC39F90: + psx_check_interrupts(cpu); + /* 0xBFC39F90: 308400FF andi $a0, $a0, 0xFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFu; + /* 0xBFC39F94: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC39F98: 14810004 bne $a0, $at, 0xBFC39FAC */ + uint32_t psx_brA_BFC39F98 = cpu->gpr[4]; uint32_t psx_brB_BFC39F98 = cpu->gpr[1]; + int psx_taken_BFC39F98 = (psx_brA_BFC39F98 != psx_brB_BFC39F98); + /* 0xBFC39F9C: 2C810020 sltiu $at, $a0, 32 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000020u ? 1 : 0); + if (psx_taken_BFC39F98) goto label_BFC39FAC; +label_BFC39FA0: + psx_check_interrupts(cpu); + /* 0xBFC39FA0: 03E00008 jr $ra */ + /* 0xBFC39FA4: 24020003 addiu $v0, $zero, 3 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + return; +label_BFC39FAC: + psx_check_interrupts(cpu); + /* 0xBFC39FAC: 1420000A bne $at, $zero, 0xBFC39FD8 */ + uint32_t psx_brA_BFC39FAC = cpu->gpr[1]; uint32_t psx_brB_BFC39FAC = cpu->gpr[0]; + int psx_taken_BFC39FAC = (psx_brA_BFC39FAC != psx_brB_BFC39FAC); + /* 0xBFC39FB0: 2C810080 sltiu $at, $a0, 128 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00000080u ? 1 : 0); + if (psx_taken_BFC39FAC) goto label_BFC39FD8; +label_BFC39FB4: + psx_check_interrupts(cpu); + /* 0xBFC39FB4: 10200009 beq $at, $zero, 0xBFC39FDC */ + uint32_t psx_brA_BFC39FB4 = cpu->gpr[1]; uint32_t psx_brB_BFC39FB4 = cpu->gpr[0]; + int psx_taken_BFC39FB4 = (psx_brA_BFC39FB4 == psx_brB_BFC39FB4); + /* 0xBFC39FB8: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC39FB4) goto label_BFC39FDC; +label_BFC39FBC: + psx_check_interrupts(cpu); + /* 0xBFC39FBC: 248EFFE0 addiu $t6, $a0, -32 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[4] + (-32)); + /* 0xBFC39FC0: 000E7882 srl $t7, $t6, 2 */ + cpu->gpr[15] = cpu->gpr[14] >> 2u; + /* 0xBFC39FC4: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC39FC8: 004F1021 addu $v0, $v0, $t7 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[15]; + /* 0xBFC39FCC: 9042956C lbu $v0, -27284($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-27284))); + /* 0xBFC39FD0: 03E00008 jr $ra */ + /* 0xBFC39FD4: 00000000 nop */ + /* nop */ + return; +label_BFC39FD8: + psx_check_interrupts(cpu); + /* 0xBFC39FD8: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC39FDC: + psx_check_interrupts(cpu); + /* 0xBFC39FDC: 03E00008 jr $ra */ + /* 0xBFC39FE0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC39FE4(CPUState* cpu) { label_BFC39FE4: psx_check_interrupts(cpu); @@ -113461,6 +130227,1074 @@ label_BFC3A3F4: return; } +void func_1FC3A44C(CPUState* cpu) { +label_BFC3A44C: + psx_check_interrupts(cpu); + /* 0xBFC3A44C: 3C09800E lui $t1, 0x800E */ + cpu->gpr[9] = 0x800E0000u; + /* 0xBFC3A450: 8129EA60 lb $t1, -5536($t1) */ + cpu->gpr[9] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (-5536))); + /* 0xBFC3A454: 27BDFFF0 addiu $sp, $sp, -16 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-16)); + /* 0xBFC3A458: AFB00008 sw $s0, 8($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A458u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC3A45C: AFB1000C sw $s1, 12($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A45Cu); return; } cpu->write_word(psx_addr, cpu->gpr[17]); } + /* 0xBFC3A460: 3402FFFF ori $v0, $zero, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3A464: 3403FFFF ori $v1, $zero, 0xFFFF */ + cpu->gpr[3] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3A468: 3404FFFF ori $a0, $zero, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3A46C: 3405FFFF ori $a1, $zero, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3A470: 24060063 addiu $a2, $zero, 99 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (99)); + /* 0xBFC3A474: 24070063 addiu $a3, $zero, 99 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (99)); + /* 0xBFC3A478: 15200007 bne $t1, $zero, 0xBFC3A498 */ + uint32_t psx_brA_BFC3A478 = cpu->gpr[9]; uint32_t psx_brB_BFC3A478 = cpu->gpr[0]; + int psx_taken_BFC3A478 = (psx_brA_BFC3A478 != psx_brB_BFC3A478); + /* 0xBFC3A47C: 00004021 addu $t0, $zero, $zero */ + cpu->gpr[8] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3A478) goto label_BFC3A498; +label_BFC3A480: + psx_check_interrupts(cpu); + /* 0xBFC3A480: 3C0D800E lui $t5, 0x800E */ + cpu->gpr[13] = 0x800E0000u; + /* 0xBFC3A484: 81ADEDE8 lb $t5, -4632($t5) */ + cpu->gpr[13] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[13] + (-4632))); + /* 0xBFC3A488: 3C10800E lui $s0, 0x800E */ + cpu->gpr[16] = 0x800E0000u; + /* 0xBFC3A48C: 2610EA68 addiu $s0, $s0, -5528 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (-5528)); + /* 0xBFC3A490: 10000043 beq $zero, $zero, 0xBFC3A5A0 */ + uint32_t psx_brA_BFC3A490 = cpu->gpr[0]; uint32_t psx_brB_BFC3A490 = cpu->gpr[0]; + int psx_taken_BFC3A490 = (psx_brA_BFC3A490 == psx_brB_BFC3A490); + /* 0xBFC3A494: 24110063 addiu $s1, $zero, 99 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[0] + (99)); + if (psx_taken_BFC3A490) goto label_BFC3A5A0; +label_BFC3A498: + psx_check_interrupts(cpu); + /* 0xBFC3A498: 3C0D800E lui $t5, 0x800E */ + cpu->gpr[13] = 0x800E0000u; + /* 0xBFC3A49C: 3C10800E lui $s0, 0x800E */ + cpu->gpr[16] = 0x800E0000u; + /* 0xBFC3A4A0: 81ADEDE8 lb $t5, -4632($t5) */ + cpu->gpr[13] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[13] + (-4632))); + /* 0xBFC3A4A4: 2610EA68 addiu $s0, $s0, -5528 */ + cpu->gpr[16] = (uint32_t)((int32_t)cpu->gpr[16] + (-5528)); + /* 0xBFC3A4A8: 24110063 addiu $s1, $zero, 99 */ + cpu->gpr[17] = (uint32_t)((int32_t)cpu->gpr[0] + (99)); +label_BFC3A4AC: + psx_check_interrupts(cpu); + /* 0xBFC3A4AC: 00087080 sll $t6, $t0, 2 */ + cpu->gpr[14] = cpu->gpr[8] << 2u; + /* 0xBFC3A4B0: 01C87023 subu $t6, $t6, $t0 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[8]; + /* 0xBFC3A4B4: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC3A4B8: 020E5021 addu $t2, $s0, $t6 */ + cpu->gpr[10] = cpu->gpr[16] + cpu->gpr[14]; + /* 0xBFC3A4BC: 814F0017 lb $t7, 23($t2) */ + cpu->gpr[15] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[10] + (23))); + /* 0xBFC3A4C0: 00000000 nop */ + /* nop */ + /* 0xBFC3A4C4: 15E00017 bne $t7, $zero, 0xBFC3A524 */ + uint32_t psx_brA_BFC3A4C4 = cpu->gpr[15]; uint32_t psx_brB_BFC3A4C4 = cpu->gpr[0]; + int psx_taken_BFC3A4C4 = (psx_brA_BFC3A4C4 != psx_brB_BFC3A4C4); + /* 0xBFC3A4C8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A4C4) goto label_BFC3A524; +label_BFC3A4CC: + psx_check_interrupts(cpu); + /* 0xBFC3A4CC: 954B0006 lhu $t3, 6($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A4CCu); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A4D0: 00000000 nop */ + /* nop */ + /* 0xBFC3A4D4: 15600003 bne $t3, $zero, 0xBFC3A4E4 */ + uint32_t psx_brA_BFC3A4D4 = cpu->gpr[11]; uint32_t psx_brB_BFC3A4D4 = cpu->gpr[0]; + int psx_taken_BFC3A4D4 = (psx_brA_BFC3A4D4 != psx_brB_BFC3A4D4); + /* 0xBFC3A4D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A4D4) goto label_BFC3A4E4; +label_BFC3A4DC: + psx_check_interrupts(cpu); + /* 0xBFC3A4DC: 10000052 beq $zero, $zero, 0xBFC3A628 */ + uint32_t psx_brA_BFC3A4DC = cpu->gpr[0]; uint32_t psx_brB_BFC3A4DC = cpu->gpr[0]; + int psx_taken_BFC3A4DC = (psx_brA_BFC3A4DC == psx_brB_BFC3A4DC); + /* 0xBFC3A4E0: 01001021 addu $v0, $t0, $zero */ + cpu->gpr[2] = cpu->gpr[8] + cpu->gpr[0]; + if (psx_taken_BFC3A4DC) goto label_BFC3A628; +label_BFC3A4E4: + psx_check_interrupts(cpu); + /* 0xBFC3A4E4: 854C0014 lh $t4, 20($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (20)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A4E4u); return; } cpu->gpr[12] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A4E8: 00000000 nop */ + /* nop */ + /* 0xBFC3A4EC: 0182082B sltu $at, $t4, $v0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[12] < cpu->gpr[2] ? 1 : 0); + /* 0xBFC3A4F0: 10200005 beq $at, $zero, 0xBFC3A508 */ + uint32_t psx_brA_BFC3A4F0 = cpu->gpr[1]; uint32_t psx_brB_BFC3A4F0 = cpu->gpr[0]; + int psx_taken_BFC3A4F0 = (psx_brA_BFC3A4F0 == psx_brB_BFC3A4F0); + /* 0xBFC3A4F4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A4F0) goto label_BFC3A508; +label_BFC3A4F8: + psx_check_interrupts(cpu); + /* 0xBFC3A4F8: 3182FFFF andi $v0, $t4, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[12] & 0xFFFFu; + /* 0xBFC3A4FC: 3164FFFF andi $a0, $t3, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC3A500: 10000020 beq $zero, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A500 = cpu->gpr[0]; uint32_t psx_brB_BFC3A500 = cpu->gpr[0]; + int psx_taken_BFC3A500 = (psx_brA_BFC3A500 == psx_brB_BFC3A500); + /* 0xBFC3A504: 310600FF andi $a2, $t0, 0xFF */ + cpu->gpr[6] = cpu->gpr[8] & 0xFFu; + if (psx_taken_BFC3A500) goto label_BFC3A584; +label_BFC3A508: + psx_check_interrupts(cpu); + /* 0xBFC3A508: 144C001E bne $v0, $t4, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A508 = cpu->gpr[2]; uint32_t psx_brB_BFC3A508 = cpu->gpr[12]; + int psx_taken_BFC3A508 = (psx_brA_BFC3A508 != psx_brB_BFC3A508); + /* 0xBFC3A50C: 0164082B sltu $at, $t3, $a0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[11] < cpu->gpr[4] ? 1 : 0); + if (psx_taken_BFC3A508) goto label_BFC3A584; +label_BFC3A510: + psx_check_interrupts(cpu); + /* 0xBFC3A510: 1020001C beq $at, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A510 = cpu->gpr[1]; uint32_t psx_brB_BFC3A510 = cpu->gpr[0]; + int psx_taken_BFC3A510 = (psx_brA_BFC3A510 == psx_brB_BFC3A510); + /* 0xBFC3A514: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A510) goto label_BFC3A584; +label_BFC3A518: + psx_check_interrupts(cpu); + /* 0xBFC3A518: 3164FFFF andi $a0, $t3, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC3A51C: 10000019 beq $zero, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A51C = cpu->gpr[0]; uint32_t psx_brB_BFC3A51C = cpu->gpr[0]; + int psx_taken_BFC3A51C = (psx_brA_BFC3A51C == psx_brB_BFC3A51C); + /* 0xBFC3A520: 310600FF andi $a2, $t0, 0xFF */ + cpu->gpr[6] = cpu->gpr[8] & 0xFFu; + if (psx_taken_BFC3A51C) goto label_BFC3A584; +label_BFC3A524: + psx_check_interrupts(cpu); + /* 0xBFC3A524: 14D10017 bne $a2, $s1, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A524 = cpu->gpr[6]; uint32_t psx_brB_BFC3A524 = cpu->gpr[17]; + int psx_taken_BFC3A524 = (psx_brA_BFC3A524 != psx_brB_BFC3A524); + /* 0xBFC3A528: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A524) goto label_BFC3A584; +label_BFC3A52C: + psx_check_interrupts(cpu); + /* 0xBFC3A52C: 854B0014 lh $t3, 20($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (20)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A52Cu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A530: 00000000 nop */ + /* nop */ + /* 0xBFC3A534: 01AB082A slt $at, $t5, $t3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[13] < (int32_t)cpu->gpr[11] ? 1 : 0); + /* 0xBFC3A538: 14200012 bne $at, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A538 = cpu->gpr[1]; uint32_t psx_brB_BFC3A538 = cpu->gpr[0]; + int psx_taken_BFC3A538 = (psx_brA_BFC3A538 != psx_brB_BFC3A538); + /* 0xBFC3A53C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A538) goto label_BFC3A584; +label_BFC3A540: + psx_check_interrupts(cpu); + /* 0xBFC3A540: 01606021 addu $t4, $t3, $zero */ + cpu->gpr[12] = cpu->gpr[11] + cpu->gpr[0]; + /* 0xBFC3A544: 0183082B sltu $at, $t4, $v1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[12] < cpu->gpr[3] ? 1 : 0); + /* 0xBFC3A548: 10200005 beq $at, $zero, 0xBFC3A560 */ + uint32_t psx_brA_BFC3A548 = cpu->gpr[1]; uint32_t psx_brB_BFC3A548 = cpu->gpr[0]; + int psx_taken_BFC3A548 = (psx_brA_BFC3A548 == psx_brB_BFC3A548); + /* 0xBFC3A54C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A548) goto label_BFC3A560; +label_BFC3A550: + psx_check_interrupts(cpu); + /* 0xBFC3A550: 95450006 lhu $a1, 6($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A550u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A554: 3183FFFF andi $v1, $t4, 0xFFFF */ + cpu->gpr[3] = cpu->gpr[12] & 0xFFFFu; + /* 0xBFC3A558: 1000000A beq $zero, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A558 = cpu->gpr[0]; uint32_t psx_brB_BFC3A558 = cpu->gpr[0]; + int psx_taken_BFC3A558 = (psx_brA_BFC3A558 == psx_brB_BFC3A558); + /* 0xBFC3A55C: 310700FF andi $a3, $t0, 0xFF */ + cpu->gpr[7] = cpu->gpr[8] & 0xFFu; + if (psx_taken_BFC3A558) goto label_BFC3A584; +label_BFC3A560: + psx_check_interrupts(cpu); + /* 0xBFC3A560: 146C0008 bne $v1, $t4, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A560 = cpu->gpr[3]; uint32_t psx_brB_BFC3A560 = cpu->gpr[12]; + int psx_taken_BFC3A560 = (psx_brA_BFC3A560 != psx_brB_BFC3A560); + /* 0xBFC3A564: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A560) goto label_BFC3A584; +label_BFC3A568: + psx_check_interrupts(cpu); + /* 0xBFC3A568: 954B0006 lhu $t3, 6($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A568u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A56C: 00000000 nop */ + /* nop */ + /* 0xBFC3A570: 0165082B sltu $at, $t3, $a1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[11] < cpu->gpr[5] ? 1 : 0); + /* 0xBFC3A574: 10200003 beq $at, $zero, 0xBFC3A584 */ + uint32_t psx_brA_BFC3A574 = cpu->gpr[1]; uint32_t psx_brB_BFC3A574 = cpu->gpr[0]; + int psx_taken_BFC3A574 = (psx_brA_BFC3A574 == psx_brB_BFC3A574); + /* 0xBFC3A578: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A574) goto label_BFC3A584; +label_BFC3A57C: + psx_check_interrupts(cpu); + /* 0xBFC3A57C: 3165FFFF andi $a1, $t3, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC3A580: 310700FF andi $a3, $t0, 0xFF */ + cpu->gpr[7] = cpu->gpr[8] & 0xFFu; +label_BFC3A584: + psx_check_interrupts(cpu); + /* 0xBFC3A584: 85580002 lh $t8, 2($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A584u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A588: 25080001 addiu $t0, $t0, 1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (1)); + /* 0xBFC3A58C: 310800FF andi $t0, $t0, 0xFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFu; + /* 0xBFC3A590: 0109082B sltu $at, $t0, $t1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[9] ? 1 : 0); + /* 0xBFC3A594: 27190001 addiu $t9, $t8, 1 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[24] + (1)); + /* 0xBFC3A598: 1420FFC4 bne $at, $zero, 0xBFC3A4AC */ + uint32_t psx_brA_BFC3A598 = cpu->gpr[1]; uint32_t psx_brB_BFC3A598 = cpu->gpr[0]; + int psx_taken_BFC3A598 = (psx_brA_BFC3A598 != psx_brB_BFC3A598); + /* 0xBFC3A59C: A5590002 sh $t9, 2($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A59Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + if (psx_taken_BFC3A598) goto label_BFC3A4AC; +label_BFC3A5A0: + psx_check_interrupts(cpu); + /* 0xBFC3A5A0: 10D10003 beq $a2, $s1, 0xBFC3A5B0 */ + uint32_t psx_brA_BFC3A5A0 = cpu->gpr[6]; uint32_t psx_brB_BFC3A5A0 = cpu->gpr[17]; + int psx_taken_BFC3A5A0 = (psx_brA_BFC3A5A0 == psx_brB_BFC3A5A0); + /* 0xBFC3A5A4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A5A0) goto label_BFC3A5B0; +label_BFC3A5A8: + psx_check_interrupts(cpu); + /* 0xBFC3A5A8: 1000001F beq $zero, $zero, 0xBFC3A628 */ + uint32_t psx_brA_BFC3A5A8 = cpu->gpr[0]; uint32_t psx_brB_BFC3A5A8 = cpu->gpr[0]; + int psx_taken_BFC3A5A8 = (psx_brA_BFC3A5A8 == psx_brB_BFC3A5A8); + /* 0xBFC3A5AC: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + if (psx_taken_BFC3A5A8) goto label_BFC3A628; +label_BFC3A5B0: + psx_check_interrupts(cpu); + /* 0xBFC3A5B0: 10F10004 beq $a3, $s1, 0xBFC3A5C4 */ + uint32_t psx_brA_BFC3A5B0 = cpu->gpr[7]; uint32_t psx_brB_BFC3A5B0 = cpu->gpr[17]; + int psx_taken_BFC3A5B0 = (psx_brA_BFC3A5B0 == psx_brB_BFC3A5B0); + /* 0xBFC3A5B4: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3A5B0) goto label_BFC3A5C4; +label_BFC3A5B8: + psx_check_interrupts(cpu); + /* 0xBFC3A5B8: 1000001B beq $zero, $zero, 0xBFC3A628 */ + uint32_t psx_brA_BFC3A5B8 = cpu->gpr[0]; uint32_t psx_brB_BFC3A5B8 = cpu->gpr[0]; + int psx_taken_BFC3A5B8 = (psx_brA_BFC3A5B8 == psx_brB_BFC3A5B8); + /* 0xBFC3A5BC: 00E01021 addu $v0, $a3, $zero */ + cpu->gpr[2] = cpu->gpr[7] + cpu->gpr[0]; + if (psx_taken_BFC3A5B8) goto label_BFC3A628; +label_BFC3A5C0: + psx_check_interrupts(cpu); + /* 0xBFC3A5C0: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3A5C4: + psx_check_interrupts(cpu); + /* 0xBFC3A5C4: 312700FF andi $a3, $t1, 0xFF */ + cpu->gpr[7] = cpu->gpr[9] & 0xFFu; + /* 0xBFC3A5C8: 11200016 beq $t1, $zero, 0xBFC3A624 */ + uint32_t psx_brA_BFC3A5C8 = cpu->gpr[9]; uint32_t psx_brB_BFC3A5C8 = cpu->gpr[0]; + int psx_taken_BFC3A5C8 = (psx_brA_BFC3A5C8 == psx_brB_BFC3A5C8); + /* 0xBFC3A5CC: 00004021 addu $t0, $zero, $zero */ + cpu->gpr[8] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3A5C8) goto label_BFC3A624; +label_BFC3A5D0: + psx_check_interrupts(cpu); + /* 0xBFC3A5D0: 00087080 sll $t6, $t0, 2 */ + cpu->gpr[14] = cpu->gpr[8] << 2u; +label_BFC3A5D4: + psx_check_interrupts(cpu); + /* 0xBFC3A5D4: 01C87023 subu $t6, $t6, $t0 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[8]; + /* 0xBFC3A5D8: 000E70C0 sll $t6, $t6, 3 */ + cpu->gpr[14] = cpu->gpr[14] << 3u; + /* 0xBFC3A5DC: 020E5021 addu $t2, $s0, $t6 */ + cpu->gpr[10] = cpu->gpr[16] + cpu->gpr[14]; + /* 0xBFC3A5E0: 854F0014 lh $t7, 20($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (20)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A5E0u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A5E4: 00000000 nop */ + /* nop */ + /* 0xBFC3A5E8: 01AF082A slt $at, $t5, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[13] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC3A5EC: 14200008 bne $at, $zero, 0xBFC3A610 */ + uint32_t psx_brA_BFC3A5EC = cpu->gpr[1]; uint32_t psx_brB_BFC3A5EC = cpu->gpr[0]; + int psx_taken_BFC3A5EC = (psx_brA_BFC3A5EC != psx_brB_BFC3A5EC); + /* 0xBFC3A5F0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A5EC) goto label_BFC3A610; +label_BFC3A5F4: + psx_check_interrupts(cpu); + /* 0xBFC3A5F4: 85420002 lh $v0, 2($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A5F4u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A5F8: 00000000 nop */ + /* nop */ + /* 0xBFC3A5FC: 00A2082B sltu $at, $a1, $v0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[2] ? 1 : 0); + /* 0xBFC3A600: 10200003 beq $at, $zero, 0xBFC3A610 */ + uint32_t psx_brA_BFC3A600 = cpu->gpr[1]; uint32_t psx_brB_BFC3A600 = cpu->gpr[0]; + int psx_taken_BFC3A600 = (psx_brA_BFC3A600 == psx_brB_BFC3A600); + /* 0xBFC3A604: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A600) goto label_BFC3A610; +label_BFC3A608: + psx_check_interrupts(cpu); + /* 0xBFC3A608: 3045FFFF andi $a1, $v0, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC3A60C: 310700FF andi $a3, $t0, 0xFF */ + cpu->gpr[7] = cpu->gpr[8] & 0xFFu; +label_BFC3A610: + psx_check_interrupts(cpu); + /* 0xBFC3A610: 25080001 addiu $t0, $t0, 1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (1)); + /* 0xBFC3A614: 310800FF andi $t0, $t0, 0xFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFu; + /* 0xBFC3A618: 0109082B sltu $at, $t0, $t1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[9] ? 1 : 0); + /* 0xBFC3A61C: 1420FFED bne $at, $zero, 0xBFC3A5D4 */ + uint32_t psx_brA_BFC3A61C = cpu->gpr[1]; uint32_t psx_brB_BFC3A61C = cpu->gpr[0]; + int psx_taken_BFC3A61C = (psx_brA_BFC3A61C != psx_brB_BFC3A61C); + /* 0xBFC3A620: 00087080 sll $t6, $t0, 2 */ + cpu->gpr[14] = cpu->gpr[8] << 2u; + if (psx_taken_BFC3A61C) goto label_BFC3A5D4; +label_BFC3A624: + psx_check_interrupts(cpu); + /* 0xBFC3A624: 00E01021 addu $v0, $a3, $zero */ + cpu->gpr[2] = cpu->gpr[7] + cpu->gpr[0]; +label_BFC3A628: + psx_check_interrupts(cpu); + /* 0xBFC3A628: 8FB00008 lw $s0, 8($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A628u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC3A62C: 8FB1000C lw $s1, 12($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A62Cu); return; } cpu->gpr[17] = cpu->read_word(psx_addr); } + /* 0xBFC3A630: 03E00008 jr $ra */ + /* 0xBFC3A634: 27BD0010 addiu $sp, $sp, 16 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (16)); + return; +} + +void func_1FC3A638(CPUState* cpu) { +label_BFC3A638: + psx_check_interrupts(cpu); + /* 0xBFC3A638: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC3A63C: 81CEEDD8 lb $t6, -4648($t6) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-4648))); + /* 0xBFC3A640: 3C18800E lui $t8, 0x800E */ + cpu->gpr[24] = 0x800E0000u; + /* 0xBFC3A644: 2718ECA8 addiu $t8, $t8, -4952 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[24] + (-4952)); + /* 0xBFC3A648: 000E78C0 sll $t7, $t6, 3 */ + cpu->gpr[15] = cpu->gpr[14] << 3u; + /* 0xBFC3A64C: AFA40000 sw $a0, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A64Cu); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC3A650: 01F81821 addu $v1, $t7, $t8 */ + cpu->gpr[3] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC3A654: 94790002 lhu $t9, 2($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A654u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A658: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC3A65C: 8084EDDC lb $a0, -4644($a0) */ + cpu->gpr[4] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (-4644))); + /* 0xBFC3A660: 00194B80 sll $t1, $t9, 14 */ + cpu->gpr[9] = cpu->gpr[25] << 14u; + /* 0xBFC3A664: 01394823 subu $t1, $t1, $t9 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[25]; + /* 0xBFC3A668: 01240019 multu $t1, $a0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[4]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A66C: 24013F01 addiu $at, $zero, 16129 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (16129)); + /* 0xBFC3A670: 946A0004 lhu $t2, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A670u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A674: 3C07800E lui $a3, 0x800E */ + cpu->gpr[7] = 0x800E0000u; + /* 0xBFC3A678: 000A5B80 sll $t3, $t2, 14 */ + cpu->gpr[11] = cpu->gpr[10] << 14u; + /* 0xBFC3A67C: 016A5823 subu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[10]; + /* 0xBFC3A680: 80E7EDE2 lb $a3, -4638($a3) */ + cpu->gpr[7] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[7] + (-4638))); + /* 0xBFC3A684: 3C08800E lui $t0, 0x800E */ + cpu->gpr[8] = 0x800E0000u; + /* 0xBFC3A688: 9108EDE7 lbu $t0, -4633($t0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[8] + (-4633))); + /* 0xBFC3A68C: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC3A690: 00001012 mflo $v0 */ + cpu->gpr[2] = cpu->lo; + /* 0xBFC3A694: 00000000 nop */ + /* nop */ + /* 0xBFC3A698: 00000000 nop */ + /* nop */ + /* 0xBFC3A69C: 0041001B divu $v0, $at */ + { uint32_t psx_n = cpu->gpr[2]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A6A0: 00001012 mflo $v0 */ + cpu->gpr[2] = cpu->lo; + /* 0xBFC3A6A4: 00000000 nop */ + /* nop */ + /* 0xBFC3A6A8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6AC: 01640019 multu $t3, $a0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[11] * (uint64_t)cpu->gpr[4]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A6B0: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC3A6B4: 00000000 nop */ + /* nop */ + /* 0xBFC3A6B8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6BC: 00C1001B divu $a2, $at */ + { uint32_t psx_n = cpu->gpr[6]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A6C0: 2401007F addiu $at, $zero, 127 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC3A6C4: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC3A6C8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6CC: 00000000 nop */ + /* nop */ + /* 0xBFC3A6D0: 00470019 multu $v0, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[2] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A6D4: 00001012 mflo $v0 */ + cpu->gpr[2] = cpu->lo; + /* 0xBFC3A6D8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6DC: 00000000 nop */ + /* nop */ + /* 0xBFC3A6E0: 0041001B divu $v0, $at */ + { uint32_t psx_n = cpu->gpr[2]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A6E4: 00001012 mflo $v0 */ + cpu->gpr[2] = cpu->lo; + /* 0xBFC3A6E8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6EC: 00000000 nop */ + /* nop */ + /* 0xBFC3A6F0: 00C70019 multu $a2, $a3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[6] * (uint64_t)cpu->gpr[7]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A6F4: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC3A6F8: 00000000 nop */ + /* nop */ + /* 0xBFC3A6FC: 00000000 nop */ + /* nop */ + /* 0xBFC3A700: 00C1001B divu $a2, $at */ + { uint32_t psx_n = cpu->gpr[6]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A704: 2D010040 sltiu $at, $t0, 64 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < 0x00000040u ? 1 : 0); + /* 0xBFC3A708: 00003012 mflo $a2 */ + cpu->gpr[6] = cpu->lo; + /* 0xBFC3A70C: 10200009 beq $at, $zero, 0xBFC3A734 */ + uint32_t psx_brA_BFC3A70C = cpu->gpr[1]; uint32_t psx_brB_BFC3A70C = cpu->gpr[0]; + int psx_taken_BFC3A70C = (psx_brA_BFC3A70C == psx_brB_BFC3A70C); + /* 0xBFC3A710: 2407007F addiu $a3, $zero, 127 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + if (psx_taken_BFC3A70C) goto label_BFC3A734; +label_BFC3A714: + psx_check_interrupts(cpu); + /* 0xBFC3A714: 00C80019 multu $a2, $t0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[6] * (uint64_t)cpu->gpr[8]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A718: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; + /* 0xBFC3A71C: 2407007F addiu $a3, $zero, 127 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC3A720: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC3A724: 00042182 srl $a0, $a0, 6 */ + cpu->gpr[4] = cpu->gpr[4] >> 6u; + /* 0xBFC3A728: 10000008 beq $zero, $zero, 0xBFC3A74C */ + uint32_t psx_brA_BFC3A728 = cpu->gpr[0]; uint32_t psx_brB_BFC3A728 = cpu->gpr[0]; + int psx_taken_BFC3A728 = (psx_brA_BFC3A728 == psx_brB_BFC3A728); + /* 0xBFC3A72C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A728) goto label_BFC3A74C; +label_BFC3A730: + psx_check_interrupts(cpu); + /* 0xBFC3A730: 2407007F addiu $a3, $zero, 127 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); +label_BFC3A734: + psx_check_interrupts(cpu); + /* 0xBFC3A734: 00E86023 subu $t4, $a3, $t0 */ + cpu->gpr[12] = cpu->gpr[7] - cpu->gpr[8]; + /* 0xBFC3A738: 004C0019 multu $v0, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[2] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A73C: 00C02021 addu $a0, $a2, $zero */ + cpu->gpr[4] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC3A740: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC3A744: 00031982 srl $v1, $v1, 6 */ + cpu->gpr[3] = cpu->gpr[3] >> 6u; + /* 0xBFC3A748: 00000000 nop */ + /* nop */ +label_BFC3A74C: + psx_check_interrupts(cpu); + /* 0xBFC3A74C: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3A750: 9042EDE3 lbu $v0, -4637($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-4637))); + /* 0xBFC3A754: 00000000 nop */ + /* nop */ + /* 0xBFC3A758: 2C410040 sltiu $at, $v0, 64 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < 0x00000040u ? 1 : 0); + /* 0xBFC3A75C: 10200007 beq $at, $zero, 0xBFC3A77C */ + uint32_t psx_brA_BFC3A75C = cpu->gpr[1]; uint32_t psx_brB_BFC3A75C = cpu->gpr[0]; + int psx_taken_BFC3A75C = (psx_brA_BFC3A75C == psx_brB_BFC3A75C); + /* 0xBFC3A760: 00E26823 subu $t5, $a3, $v0 */ + cpu->gpr[13] = cpu->gpr[7] - cpu->gpr[2]; + if (psx_taken_BFC3A75C) goto label_BFC3A77C; +label_BFC3A764: + psx_check_interrupts(cpu); + /* 0xBFC3A764: 00820019 multu $a0, $v0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[4] * (uint64_t)cpu->gpr[2]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A768: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC3A76C: 00042182 srl $a0, $a0, 6 */ + cpu->gpr[4] = cpu->gpr[4] >> 6u; + /* 0xBFC3A770: 10000006 beq $zero, $zero, 0xBFC3A78C */ + uint32_t psx_brA_BFC3A770 = cpu->gpr[0]; uint32_t psx_brB_BFC3A770 = cpu->gpr[0]; + int psx_taken_BFC3A770 = (psx_brA_BFC3A770 == psx_brB_BFC3A770); + /* 0xBFC3A774: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A770) goto label_BFC3A78C; +label_BFC3A778: + psx_check_interrupts(cpu); + /* 0xBFC3A778: 00E26823 subu $t5, $a3, $v0 */ + cpu->gpr[13] = cpu->gpr[7] - cpu->gpr[2]; +label_BFC3A77C: + psx_check_interrupts(cpu); + /* 0xBFC3A77C: 006D0019 multu $v1, $t5 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[3] * (uint64_t)cpu->gpr[13]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A780: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC3A784: 00031982 srl $v1, $v1, 6 */ + cpu->gpr[3] = cpu->gpr[3] >> 6u; + /* 0xBFC3A788: 00000000 nop */ + /* nop */ +label_BFC3A78C: + psx_check_interrupts(cpu); + /* 0xBFC3A78C: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3A790: 9042EDDD lbu $v0, -4643($v0) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-4643))); + /* 0xBFC3A794: 00000000 nop */ + /* nop */ + /* 0xBFC3A798: 2C410040 sltiu $at, $v0, 64 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < 0x00000040u ? 1 : 0); + /* 0xBFC3A79C: 10200007 beq $at, $zero, 0xBFC3A7BC */ + uint32_t psx_brA_BFC3A79C = cpu->gpr[1]; uint32_t psx_brB_BFC3A79C = cpu->gpr[0]; + int psx_taken_BFC3A79C = (psx_brA_BFC3A79C == psx_brB_BFC3A79C); + /* 0xBFC3A7A0: 00E27023 subu $t6, $a3, $v0 */ + cpu->gpr[14] = cpu->gpr[7] - cpu->gpr[2]; + if (psx_taken_BFC3A79C) goto label_BFC3A7BC; +label_BFC3A7A4: + psx_check_interrupts(cpu); + /* 0xBFC3A7A4: 00820019 multu $a0, $v0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[4] * (uint64_t)cpu->gpr[2]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A7A8: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC3A7AC: 00042182 srl $a0, $a0, 6 */ + cpu->gpr[4] = cpu->gpr[4] >> 6u; + /* 0xBFC3A7B0: 10000006 beq $zero, $zero, 0xBFC3A7CC */ + uint32_t psx_brA_BFC3A7B0 = cpu->gpr[0]; uint32_t psx_brB_BFC3A7B0 = cpu->gpr[0]; + int psx_taken_BFC3A7B0 = (psx_brA_BFC3A7B0 == psx_brB_BFC3A7B0); + /* 0xBFC3A7B4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A7B0) goto label_BFC3A7CC; +label_BFC3A7B8: + psx_check_interrupts(cpu); + /* 0xBFC3A7B8: 00E27023 subu $t6, $a3, $v0 */ + cpu->gpr[14] = cpu->gpr[7] - cpu->gpr[2]; +label_BFC3A7BC: + psx_check_interrupts(cpu); + /* 0xBFC3A7BC: 006E0019 multu $v1, $t6 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[3] * (uint64_t)cpu->gpr[14]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A7C0: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC3A7C4: 00031982 srl $v1, $v1, 6 */ + cpu->gpr[3] = cpu->gpr[3] >> 6u; + /* 0xBFC3A7C8: 00000000 nop */ + /* nop */ +label_BFC3A7CC: + psx_check_interrupts(cpu); + /* 0xBFC3A7CC: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3A7D0: 85EF95F8 lh $t7, -27144($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27144)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A7D0u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A7D4: 24080001 addiu $t0, $zero, 1 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3A7D8: 15E80006 bne $t7, $t0, 0xBFC3A7F4 */ + uint32_t psx_brA_BFC3A7D8 = cpu->gpr[15]; uint32_t psx_brB_BFC3A7D8 = cpu->gpr[8]; + int psx_taken_BFC3A7D8 = (psx_brA_BFC3A7D8 != psx_brB_BFC3A7D8); + /* 0xBFC3A7DC: 0064082B sltu $at, $v1, $a0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[3] < cpu->gpr[4] ? 1 : 0); + if (psx_taken_BFC3A7D8) goto label_BFC3A7F4; +label_BFC3A7E0: + psx_check_interrupts(cpu); + /* 0xBFC3A7E0: 10200003 beq $at, $zero, 0xBFC3A7F0 */ + uint32_t psx_brA_BFC3A7E0 = cpu->gpr[1]; uint32_t psx_brB_BFC3A7E0 = cpu->gpr[0]; + int psx_taken_BFC3A7E0 = (psx_brA_BFC3A7E0 == psx_brB_BFC3A7E0); + /* 0xBFC3A7E4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A7E0) goto label_BFC3A7F0; +label_BFC3A7E8: + psx_check_interrupts(cpu); + /* 0xBFC3A7E8: 10000002 beq $zero, $zero, 0xBFC3A7F4 */ + uint32_t psx_brA_BFC3A7E8 = cpu->gpr[0]; uint32_t psx_brB_BFC3A7E8 = cpu->gpr[0]; + int psx_taken_BFC3A7E8 = (psx_brA_BFC3A7E8 == psx_brB_BFC3A7E8); + /* 0xBFC3A7EC: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC3A7E8) goto label_BFC3A7F4; +label_BFC3A7F0: + psx_check_interrupts(cpu); + /* 0xBFC3A7F0: 00602021 addu $a0, $v1, $zero */ + cpu->gpr[4] = cpu->gpr[3] + cpu->gpr[0]; +label_BFC3A7F4: + psx_check_interrupts(cpu); + /* 0xBFC3A7F4: 00630019 multu $v1, $v1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[3] * (uint64_t)cpu->gpr[3]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A7F8: 24013FFF addiu $at, $zero, 16383 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (16383)); + /* 0xBFC3A7FC: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3A800: 8442EDF0 lh $v0, -4624($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4624)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A800u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3A804: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3A808: 000238C0 sll $a3, $v0, 3 */ + cpu->gpr[7] = cpu->gpr[2] << 3u; + /* 0xBFC3A80C: 8F1895F4 lw $t8, -27148($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A80Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3A810: 30E7FFFF andi $a3, $a3, 0xFFFF */ + cpu->gpr[7] = cpu->gpr[7] & 0xFFFFu; + /* 0xBFC3A814: 0007C840 sll $t9, $a3, 1 */ + cpu->gpr[25] = cpu->gpr[7] << 1u; + /* 0xBFC3A818: 03194821 addu $t1, $t8, $t9 */ + cpu->gpr[9] = cpu->gpr[24] + cpu->gpr[25]; + /* 0xBFC3A81C: A5250004 sh $a1, 4($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A81Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC3A820: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC3A824: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC3A828: 8D4A95F4 lw $t2, -27148($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A828u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3A82C: 00075840 sll $t3, $a3, 1 */ + cpu->gpr[11] = cpu->gpr[7] << 1u; + /* 0xBFC3A830: 0061001B divu $v1, $at */ + { uint32_t psx_n = cpu->gpr[3]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A834: 014B6021 addu $t4, $t2, $t3 */ + cpu->gpr[12] = cpu->gpr[10] + cpu->gpr[11]; + /* 0xBFC3A838: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC3A83C: 0002C080 sll $t8, $v0, 2 */ + cpu->gpr[24] = cpu->gpr[2] << 2u; + /* 0xBFC3A840: 00077040 sll $t6, $a3, 1 */ + cpu->gpr[14] = cpu->gpr[7] << 1u; + /* 0xBFC3A844: 3C19800E lui $t9, 0x800E */ + cpu->gpr[25] = 0x800E0000u; + /* 0xBFC3A848: 0302C023 subu $t8, $t8, $v0 */ + cpu->gpr[24] = cpu->gpr[24] - cpu->gpr[2]; + /* 0xBFC3A84C: 0018C0C0 sll $t8, $t8, 3 */ + cpu->gpr[24] = cpu->gpr[24] << 3u; + /* 0xBFC3A850: 2739EA68 addiu $t9, $t9, -5528 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[25] + (-5528)); + /* 0xBFC3A854: 03193021 addu $a2, $t8, $t9 */ + cpu->gpr[6] = cpu->gpr[24] + cpu->gpr[25]; + /* 0xBFC3A858: 00001812 mflo $v1 */ + cpu->gpr[3] = cpu->lo; + /* 0xBFC3A85C: A5830000 sh $v1, 0($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A85Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC3A860: 8DAD95F4 lw $t5, -27148($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A860u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3A864: 00840019 multu $a0, $a0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[4] * (uint64_t)cpu->gpr[4]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3A868: 01AE7821 addu $t7, $t5, $t6 */ + cpu->gpr[15] = cpu->gpr[13] + cpu->gpr[14]; + /* 0xBFC3A86C: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC3A870: 00000000 nop */ + /* nop */ + /* 0xBFC3A874: 00000000 nop */ + /* nop */ + /* 0xBFC3A878: 0081001B divu $a0, $at */ + { uint32_t psx_n = cpu->gpr[4]; uint32_t psx_d = cpu->gpr[1]; if (psx_d == 0) { cpu->lo = 0xFFFFFFFFu; cpu->hi = psx_n; } else { uint32_t psx_q = psx_n / psx_d; uint32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = psx_q; cpu->hi = psx_r; } } + /* 0xBFC3A87C: 28410010 slti $at, $v0, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (16) ? 1 : 0); + /* 0xBFC3A880: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC3A884: A5E40002 sh $a0, 2($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A884u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[4] & 0xFFFFu)); } + /* 0xBFC3A888: A4C50004 sh $a1, 4($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A888u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC3A88C: 10200006 beq $at, $zero, 0xBFC3A8A8 */ + uint32_t psx_brA_BFC3A88C = cpu->gpr[1]; uint32_t psx_brB_BFC3A88C = cpu->gpr[0]; + int psx_taken_BFC3A88C = (psx_brA_BFC3A88C == psx_brB_BFC3A88C); + /* 0xBFC3A890: A0C80017 sb $t0, 23($a2) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[6] + (23)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + if (psx_taken_BFC3A88C) goto label_BFC3A8A8; +label_BFC3A894: + psx_check_interrupts(cpu); + /* 0xBFC3A894: 24090001 addiu $t1, $zero, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3A898: 00491804 sllv $v1, $t1, $v0 */ + cpu->gpr[3] = cpu->gpr[9] << (cpu->gpr[2] & 0x1Fu); + /* 0xBFC3A89C: 3063FFFF andi $v1, $v1, 0xFFFF */ + cpu->gpr[3] = cpu->gpr[3] & 0xFFFFu; + /* 0xBFC3A8A0: 10000006 beq $zero, $zero, 0xBFC3A8BC */ + uint32_t psx_brA_BFC3A8A0 = cpu->gpr[0]; uint32_t psx_brB_BFC3A8A0 = cpu->gpr[0]; + int psx_taken_BFC3A8A0 = (psx_brA_BFC3A8A0 == psx_brB_BFC3A8A0); + /* 0xBFC3A8A4: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3A8A0) goto label_BFC3A8BC; +label_BFC3A8A8: + psx_check_interrupts(cpu); + /* 0xBFC3A8A8: 244A0010 addiu $t2, $v0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[2] + (16)); + /* 0xBFC3A8AC: 240B0001 addiu $t3, $zero, 1 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3A8B0: 014B2004 sllv $a0, $t3, $t2 */ + cpu->gpr[4] = cpu->gpr[11] << (cpu->gpr[10] & 0x1Fu); + /* 0xBFC3A8B4: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3A8B8: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; +label_BFC3A8BC: + psx_check_interrupts(cpu); + /* 0xBFC3A8BC: 3C0C800E lui $t4, 0x800E */ + cpu->gpr[12] = 0x800E0000u; + /* 0xBFC3A8C0: 818CEDED lb $t4, -4627($t4) */ + cpu->gpr[12] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[12] + (-4627))); + /* 0xBFC3A8C4: 00000000 nop */ + /* nop */ + /* 0xBFC3A8C8: 318D0004 andi $t5, $t4, 0x4 */ + cpu->gpr[13] = cpu->gpr[12] & 0x4u; + /* 0xBFC3A8CC: 11A0000C beq $t5, $zero, 0xBFC3A900 */ + uint32_t psx_brA_BFC3A8CC = cpu->gpr[13]; uint32_t psx_brB_BFC3A8CC = cpu->gpr[0]; + int psx_taken_BFC3A8CC = (psx_brA_BFC3A8CC == psx_brB_BFC3A8CC); + /* 0xBFC3A8D0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3A8CC) goto label_BFC3A900; +label_BFC3A8D4: + psx_check_interrupts(cpu); + /* 0xBFC3A8D4: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3A8D8: 95CE9F14 lhu $t6, -24812($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24812)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A8D8u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A8DC: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3A8E0: 97189F16 lhu $t8, -24810($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-24810)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A8E0u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A8E4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A8E8: 01C37825 or $t7, $t6, $v1 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[3]; + /* 0xBFC3A8EC: A42F9F14 sh $t7, -24812($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24812)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A8ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3A8F0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A8F4: 0304C825 or $t9, $t8, $a0 */ + cpu->gpr[25] = cpu->gpr[24] | cpu->gpr[4]; + /* 0xBFC3A8F8: 1000000D beq $zero, $zero, 0xBFC3A930 */ + uint32_t psx_brA_BFC3A8F8 = cpu->gpr[0]; uint32_t psx_brB_BFC3A8F8 = cpu->gpr[0]; + int psx_taken_BFC3A8F8 = (psx_brA_BFC3A8F8 == psx_brB_BFC3A8F8); + /* 0xBFC3A8FC: A4399F16 sh $t9, -24810($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24810)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A8FCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + if (psx_taken_BFC3A8F8) goto label_BFC3A930; +label_BFC3A900: + psx_check_interrupts(cpu); + /* 0xBFC3A900: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3A904: 95299F14 lhu $t1, -24812($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-24812)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A904u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A908: 00605827 nor $t3, $v1, $zero */ + cpu->gpr[11] = ~(cpu->gpr[3] | cpu->gpr[0]); + /* 0xBFC3A90C: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC3A910: 958C9F16 lhu $t4, -24810($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-24810)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A910u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A914: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A918: 012B5024 and $t2, $t1, $t3 */ + cpu->gpr[10] = cpu->gpr[9] & cpu->gpr[11]; + /* 0xBFC3A91C: A42A9F14 sh $t2, -24812($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24812)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A91Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC3A920: 00806827 nor $t5, $a0, $zero */ + cpu->gpr[13] = ~(cpu->gpr[4] | cpu->gpr[0]); + /* 0xBFC3A924: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A928: 018D7024 and $t6, $t4, $t5 */ + cpu->gpr[14] = cpu->gpr[12] & cpu->gpr[13]; + /* 0xBFC3A92C: A42E9F16 sh $t6, -24810($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24810)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A92Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } +label_BFC3A930: + psx_check_interrupts(cpu); + /* 0xBFC3A930: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3A934: 95EF9F0C lhu $t7, -24820($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-24820)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A934u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A938: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3A93C: 97399F0E lhu $t9, -24818($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-24818)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A93Cu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A940: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A944: 01E3C025 or $t8, $t7, $v1 */ + cpu->gpr[24] = cpu->gpr[15] | cpu->gpr[3]; + /* 0xBFC3A948: A4389F0C sh $t8, -24820($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24820)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A948u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC3A94C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A950: 03244825 or $t1, $t9, $a0 */ + cpu->gpr[9] = cpu->gpr[25] | cpu->gpr[4]; + /* 0xBFC3A954: 03E00008 jr $ra */ + /* 0xBFC3A958: A4299F0E sh $t1, -24818($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24818)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A958u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + return; +} + +void func_1FC3A95C(CPUState* cpu) { +label_BFC3A95C: + psx_check_interrupts(cpu); + /* 0xBFC3A95C: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3A960: 9442EDF0 lhu $v0, -4624($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4624)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A960u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A964: AFA40000 sw $a0, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A964u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC3A968: 2C410010 sltiu $at, $v0, 16 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < 0x00000010u ? 1 : 0); + /* 0xBFC3A96C: 10200007 beq $at, $zero, 0xBFC3A98C */ + uint32_t psx_brA_BFC3A96C = cpu->gpr[1]; uint32_t psx_brB_BFC3A96C = cpu->gpr[0]; + int psx_taken_BFC3A96C = (psx_brA_BFC3A96C == psx_brB_BFC3A96C); + /* 0xBFC3A970: 244F0010 addiu $t7, $v0, 16 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[2] + (16)); + if (psx_taken_BFC3A96C) goto label_BFC3A98C; +label_BFC3A974: + psx_check_interrupts(cpu); + /* 0xBFC3A974: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3A978: 004E1804 sllv $v1, $t6, $v0 */ + cpu->gpr[3] = cpu->gpr[14] << (cpu->gpr[2] & 0x1Fu); + /* 0xBFC3A97C: 3063FFFF andi $v1, $v1, 0xFFFF */ + cpu->gpr[3] = cpu->gpr[3] & 0xFFFFu; + /* 0xBFC3A980: 10000006 beq $zero, $zero, 0xBFC3A99C */ + uint32_t psx_brA_BFC3A980 = cpu->gpr[0]; uint32_t psx_brB_BFC3A980 = cpu->gpr[0]; + int psx_taken_BFC3A980 = (psx_brA_BFC3A980 == psx_brB_BFC3A980); + /* 0xBFC3A984: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3A980) goto label_BFC3A99C; +label_BFC3A988: + psx_check_interrupts(cpu); + /* 0xBFC3A988: 244F0010 addiu $t7, $v0, 16 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[2] + (16)); +label_BFC3A98C: + psx_check_interrupts(cpu); + /* 0xBFC3A98C: 24180001 addiu $t8, $zero, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3A990: 01F82004 sllv $a0, $t8, $t7 */ + cpu->gpr[4] = cpu->gpr[24] << (cpu->gpr[15] & 0x1Fu); + /* 0xBFC3A994: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3A998: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; +label_BFC3A99C: + psx_check_interrupts(cpu); + /* 0xBFC3A99C: 0002C880 sll $t9, $v0, 2 */ + cpu->gpr[25] = cpu->gpr[2] << 2u; + /* 0xBFC3A9A0: 0322C823 subu $t9, $t9, $v0 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[2]; + /* 0xBFC3A9A4: 3C08800E lui $t0, 0x800E */ + cpu->gpr[8] = 0x800E0000u; + /* 0xBFC3A9A8: 2508EA68 addiu $t0, $t0, -5528 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (-5528)); + /* 0xBFC3A9AC: 0019C8C0 sll $t9, $t9, 3 */ + cpu->gpr[25] = cpu->gpr[25] << 3u; + /* 0xBFC3A9B0: 03282821 addu $a1, $t9, $t0 */ + cpu->gpr[5] = cpu->gpr[25] + cpu->gpr[8]; + /* 0xBFC3A9B4: A4A00004 sh $zero, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9B4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3A9B8: A0A00017 sb $zero, 23($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (23)), (uint8_t)(cpu->gpr[0] & 0xFFu)); + /* 0xBFC3A9BC: A4A00000 sh $zero, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9BCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3A9C0: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3A9C4: 95299F10 lhu $t1, -24816($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-24816)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9C4u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A9C8: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC3A9CC: 956B9F12 lhu $t3, -24814($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9CCu); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3A9D0: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A9D4: 01235025 or $t2, $t1, $v1 */ + cpu->gpr[10] = cpu->gpr[9] | cpu->gpr[3]; + /* 0xBFC3A9D8: A42A9F10 sh $t2, -24816($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24816)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC3A9DC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3A9E0: 01646025 or $t4, $t3, $a0 */ + cpu->gpr[12] = cpu->gpr[11] | cpu->gpr[4]; + /* 0xBFC3A9E4: 03E00008 jr $ra */ + /* 0xBFC3A9E8: A42C9F12 sh $t4, -24814($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3A9E8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + return; +} + +void func_1FC3A9EC(CPUState* cpu) { +label_BFC3A9EC: + psx_check_interrupts(cpu); + /* 0xBFC3A9EC: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3A9F0: 3C03800E lui $v1, 0x800E */ + cpu->gpr[3] = 0x800E0000u; + /* 0xBFC3A9F4: 8063EDE9 lb $v1, -4631($v1) */ + cpu->gpr[3] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[3] + (-4631))); + /* 0xBFC3A9F8: 8042EDDA lb $v0, -4646($v0) */ + cpu->gpr[2] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (-4646))); + /* 0xBFC3A9FC: 3C05800E lui $a1, 0x800E */ + cpu->gpr[5] = 0x800E0000u; + /* 0xBFC3AA00: 80A5EDEA lb $a1, -4630($a1) */ + cpu->gpr[5] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (-4630))); + /* 0xBFC3AA04: 00433023 subu $a2, $v0, $v1 */ + cpu->gpr[6] = cpu->gpr[2] - cpu->gpr[3]; + /* 0xBFC3AA08: 24C6003C addiu $a2, $a2, 60 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (60)); + /* 0xBFC3AA0C: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC3AA10: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC3AA14: 00000000 nop */ + /* nop */ + /* 0xBFC3AA18: 04A10002 bgez $a1, 0xBFC3AA24 */ + uint32_t psx_brA_BFC3AA18 = cpu->gpr[5]; + int psx_taken_BFC3AA18 = ((int32_t)psx_brA_BFC3AA18 >= 0); + /* 0xBFC3AA1C: 00A00821 addu $at, $a1, $zero */ + cpu->gpr[1] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3AA18) goto label_BFC3AA24; +label_BFC3AA20: + psx_check_interrupts(cpu); + /* 0xBFC3AA20: 24210007 addiu $at, $at, 7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (7)); +label_BFC3AA24: + psx_check_interrupts(cpu); + /* 0xBFC3AA24: 000128C3 sra $a1, $at, 3 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[1] >> 3u); + /* 0xBFC3AA28: 2401000C addiu $at, $zero, 12 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (12)); + /* 0xBFC3AA2C: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3AA30: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC3AA34: 30AEFFFF andi $t6, $a1, 0xFFFF */ + cpu->gpr[14] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC3AA38: 00083C00 sll $a3, $t0, 16 */ + cpu->gpr[7] = cpu->gpr[8] << 16u; + /* 0xBFC3AA3C: 2DC10010 sltiu $at, $t6, 16 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[14] < 0x00000010u ? 1 : 0); + /* 0xBFC3AA40: 30A4FFFF andi $a0, $a1, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC3AA44: 14200002 bne $at, $zero, 0xBFC3AA50 */ + uint32_t psx_brA_BFC3AA44 = cpu->gpr[1]; uint32_t psx_brB_BFC3AA44 = cpu->gpr[0]; + int psx_taken_BFC3AA44 = (psx_brA_BFC3AA44 != psx_brB_BFC3AA44); + /* 0xBFC3AA48: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + if (psx_taken_BFC3AA44) goto label_BFC3AA50; +label_BFC3AA4C: + psx_check_interrupts(cpu); + /* 0xBFC3AA4C: 2404000F addiu $a0, $zero, 15 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (15)); +label_BFC3AA50: + psx_check_interrupts(cpu); + /* 0xBFC3AA50: 2401000C addiu $at, $zero, 12 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (12)); + /* 0xBFC3AA54: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3AA58: 00083C00 sll $a3, $t0, 16 */ + cpu->gpr[7] = cpu->gpr[8] << 16u; + /* 0xBFC3AA5C: 00045840 sll $t3, $a0, 1 */ + cpu->gpr[11] = cpu->gpr[4] << 1u; + /* 0xBFC3AA60: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC3AA64: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3AA68: 24E7FFFB addiu $a3, $a3, -5 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (-5)); + /* 0xBFC3AA6C: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC3AA70: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC3AA74: 00007810 mfhi $t7 */ + cpu->gpr[15] = cpu->hi; + /* 0xBFC3AA78: 000FC400 sll $t8, $t7, 16 */ + cpu->gpr[24] = cpu->gpr[15] << 16u; + /* 0xBFC3AA7C: 0018CC03 sra $t9, $t8, 16 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[24] >> 16u); + /* 0xBFC3AA80: 00194900 sll $t1, $t9, 4 */ + cpu->gpr[9] = cpu->gpr[25] << 4u; + /* 0xBFC3AA84: 00095040 sll $t2, $t1, 1 */ + cpu->gpr[10] = cpu->gpr[9] << 1u; + /* 0xBFC3AA88: 014B6021 addu $t4, $t2, $t3 */ + cpu->gpr[12] = cpu->gpr[10] + cpu->gpr[11]; + /* 0xBFC3AA8C: 00AC2821 addu $a1, $a1, $t4 */ + cpu->gpr[5] = cpu->gpr[5] + cpu->gpr[12]; + /* 0xBFC3AA90: 94A595FC lhu $a1, -27140($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-27140)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AA90u); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3AA94: 18E00004 blez $a3, 0xBFC3AAA8 */ + uint32_t psx_brA_BFC3AA94 = cpu->gpr[7]; + int psx_taken_BFC3AA94 = ((int32_t)psx_brA_BFC3AA94 <= 0); + /* 0xBFC3AA98: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3AA94) goto label_BFC3AAA8; +label_BFC3AA9C: + psx_check_interrupts(cpu); + /* 0xBFC3AA9C: 00E52804 sllv $a1, $a1, $a3 */ + cpu->gpr[5] = cpu->gpr[5] << (cpu->gpr[7] & 0x1Fu); + /* 0xBFC3AAA0: 10000006 beq $zero, $zero, 0xBFC3AABC */ + uint32_t psx_brA_BFC3AAA0 = cpu->gpr[0]; uint32_t psx_brB_BFC3AAA0 = cpu->gpr[0]; + int psx_taken_BFC3AAA0 = (psx_brA_BFC3AAA0 == psx_brB_BFC3AAA0); + /* 0xBFC3AAA4: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + if (psx_taken_BFC3AAA0) goto label_BFC3AABC; +label_BFC3AAA8: + psx_check_interrupts(cpu); + /* 0xBFC3AAA8: 04E10004 bgez $a3, 0xBFC3AABC */ + uint32_t psx_brA_BFC3AAA8 = cpu->gpr[7]; + int psx_taken_BFC3AAA8 = ((int32_t)psx_brA_BFC3AAA8 >= 0); + /* 0xBFC3AAAC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3AAA8) goto label_BFC3AABC; +label_BFC3AAB0: + psx_check_interrupts(cpu); + /* 0xBFC3AAB0: 00076823 subu $t5, $zero, $a3 */ + cpu->gpr[13] = cpu->gpr[0] - cpu->gpr[7]; + /* 0xBFC3AAB4: 01A52806 srlv $a1, $a1, $t5 */ + cpu->gpr[5] = cpu->gpr[5] >> (cpu->gpr[13] & 0x1Fu); + /* 0xBFC3AAB8: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; +label_BFC3AABC: + psx_check_interrupts(cpu); + /* 0xBFC3AABC: 03E00008 jr $ra */ + /* 0xBFC3AAC0: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + return; +} + void func_1FC3AAC4(CPUState* cpu) { label_BFC3AAC4: psx_check_interrupts(cpu); @@ -113572,6 +131406,306 @@ label_BFC3AB68: return; } +void func_1FC3AB70(CPUState* cpu) { +label_BFC3AB70: + psx_check_interrupts(cpu); + /* 0xBFC3AB70: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC3AB74: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC3AB78: 8442EDF0 lh $v0, -4624($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4624)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AB78u); return; } cpu->gpr[2] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3AB7C: 81CEEDDF lb $t6, -4641($t6) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-4641))); + /* 0xBFC3AB80: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC3AB84: 3C18800E lui $t8, 0x800E */ + cpu->gpr[24] = 0x800E0000u; + /* 0xBFC3AB88: 8484EDEE lh $a0, -4626($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-4626)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AB88u); return; } cpu->gpr[4] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3AB8C: 8318EDE5 lb $t8, -4635($t8) */ + cpu->gpr[24] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[24] + (-4635))); + /* 0xBFC3AB90: 000210C0 sll $v0, $v0, 3 */ + cpu->gpr[2] = cpu->gpr[2] << 3u; + /* 0xBFC3AB94: 000E7900 sll $t7, $t6, 4 */ + cpu->gpr[15] = cpu->gpr[14] << 4u; + /* 0xBFC3AB98: 00021400 sll $v0, $v0, 16 */ + cpu->gpr[2] = cpu->gpr[2] << 16u; + /* 0xBFC3AB9C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3ABA0: 30990001 andi $t9, $a0, 0x1 */ + cpu->gpr[25] = cpu->gpr[4] & 0x1u; + /* 0xBFC3ABA4: 01F81821 addu $v1, $t7, $t8 */ + cpu->gpr[3] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC3ABA8: 00021403 sra $v0, $v0, 16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 16u); + /* 0xBFC3ABAC: 1B200011 blez $t9, 0xBFC3ABF4 */ + uint32_t psx_brA_BFC3ABAC = cpu->gpr[25]; + int psx_taken_BFC3ABAC = ((int32_t)psx_brA_BFC3ABAC <= 0); + /* 0xBFC3ABB0: A423EDF4 sh $v1, -4620($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4620)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABB0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + if (psx_taken_BFC3ABAC) goto label_BFC3ABF4; +label_BFC3ABB4: + psx_check_interrupts(cpu); + /* 0xBFC3ABB4: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC3ABB8: 2489FFFF addiu $t1, $a0, -1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[4] + (-1)); + /* 0xBFC3ABBC: 8D089EFC lw $t0, -24836($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-24836)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABBCu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3ABC0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3ABC4: 8DCE95F4 lw $t6, -27148($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABC4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3ABC8: 00027840 sll $t7, $v0, 1 */ + cpu->gpr[15] = cpu->gpr[2] << 1u; + /* 0xBFC3ABCC: 01CFC021 addu $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC3ABD0: 05210002 bgez $t1, 0xBFC3ABDC */ + uint32_t psx_brA_BFC3ABD0 = cpu->gpr[9]; + int psx_taken_BFC3ABD0 = ((int32_t)psx_brA_BFC3ABD0 >= 0); + /* 0xBFC3ABD4: 01200821 addu $at, $t1, $zero */ + cpu->gpr[1] = cpu->gpr[9] + cpu->gpr[0]; + if (psx_taken_BFC3ABD0) goto label_BFC3ABDC; +label_BFC3ABD8: + psx_check_interrupts(cpu); + /* 0xBFC3ABD8: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC3ABDC: + psx_check_interrupts(cpu); + /* 0xBFC3ABDC: 00015043 sra $t2, $at, 1 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC3ABE0: 000A5900 sll $t3, $t2, 4 */ + cpu->gpr[11] = cpu->gpr[10] << 4u; + /* 0xBFC3ABE4: 010B6021 addu $t4, $t0, $t3 */ + cpu->gpr[12] = cpu->gpr[8] + cpu->gpr[11]; + /* 0xBFC3ABE8: 958D000C lhu $t5, 12($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (12)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABE8u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3ABEC: 10000011 beq $zero, $zero, 0xBFC3AC34 */ + uint32_t psx_brA_BFC3ABEC = cpu->gpr[0]; uint32_t psx_brB_BFC3ABEC = cpu->gpr[0]; + int psx_taken_BFC3ABEC = (psx_brA_BFC3ABEC == psx_brB_BFC3ABEC); + /* 0xBFC3ABF0: A70D0006 sh $t5, 6($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABF0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + if (psx_taken_BFC3ABEC) goto label_BFC3AC34; +label_BFC3ABF4: + psx_check_interrupts(cpu); + /* 0xBFC3ABF4: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3ABF8: 2489FFFF addiu $t1, $a0, -1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[4] + (-1)); + /* 0xBFC3ABFC: 8F399EFC lw $t9, -24836($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-24836)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ABFCu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3AC00: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3AC04: 8DCE95F4 lw $t6, -27148($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC04u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3AC08: 00027840 sll $t7, $v0, 1 */ + cpu->gpr[15] = cpu->gpr[2] << 1u; + /* 0xBFC3AC0C: 01CF6821 addu $t5, $t6, $t7 */ + cpu->gpr[13] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC3AC10: 05210002 bgez $t1, 0xBFC3AC1C */ + uint32_t psx_brA_BFC3AC10 = cpu->gpr[9]; + int psx_taken_BFC3AC10 = ((int32_t)psx_brA_BFC3AC10 >= 0); + /* 0xBFC3AC14: 01200821 addu $at, $t1, $zero */ + cpu->gpr[1] = cpu->gpr[9] + cpu->gpr[0]; + if (psx_taken_BFC3AC10) goto label_BFC3AC1C; +label_BFC3AC18: + psx_check_interrupts(cpu); + /* 0xBFC3AC18: 24210001 addiu $at, $at, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[1] + (1)); +label_BFC3AC1C: + psx_check_interrupts(cpu); + /* 0xBFC3AC1C: 00015043 sra $t2, $at, 1 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[1] >> 1u); + /* 0xBFC3AC20: 000A4100 sll $t0, $t2, 4 */ + cpu->gpr[8] = cpu->gpr[10] << 4u; + /* 0xBFC3AC24: 03285821 addu $t3, $t9, $t0 */ + cpu->gpr[11] = cpu->gpr[25] + cpu->gpr[8]; + /* 0xBFC3AC28: 956C000E lhu $t4, 14($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC28u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3AC2C: 00000000 nop */ + /* nop */ + /* 0xBFC3AC30: A5AC0006 sh $t4, 6($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC30u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } +label_BFC3AC34: + psx_check_interrupts(cpu); + /* 0xBFC3AC34: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3AC38: 8F189F00 lw $t8, -24832($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-24832)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC38u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3AC3C: 00034940 sll $t1, $v1, 5 */ + cpu->gpr[9] = cpu->gpr[3] << 5u; + /* 0xBFC3AC40: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC3AC44: 8D0895F4 lw $t0, -27148($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC44u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3AC48: 03095021 addu $t2, $t8, $t1 */ + cpu->gpr[10] = cpu->gpr[24] + cpu->gpr[9]; + /* 0xBFC3AC4C: 95590010 lhu $t9, 16($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC4Cu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3AC50: 00025840 sll $t3, $v0, 1 */ + cpu->gpr[11] = cpu->gpr[2] << 1u; + /* 0xBFC3AC54: 010B7021 addu $t6, $t0, $t3 */ + cpu->gpr[14] = cpu->gpr[8] + cpu->gpr[11]; + /* 0xBFC3AC58: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3AC5C: A5D90008 sh $t9, 8($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC5Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC3AC60: 8DEF9F00 lw $t7, -24832($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-24832)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC60u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3AC64: 00036140 sll $t4, $v1, 5 */ + cpu->gpr[12] = cpu->gpr[3] << 5u; + /* 0xBFC3AC68: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC3AC6C: 3C09800E lui $t1, 0x800E */ + cpu->gpr[9] = 0x800E0000u; + /* 0xBFC3AC70: 01EC6821 addu $t5, $t7, $t4 */ + cpu->gpr[13] = cpu->gpr[15] + cpu->gpr[12]; + /* 0xBFC3AC74: 95B80012 lhu $t8, 18($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC74u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3AC78: 9529EDB8 lhu $t1, -4680($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-4680)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC78u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3AC7C: 8D0895F4 lw $t0, -27148($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC7Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3AC80: 00025840 sll $t3, $v0, 1 */ + cpu->gpr[11] = cpu->gpr[2] << 1u; + /* 0xBFC3AC84: 03095021 addu $t2, $t8, $t1 */ + cpu->gpr[10] = cpu->gpr[24] + cpu->gpr[9]; + /* 0xBFC3AC88: 010BC821 addu $t9, $t0, $t3 */ + cpu->gpr[25] = cpu->gpr[8] + cpu->gpr[11]; + /* 0xBFC3AC8C: A72A000A sh $t2, 10($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC8Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC3AC90: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3AC94: 03E00008 jr $ra */ + /* 0xBFC3AC98: A422EDF2 sh $v0, -4622($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4622)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AC98u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + return; +} + +void func_1FC3AC9C(CPUState* cpu) { +label_BFC3AC9C: + psx_check_interrupts(cpu); + /* 0xBFC3AC9C: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC3ACA0: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC3ACA4: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC3ACA8: 1C80000F bgtz $a0, 0xBFC3ACE8 */ + uint32_t psx_brA_BFC3ACA8 = cpu->gpr[4]; + int psx_taken_BFC3ACA8 = ((int32_t)psx_brA_BFC3ACA8 > 0); + /* 0xBFC3ACAC: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + if (psx_taken_BFC3ACA8) goto label_BFC3ACE8; +label_BFC3ACB0: + psx_check_interrupts(cpu); + /* 0xBFC3ACB0: 0480000D bltz $a0, 0xBFC3ACE8 */ + uint32_t psx_brA_BFC3ACB0 = cpu->gpr[4]; + int psx_taken_BFC3ACB0 = ((int32_t)psx_brA_BFC3ACB0 < 0); + /* 0xBFC3ACB4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ACB0) goto label_BFC3ACE8; +label_BFC3ACB8: + psx_check_interrupts(cpu); + /* 0xBFC3ACB8: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC3ACBC: 01C47021 addu $t6, $t6, $a0 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[4]; + /* 0xBFC3ACC0: 91CEEDB2 lbu $t6, -4686($t6) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-4686))); + /* 0xBFC3ACC4: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3ACC8: 15C10007 bne $t6, $at, 0xBFC3ACE8 */ + uint32_t psx_brA_BFC3ACC8 = cpu->gpr[14]; uint32_t psx_brB_BFC3ACC8 = cpu->gpr[1]; + int psx_taken_BFC3ACC8 = (psx_brA_BFC3ACC8 != psx_brB_BFC3ACC8); + /* 0xBFC3ACCC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ACC8) goto label_BFC3ACE8; +label_BFC3ACD0: + psx_check_interrupts(cpu); + /* 0xBFC3ACD0: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3ACD4: 85EF95F0 lh $t7, -27152($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27152)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ACD4u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3ACD8: 00000000 nop */ + /* nop */ + /* 0xBFC3ACDC: 00AF082A slt $at, $a1, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[5] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC3ACE0: 14200004 bne $at, $zero, 0xBFC3ACF4 */ + uint32_t psx_brA_BFC3ACE0 = cpu->gpr[1]; uint32_t psx_brB_BFC3ACE0 = cpu->gpr[0]; + int psx_taken_BFC3ACE0 = (psx_brA_BFC3ACE0 != psx_brB_BFC3ACE0); + /* 0xBFC3ACE4: 0004C080 sll $t8, $a0, 2 */ + cpu->gpr[24] = cpu->gpr[4] << 2u; + if (psx_taken_BFC3ACE0) goto label_BFC3ACF4; +label_BFC3ACE8: + psx_check_interrupts(cpu); + /* 0xBFC3ACE8: 03E00008 jr $ra */ + /* 0xBFC3ACEC: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + return; +label_BFC3ACF4: + psx_check_interrupts(cpu); + /* 0xBFC3ACF4: 3C19800E lui $t9, 0x800E */ + cpu->gpr[25] = 0x800E0000u; + /* 0xBFC3ACF8: 0338C821 addu $t9, $t9, $t8 */ + cpu->gpr[25] = cpu->gpr[25] + cpu->gpr[24]; + /* 0xBFC3ACFC: 8F39EDF8 lw $t9, -4616($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-4616)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ACFCu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3AD00: 00044080 sll $t0, $a0, 2 */ + cpu->gpr[8] = cpu->gpr[4] << 2u; + /* 0xBFC3AD04: 3C09800E lui $t1, 0x800E */ + cpu->gpr[9] = 0x800E0000u; + /* 0xBFC3AD08: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3AD0C: 01284821 addu $t1, $t1, $t0 */ + cpu->gpr[9] = cpu->gpr[9] + cpu->gpr[8]; + /* 0xBFC3AD10: 8D29EDFC lw $t1, -4612($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-4612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD10u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3AD14: 00045080 sll $t2, $a0, 2 */ + cpu->gpr[10] = cpu->gpr[4] << 2u; + /* 0xBFC3AD18: 3C0B800E lui $t3, 0x800E */ + cpu->gpr[11] = 0x800E0000u; + /* 0xBFC3AD1C: AC399EF8 sw $t9, -24840($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24840)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD1Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3AD20: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3AD24: 016A5821 addu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] + cpu->gpr[10]; + /* 0xBFC3AD28: 8D6BEE00 lw $t3, -4608($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-4608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD28u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC3AD2C: AC299EFC sw $t1, -24836($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24836)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD2Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC3AD30: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3AD34: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC3AD38: AC2B9F00 sw $t3, -24832($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24832)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD38u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC3AD3C: 8D8C9EFC lw $t4, -24836($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-24836)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD3Cu); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC3AD40: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3AD44: 00056900 sll $t5, $a1, 4 */ + cpu->gpr[13] = cpu->gpr[5] << 4u; + /* 0xBFC3AD48: A024EDD9 sb $a0, -4647($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-4647)), (uint8_t)(cpu->gpr[4] & 0xFFu)); + /* 0xBFC3AD4C: A025EDDE sb $a1, -4642($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-4642)), (uint8_t)(cpu->gpr[5] & 0xFFu)); + /* 0xBFC3AD50: 018D7021 addu $t6, $t4, $t5 */ + cpu->gpr[14] = cpu->gpr[12] + cpu->gpr[13]; + /* 0xBFC3AD54: 8DCF0008 lw $t7, 8($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3AD54u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3AD58: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3AD5C: A02FEDDF sb $t7, -4641($at) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[1] + (-4641)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + /* 0xBFC3AD60: 03E00008 jr $ra */ + /* 0xBFC3AD64: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3AD68(CPUState* cpu) { label_BFC3AD68: psx_check_interrupts(cpu); @@ -114196,6 +132330,173 @@ label_BFC3B134: return; } +void func_1FC3B160(CPUState* cpu) { +label_BFC3B160: + psx_check_interrupts(cpu); + /* 0xBFC3B160: 3C03800E lui $v1, 0x800E */ + cpu->gpr[3] = 0x800E0000u; + /* 0xBFC3B164: 8063EA60 lb $v1, -5536($v1) */ + cpu->gpr[3] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[3] + (-5536))); + /* 0xBFC3B168: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3B16C: 10600012 beq $v1, $zero, 0xBFC3B1B8 */ + uint32_t psx_brA_BFC3B16C = cpu->gpr[3]; uint32_t psx_brB_BFC3B16C = cpu->gpr[0]; + int psx_taken_BFC3B16C = (psx_brA_BFC3B16C == psx_brB_BFC3B16C); + /* 0xBFC3B170: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3B16C) goto label_BFC3B1B8; +label_BFC3B174: + psx_check_interrupts(cpu); + /* 0xBFC3B174: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC3B178: 2484EA68 addiu $a0, $a0, -5528 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-5528)); +label_BFC3B17C: + psx_check_interrupts(cpu); + /* 0xBFC3B17C: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3B180: 8DCE95F4 lw $t6, -27148($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B180u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3B184: 000278C0 sll $t7, $v0, 3 */ + cpu->gpr[15] = cpu->gpr[2] << 3u; + /* 0xBFC3B188: 00024880 sll $t1, $v0, 2 */ + cpu->gpr[9] = cpu->gpr[2] << 2u; + /* 0xBFC3B18C: 01224823 subu $t1, $t1, $v0 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[2]; + /* 0xBFC3B190: 000FC040 sll $t8, $t7, 1 */ + cpu->gpr[24] = cpu->gpr[15] << 1u; + /* 0xBFC3B194: 24420001 addiu $v0, $v0, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1)); + /* 0xBFC3B198: 01D8C821 addu $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] + cpu->gpr[24]; + /* 0xBFC3B19C: 9728000C lhu $t0, 12($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (12)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B19Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B1A0: 000948C0 sll $t1, $t1, 3 */ + cpu->gpr[9] = cpu->gpr[9] << 3u; + /* 0xBFC3B1A4: 304200FF andi $v0, $v0, 0xFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFu; + /* 0xBFC3B1A8: 00895021 addu $t2, $a0, $t1 */ + cpu->gpr[10] = cpu->gpr[4] + cpu->gpr[9]; + /* 0xBFC3B1AC: 0043082B sltu $at, $v0, $v1 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[2] < cpu->gpr[3] ? 1 : 0); + /* 0xBFC3B1B0: 1420FFF2 bne $at, $zero, 0xBFC3B17C */ + uint32_t psx_brA_BFC3B1B0 = cpu->gpr[1]; uint32_t psx_brB_BFC3B1B0 = cpu->gpr[0]; + int psx_taken_BFC3B1B0 = (psx_brA_BFC3B1B0 != psx_brB_BFC3B1B0); + /* 0xBFC3B1B4: A5480006 sh $t0, 6($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1B4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + if (psx_taken_BFC3B1B0) goto label_BFC3B17C; +label_BFC3B1B8: + psx_check_interrupts(cpu); + /* 0xBFC3B1B8: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC3B1BC: 958C9F0C lhu $t4, -24820($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-24820)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1BCu); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B1C0: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC3B1C4: 956B9F10 lhu $t3, -24816($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-24816)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1C4u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B1C8: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3B1CC: 97189F0E lhu $t8, -24818($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-24818)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1CCu); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B1D0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3B1D4: 01806827 nor $t5, $t4, $zero */ + cpu->gpr[13] = ~(cpu->gpr[12] | cpu->gpr[0]); + /* 0xBFC3B1D8: 95CE9F12 lhu $t6, -24814($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1D8u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B1DC: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B1E0: 016D7824 and $t7, $t3, $t5 */ + cpu->gpr[15] = cpu->gpr[11] & cpu->gpr[13]; + /* 0xBFC3B1E4: A42F9F10 sh $t7, -24816($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24816)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1E4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3B1E8: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC3B1EC: 0300C827 nor $t9, $t8, $zero */ + cpu->gpr[25] = ~(cpu->gpr[24] | cpu->gpr[0]); + /* 0xBFC3B1F0: 8D4A95F4 lw $t2, -27148($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1F0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3B1F4: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B1F8: 01D94824 and $t1, $t6, $t9 */ + cpu->gpr[9] = cpu->gpr[14] & cpu->gpr[25]; + /* 0xBFC3B1FC: A4299F12 sh $t1, -24814($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B1FCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC3B200: 31E8FFFF andi $t0, $t7, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC3B204: A548018C sh $t0, 396($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (396)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B204u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3B208: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC3B20C: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC3B210: 958C9F12 lhu $t4, -24814($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B210u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B214: 8D6B95F4 lw $t3, -27148($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B214u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC3B218: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3B21C: A56C018E sh $t4, 398($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (398)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B21Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } + /* 0xBFC3B220: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC3B224: 95AD9F0C lhu $t5, -24820($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-24820)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B224u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B228: 8F1895F4 lw $t8, -27148($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B228u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3B22C: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3B230: A70D0188 sh $t5, 392($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (392)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B230u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC3B234: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3B238: 95CE9F0E lhu $t6, -24818($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24818)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B238u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B23C: 8F3995F4 lw $t9, -27148($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B23Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3B240: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3B244: A72E018A sh $t6, 394($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (394)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B244u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC3B248: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3B24C: 95299F14 lhu $t1, -24812($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-24812)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B24Cu); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B250: 8DEF95F4 lw $t7, -27148($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B250u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3B254: 3C088008 lui $t0, 0x8008 */ + cpu->gpr[8] = 0x80080000u; + /* 0xBFC3B258: A5E90198 sh $t1, 408($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (408)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B258u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC3B25C: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC3B260: 8D4A95F4 lw $t2, -27148($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B260u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3B264: 95089F16 lhu $t0, -24810($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-24810)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B264u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3B268: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B26C: A548019A sh $t0, 410($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (410)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B26Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3B270: A4209F10 sh $zero, -24816($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24816)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B270u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3B274: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B278: A4209F12 sh $zero, -24814($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24814)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B278u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3B27C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B280: A4209F0C sh $zero, -24820($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24820)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B280u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3B284: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3B288: 03E00008 jr $ra */ + /* 0xBFC3B28C: A4209F0E sh $zero, -24818($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24818)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B28Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + return; +} + void func_1FC3B30C(CPUState* cpu) { label_BFC3B30C: psx_check_interrupts(cpu); @@ -115313,6 +133614,167 @@ label_BFC3B950: return; } +void func_1FC3B964(CPUState* cpu) { +label_BFC3B964: + psx_check_interrupts(cpu); + /* 0xBFC3B964: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC3B968: 81CEEDDF lb $t6, -4641($t6) */ + cpu->gpr[14] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-4641))); + /* 0xBFC3B96C: 3C18800E lui $t8, 0x800E */ + cpu->gpr[24] = 0x800E0000u; + /* 0xBFC3B970: 8318EDE5 lb $t8, -4635($t8) */ + cpu->gpr[24] = (uint32_t)(int32_t)(int8_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[24] + (-4635))); + /* 0xBFC3B974: 000E7900 sll $t7, $t6, 4 */ + cpu->gpr[15] = cpu->gpr[14] << 4u; + /* 0xBFC3B978: 01F81821 addu $v1, $t7, $t8 */ + cpu->gpr[3] = cpu->gpr[15] + cpu->gpr[24]; + /* 0xBFC3B97C: 00031C00 sll $v1, $v1, 16 */ + cpu->gpr[3] = cpu->gpr[3] << 16u; + /* 0xBFC3B980: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3B984: 8F399F00 lw $t9, -24832($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-24832)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B984u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3B988: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC3B98C: 00034140 sll $t0, $v1, 5 */ + cpu->gpr[8] = cpu->gpr[3] << 5u; + /* 0xBFC3B990: 03284821 addu $t1, $t9, $t0 */ + cpu->gpr[9] = cpu->gpr[25] + cpu->gpr[8]; + /* 0xBFC3B994: 912A0005 lbu $t2, 5($t1) */ + cpu->gpr[10] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[9] + (5))); + /* 0xBFC3B998: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC3B99C: 00AA1021 addu $v0, $a1, $t2 */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[10]; + /* 0xBFC3B9A0: 000210C2 srl $v0, $v0, 3 */ + cpu->gpr[2] = cpu->gpr[2] >> 3u; + /* 0xBFC3B9A4: 00021400 sll $v0, $v0, 16 */ + cpu->gpr[2] = cpu->gpr[2] << 16u; + /* 0xBFC3B9A8: 00021403 sra $v0, $v0, 16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 16u); + /* 0xBFC3B9AC: 28410010 slti $at, $v0, 16 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (16) ? 1 : 0); + /* 0xBFC3B9B0: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC3B9B4: 14200005 bne $at, $zero, 0xBFC3B9CC */ + uint32_t psx_brA_BFC3B9B4 = cpu->gpr[1]; uint32_t psx_brB_BFC3B9B4 = cpu->gpr[0]; + int psx_taken_BFC3B9B4 = (psx_brA_BFC3B9B4 != psx_brB_BFC3B9B4); + /* 0xBFC3B9B8: 00003021 addu $a2, $zero, $zero */ + cpu->gpr[6] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3B9B4) goto label_BFC3B9CC; +label_BFC3B9BC: + psx_check_interrupts(cpu); + /* 0xBFC3B9BC: 2442FFF0 addiu $v0, $v0, -16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-16)); + /* 0xBFC3B9C0: 00021400 sll $v0, $v0, 16 */ + cpu->gpr[2] = cpu->gpr[2] << 16u; + /* 0xBFC3B9C4: 24060001 addiu $a2, $zero, 1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3B9C8: 00021403 sra $v0, $v0, 16 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 16u); +label_BFC3B9CC: + psx_check_interrupts(cpu); + /* 0xBFC3B9CC: 3C0B8008 lui $t3, 0x8008 */ + cpu->gpr[11] = 0x80080000u; + /* 0xBFC3B9D0: 8D6B9F00 lw $t3, -24832($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (-24832)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3B9D0u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC3B9D4: 00036140 sll $t4, $v1, 5 */ + cpu->gpr[12] = cpu->gpr[3] << 5u; + /* 0xBFC3B9D8: 016C6821 addu $t5, $t3, $t4 */ + cpu->gpr[13] = cpu->gpr[11] + cpu->gpr[12]; + /* 0xBFC3B9DC: 91AE0004 lbu $t6, 4($t5) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[13] + (4))); + /* 0xBFC3B9E0: 2401000C addiu $at, $zero, 12 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (12)); + /* 0xBFC3B9E4: 008E7823 subu $t7, $a0, $t6 */ + cpu->gpr[15] = cpu->gpr[4] - cpu->gpr[14]; + /* 0xBFC3B9E8: 25F8003C addiu $t8, $t7, 60 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[15] + (60)); + /* 0xBFC3B9EC: 0018CC00 sll $t9, $t8, 16 */ + cpu->gpr[25] = cpu->gpr[24] << 16u; + /* 0xBFC3B9F0: 00194403 sra $t0, $t9, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[25] >> 16u); + /* 0xBFC3B9F4: 00C83021 addu $a2, $a2, $t0 */ + cpu->gpr[6] = cpu->gpr[6] + cpu->gpr[8]; + /* 0xBFC3B9F8: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC3B9FC: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC3BA00: 00C1001A div $a2, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[6]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3BA04: 00027040 sll $t6, $v0, 1 */ + cpu->gpr[14] = cpu->gpr[2] << 1u; + /* 0xBFC3BA08: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3BA0C: 00004810 mfhi $t1 */ + cpu->gpr[9] = cpu->hi; + /* 0xBFC3BA10: 00095400 sll $t2, $t1, 16 */ + cpu->gpr[10] = cpu->gpr[9] << 16u; + /* 0xBFC3BA14: 000A5C03 sra $t3, $t2, 16 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[10] >> 16u); + /* 0xBFC3BA18: 00003812 mflo $a3 */ + cpu->gpr[7] = cpu->lo; + /* 0xBFC3BA1C: 000B6100 sll $t4, $t3, 4 */ + cpu->gpr[12] = cpu->gpr[11] << 4u; + /* 0xBFC3BA20: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC3BA24: 000C6840 sll $t5, $t4, 1 */ + cpu->gpr[13] = cpu->gpr[12] << 1u; + /* 0xBFC3BA28: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC3BA2C: 01AE7821 addu $t7, $t5, $t6 */ + cpu->gpr[15] = cpu->gpr[13] + cpu->gpr[14]; + /* 0xBFC3BA30: 24E7FFFB addiu $a3, $a3, -5 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (-5)); + /* 0xBFC3BA34: 00AF2821 addu $a1, $a1, $t7 */ + cpu->gpr[5] = cpu->gpr[5] + cpu->gpr[15]; + /* 0xBFC3BA38: 00073C00 sll $a3, $a3, 16 */ + cpu->gpr[7] = cpu->gpr[7] << 16u; + /* 0xBFC3BA3C: 94A595FC lhu $a1, -27140($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-27140)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BA3Cu); return; } cpu->gpr[5] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3BA40: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC3BA44: 18E00004 blez $a3, 0xBFC3BA58 */ + uint32_t psx_brA_BFC3BA44 = cpu->gpr[7]; + int psx_taken_BFC3BA44 = ((int32_t)psx_brA_BFC3BA44 <= 0); + /* 0xBFC3BA48: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3BA44) goto label_BFC3BA58; +label_BFC3BA4C: + psx_check_interrupts(cpu); + /* 0xBFC3BA4C: 00E52804 sllv $a1, $a1, $a3 */ + cpu->gpr[5] = cpu->gpr[5] << (cpu->gpr[7] & 0x1Fu); + /* 0xBFC3BA50: 10000006 beq $zero, $zero, 0xBFC3BA6C */ + uint32_t psx_brA_BFC3BA50 = cpu->gpr[0]; uint32_t psx_brB_BFC3BA50 = cpu->gpr[0]; + int psx_taken_BFC3BA50 = (psx_brA_BFC3BA50 == psx_brB_BFC3BA50); + /* 0xBFC3BA54: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + if (psx_taken_BFC3BA50) goto label_BFC3BA6C; +label_BFC3BA58: + psx_check_interrupts(cpu); + /* 0xBFC3BA58: 04E10004 bgez $a3, 0xBFC3BA6C */ + uint32_t psx_brA_BFC3BA58 = cpu->gpr[7]; + int psx_taken_BFC3BA58 = ((int32_t)psx_brA_BFC3BA58 >= 0); + /* 0xBFC3BA5C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3BA58) goto label_BFC3BA6C; +label_BFC3BA60: + psx_check_interrupts(cpu); + /* 0xBFC3BA60: 0007C023 subu $t8, $zero, $a3 */ + cpu->gpr[24] = cpu->gpr[0] - cpu->gpr[7]; + /* 0xBFC3BA64: 03052806 srlv $a1, $a1, $t8 */ + cpu->gpr[5] = cpu->gpr[5] >> (cpu->gpr[24] & 0x1Fu); + /* 0xBFC3BA68: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; +label_BFC3BA6C: + psx_check_interrupts(cpu); + /* 0xBFC3BA6C: 03E00008 jr $ra */ + /* 0xBFC3BA70: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + return; +} + void func_1FC3BA74(CPUState* cpu) { label_BFC3BA74: psx_check_interrupts(cpu); @@ -115753,6 +134215,123 @@ label_BFC3BDA8: return; } +void func_1FC3BDB8(CPUState* cpu) { +label_BFC3BDB8: + psx_check_interrupts(cpu); + /* 0xBFC3BDB8: 00041C00 sll $v1, $a0, 16 */ + cpu->gpr[3] = cpu->gpr[4] << 16u; + /* 0xBFC3BDBC: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC3BDC0: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC3BDC4: 0460000F bltz $v1, 0xBFC3BE04 */ + uint32_t psx_brA_BFC3BDC4 = cpu->gpr[3]; + int psx_taken_BFC3BDC4 = ((int32_t)psx_brA_BFC3BDC4 < 0); + /* 0xBFC3BDC8: 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, 0xBFC3BDC8u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC3BDC4) goto label_BFC3BE04; +label_BFC3BDCC: + psx_check_interrupts(cpu); + /* 0xBFC3BDCC: 2861000A slti $at, $v1, 10 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[3] < (10) ? 1 : 0); + /* 0xBFC3BDD0: 1020000D beq $at, $zero, 0xBFC3BE08 */ + uint32_t psx_brA_BFC3BDD0 = cpu->gpr[1]; uint32_t psx_brB_BFC3BDD0 = cpu->gpr[0]; + int psx_taken_BFC3BDD0 = (psx_brA_BFC3BDD0 == psx_brB_BFC3BDD0); + /* 0xBFC3BDD4: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3BDD0) goto label_BFC3BE08; +label_BFC3BDD8: + psx_check_interrupts(cpu); + /* 0xBFC3BDD8: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3BDDC: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3BDE0: 3C04800E lui $a0, 0x800E */ + cpu->gpr[4] = 0x800E0000u; + /* 0xBFC3BDE4: AC2EEDC0 sw $t6, -4672($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4672)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BDE4u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3BDE8: AC23EDC4 sw $v1, -4668($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4668)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BDE8u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC3BDEC: 2484EDC0 addiu $a0, $a0, -4672 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-4672)); + /* 0xBFC3BDF0: 0C015630 jal 0xB00558C0 */ + /* 0xBFC3BDF4: A7A30018 sh $v1, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BDF4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + cpu->gpr[31] = 0xBFC3BDF8u; + psx_dispatch(cpu, 0x800558C0u); +label_BFC3BDF8: + psx_check_interrupts(cpu); + /* 0xBFC3BDF8: 87A30018 lh $v1, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BDF8u); return; } cpu->gpr[3] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3BDFC: 10000002 beq $zero, $zero, 0xBFC3BE08 */ + uint32_t psx_brA_BFC3BDFC = cpu->gpr[0]; uint32_t psx_brB_BFC3BDFC = cpu->gpr[0]; + int psx_taken_BFC3BDFC = (psx_brA_BFC3BDFC == psx_brB_BFC3BDFC); + /* 0xBFC3BE00: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC3BDFC) goto label_BFC3BE08; +label_BFC3BE04: + psx_check_interrupts(cpu); + /* 0xBFC3BE04: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); +label_BFC3BE08: + psx_check_interrupts(cpu); + /* 0xBFC3BE08: 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, 0xBFC3BE08u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3BE0C: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC3BE10: 03E00008 jr $ra */ + /* 0xBFC3BE14: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3BE18(CPUState* cpu) { +label_BFC3BE18: + psx_check_interrupts(cpu); + /* 0xBFC3BE18: 00042400 sll $a0, $a0, 16 */ + cpu->gpr[4] = cpu->gpr[4] << 16u; + /* 0xBFC3BE1C: 00042403 sra $a0, $a0, 16 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 16u); + /* 0xBFC3BE20: 000473C0 sll $t6, $a0, 15 */ + cpu->gpr[14] = cpu->gpr[4] << 15u; + /* 0xBFC3BE24: 01C47023 subu $t6, $t6, $a0 */ + cpu->gpr[14] = cpu->gpr[14] - cpu->gpr[4]; + /* 0xBFC3BE28: 2401007F addiu $at, $zero, 127 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC3BE2C: 01C1001A div $t6, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[14]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3BE30: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC3BE34: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC3BE38: 0005CBC0 sll $t9, $a1, 15 */ + cpu->gpr[25] = cpu->gpr[5] << 15u; + /* 0xBFC3BE3C: 0325C823 subu $t9, $t9, $a1 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[5]; + /* 0xBFC3BE40: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3BE44: 8F1895F4 lw $t8, -27148($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BE44u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3BE48: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3BE4C: 00007812 mflo $t7 */ + cpu->gpr[15] = cpu->lo; + /* 0xBFC3BE50: A70F0184 sh $t7, 388($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (388)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BE50u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3BE54: 8D2995F4 lw $t1, -27148($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-27148)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BE54u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3BE58: 0321001A div $t9, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3BE5C: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC3BE60: A5280186 sh $t0, 390($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (390)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BE60u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3BE64: 03E00008 jr $ra */ + /* 0xBFC3BE68: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3BE6C(CPUState* cpu) { label_BFC3BE6C: psx_check_interrupts(cpu); @@ -115777,6 +134356,72 @@ label_BFC3BE7C: return; } +void func_1FC3BE90(CPUState* cpu) { +label_BFC3BE90: + psx_check_interrupts(cpu); + /* 0xBFC3BE90: 00041C00 sll $v1, $a0, 16 */ + cpu->gpr[3] = cpu->gpr[4] << 16u; + /* 0xBFC3BE94: 00031C03 sra $v1, $v1, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] >> 16u); + /* 0xBFC3BE98: 00037B80 sll $t7, $v1, 14 */ + cpu->gpr[15] = cpu->gpr[3] << 14u; + /* 0xBFC3BE9C: 01E37823 subu $t7, $t7, $v1 */ + cpu->gpr[15] = cpu->gpr[15] - cpu->gpr[3]; + /* 0xBFC3BEA0: 2401007F addiu $at, $zero, 127 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (127)); + /* 0xBFC3BEA4: 01E1001A div $t7, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[15]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3BEA8: 00053C00 sll $a3, $a1, 16 */ + cpu->gpr[7] = cpu->gpr[5] << 16u; + /* 0xBFC3BEAC: 00073C03 sra $a3, $a3, 16 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] >> 16u); + /* 0xBFC3BEB0: 0007CB80 sll $t9, $a3, 14 */ + cpu->gpr[25] = cpu->gpr[7] << 14u; + /* 0xBFC3BEB4: 0327C823 subu $t9, $t9, $a3 */ + cpu->gpr[25] = cpu->gpr[25] - cpu->gpr[7]; + /* 0xBFC3BEB8: 27BDFFB0 addiu $sp, $sp, -80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-80)); + /* 0xBFC3BEBC: 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, 0xBFC3BEBCu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3BEC0: 240E0003 addiu $t6, $zero, 3 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC3BEC4: AFAE001C sw $t6, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BEC4u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3BEC8: 27A6001C addiu $a2, $sp, 28 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (28)); + /* 0xBFC3BECC: 24050100 addiu $a1, $zero, 256 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC3BED0: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3BED4: 0000C012 mflo $t8 */ + cpu->gpr[24] = cpu->lo; + /* 0xBFC3BED8: A7B80020 sh $t8, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BED8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC3BEDC: 00000000 nop */ + /* nop */ + /* 0xBFC3BEE0: 0321001A div $t9, $at */ + { int32_t psx_n = (int32_t)cpu->gpr[25]; int32_t psx_d = (int32_t)cpu->gpr[1]; 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; } } + /* 0xBFC3BEE4: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC3BEE8: A7A80022 sh $t0, 34($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BEE8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC3BEEC: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC3BEF0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3BEF4u; + psx_dispatch(cpu, 0x80054710u); +label_BFC3BEF4: + psx_check_interrupts(cpu); + /* 0xBFC3BEF4: 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, 0xBFC3BEF4u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3BEF8: 27BD0050 addiu $sp, $sp, 80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC3BEFC: 03E00008 jr $ra */ + /* 0xBFC3BF00: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3BF10(CPUState* cpu) { label_BFC3BF10: psx_check_interrupts(cpu); @@ -115809,6 +134454,210 @@ label_BFC3BF30: return; } +void func_1FC3BF40(CPUState* cpu) { +label_BFC3BF40: + psx_check_interrupts(cpu); + /* 0xBFC3BF40: 00042600 sll $a0, $a0, 24 */ + cpu->gpr[4] = cpu->gpr[4] << 24u; + /* 0xBFC3BF44: 00042603 sra $a0, $a0, 24 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 24u); + /* 0xBFC3BF48: 27BDFFB0 addiu $sp, $sp, -80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-80)); + /* 0xBFC3BF4C: 00052E00 sll $a1, $a1, 24 */ + cpu->gpr[5] = cpu->gpr[5] << 24u; + /* 0xBFC3BF50: 00063600 sll $a2, $a2, 24 */ + cpu->gpr[6] = cpu->gpr[6] << 24u; + /* 0xBFC3BF54: 00063603 sra $a2, $a2, 24 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 24u); + /* 0xBFC3BF58: 00052E03 sra $a1, $a1, 24 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 24u); + /* 0xBFC3BF5C: 10800003 beq $a0, $zero, 0xBFC3BF6C */ + uint32_t psx_brA_BFC3BF5C = cpu->gpr[4]; uint32_t psx_brB_BFC3BF5C = cpu->gpr[0]; + int psx_taken_BFC3BF5C = (psx_brA_BFC3BF5C == psx_brB_BFC3BF5C); + /* 0xBFC3BF60: 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, 0xBFC3BF60u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC3BF5C) goto label_BFC3BF6C; +label_BFC3BF64: + psx_check_interrupts(cpu); + /* 0xBFC3BF64: 1000000C beq $zero, $zero, 0xBFC3BF98 */ + uint32_t psx_brA_BFC3BF64 = cpu->gpr[0]; uint32_t psx_brB_BFC3BF64 = cpu->gpr[0]; + int psx_taken_BFC3BF64 = (psx_brA_BFC3BF64 == psx_brB_BFC3BF64); + /* 0xBFC3BF68: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3BF64) goto label_BFC3BF98; +label_BFC3BF6C: + psx_check_interrupts(cpu); + /* 0xBFC3BF6C: 14A00005 bne $a1, $zero, 0xBFC3BF84 */ + uint32_t psx_brA_BFC3BF6C = cpu->gpr[5]; uint32_t psx_brB_BFC3BF6C = cpu->gpr[0]; + int psx_taken_BFC3BF6C = (psx_brA_BFC3BF6C != psx_brB_BFC3BF6C); + /* 0xBFC3BF70: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3BF6C) goto label_BFC3BF84; +label_BFC3BF74: + psx_check_interrupts(cpu); + /* 0xBFC3BF74: 240E0400 addiu $t6, $zero, 1024 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1024)); + /* 0xBFC3BF78: AFAE001C sw $t6, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BF78u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3BF7C: AFA60030 sw $a2, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BF7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC3BF80: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC3BF84: + psx_check_interrupts(cpu); + /* 0xBFC3BF84: 14A20004 bne $a1, $v0, 0xBFC3BF98 */ + uint32_t psx_brA_BFC3BF84 = cpu->gpr[5]; uint32_t psx_brB_BFC3BF84 = cpu->gpr[2]; + int psx_taken_BFC3BF84 = (psx_brA_BFC3BF84 != psx_brB_BFC3BF84); + /* 0xBFC3BF88: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3BF84) goto label_BFC3BF98; +label_BFC3BF8C: + psx_check_interrupts(cpu); + /* 0xBFC3BF8C: 240F0100 addiu $t7, $zero, 256 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC3BF90: AFAF001C sw $t7, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BF90u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3BF94: AFA6002C sw $a2, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BF94u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } +label_BFC3BF98: + psx_check_interrupts(cpu); + /* 0xBFC3BF98: 1482000C bne $a0, $v0, 0xBFC3BFCC */ + uint32_t psx_brA_BFC3BF98 = cpu->gpr[4]; uint32_t psx_brB_BFC3BF98 = cpu->gpr[2]; + int psx_taken_BFC3BF98 = (psx_brA_BFC3BF98 != psx_brB_BFC3BF98); + /* 0xBFC3BF9C: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3BF98) goto label_BFC3BFCC; +label_BFC3BFA0: + psx_check_interrupts(cpu); + /* 0xBFC3BFA0: 14A00004 bne $a1, $zero, 0xBFC3BFB4 */ + uint32_t psx_brA_BFC3BFA0 = cpu->gpr[5]; uint32_t psx_brB_BFC3BFA0 = cpu->gpr[0]; + int psx_taken_BFC3BFA0 = (psx_brA_BFC3BFA0 != psx_brB_BFC3BFA0); + /* 0xBFC3BFA4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3BFA0) goto label_BFC3BFB4; +label_BFC3BFA8: + psx_check_interrupts(cpu); + /* 0xBFC3BFA8: 24180800 addiu $t8, $zero, 2048 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (2048)); + /* 0xBFC3BFAC: AFB8001C sw $t8, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BFACu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3BFB0: AFA6003C sw $a2, 60($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (60)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BFB0u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } +label_BFC3BFB4: + psx_check_interrupts(cpu); + /* 0xBFC3BFB4: 14A20005 bne $a1, $v0, 0xBFC3BFCC */ + uint32_t psx_brA_BFC3BFB4 = cpu->gpr[5]; uint32_t psx_brB_BFC3BFB4 = cpu->gpr[2]; + int psx_taken_BFC3BFB4 = (psx_brA_BFC3BFB4 != psx_brB_BFC3BFB4); + /* 0xBFC3BFB8: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3BFB4) goto label_BFC3BFCC; +label_BFC3BFBC: + psx_check_interrupts(cpu); + /* 0xBFC3BFBC: 24190200 addiu $t9, $zero, 512 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[0] + (512)); + /* 0xBFC3BFC0: 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, 0xBFC3BFC0u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3BFC4: AFA60038 sw $a2, 56($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (56)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3BFC4u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC3BFC8: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3BFCC: + psx_check_interrupts(cpu); + /* 0xBFC3BFCC: 24050100 addiu $a1, $zero, 256 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC3BFD0: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC3BFD4: 27A6001C addiu $a2, $sp, 28 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (28)); + cpu->gpr[31] = 0xBFC3BFD8u; + psx_dispatch(cpu, 0x80054710u); +label_BFC3BFD8: + psx_check_interrupts(cpu); + /* 0xBFC3BFD8: 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, 0xBFC3BFD8u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3BFDC: 27BD0050 addiu $sp, $sp, 80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC3BFE0: 03E00008 jr $ra */ + /* 0xBFC3BFE4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3BFF0(CPUState* cpu) { +label_BFC3BFF0: + psx_check_interrupts(cpu); + /* 0xBFC3BFF0: 00042600 sll $a0, $a0, 24 */ + cpu->gpr[4] = cpu->gpr[4] << 24u; + /* 0xBFC3BFF4: 00042603 sra $a0, $a0, 24 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] >> 24u); + /* 0xBFC3BFF8: 27BDFFB0 addiu $sp, $sp, -80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-80)); + /* 0xBFC3BFFC: 00052C00 sll $a1, $a1, 16 */ + cpu->gpr[5] = cpu->gpr[5] << 16u; + /* 0xBFC3C000: 00063400 sll $a2, $a2, 16 */ + cpu->gpr[6] = cpu->gpr[6] << 16u; + /* 0xBFC3C004: 00063403 sra $a2, $a2, 16 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] >> 16u); + /* 0xBFC3C008: 00052C03 sra $a1, $a1, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] >> 16u); + /* 0xBFC3C00C: 14800005 bne $a0, $zero, 0xBFC3C024 */ + uint32_t psx_brA_BFC3C00C = cpu->gpr[4]; uint32_t psx_brB_BFC3C00C = cpu->gpr[0]; + int psx_taken_BFC3C00C = (psx_brA_BFC3C00C != psx_brB_BFC3C00C); + /* 0xBFC3C010: 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, 0xBFC3C010u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC3C00C) goto label_BFC3C024; +label_BFC3C014: + psx_check_interrupts(cpu); + /* 0xBFC3C014: A7A50028 sh $a1, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C014u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC3C018: 240E0030 addiu $t6, $zero, 48 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (48)); + /* 0xBFC3C01C: AFAE001C sw $t6, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C01Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3C020: A7A6002A sh $a2, 42($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C020u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } +label_BFC3C024: + psx_check_interrupts(cpu); + /* 0xBFC3C024: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3C028: 14810006 bne $a0, $at, 0xBFC3C044 */ + uint32_t psx_brA_BFC3C028 = cpu->gpr[4]; uint32_t psx_brB_BFC3C028 = cpu->gpr[1]; + int psx_taken_BFC3C028 = (psx_brA_BFC3C028 != psx_brB_BFC3C028); + /* 0xBFC3C02C: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3C028) goto label_BFC3C044; +label_BFC3C030: + psx_check_interrupts(cpu); + /* 0xBFC3C030: A7A50034 sh $a1, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C030u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC3C034: 240F00C0 addiu $t7, $zero, 192 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[0] + (192)); + /* 0xBFC3C038: AFAF001C sw $t7, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C038u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3C03C: A7A60036 sh $a2, 54($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (54)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C03Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3C040: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3C044: + psx_check_interrupts(cpu); + /* 0xBFC3C044: 24050100 addiu $a1, $zero, 256 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (256)); + /* 0xBFC3C048: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC3C04C: 27A6001C addiu $a2, $sp, 28 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (28)); + cpu->gpr[31] = 0xBFC3C050u; + psx_dispatch(cpu, 0x80054710u); +label_BFC3C050: + psx_check_interrupts(cpu); + /* 0xBFC3C050: 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, 0xBFC3C050u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3C054: 27BD0050 addiu $sp, $sp, 80 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (80)); + /* 0xBFC3C058: 03E00008 jr $ra */ + /* 0xBFC3C05C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3C060(CPUState* cpu) { label_BFC3C060: psx_check_interrupts(cpu); @@ -116012,6 +134861,405 @@ label_BFC3C194: return; } +void func_1FC3C19C(CPUState* cpu) { +label_BFC3C19C: + psx_check_interrupts(cpu); + /* 0xBFC3C19C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3C1A0: AC20EE28 sw $zero, -4568($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4568)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1A0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3C1A4: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3C1A8: 27BDFFE0 addiu $sp, $sp, -32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-32)); + /* 0xBFC3C1AC: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC3C1B0: AC20EE30 sw $zero, -4560($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4560)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1B0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3C1B4: 8C4297B0 lw $v0, -26704($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-26704)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1B4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3C1B8: AFB00018 sw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1B8u); return; } cpu->write_word(psx_addr, cpu->gpr[16]); } + /* 0xBFC3C1BC: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3C1C0: AFBF001C sw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1C0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3C1C4: A420EE24 sh $zero, -4572($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4572)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1C4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C1C8: 8C4E0000 lw $t6, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1C8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3C1CC: 3C108008 lui $s0, 0x8008 */ + cpu->gpr[16] = 0x80080000u; + /* 0xBFC3C1D0: 8E1097A0 lw $s0, -26720($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1D0u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC3C1D4: 3C01000B lui $at, 0xB */ + cpu->gpr[1] = 0x000B0000u; + /* 0xBFC3C1D8: 01C17825 or $t7, $t6, $at */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[1]; + /* 0xBFC3C1DC: 34188000 ori $t8, $zero, 0x8000 */ + cpu->gpr[24] = cpu->gpr[0] | 0x8000u; + /* 0xBFC3C1E0: AC4F0000 sw $t7, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1E0u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3C1E4: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C1E8: A61801AA sh $t8, 426($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1E8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + cpu->gpr[31] = 0xBFC3C1ECu; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C1EC: + psx_check_interrupts(cpu); + /* 0xBFC3C1EC: 961901AE lhu $t9, 430($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (430)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C1ECu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C1F0: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3C1F4: 332A07FF andi $t2, $t9, 0x7FF */ + cpu->gpr[10] = cpu->gpr[25] & 0x7FFu; + /* 0xBFC3C1F8: 15400003 bne $t2, $zero, 0xBFC3C208 */ + uint32_t psx_brA_BFC3C1F8 = cpu->gpr[10]; uint32_t psx_brB_BFC3C1F8 = cpu->gpr[0]; + int psx_taken_BFC3C1F8 = (psx_brA_BFC3C1F8 != psx_brB_BFC3C1F8); + /* 0xBFC3C1FC: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + if (psx_taken_BFC3C1F8) goto label_BFC3C208; +label_BFC3C200: + psx_check_interrupts(cpu); + /* 0xBFC3C200: 10000015 beq $zero, $zero, 0xBFC3C258 */ + uint32_t psx_brA_BFC3C200 = cpu->gpr[0]; uint32_t psx_brB_BFC3C200 = cpu->gpr[0]; + int psx_taken_BFC3C200 = (psx_brA_BFC3C200 == psx_brB_BFC3C200); + /* 0xBFC3C204: AC22EE20 sw $v0, -4576($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4576)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C204u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC3C200) goto label_BFC3C258; +label_BFC3C208: + psx_check_interrupts(cpu); + /* 0xBFC3C208: 24420001 addiu $v0, $v0, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1)); + /* 0xBFC3C20C: 28411389 slti $at, $v0, 5001 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (5001) ? 1 : 0); + /* 0xBFC3C210: 1420000B bne $at, $zero, 0xBFC3C240 */ + uint32_t psx_brA_BFC3C210 = cpu->gpr[1]; uint32_t psx_brB_BFC3C210 = cpu->gpr[0]; + int psx_taken_BFC3C210 = (psx_brA_BFC3C210 != psx_brB_BFC3C210); + /* 0xBFC3C214: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + if (psx_taken_BFC3C210) goto label_BFC3C240; +label_BFC3C218: + psx_check_interrupts(cpu); + /* 0xBFC3C218: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3C21C: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3C220: AC22EE20 sw $v0, -4576($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4576)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C220u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC3C224: 24A597E0 addiu $a1, $a1, -26656 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-26656)); + /* 0xBFC3C228: 0C016A44 jal 0xB005A910 */ + /* 0xBFC3C22C: 248497CC addiu $a0, $a0, -26676 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-26676)); + cpu->gpr[31] = 0xBFC3C230u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC3C230: + psx_check_interrupts(cpu); + /* 0xBFC3C230: 3C108008 lui $s0, 0x8008 */ + cpu->gpr[16] = 0x80080000u; + /* 0xBFC3C234: 8E1097A0 lw $s0, -26720($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C234u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC3C238: 10000008 beq $zero, $zero, 0xBFC3C25C */ + uint32_t psx_brA_BFC3C238 = cpu->gpr[0]; uint32_t psx_brB_BFC3C238 = cpu->gpr[0]; + int psx_taken_BFC3C238 = (psx_brA_BFC3C238 == psx_brB_BFC3C238); + /* 0xBFC3C23C: A6000180 sh $zero, 384($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (384)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C23Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + if (psx_taken_BFC3C238) goto label_BFC3C25C; +label_BFC3C240: + psx_check_interrupts(cpu); + /* 0xBFC3C240: 960B01AE lhu $t3, 430($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (430)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C240u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C244: 00000000 nop */ + /* nop */ + /* 0xBFC3C248: 316C07FF andi $t4, $t3, 0x7FF */ + cpu->gpr[12] = cpu->gpr[11] & 0x7FFu; + /* 0xBFC3C24C: 1580FFEE bne $t4, $zero, 0xBFC3C208 */ + uint32_t psx_brA_BFC3C24C = cpu->gpr[12]; uint32_t psx_brB_BFC3C24C = cpu->gpr[0]; + int psx_taken_BFC3C24C = (psx_brA_BFC3C24C != psx_brB_BFC3C24C); + /* 0xBFC3C250: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + if (psx_taken_BFC3C24C) goto label_BFC3C208; +label_BFC3C254: + psx_check_interrupts(cpu); + /* 0xBFC3C254: AC22EE20 sw $v0, -4576($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4576)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C254u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } +label_BFC3C258: + psx_check_interrupts(cpu); + /* 0xBFC3C258: A6000180 sh $zero, 384($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (384)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C258u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } +label_BFC3C25C: + psx_check_interrupts(cpu); + /* 0xBFC3C25C: A6000182 sh $zero, 386($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (386)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C25Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C260: A6000184 sh $zero, 388($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (388)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C260u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C264: A6000186 sh $zero, 390($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (390)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C264u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C268: 3402FFFF ori $v0, $zero, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3C26C: A602018C sh $v0, 396($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (396)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C26Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC3C270: A602018E sh $v0, 398($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (398)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C270u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC3C274: A6000190 sh $zero, 400($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (400)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C274u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C278: A6000192 sh $zero, 402($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (402)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C278u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C27C: A6000194 sh $zero, 404($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (404)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C27Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C280: A6000196 sh $zero, 406($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (406)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C280u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C284: A6000198 sh $zero, 408($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (408)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C284u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C288: A600019A sh $zero, 410($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (410)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C288u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C28C: A60001B0 sh $zero, 432($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (432)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C28Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C290: A60001B2 sh $zero, 434($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (434)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C290u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C294: A60001B4 sh $zero, 436($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (436)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C294u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C298: A60001B6 sh $zero, 438($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (438)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C298u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C29C: 240D0004 addiu $t5, $zero, 4 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (4)); + /* 0xBFC3C2A0: A60D01AC sh $t5, 428($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2A0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC3C2A4: 240E0200 addiu $t6, $zero, 512 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (512)); + /* 0xBFC3C2A8: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3C2AC: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3C2B0: A42EEE24 sh $t6, -4572($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4572)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2B0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC3C2B4: 248497BC addiu $a0, $a0, -26692 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-26692)); + /* 0xBFC3C2B8: 0C015138 jal 0xB00544E0 */ + /* 0xBFC3C2BC: 24050010 addiu $a1, $zero, 16 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (16)); + cpu->gpr[31] = 0xBFC3C2C0u; + psx_dispatch(cpu, 0x800544E0u); +label_BFC3C2C0: + psx_check_interrupts(cpu); + /* 0xBFC3C2C0: 3C108008 lui $s0, 0x8008 */ + cpu->gpr[16] = 0x80080000u; + /* 0xBFC3C2C4: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3C2C8: 8E1097A0 lw $s0, -26720($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2C8u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC3C2CC: AC20EE30 sw $zero, -4560($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4560)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2CCu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3C2D0: 00004021 addu $t0, $zero, $zero */ + cpu->gpr[8] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3C2D4: 24063FFF addiu $a2, $zero, 16383 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (16383)); + /* 0xBFC3C2D8: 24070200 addiu $a3, $zero, 512 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (512)); + /* 0xBFC3C2DC: 24090018 addiu $t1, $zero, 24 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (24)); +label_BFC3C2E0: + psx_check_interrupts(cpu); + /* 0xBFC3C2E0: 000878C0 sll $t7, $t0, 3 */ + cpu->gpr[15] = cpu->gpr[8] << 3u; + /* 0xBFC3C2E4: 000FC040 sll $t8, $t7, 1 */ + cpu->gpr[24] = cpu->gpr[15] << 1u; + /* 0xBFC3C2E8: 02181021 addu $v0, $s0, $t8 */ + cpu->gpr[2] = cpu->gpr[16] + cpu->gpr[24]; + /* 0xBFC3C2EC: A4400000 sh $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2ECu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C2F0: A4400002 sh $zero, 2($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2F0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C2F4: A4460004 sh $a2, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3C2F8: A4400008 sh $zero, 8($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2F8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C2FC: A440000A sh $zero, 10($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C2FCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C300: A4470006 sh $a3, 6($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C300u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC3C304: 25190001 addiu $t9, $t0, 1 */ + cpu->gpr[25] = (uint32_t)((int32_t)cpu->gpr[8] + (1)); + /* 0xBFC3C308: 001950C0 sll $t2, $t9, 3 */ + cpu->gpr[10] = cpu->gpr[25] << 3u; + /* 0xBFC3C30C: 000A5840 sll $t3, $t2, 1 */ + cpu->gpr[11] = cpu->gpr[10] << 1u; + /* 0xBFC3C310: 020B1821 addu $v1, $s0, $t3 */ + cpu->gpr[3] = cpu->gpr[16] + cpu->gpr[11]; + /* 0xBFC3C314: A4600000 sh $zero, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C314u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C318: A4600002 sh $zero, 2($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C318u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C31C: A4660004 sh $a2, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C31Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3C320: A4600008 sh $zero, 8($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C320u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C324: A460000A sh $zero, 10($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C324u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C328: A4670006 sh $a3, 6($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C328u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC3C32C: 250C0002 addiu $t4, $t0, 2 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[8] + (2)); + /* 0xBFC3C330: 000C68C0 sll $t5, $t4, 3 */ + cpu->gpr[13] = cpu->gpr[12] << 3u; + /* 0xBFC3C334: 000D7040 sll $t6, $t5, 1 */ + cpu->gpr[14] = cpu->gpr[13] << 1u; + /* 0xBFC3C338: 020E2021 addu $a0, $s0, $t6 */ + cpu->gpr[4] = cpu->gpr[16] + cpu->gpr[14]; + /* 0xBFC3C33C: A4800000 sh $zero, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C33Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C340: A4800002 sh $zero, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C340u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C344: A4860004 sh $a2, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C344u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3C348: A4800008 sh $zero, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C348u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C34C: 250F0003 addiu $t7, $t0, 3 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[8] + (3)); + /* 0xBFC3C350: A480000A sh $zero, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C350u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C354: 000FC0C0 sll $t8, $t7, 3 */ + cpu->gpr[24] = cpu->gpr[15] << 3u; + /* 0xBFC3C358: 0018C840 sll $t9, $t8, 1 */ + cpu->gpr[25] = cpu->gpr[24] << 1u; + /* 0xBFC3C35C: A4870006 sh $a3, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C35Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC3C360: 02192821 addu $a1, $s0, $t9 */ + cpu->gpr[5] = cpu->gpr[16] + cpu->gpr[25]; + /* 0xBFC3C364: A4A00000 sh $zero, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C364u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C368: A4A00002 sh $zero, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C368u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C36C: A4A60004 sh $a2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C36Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC3C370: A4A00008 sh $zero, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C370u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C374: A4A0000A sh $zero, 10($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C374u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC3C378: 25080004 addiu $t0, $t0, 4 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (4)); + /* 0xBFC3C37C: 1509FFD8 bne $t0, $t1, 0xBFC3C2E0 */ + uint32_t psx_brA_BFC3C37C = cpu->gpr[8]; uint32_t psx_brB_BFC3C37C = cpu->gpr[9]; + int psx_taken_BFC3C37C = (psx_brA_BFC3C37C != psx_brB_BFC3C37C); + /* 0xBFC3C380: A4A70006 sh $a3, 6($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C380u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + if (psx_taken_BFC3C37C) goto label_BFC3C2E0; +label_BFC3C384: + psx_check_interrupts(cpu); + /* 0xBFC3C384: 960A0188 lhu $t2, 392($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (392)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C384u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C388: 00000000 nop */ + /* nop */ + /* 0xBFC3C38C: 354BFFFF ori $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] | 0xFFFFu; + /* 0xBFC3C390: A60B0188 sh $t3, 392($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (392)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C390u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC3C394: 960C018A lhu $t4, 394($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (394)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C394u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C398: 00000000 nop */ + /* nop */ + /* 0xBFC3C39C: 358D00FF ori $t5, $t4, 0xFF */ + cpu->gpr[13] = cpu->gpr[12] | 0xFFu; + /* 0xBFC3C3A0: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3A4: A60D018A sh $t5, 394($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (394)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C3A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + cpu->gpr[31] = 0xBFC3C3A8u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3A8: + psx_check_interrupts(cpu); + /* 0xBFC3C3A8: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3AC: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3B0u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3B0: + psx_check_interrupts(cpu); + /* 0xBFC3C3B0: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3B4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3B8u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3B8: + psx_check_interrupts(cpu); + /* 0xBFC3C3B8: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3BC: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3C0u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3C0: + psx_check_interrupts(cpu); + /* 0xBFC3C3C0: 960E018C lhu $t6, 396($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (396)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C3C0u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C3C4: 00000000 nop */ + /* nop */ + /* 0xBFC3C3C8: 35CFFFFF ori $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] | 0xFFFFu; + /* 0xBFC3C3CC: A60F018C sh $t7, 396($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (396)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C3CCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3C3D0: 9618018E lhu $t8, 398($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (398)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C3D0u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3C3D4: 00000000 nop */ + /* nop */ + /* 0xBFC3C3D8: 371900FF ori $t9, $t8, 0xFF */ + cpu->gpr[25] = cpu->gpr[24] | 0xFFu; + /* 0xBFC3C3DC: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3E0: A619018E sh $t9, 398($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (398)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C3E0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + cpu->gpr[31] = 0xBFC3C3E4u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3E4: + psx_check_interrupts(cpu); + /* 0xBFC3C3E4: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3E8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3ECu; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3EC: + psx_check_interrupts(cpu); + /* 0xBFC3C3EC: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3F0: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3F4u; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3F4: + psx_check_interrupts(cpu); + /* 0xBFC3C3F4: 0C015050 jal 0xB0054140 */ + /* 0xBFC3C3F8: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3C3FCu; + psx_dispatch(cpu, 0x80054140u); +label_BFC3C3FC: + psx_check_interrupts(cpu); + /* 0xBFC3C3FC: 340AC000 ori $t2, $zero, 0xC000 */ + cpu->gpr[10] = cpu->gpr[0] | 0xC000u; + /* 0xBFC3C400: A60A01AA sh $t2, 426($s0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[16] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C400u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC3C404: 8FBF001C lw $ra, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C404u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3C408: 8FB00018 lw $s0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C408u); return; } cpu->gpr[16] = cpu->read_word(psx_addr); } + /* 0xBFC3C40C: 27BD0020 addiu $sp, $sp, 32 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (32)); + /* 0xBFC3C410: 03E00008 jr $ra */ + /* 0xBFC3C414: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +} + +void func_1FC3C418(CPUState* cpu) { +label_BFC3C418: + psx_check_interrupts(cpu); + /* 0xBFC3C418: AFA40000 sw $a0, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C418u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC3C41C: AFA50004 sw $a1, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3C41Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3C420: 03E00008 jr $ra */ + /* 0xBFC3C424: 24020003 addiu $v0, $zero, 3 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + return; +} + void func_1FC3C428(CPUState* cpu) { label_BFC3C428: psx_check_interrupts(cpu); @@ -118091,6 +137339,1809 @@ label_BFC3CEBC: return; } +void func_1FC3CEC8(CPUState* cpu) { +label_BFC3CEC8: + psx_check_interrupts(cpu); + /* 0xBFC3CEC8: 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, 0xBFC3CEC8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3CECC: 00000000 nop */ + /* nop */ + /* 0xBFC3CED0: 14400004 bne $v0, $zero, 0xBFC3CEE4 */ + uint32_t psx_brA_BFC3CED0 = cpu->gpr[2]; uint32_t psx_brB_BFC3CED0 = cpu->gpr[0]; + int psx_taken_BFC3CED0 = (psx_brA_BFC3CED0 != psx_brB_BFC3CED0); + /* 0xBFC3CED4: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3CED0) goto label_BFC3CEE4; +label_BFC3CED8: + psx_check_interrupts(cpu); + /* 0xBFC3CED8: 10000002 beq $zero, $zero, 0xBFC3CEE4 */ + uint32_t psx_brA_BFC3CED8 = cpu->gpr[0]; uint32_t psx_brB_BFC3CED8 = cpu->gpr[0]; + int psx_taken_BFC3CED8 = (psx_brA_BFC3CED8 == psx_brB_BFC3CED8); + /* 0xBFC3CEDC: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3CED8) goto label_BFC3CEE4; +label_BFC3CEE0: + psx_check_interrupts(cpu); + /* 0xBFC3CEE0: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3CEE4: + psx_check_interrupts(cpu); + /* 0xBFC3CEE4: 14600008 bne $v1, $zero, 0xBFC3CF08 */ + uint32_t psx_brA_BFC3CEE4 = cpu->gpr[3]; uint32_t psx_brB_BFC3CEE4 = cpu->gpr[0]; + int psx_taken_BFC3CEE4 = (psx_brA_BFC3CEE4 != psx_brB_BFC3CEE4); + /* 0xBFC3CEE8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CEE4) goto label_BFC3CF08; +label_BFC3CEEC: + psx_check_interrupts(cpu); + /* 0xBFC3CEEC: 304E0001 andi $t6, $v0, 0x1 */ + cpu->gpr[14] = cpu->gpr[2] & 0x1u; + /* 0xBFC3CEF0: 15C00005 bne $t6, $zero, 0xBFC3CF08 */ + uint32_t psx_brA_BFC3CEF0 = cpu->gpr[14]; uint32_t psx_brB_BFC3CEF0 = cpu->gpr[0]; + int psx_taken_BFC3CEF0 = (psx_brA_BFC3CEF0 != psx_brB_BFC3CEF0); + /* 0xBFC3CEF4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CEF0) goto label_BFC3CF08; +label_BFC3CEF8: + psx_check_interrupts(cpu); + /* 0xBFC3CEF8: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3CEFC: 8CA597A0 lw $a1, -26720($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CEFCu); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3CF00: 10000006 beq $zero, $zero, 0xBFC3CF1C */ + uint32_t psx_brA_BFC3CF00 = cpu->gpr[0]; uint32_t psx_brB_BFC3CF00 = cpu->gpr[0]; + int psx_taken_BFC3CF00 = (psx_brA_BFC3CF00 == psx_brB_BFC3CF00); + /* 0xBFC3CF04: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF00) goto label_BFC3CF1C; +label_BFC3CF08: + psx_check_interrupts(cpu); + /* 0xBFC3CF08: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3CF0C: 8CA597A0 lw $a1, -26720($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF0Cu); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3CF10: 948F0004 lhu $t7, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF10u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CF14: 00000000 nop */ + /* nop */ + /* 0xBFC3CF18: A4AF01C0 sh $t7, 448($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (448)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF18u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3CF1C: + psx_check_interrupts(cpu); + /* 0xBFC3CF1C: 14600004 bne $v1, $zero, 0xBFC3CF30 */ + uint32_t psx_brA_BFC3CF1C = cpu->gpr[3]; uint32_t psx_brB_BFC3CF1C = cpu->gpr[0]; + int psx_taken_BFC3CF1C = (psx_brA_BFC3CF1C != psx_brB_BFC3CF1C); + /* 0xBFC3CF20: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF1C) goto label_BFC3CF30; +label_BFC3CF24: + psx_check_interrupts(cpu); + /* 0xBFC3CF24: 30580002 andi $t8, $v0, 0x2 */ + cpu->gpr[24] = cpu->gpr[2] & 0x2u; + /* 0xBFC3CF28: 13000004 beq $t8, $zero, 0xBFC3CF3C */ + uint32_t psx_brA_BFC3CF28 = cpu->gpr[24]; uint32_t psx_brB_BFC3CF28 = cpu->gpr[0]; + int psx_taken_BFC3CF28 = (psx_brA_BFC3CF28 == psx_brB_BFC3CF28); + /* 0xBFC3CF2C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF28) goto label_BFC3CF3C; +label_BFC3CF30: + psx_check_interrupts(cpu); + /* 0xBFC3CF30: 94990006 lhu $t9, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF30u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CF34: 00000000 nop */ + /* nop */ + /* 0xBFC3CF38: A4B901C2 sh $t9, 450($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (450)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF38u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3CF3C: + psx_check_interrupts(cpu); + /* 0xBFC3CF3C: 14600004 bne $v1, $zero, 0xBFC3CF50 */ + uint32_t psx_brA_BFC3CF3C = cpu->gpr[3]; uint32_t psx_brB_BFC3CF3C = cpu->gpr[0]; + int psx_taken_BFC3CF3C = (psx_brA_BFC3CF3C != psx_brB_BFC3CF3C); + /* 0xBFC3CF40: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF3C) goto label_BFC3CF50; +label_BFC3CF44: + psx_check_interrupts(cpu); + /* 0xBFC3CF44: 30480004 andi $t0, $v0, 0x4 */ + cpu->gpr[8] = cpu->gpr[2] & 0x4u; + /* 0xBFC3CF48: 11000004 beq $t0, $zero, 0xBFC3CF5C */ + uint32_t psx_brA_BFC3CF48 = cpu->gpr[8]; uint32_t psx_brB_BFC3CF48 = cpu->gpr[0]; + int psx_taken_BFC3CF48 = (psx_brA_BFC3CF48 == psx_brB_BFC3CF48); + /* 0xBFC3CF4C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF48) goto label_BFC3CF5C; +label_BFC3CF50: + psx_check_interrupts(cpu); + /* 0xBFC3CF50: 94890008 lhu $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF50u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CF54: 00000000 nop */ + /* nop */ + /* 0xBFC3CF58: A4A901C4 sh $t1, 452($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (452)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF58u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3CF5C: + psx_check_interrupts(cpu); + /* 0xBFC3CF5C: 14600004 bne $v1, $zero, 0xBFC3CF70 */ + uint32_t psx_brA_BFC3CF5C = cpu->gpr[3]; uint32_t psx_brB_BFC3CF5C = cpu->gpr[0]; + int psx_taken_BFC3CF5C = (psx_brA_BFC3CF5C != psx_brB_BFC3CF5C); + /* 0xBFC3CF60: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF5C) goto label_BFC3CF70; +label_BFC3CF64: + psx_check_interrupts(cpu); + /* 0xBFC3CF64: 304A0008 andi $t2, $v0, 0x8 */ + cpu->gpr[10] = cpu->gpr[2] & 0x8u; + /* 0xBFC3CF68: 11400004 beq $t2, $zero, 0xBFC3CF7C */ + uint32_t psx_brA_BFC3CF68 = cpu->gpr[10]; uint32_t psx_brB_BFC3CF68 = cpu->gpr[0]; + int psx_taken_BFC3CF68 = (psx_brA_BFC3CF68 == psx_brB_BFC3CF68); + /* 0xBFC3CF6C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF68) goto label_BFC3CF7C; +label_BFC3CF70: + psx_check_interrupts(cpu); + /* 0xBFC3CF70: 948B000A lhu $t3, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF70u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CF74: 00000000 nop */ + /* nop */ + /* 0xBFC3CF78: A4AB01C6 sh $t3, 454($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (454)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF78u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3CF7C: + psx_check_interrupts(cpu); + /* 0xBFC3CF7C: 14600004 bne $v1, $zero, 0xBFC3CF90 */ + uint32_t psx_brA_BFC3CF7C = cpu->gpr[3]; uint32_t psx_brB_BFC3CF7C = cpu->gpr[0]; + int psx_taken_BFC3CF7C = (psx_brA_BFC3CF7C != psx_brB_BFC3CF7C); + /* 0xBFC3CF80: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF7C) goto label_BFC3CF90; +label_BFC3CF84: + psx_check_interrupts(cpu); + /* 0xBFC3CF84: 304C0010 andi $t4, $v0, 0x10 */ + cpu->gpr[12] = cpu->gpr[2] & 0x10u; + /* 0xBFC3CF88: 11800004 beq $t4, $zero, 0xBFC3CF9C */ + uint32_t psx_brA_BFC3CF88 = cpu->gpr[12]; uint32_t psx_brB_BFC3CF88 = cpu->gpr[0]; + int psx_taken_BFC3CF88 = (psx_brA_BFC3CF88 == psx_brB_BFC3CF88); + /* 0xBFC3CF8C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF88) goto label_BFC3CF9C; +label_BFC3CF90: + psx_check_interrupts(cpu); + /* 0xBFC3CF90: 948D000C lhu $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, 0xBFC3CF90u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CF94: 00000000 nop */ + /* nop */ + /* 0xBFC3CF98: A4AD01C8 sh $t5, 456($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (456)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CF98u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3CF9C: + psx_check_interrupts(cpu); + /* 0xBFC3CF9C: 14600004 bne $v1, $zero, 0xBFC3CFB0 */ + uint32_t psx_brA_BFC3CF9C = cpu->gpr[3]; uint32_t psx_brB_BFC3CF9C = cpu->gpr[0]; + int psx_taken_BFC3CF9C = (psx_brA_BFC3CF9C != psx_brB_BFC3CF9C); + /* 0xBFC3CFA0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CF9C) goto label_BFC3CFB0; +label_BFC3CFA4: + psx_check_interrupts(cpu); + /* 0xBFC3CFA4: 304E0020 andi $t6, $v0, 0x20 */ + cpu->gpr[14] = cpu->gpr[2] & 0x20u; + /* 0xBFC3CFA8: 11C00004 beq $t6, $zero, 0xBFC3CFBC */ + uint32_t psx_brA_BFC3CFA8 = cpu->gpr[14]; uint32_t psx_brB_BFC3CFA8 = cpu->gpr[0]; + int psx_taken_BFC3CFA8 = (psx_brA_BFC3CFA8 == psx_brB_BFC3CFA8); + /* 0xBFC3CFAC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFA8) goto label_BFC3CFBC; +label_BFC3CFB0: + psx_check_interrupts(cpu); + /* 0xBFC3CFB0: 948F000E lhu $t7, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFB0u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CFB4: 00000000 nop */ + /* nop */ + /* 0xBFC3CFB8: A4AF01CA sh $t7, 458($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (458)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFB8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3CFBC: + psx_check_interrupts(cpu); + /* 0xBFC3CFBC: 14600004 bne $v1, $zero, 0xBFC3CFD0 */ + uint32_t psx_brA_BFC3CFBC = cpu->gpr[3]; uint32_t psx_brB_BFC3CFBC = cpu->gpr[0]; + int psx_taken_BFC3CFBC = (psx_brA_BFC3CFBC != psx_brB_BFC3CFBC); + /* 0xBFC3CFC0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFBC) goto label_BFC3CFD0; +label_BFC3CFC4: + psx_check_interrupts(cpu); + /* 0xBFC3CFC4: 30580040 andi $t8, $v0, 0x40 */ + cpu->gpr[24] = cpu->gpr[2] & 0x40u; + /* 0xBFC3CFC8: 13000004 beq $t8, $zero, 0xBFC3CFDC */ + uint32_t psx_brA_BFC3CFC8 = cpu->gpr[24]; uint32_t psx_brB_BFC3CFC8 = cpu->gpr[0]; + int psx_taken_BFC3CFC8 = (psx_brA_BFC3CFC8 == psx_brB_BFC3CFC8); + /* 0xBFC3CFCC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFC8) goto label_BFC3CFDC; +label_BFC3CFD0: + psx_check_interrupts(cpu); + /* 0xBFC3CFD0: 94990010 lhu $t9, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFD0u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CFD4: 00000000 nop */ + /* nop */ + /* 0xBFC3CFD8: A4B901CC sh $t9, 460($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (460)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFD8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3CFDC: + psx_check_interrupts(cpu); + /* 0xBFC3CFDC: 14600004 bne $v1, $zero, 0xBFC3CFF0 */ + uint32_t psx_brA_BFC3CFDC = cpu->gpr[3]; uint32_t psx_brB_BFC3CFDC = cpu->gpr[0]; + int psx_taken_BFC3CFDC = (psx_brA_BFC3CFDC != psx_brB_BFC3CFDC); + /* 0xBFC3CFE0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFDC) goto label_BFC3CFF0; +label_BFC3CFE4: + psx_check_interrupts(cpu); + /* 0xBFC3CFE4: 30480080 andi $t0, $v0, 0x80 */ + cpu->gpr[8] = cpu->gpr[2] & 0x80u; + /* 0xBFC3CFE8: 11000004 beq $t0, $zero, 0xBFC3CFFC */ + uint32_t psx_brA_BFC3CFE8 = cpu->gpr[8]; uint32_t psx_brB_BFC3CFE8 = cpu->gpr[0]; + int psx_taken_BFC3CFE8 = (psx_brA_BFC3CFE8 == psx_brB_BFC3CFE8); + /* 0xBFC3CFEC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFE8) goto label_BFC3CFFC; +label_BFC3CFF0: + psx_check_interrupts(cpu); + /* 0xBFC3CFF0: 94890012 lhu $t1, 18($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (18)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFF0u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3CFF4: 00000000 nop */ + /* nop */ + /* 0xBFC3CFF8: A4A901CE sh $t1, 462($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (462)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3CFF8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3CFFC: + psx_check_interrupts(cpu); + /* 0xBFC3CFFC: 14600004 bne $v1, $zero, 0xBFC3D010 */ + uint32_t psx_brA_BFC3CFFC = cpu->gpr[3]; uint32_t psx_brB_BFC3CFFC = cpu->gpr[0]; + int psx_taken_BFC3CFFC = (psx_brA_BFC3CFFC != psx_brB_BFC3CFFC); + /* 0xBFC3D000: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3CFFC) goto label_BFC3D010; +label_BFC3D004: + psx_check_interrupts(cpu); + /* 0xBFC3D004: 304A0100 andi $t2, $v0, 0x100 */ + cpu->gpr[10] = cpu->gpr[2] & 0x100u; + /* 0xBFC3D008: 11400004 beq $t2, $zero, 0xBFC3D01C */ + uint32_t psx_brA_BFC3D008 = cpu->gpr[10]; uint32_t psx_brB_BFC3D008 = cpu->gpr[0]; + int psx_taken_BFC3D008 = (psx_brA_BFC3D008 == psx_brB_BFC3D008); + /* 0xBFC3D00C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D008) goto label_BFC3D01C; +label_BFC3D010: + psx_check_interrupts(cpu); + /* 0xBFC3D010: 948B0014 lhu $t3, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D010u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D014: 00000000 nop */ + /* nop */ + /* 0xBFC3D018: A4AB01D0 sh $t3, 464($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (464)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D018u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D01C: + psx_check_interrupts(cpu); + /* 0xBFC3D01C: 14600004 bne $v1, $zero, 0xBFC3D030 */ + uint32_t psx_brA_BFC3D01C = cpu->gpr[3]; uint32_t psx_brB_BFC3D01C = cpu->gpr[0]; + int psx_taken_BFC3D01C = (psx_brA_BFC3D01C != psx_brB_BFC3D01C); + /* 0xBFC3D020: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D01C) goto label_BFC3D030; +label_BFC3D024: + psx_check_interrupts(cpu); + /* 0xBFC3D024: 304C0200 andi $t4, $v0, 0x200 */ + cpu->gpr[12] = cpu->gpr[2] & 0x200u; + /* 0xBFC3D028: 11800004 beq $t4, $zero, 0xBFC3D03C */ + uint32_t psx_brA_BFC3D028 = cpu->gpr[12]; uint32_t psx_brB_BFC3D028 = cpu->gpr[0]; + int psx_taken_BFC3D028 = (psx_brA_BFC3D028 == psx_brB_BFC3D028); + /* 0xBFC3D02C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D028) goto label_BFC3D03C; +label_BFC3D030: + psx_check_interrupts(cpu); + /* 0xBFC3D030: 948D0016 lhu $t5, 22($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (22)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D030u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D034: 00000000 nop */ + /* nop */ + /* 0xBFC3D038: A4AD01D2 sh $t5, 466($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (466)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D038u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D03C: + psx_check_interrupts(cpu); + /* 0xBFC3D03C: 14600004 bne $v1, $zero, 0xBFC3D050 */ + uint32_t psx_brA_BFC3D03C = cpu->gpr[3]; uint32_t psx_brB_BFC3D03C = cpu->gpr[0]; + int psx_taken_BFC3D03C = (psx_brA_BFC3D03C != psx_brB_BFC3D03C); + /* 0xBFC3D040: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D03C) goto label_BFC3D050; +label_BFC3D044: + psx_check_interrupts(cpu); + /* 0xBFC3D044: 304E0400 andi $t6, $v0, 0x400 */ + cpu->gpr[14] = cpu->gpr[2] & 0x400u; + /* 0xBFC3D048: 11C00004 beq $t6, $zero, 0xBFC3D05C */ + uint32_t psx_brA_BFC3D048 = cpu->gpr[14]; uint32_t psx_brB_BFC3D048 = cpu->gpr[0]; + int psx_taken_BFC3D048 = (psx_brA_BFC3D048 == psx_brB_BFC3D048); + /* 0xBFC3D04C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D048) goto label_BFC3D05C; +label_BFC3D050: + psx_check_interrupts(cpu); + /* 0xBFC3D050: 948F0018 lhu $t7, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D050u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D054: 00000000 nop */ + /* nop */ + /* 0xBFC3D058: A4AF01D4 sh $t7, 468($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (468)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D058u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D05C: + psx_check_interrupts(cpu); + /* 0xBFC3D05C: 14600004 bne $v1, $zero, 0xBFC3D070 */ + uint32_t psx_brA_BFC3D05C = cpu->gpr[3]; uint32_t psx_brB_BFC3D05C = cpu->gpr[0]; + int psx_taken_BFC3D05C = (psx_brA_BFC3D05C != psx_brB_BFC3D05C); + /* 0xBFC3D060: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D05C) goto label_BFC3D070; +label_BFC3D064: + psx_check_interrupts(cpu); + /* 0xBFC3D064: 30580800 andi $t8, $v0, 0x800 */ + cpu->gpr[24] = cpu->gpr[2] & 0x800u; + /* 0xBFC3D068: 13000004 beq $t8, $zero, 0xBFC3D07C */ + uint32_t psx_brA_BFC3D068 = cpu->gpr[24]; uint32_t psx_brB_BFC3D068 = cpu->gpr[0]; + int psx_taken_BFC3D068 = (psx_brA_BFC3D068 == psx_brB_BFC3D068); + /* 0xBFC3D06C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D068) goto label_BFC3D07C; +label_BFC3D070: + psx_check_interrupts(cpu); + /* 0xBFC3D070: 9499001A lhu $t9, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D070u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D074: 00000000 nop */ + /* nop */ + /* 0xBFC3D078: A4B901D6 sh $t9, 470($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (470)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D078u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D07C: + psx_check_interrupts(cpu); + /* 0xBFC3D07C: 14600004 bne $v1, $zero, 0xBFC3D090 */ + uint32_t psx_brA_BFC3D07C = cpu->gpr[3]; uint32_t psx_brB_BFC3D07C = cpu->gpr[0]; + int psx_taken_BFC3D07C = (psx_brA_BFC3D07C != psx_brB_BFC3D07C); + /* 0xBFC3D080: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D07C) goto label_BFC3D090; +label_BFC3D084: + psx_check_interrupts(cpu); + /* 0xBFC3D084: 30481000 andi $t0, $v0, 0x1000 */ + cpu->gpr[8] = cpu->gpr[2] & 0x1000u; + /* 0xBFC3D088: 11000004 beq $t0, $zero, 0xBFC3D09C */ + uint32_t psx_brA_BFC3D088 = cpu->gpr[8]; uint32_t psx_brB_BFC3D088 = cpu->gpr[0]; + int psx_taken_BFC3D088 = (psx_brA_BFC3D088 == psx_brB_BFC3D088); + /* 0xBFC3D08C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D088) goto label_BFC3D09C; +label_BFC3D090: + psx_check_interrupts(cpu); + /* 0xBFC3D090: 9489001C lhu $t1, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D090u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D094: 00000000 nop */ + /* nop */ + /* 0xBFC3D098: A4A901D8 sh $t1, 472($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (472)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D098u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D09C: + psx_check_interrupts(cpu); + /* 0xBFC3D09C: 14600004 bne $v1, $zero, 0xBFC3D0B0 */ + uint32_t psx_brA_BFC3D09C = cpu->gpr[3]; uint32_t psx_brB_BFC3D09C = cpu->gpr[0]; + int psx_taken_BFC3D09C = (psx_brA_BFC3D09C != psx_brB_BFC3D09C); + /* 0xBFC3D0A0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D09C) goto label_BFC3D0B0; +label_BFC3D0A4: + psx_check_interrupts(cpu); + /* 0xBFC3D0A4: 304A2000 andi $t2, $v0, 0x2000 */ + cpu->gpr[10] = cpu->gpr[2] & 0x2000u; + /* 0xBFC3D0A8: 11400004 beq $t2, $zero, 0xBFC3D0BC */ + uint32_t psx_brA_BFC3D0A8 = cpu->gpr[10]; uint32_t psx_brB_BFC3D0A8 = cpu->gpr[0]; + int psx_taken_BFC3D0A8 = (psx_brA_BFC3D0A8 == psx_brB_BFC3D0A8); + /* 0xBFC3D0AC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D0A8) goto label_BFC3D0BC; +label_BFC3D0B0: + psx_check_interrupts(cpu); + /* 0xBFC3D0B0: 948B001E lhu $t3, 30($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (30)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0B0u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D0B4: 00000000 nop */ + /* nop */ + /* 0xBFC3D0B8: A4AB01DA sh $t3, 474($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (474)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0B8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D0BC: + psx_check_interrupts(cpu); + /* 0xBFC3D0BC: 14600004 bne $v1, $zero, 0xBFC3D0D0 */ + uint32_t psx_brA_BFC3D0BC = cpu->gpr[3]; uint32_t psx_brB_BFC3D0BC = cpu->gpr[0]; + int psx_taken_BFC3D0BC = (psx_brA_BFC3D0BC != psx_brB_BFC3D0BC); + /* 0xBFC3D0C0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D0BC) goto label_BFC3D0D0; +label_BFC3D0C4: + psx_check_interrupts(cpu); + /* 0xBFC3D0C4: 304C4000 andi $t4, $v0, 0x4000 */ + cpu->gpr[12] = cpu->gpr[2] & 0x4000u; + /* 0xBFC3D0C8: 11800004 beq $t4, $zero, 0xBFC3D0DC */ + uint32_t psx_brA_BFC3D0C8 = cpu->gpr[12]; uint32_t psx_brB_BFC3D0C8 = cpu->gpr[0]; + int psx_taken_BFC3D0C8 = (psx_brA_BFC3D0C8 == psx_brB_BFC3D0C8); + /* 0xBFC3D0CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D0C8) goto label_BFC3D0DC; +label_BFC3D0D0: + psx_check_interrupts(cpu); + /* 0xBFC3D0D0: 948D0020 lhu $t5, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0D0u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D0D4: 00000000 nop */ + /* nop */ + /* 0xBFC3D0D8: A4AD01DC sh $t5, 476($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (476)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D0DC: + psx_check_interrupts(cpu); + /* 0xBFC3D0DC: 14600004 bne $v1, $zero, 0xBFC3D0F0 */ + uint32_t psx_brA_BFC3D0DC = cpu->gpr[3]; uint32_t psx_brB_BFC3D0DC = cpu->gpr[0]; + int psx_taken_BFC3D0DC = (psx_brA_BFC3D0DC != psx_brB_BFC3D0DC); + /* 0xBFC3D0E0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D0DC) goto label_BFC3D0F0; +label_BFC3D0E4: + psx_check_interrupts(cpu); + /* 0xBFC3D0E4: 304E8000 andi $t6, $v0, 0x8000 */ + cpu->gpr[14] = cpu->gpr[2] & 0x8000u; + /* 0xBFC3D0E8: 11C00004 beq $t6, $zero, 0xBFC3D0FC */ + uint32_t psx_brA_BFC3D0E8 = cpu->gpr[14]; uint32_t psx_brB_BFC3D0E8 = cpu->gpr[0]; + int psx_taken_BFC3D0E8 = (psx_brA_BFC3D0E8 == psx_brB_BFC3D0E8); + /* 0xBFC3D0EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D0E8) goto label_BFC3D0FC; +label_BFC3D0F0: + psx_check_interrupts(cpu); + /* 0xBFC3D0F0: 948F0022 lhu $t7, 34($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (34)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0F0u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D0F4: 00000000 nop */ + /* nop */ + /* 0xBFC3D0F8: A4AF01DE sh $t7, 478($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (478)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D0F8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D0FC: + psx_check_interrupts(cpu); + /* 0xBFC3D0FC: 14600004 bne $v1, $zero, 0xBFC3D110 */ + uint32_t psx_brA_BFC3D0FC = cpu->gpr[3]; uint32_t psx_brB_BFC3D0FC = cpu->gpr[0]; + int psx_taken_BFC3D0FC = (psx_brA_BFC3D0FC != psx_brB_BFC3D0FC); + /* 0xBFC3D100: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + if (psx_taken_BFC3D0FC) goto label_BFC3D110; +label_BFC3D104: + psx_check_interrupts(cpu); + /* 0xBFC3D104: 0041C024 and $t8, $v0, $at */ + cpu->gpr[24] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D108: 13000004 beq $t8, $zero, 0xBFC3D11C */ + uint32_t psx_brA_BFC3D108 = cpu->gpr[24]; uint32_t psx_brB_BFC3D108 = cpu->gpr[0]; + int psx_taken_BFC3D108 = (psx_brA_BFC3D108 == psx_brB_BFC3D108); + /* 0xBFC3D10C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D108) goto label_BFC3D11C; +label_BFC3D110: + psx_check_interrupts(cpu); + /* 0xBFC3D110: 94990024 lhu $t9, 36($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (36)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D110u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D114: 00000000 nop */ + /* nop */ + /* 0xBFC3D118: A4B901E0 sh $t9, 480($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (480)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D118u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D11C: + psx_check_interrupts(cpu); + /* 0xBFC3D11C: 14600004 bne $v1, $zero, 0xBFC3D130 */ + uint32_t psx_brA_BFC3D11C = cpu->gpr[3]; uint32_t psx_brB_BFC3D11C = cpu->gpr[0]; + int psx_taken_BFC3D11C = (psx_brA_BFC3D11C != psx_brB_BFC3D11C); + /* 0xBFC3D120: 3C010002 lui $at, 0x2 */ + cpu->gpr[1] = 0x00020000u; + if (psx_taken_BFC3D11C) goto label_BFC3D130; +label_BFC3D124: + psx_check_interrupts(cpu); + /* 0xBFC3D124: 00414024 and $t0, $v0, $at */ + cpu->gpr[8] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D128: 11000004 beq $t0, $zero, 0xBFC3D13C */ + uint32_t psx_brA_BFC3D128 = cpu->gpr[8]; uint32_t psx_brB_BFC3D128 = cpu->gpr[0]; + int psx_taken_BFC3D128 = (psx_brA_BFC3D128 == psx_brB_BFC3D128); + /* 0xBFC3D12C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D128) goto label_BFC3D13C; +label_BFC3D130: + psx_check_interrupts(cpu); + /* 0xBFC3D130: 94890026 lhu $t1, 38($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (38)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D130u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D134: 00000000 nop */ + /* nop */ + /* 0xBFC3D138: A4A901E2 sh $t1, 482($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (482)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D138u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D13C: + psx_check_interrupts(cpu); + /* 0xBFC3D13C: 14600004 bne $v1, $zero, 0xBFC3D150 */ + uint32_t psx_brA_BFC3D13C = cpu->gpr[3]; uint32_t psx_brB_BFC3D13C = cpu->gpr[0]; + int psx_taken_BFC3D13C = (psx_brA_BFC3D13C != psx_brB_BFC3D13C); + /* 0xBFC3D140: 3C010004 lui $at, 0x4 */ + cpu->gpr[1] = 0x00040000u; + if (psx_taken_BFC3D13C) goto label_BFC3D150; +label_BFC3D144: + psx_check_interrupts(cpu); + /* 0xBFC3D144: 00415024 and $t2, $v0, $at */ + cpu->gpr[10] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D148: 11400004 beq $t2, $zero, 0xBFC3D15C */ + uint32_t psx_brA_BFC3D148 = cpu->gpr[10]; uint32_t psx_brB_BFC3D148 = cpu->gpr[0]; + int psx_taken_BFC3D148 = (psx_brA_BFC3D148 == psx_brB_BFC3D148); + /* 0xBFC3D14C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D148) goto label_BFC3D15C; +label_BFC3D150: + psx_check_interrupts(cpu); + /* 0xBFC3D150: 948B0028 lhu $t3, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D150u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D154: 00000000 nop */ + /* nop */ + /* 0xBFC3D158: A4AB01E4 sh $t3, 484($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (484)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D158u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D15C: + psx_check_interrupts(cpu); + /* 0xBFC3D15C: 14600004 bne $v1, $zero, 0xBFC3D170 */ + uint32_t psx_brA_BFC3D15C = cpu->gpr[3]; uint32_t psx_brB_BFC3D15C = cpu->gpr[0]; + int psx_taken_BFC3D15C = (psx_brA_BFC3D15C != psx_brB_BFC3D15C); + /* 0xBFC3D160: 3C010008 lui $at, 0x8 */ + cpu->gpr[1] = 0x00080000u; + if (psx_taken_BFC3D15C) goto label_BFC3D170; +label_BFC3D164: + psx_check_interrupts(cpu); + /* 0xBFC3D164: 00416024 and $t4, $v0, $at */ + cpu->gpr[12] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D168: 11800004 beq $t4, $zero, 0xBFC3D17C */ + uint32_t psx_brA_BFC3D168 = cpu->gpr[12]; uint32_t psx_brB_BFC3D168 = cpu->gpr[0]; + int psx_taken_BFC3D168 = (psx_brA_BFC3D168 == psx_brB_BFC3D168); + /* 0xBFC3D16C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D168) goto label_BFC3D17C; +label_BFC3D170: + psx_check_interrupts(cpu); + /* 0xBFC3D170: 948D002A lhu $t5, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D170u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D174: 00000000 nop */ + /* nop */ + /* 0xBFC3D178: A4AD01E6 sh $t5, 486($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (486)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D178u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D17C: + psx_check_interrupts(cpu); + /* 0xBFC3D17C: 14600004 bne $v1, $zero, 0xBFC3D190 */ + uint32_t psx_brA_BFC3D17C = cpu->gpr[3]; uint32_t psx_brB_BFC3D17C = cpu->gpr[0]; + int psx_taken_BFC3D17C = (psx_brA_BFC3D17C != psx_brB_BFC3D17C); + /* 0xBFC3D180: 3C010010 lui $at, 0x10 */ + cpu->gpr[1] = 0x00100000u; + if (psx_taken_BFC3D17C) goto label_BFC3D190; +label_BFC3D184: + psx_check_interrupts(cpu); + /* 0xBFC3D184: 00417024 and $t6, $v0, $at */ + cpu->gpr[14] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D188: 11C00004 beq $t6, $zero, 0xBFC3D19C */ + uint32_t psx_brA_BFC3D188 = cpu->gpr[14]; uint32_t psx_brB_BFC3D188 = cpu->gpr[0]; + int psx_taken_BFC3D188 = (psx_brA_BFC3D188 == psx_brB_BFC3D188); + /* 0xBFC3D18C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D188) goto label_BFC3D19C; +label_BFC3D190: + psx_check_interrupts(cpu); + /* 0xBFC3D190: 948F002C lhu $t7, 44($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (44)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D190u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D194: 00000000 nop */ + /* nop */ + /* 0xBFC3D198: A4AF01E8 sh $t7, 488($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (488)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D198u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D19C: + psx_check_interrupts(cpu); + /* 0xBFC3D19C: 14600004 bne $v1, $zero, 0xBFC3D1B0 */ + uint32_t psx_brA_BFC3D19C = cpu->gpr[3]; uint32_t psx_brB_BFC3D19C = cpu->gpr[0]; + int psx_taken_BFC3D19C = (psx_brA_BFC3D19C != psx_brB_BFC3D19C); + /* 0xBFC3D1A0: 3C010020 lui $at, 0x20 */ + cpu->gpr[1] = 0x00200000u; + if (psx_taken_BFC3D19C) goto label_BFC3D1B0; +label_BFC3D1A4: + psx_check_interrupts(cpu); + /* 0xBFC3D1A4: 0041C024 and $t8, $v0, $at */ + cpu->gpr[24] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D1A8: 13000004 beq $t8, $zero, 0xBFC3D1BC */ + uint32_t psx_brA_BFC3D1A8 = cpu->gpr[24]; uint32_t psx_brB_BFC3D1A8 = cpu->gpr[0]; + int psx_taken_BFC3D1A8 = (psx_brA_BFC3D1A8 == psx_brB_BFC3D1A8); + /* 0xBFC3D1AC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D1A8) goto label_BFC3D1BC; +label_BFC3D1B0: + psx_check_interrupts(cpu); + /* 0xBFC3D1B0: 9499002E lhu $t9, 46($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (46)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1B0u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D1B4: 00000000 nop */ + /* nop */ + /* 0xBFC3D1B8: A4B901EA sh $t9, 490($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (490)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1B8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D1BC: + psx_check_interrupts(cpu); + /* 0xBFC3D1BC: 14600004 bne $v1, $zero, 0xBFC3D1D0 */ + uint32_t psx_brA_BFC3D1BC = cpu->gpr[3]; uint32_t psx_brB_BFC3D1BC = cpu->gpr[0]; + int psx_taken_BFC3D1BC = (psx_brA_BFC3D1BC != psx_brB_BFC3D1BC); + /* 0xBFC3D1C0: 3C010040 lui $at, 0x40 */ + cpu->gpr[1] = 0x00400000u; + if (psx_taken_BFC3D1BC) goto label_BFC3D1D0; +label_BFC3D1C4: + psx_check_interrupts(cpu); + /* 0xBFC3D1C4: 00414024 and $t0, $v0, $at */ + cpu->gpr[8] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D1C8: 11000004 beq $t0, $zero, 0xBFC3D1DC */ + uint32_t psx_brA_BFC3D1C8 = cpu->gpr[8]; uint32_t psx_brB_BFC3D1C8 = cpu->gpr[0]; + int psx_taken_BFC3D1C8 = (psx_brA_BFC3D1C8 == psx_brB_BFC3D1C8); + /* 0xBFC3D1CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D1C8) goto label_BFC3D1DC; +label_BFC3D1D0: + psx_check_interrupts(cpu); + /* 0xBFC3D1D0: 94890030 lhu $t1, 48($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (48)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1D0u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D1D4: 00000000 nop */ + /* nop */ + /* 0xBFC3D1D8: A4A901EC sh $t1, 492($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (492)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D1DC: + psx_check_interrupts(cpu); + /* 0xBFC3D1DC: 14600004 bne $v1, $zero, 0xBFC3D1F0 */ + uint32_t psx_brA_BFC3D1DC = cpu->gpr[3]; uint32_t psx_brB_BFC3D1DC = cpu->gpr[0]; + int psx_taken_BFC3D1DC = (psx_brA_BFC3D1DC != psx_brB_BFC3D1DC); + /* 0xBFC3D1E0: 3C010080 lui $at, 0x80 */ + cpu->gpr[1] = 0x00800000u; + if (psx_taken_BFC3D1DC) goto label_BFC3D1F0; +label_BFC3D1E4: + psx_check_interrupts(cpu); + /* 0xBFC3D1E4: 00415024 and $t2, $v0, $at */ + cpu->gpr[10] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D1E8: 11400004 beq $t2, $zero, 0xBFC3D1FC */ + uint32_t psx_brA_BFC3D1E8 = cpu->gpr[10]; uint32_t psx_brB_BFC3D1E8 = cpu->gpr[0]; + int psx_taken_BFC3D1E8 = (psx_brA_BFC3D1E8 == psx_brB_BFC3D1E8); + /* 0xBFC3D1EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D1E8) goto label_BFC3D1FC; +label_BFC3D1F0: + psx_check_interrupts(cpu); + /* 0xBFC3D1F0: 948B0032 lhu $t3, 50($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (50)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1F0u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D1F4: 00000000 nop */ + /* nop */ + /* 0xBFC3D1F8: A4AB01EE sh $t3, 494($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (494)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D1F8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D1FC: + psx_check_interrupts(cpu); + /* 0xBFC3D1FC: 14600004 bne $v1, $zero, 0xBFC3D210 */ + uint32_t psx_brA_BFC3D1FC = cpu->gpr[3]; uint32_t psx_brB_BFC3D1FC = cpu->gpr[0]; + int psx_taken_BFC3D1FC = (psx_brA_BFC3D1FC != psx_brB_BFC3D1FC); + /* 0xBFC3D200: 3C010100 lui $at, 0x100 */ + cpu->gpr[1] = 0x01000000u; + if (psx_taken_BFC3D1FC) goto label_BFC3D210; +label_BFC3D204: + psx_check_interrupts(cpu); + /* 0xBFC3D204: 00416024 and $t4, $v0, $at */ + cpu->gpr[12] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D208: 11800004 beq $t4, $zero, 0xBFC3D21C */ + uint32_t psx_brA_BFC3D208 = cpu->gpr[12]; uint32_t psx_brB_BFC3D208 = cpu->gpr[0]; + int psx_taken_BFC3D208 = (psx_brA_BFC3D208 == psx_brB_BFC3D208); + /* 0xBFC3D20C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D208) goto label_BFC3D21C; +label_BFC3D210: + psx_check_interrupts(cpu); + /* 0xBFC3D210: 948D0034 lhu $t5, 52($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (52)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D210u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D214: 00000000 nop */ + /* nop */ + /* 0xBFC3D218: A4AD01F0 sh $t5, 496($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (496)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D218u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D21C: + psx_check_interrupts(cpu); + /* 0xBFC3D21C: 14600004 bne $v1, $zero, 0xBFC3D230 */ + uint32_t psx_brA_BFC3D21C = cpu->gpr[3]; uint32_t psx_brB_BFC3D21C = cpu->gpr[0]; + int psx_taken_BFC3D21C = (psx_brA_BFC3D21C != psx_brB_BFC3D21C); + /* 0xBFC3D220: 3C010200 lui $at, 0x200 */ + cpu->gpr[1] = 0x02000000u; + if (psx_taken_BFC3D21C) goto label_BFC3D230; +label_BFC3D224: + psx_check_interrupts(cpu); + /* 0xBFC3D224: 00417024 and $t6, $v0, $at */ + cpu->gpr[14] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D228: 11C00004 beq $t6, $zero, 0xBFC3D23C */ + uint32_t psx_brA_BFC3D228 = cpu->gpr[14]; uint32_t psx_brB_BFC3D228 = cpu->gpr[0]; + int psx_taken_BFC3D228 = (psx_brA_BFC3D228 == psx_brB_BFC3D228); + /* 0xBFC3D22C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D228) goto label_BFC3D23C; +label_BFC3D230: + psx_check_interrupts(cpu); + /* 0xBFC3D230: 948F0036 lhu $t7, 54($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (54)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D230u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D234: 00000000 nop */ + /* nop */ + /* 0xBFC3D238: A4AF01F2 sh $t7, 498($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (498)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D238u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D23C: + psx_check_interrupts(cpu); + /* 0xBFC3D23C: 14600004 bne $v1, $zero, 0xBFC3D250 */ + uint32_t psx_brA_BFC3D23C = cpu->gpr[3]; uint32_t psx_brB_BFC3D23C = cpu->gpr[0]; + int psx_taken_BFC3D23C = (psx_brA_BFC3D23C != psx_brB_BFC3D23C); + /* 0xBFC3D240: 3C010400 lui $at, 0x400 */ + cpu->gpr[1] = 0x04000000u; + if (psx_taken_BFC3D23C) goto label_BFC3D250; +label_BFC3D244: + psx_check_interrupts(cpu); + /* 0xBFC3D244: 0041C024 and $t8, $v0, $at */ + cpu->gpr[24] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D248: 13000004 beq $t8, $zero, 0xBFC3D25C */ + uint32_t psx_brA_BFC3D248 = cpu->gpr[24]; uint32_t psx_brB_BFC3D248 = cpu->gpr[0]; + int psx_taken_BFC3D248 = (psx_brA_BFC3D248 == psx_brB_BFC3D248); + /* 0xBFC3D24C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D248) goto label_BFC3D25C; +label_BFC3D250: + psx_check_interrupts(cpu); + /* 0xBFC3D250: 94990038 lhu $t9, 56($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (56)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D250u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D254: 00000000 nop */ + /* nop */ + /* 0xBFC3D258: A4B901F4 sh $t9, 500($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (500)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D258u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D25C: + psx_check_interrupts(cpu); + /* 0xBFC3D25C: 14600004 bne $v1, $zero, 0xBFC3D270 */ + uint32_t psx_brA_BFC3D25C = cpu->gpr[3]; uint32_t psx_brB_BFC3D25C = cpu->gpr[0]; + int psx_taken_BFC3D25C = (psx_brA_BFC3D25C != psx_brB_BFC3D25C); + /* 0xBFC3D260: 3C010800 lui $at, 0x800 */ + cpu->gpr[1] = 0x08000000u; + if (psx_taken_BFC3D25C) goto label_BFC3D270; +label_BFC3D264: + psx_check_interrupts(cpu); + /* 0xBFC3D264: 00414024 and $t0, $v0, $at */ + cpu->gpr[8] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D268: 11000004 beq $t0, $zero, 0xBFC3D27C */ + uint32_t psx_brA_BFC3D268 = cpu->gpr[8]; uint32_t psx_brB_BFC3D268 = cpu->gpr[0]; + int psx_taken_BFC3D268 = (psx_brA_BFC3D268 == psx_brB_BFC3D268); + /* 0xBFC3D26C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D268) goto label_BFC3D27C; +label_BFC3D270: + psx_check_interrupts(cpu); + /* 0xBFC3D270: 9489003A lhu $t1, 58($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (58)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D270u); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D274: 00000000 nop */ + /* nop */ + /* 0xBFC3D278: A4A901F6 sh $t1, 502($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (502)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D278u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D27C: + psx_check_interrupts(cpu); + /* 0xBFC3D27C: 14600004 bne $v1, $zero, 0xBFC3D290 */ + uint32_t psx_brA_BFC3D27C = cpu->gpr[3]; uint32_t psx_brB_BFC3D27C = cpu->gpr[0]; + int psx_taken_BFC3D27C = (psx_brA_BFC3D27C != psx_brB_BFC3D27C); + /* 0xBFC3D280: 3C011000 lui $at, 0x1000 */ + cpu->gpr[1] = 0x10000000u; + if (psx_taken_BFC3D27C) goto label_BFC3D290; +label_BFC3D284: + psx_check_interrupts(cpu); + /* 0xBFC3D284: 00415024 and $t2, $v0, $at */ + cpu->gpr[10] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D288: 11400004 beq $t2, $zero, 0xBFC3D29C */ + uint32_t psx_brA_BFC3D288 = cpu->gpr[10]; uint32_t psx_brB_BFC3D288 = cpu->gpr[0]; + int psx_taken_BFC3D288 = (psx_brA_BFC3D288 == psx_brB_BFC3D288); + /* 0xBFC3D28C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D288) goto label_BFC3D29C; +label_BFC3D290: + psx_check_interrupts(cpu); + /* 0xBFC3D290: 948B003C lhu $t3, 60($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (60)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D290u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D294: 00000000 nop */ + /* nop */ + /* 0xBFC3D298: A4AB01F8 sh $t3, 504($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (504)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D298u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D29C: + psx_check_interrupts(cpu); + /* 0xBFC3D29C: 14600004 bne $v1, $zero, 0xBFC3D2B0 */ + uint32_t psx_brA_BFC3D29C = cpu->gpr[3]; uint32_t psx_brB_BFC3D29C = cpu->gpr[0]; + int psx_taken_BFC3D29C = (psx_brA_BFC3D29C != psx_brB_BFC3D29C); + /* 0xBFC3D2A0: 3C012000 lui $at, 0x2000 */ + cpu->gpr[1] = 0x20000000u; + if (psx_taken_BFC3D29C) goto label_BFC3D2B0; +label_BFC3D2A4: + psx_check_interrupts(cpu); + /* 0xBFC3D2A4: 00416024 and $t4, $v0, $at */ + cpu->gpr[12] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D2A8: 11800004 beq $t4, $zero, 0xBFC3D2BC */ + uint32_t psx_brA_BFC3D2A8 = cpu->gpr[12]; uint32_t psx_brB_BFC3D2A8 = cpu->gpr[0]; + int psx_taken_BFC3D2A8 = (psx_brA_BFC3D2A8 == psx_brB_BFC3D2A8); + /* 0xBFC3D2AC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D2A8) goto label_BFC3D2BC; +label_BFC3D2B0: + psx_check_interrupts(cpu); + /* 0xBFC3D2B0: 948D003E lhu $t5, 62($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (62)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2B0u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D2B4: 00000000 nop */ + /* nop */ + /* 0xBFC3D2B8: A4AD01FA sh $t5, 506($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (506)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2B8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D2BC: + psx_check_interrupts(cpu); + /* 0xBFC3D2BC: 14600004 bne $v1, $zero, 0xBFC3D2D0 */ + uint32_t psx_brA_BFC3D2BC = cpu->gpr[3]; uint32_t psx_brB_BFC3D2BC = cpu->gpr[0]; + int psx_taken_BFC3D2BC = (psx_brA_BFC3D2BC != psx_brB_BFC3D2BC); + /* 0xBFC3D2C0: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + if (psx_taken_BFC3D2BC) goto label_BFC3D2D0; +label_BFC3D2C4: + psx_check_interrupts(cpu); + /* 0xBFC3D2C4: 00417024 and $t6, $v0, $at */ + cpu->gpr[14] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D2C8: 11C00004 beq $t6, $zero, 0xBFC3D2DC */ + uint32_t psx_brA_BFC3D2C8 = cpu->gpr[14]; uint32_t psx_brB_BFC3D2C8 = cpu->gpr[0]; + int psx_taken_BFC3D2C8 = (psx_brA_BFC3D2C8 == psx_brB_BFC3D2C8); + /* 0xBFC3D2CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D2C8) goto label_BFC3D2DC; +label_BFC3D2D0: + psx_check_interrupts(cpu); + /* 0xBFC3D2D0: 948F0040 lhu $t7, 64($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (64)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2D0u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D2D4: 00000000 nop */ + /* nop */ + /* 0xBFC3D2D8: A4AF01FC sh $t7, 508($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (508)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D2DC: + psx_check_interrupts(cpu); + /* 0xBFC3D2DC: 14600004 bne $v1, $zero, 0xBFC3D2F0 */ + uint32_t psx_brA_BFC3D2DC = cpu->gpr[3]; uint32_t psx_brB_BFC3D2DC = cpu->gpr[0]; + int psx_taken_BFC3D2DC = (psx_brA_BFC3D2DC != psx_brB_BFC3D2DC); + /* 0xBFC3D2E0: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC3D2DC) goto label_BFC3D2F0; +label_BFC3D2E4: + psx_check_interrupts(cpu); + /* 0xBFC3D2E4: 0041C024 and $t8, $v0, $at */ + cpu->gpr[24] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3D2E8: 13000004 beq $t8, $zero, 0xBFC3D2FC */ + uint32_t psx_brA_BFC3D2E8 = cpu->gpr[24]; uint32_t psx_brB_BFC3D2E8 = cpu->gpr[0]; + int psx_taken_BFC3D2E8 = (psx_brA_BFC3D2E8 == psx_brB_BFC3D2E8); + /* 0xBFC3D2EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D2E8) goto label_BFC3D2FC; +label_BFC3D2F0: + psx_check_interrupts(cpu); + /* 0xBFC3D2F0: 94990042 lhu $t9, 66($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (66)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2F0u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D2F4: 00000000 nop */ + /* nop */ + /* 0xBFC3D2F8: A4B901FE sh $t9, 510($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (510)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D2F8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D2FC: + psx_check_interrupts(cpu); + /* 0xBFC3D2FC: 03E00008 jr $ra */ + /* 0xBFC3D300: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +} + +void func_1FC3D304(CPUState* cpu) { +label_BFC3D304: + psx_check_interrupts(cpu); + /* 0xBFC3D304: 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, 0xBFC3D304u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3D308: 00000000 nop */ + /* nop */ + /* 0xBFC3D30C: 14400004 bne $v0, $zero, 0xBFC3D320 */ + uint32_t psx_brA_BFC3D30C = cpu->gpr[2]; uint32_t psx_brB_BFC3D30C = cpu->gpr[0]; + int psx_taken_BFC3D30C = (psx_brA_BFC3D30C != psx_brB_BFC3D30C); + /* 0xBFC3D310: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3D30C) goto label_BFC3D320; +label_BFC3D314: + psx_check_interrupts(cpu); + /* 0xBFC3D314: 10000002 beq $zero, $zero, 0xBFC3D320 */ + uint32_t psx_brA_BFC3D314 = cpu->gpr[0]; uint32_t psx_brB_BFC3D314 = cpu->gpr[0]; + int psx_taken_BFC3D314 = (psx_brA_BFC3D314 == psx_brB_BFC3D314); + /* 0xBFC3D318: 24030001 addiu $v1, $zero, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC3D314) goto label_BFC3D320; +label_BFC3D31C: + psx_check_interrupts(cpu); + /* 0xBFC3D31C: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3D320: + psx_check_interrupts(cpu); + /* 0xBFC3D320: 14600008 bne $v1, $zero, 0xBFC3D344 */ + uint32_t psx_brA_BFC3D320 = cpu->gpr[3]; uint32_t psx_brB_BFC3D320 = cpu->gpr[0]; + int psx_taken_BFC3D320 = (psx_brA_BFC3D320 != psx_brB_BFC3D320); + /* 0xBFC3D324: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D320) goto label_BFC3D344; +label_BFC3D328: + psx_check_interrupts(cpu); + /* 0xBFC3D328: 304E0001 andi $t6, $v0, 0x1 */ + cpu->gpr[14] = cpu->gpr[2] & 0x1u; + /* 0xBFC3D32C: 15C00005 bne $t6, $zero, 0xBFC3D344 */ + uint32_t psx_brA_BFC3D32C = cpu->gpr[14]; uint32_t psx_brB_BFC3D32C = cpu->gpr[0]; + int psx_taken_BFC3D32C = (psx_brA_BFC3D32C != psx_brB_BFC3D32C); + /* 0xBFC3D330: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D32C) goto label_BFC3D344; +label_BFC3D334: + psx_check_interrupts(cpu); + /* 0xBFC3D334: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3D338: 8CA597A0 lw $a1, -26720($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D338u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3D33C: 10000006 beq $zero, $zero, 0xBFC3D358 */ + uint32_t psx_brA_BFC3D33C = cpu->gpr[0]; uint32_t psx_brB_BFC3D33C = cpu->gpr[0]; + int psx_taken_BFC3D33C = (psx_brA_BFC3D33C == psx_brB_BFC3D33C); + /* 0xBFC3D340: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D33C) goto label_BFC3D358; +label_BFC3D344: + psx_check_interrupts(cpu); + /* 0xBFC3D344: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3D348: 8CA597A0 lw $a1, -26720($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D348u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3D34C: 948F0004 lhu $t7, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D34Cu); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D350: 00000000 nop */ + /* nop */ + /* 0xBFC3D354: A4AF0180 sh $t7, 384($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (384)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D354u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D358: + psx_check_interrupts(cpu); + /* 0xBFC3D358: 14600004 bne $v1, $zero, 0xBFC3D36C */ + uint32_t psx_brA_BFC3D358 = cpu->gpr[3]; uint32_t psx_brB_BFC3D358 = cpu->gpr[0]; + int psx_taken_BFC3D358 = (psx_brA_BFC3D358 != psx_brB_BFC3D358); + /* 0xBFC3D35C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D358) goto label_BFC3D36C; +label_BFC3D360: + psx_check_interrupts(cpu); + /* 0xBFC3D360: 30580002 andi $t8, $v0, 0x2 */ + cpu->gpr[24] = cpu->gpr[2] & 0x2u; + /* 0xBFC3D364: 13000004 beq $t8, $zero, 0xBFC3D378 */ + uint32_t psx_brA_BFC3D364 = cpu->gpr[24]; uint32_t psx_brB_BFC3D364 = cpu->gpr[0]; + int psx_taken_BFC3D364 = (psx_brA_BFC3D364 == psx_brB_BFC3D364); + /* 0xBFC3D368: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D364) goto label_BFC3D378; +label_BFC3D36C: + psx_check_interrupts(cpu); + /* 0xBFC3D36C: 94990006 lhu $t9, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D36Cu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D370: 00000000 nop */ + /* nop */ + /* 0xBFC3D374: A4B90182 sh $t9, 386($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (386)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D374u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D378: + psx_check_interrupts(cpu); + /* 0xBFC3D378: 14600004 bne $v1, $zero, 0xBFC3D38C */ + uint32_t psx_brA_BFC3D378 = cpu->gpr[3]; uint32_t psx_brB_BFC3D378 = cpu->gpr[0]; + int psx_taken_BFC3D378 = (psx_brA_BFC3D378 != psx_brB_BFC3D378); + /* 0xBFC3D37C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D378) goto label_BFC3D38C; +label_BFC3D380: + psx_check_interrupts(cpu); + /* 0xBFC3D380: 30480004 andi $t0, $v0, 0x4 */ + cpu->gpr[8] = cpu->gpr[2] & 0x4u; + /* 0xBFC3D384: 11000004 beq $t0, $zero, 0xBFC3D398 */ + uint32_t psx_brA_BFC3D384 = cpu->gpr[8]; uint32_t psx_brB_BFC3D384 = cpu->gpr[0]; + int psx_taken_BFC3D384 = (psx_brA_BFC3D384 == psx_brB_BFC3D384); + /* 0xBFC3D388: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D384) goto label_BFC3D398; +label_BFC3D38C: + psx_check_interrupts(cpu); + /* 0xBFC3D38C: 84890008 lh $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D38Cu); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3D390: 00000000 nop */ + /* nop */ + /* 0xBFC3D394: A4A90184 sh $t1, 388($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (388)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D394u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D398: + psx_check_interrupts(cpu); + /* 0xBFC3D398: 14600004 bne $v1, $zero, 0xBFC3D3AC */ + uint32_t psx_brA_BFC3D398 = cpu->gpr[3]; uint32_t psx_brB_BFC3D398 = cpu->gpr[0]; + int psx_taken_BFC3D398 = (psx_brA_BFC3D398 != psx_brB_BFC3D398); + /* 0xBFC3D39C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D398) goto label_BFC3D3AC; +label_BFC3D3A0: + psx_check_interrupts(cpu); + /* 0xBFC3D3A0: 304A0008 andi $t2, $v0, 0x8 */ + cpu->gpr[10] = cpu->gpr[2] & 0x8u; + /* 0xBFC3D3A4: 11400004 beq $t2, $zero, 0xBFC3D3B8 */ + uint32_t psx_brA_BFC3D3A4 = cpu->gpr[10]; uint32_t psx_brB_BFC3D3A4 = cpu->gpr[0]; + int psx_taken_BFC3D3A4 = (psx_brA_BFC3D3A4 == psx_brB_BFC3D3A4); + /* 0xBFC3D3A8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3A4) goto label_BFC3D3B8; +label_BFC3D3AC: + psx_check_interrupts(cpu); + /* 0xBFC3D3AC: 848B000A lh $t3, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D3ACu); return; } cpu->gpr[11] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3D3B0: 00000000 nop */ + /* nop */ + /* 0xBFC3D3B4: A4AB0186 sh $t3, 390($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (390)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D3B4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D3B8: + psx_check_interrupts(cpu); + /* 0xBFC3D3B8: 14600004 bne $v1, $zero, 0xBFC3D3CC */ + uint32_t psx_brA_BFC3D3B8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D3B8 = cpu->gpr[0]; + int psx_taken_BFC3D3B8 = (psx_brA_BFC3D3B8 != psx_brB_BFC3D3B8); + /* 0xBFC3D3BC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3B8) goto label_BFC3D3CC; +label_BFC3D3C0: + psx_check_interrupts(cpu); + /* 0xBFC3D3C0: 304C0010 andi $t4, $v0, 0x10 */ + cpu->gpr[12] = cpu->gpr[2] & 0x10u; + /* 0xBFC3D3C4: 11800004 beq $t4, $zero, 0xBFC3D3D8 */ + uint32_t psx_brA_BFC3D3C4 = cpu->gpr[12]; uint32_t psx_brB_BFC3D3C4 = cpu->gpr[0]; + int psx_taken_BFC3D3C4 = (psx_brA_BFC3D3C4 == psx_brB_BFC3D3C4); + /* 0xBFC3D3C8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3C4) goto label_BFC3D3D8; +label_BFC3D3CC: + psx_check_interrupts(cpu); + /* 0xBFC3D3CC: 948D000C lhu $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, 0xBFC3D3CCu); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D3D0: 00000000 nop */ + /* nop */ + /* 0xBFC3D3D4: A4AD01B0 sh $t5, 432($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (432)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D3D4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D3D8: + psx_check_interrupts(cpu); + /* 0xBFC3D3D8: 14600004 bne $v1, $zero, 0xBFC3D3EC */ + uint32_t psx_brA_BFC3D3D8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D3D8 = cpu->gpr[0]; + int psx_taken_BFC3D3D8 = (psx_brA_BFC3D3D8 != psx_brB_BFC3D3D8); + /* 0xBFC3D3DC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3D8) goto label_BFC3D3EC; +label_BFC3D3E0: + psx_check_interrupts(cpu); + /* 0xBFC3D3E0: 304E0020 andi $t6, $v0, 0x20 */ + cpu->gpr[14] = cpu->gpr[2] & 0x20u; + /* 0xBFC3D3E4: 11C00004 beq $t6, $zero, 0xBFC3D3F8 */ + uint32_t psx_brA_BFC3D3E4 = cpu->gpr[14]; uint32_t psx_brB_BFC3D3E4 = cpu->gpr[0]; + int psx_taken_BFC3D3E4 = (psx_brA_BFC3D3E4 == psx_brB_BFC3D3E4); + /* 0xBFC3D3E8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3E4) goto label_BFC3D3F8; +label_BFC3D3EC: + psx_check_interrupts(cpu); + /* 0xBFC3D3EC: 948F000E lhu $t7, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D3ECu); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D3F0: 00000000 nop */ + /* nop */ + /* 0xBFC3D3F4: A4AF01B2 sh $t7, 434($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (434)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D3F4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D3F8: + psx_check_interrupts(cpu); + /* 0xBFC3D3F8: 14600004 bne $v1, $zero, 0xBFC3D40C */ + uint32_t psx_brA_BFC3D3F8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D3F8 = cpu->gpr[0]; + int psx_taken_BFC3D3F8 = (psx_brA_BFC3D3F8 != psx_brB_BFC3D3F8); + /* 0xBFC3D3FC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D3F8) goto label_BFC3D40C; +label_BFC3D400: + psx_check_interrupts(cpu); + /* 0xBFC3D400: 30580100 andi $t8, $v0, 0x100 */ + cpu->gpr[24] = cpu->gpr[2] & 0x100u; + /* 0xBFC3D404: 1300000E beq $t8, $zero, 0xBFC3D440 */ + uint32_t psx_brA_BFC3D404 = cpu->gpr[24]; uint32_t psx_brB_BFC3D404 = cpu->gpr[0]; + int psx_taken_BFC3D404 = (psx_brA_BFC3D404 == psx_brB_BFC3D404); + /* 0xBFC3D408: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D404) goto label_BFC3D440; +label_BFC3D40C: + psx_check_interrupts(cpu); + /* 0xBFC3D40C: 8C990010 lw $t9, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D40Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3D410: 00000000 nop */ + /* nop */ + /* 0xBFC3D414: 17200006 bne $t9, $zero, 0xBFC3D430 */ + uint32_t psx_brA_BFC3D414 = cpu->gpr[25]; uint32_t psx_brB_BFC3D414 = cpu->gpr[0]; + int psx_taken_BFC3D414 = (psx_brA_BFC3D414 != psx_brB_BFC3D414); + /* 0xBFC3D418: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D414) goto label_BFC3D430; +label_BFC3D41C: + psx_check_interrupts(cpu); + /* 0xBFC3D41C: 94A801AA lhu $t0, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D41Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D420: 00000000 nop */ + /* nop */ + /* 0xBFC3D424: 3109FFFB andi $t1, $t0, 0xFFFB */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFBu; + /* 0xBFC3D428: 10000005 beq $zero, $zero, 0xBFC3D440 */ + uint32_t psx_brA_BFC3D428 = cpu->gpr[0]; uint32_t psx_brB_BFC3D428 = cpu->gpr[0]; + int psx_taken_BFC3D428 = (psx_brA_BFC3D428 == psx_brB_BFC3D428); + /* 0xBFC3D42C: A4A901AA sh $t1, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D42Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + if (psx_taken_BFC3D428) goto label_BFC3D440; +label_BFC3D430: + psx_check_interrupts(cpu); + /* 0xBFC3D430: 94AA01AA lhu $t2, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D430u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D434: 00000000 nop */ + /* nop */ + /* 0xBFC3D438: 354B0004 ori $t3, $t2, 0x4 */ + cpu->gpr[11] = cpu->gpr[10] | 0x4u; + /* 0xBFC3D43C: A4AB01AA sh $t3, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D43Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D440: + psx_check_interrupts(cpu); + /* 0xBFC3D440: 14600004 bne $v1, $zero, 0xBFC3D454 */ + uint32_t psx_brA_BFC3D440 = cpu->gpr[3]; uint32_t psx_brB_BFC3D440 = cpu->gpr[0]; + int psx_taken_BFC3D440 = (psx_brA_BFC3D440 != psx_brB_BFC3D440); + /* 0xBFC3D444: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D440) goto label_BFC3D454; +label_BFC3D448: + psx_check_interrupts(cpu); + /* 0xBFC3D448: 304C0400 andi $t4, $v0, 0x400 */ + cpu->gpr[12] = cpu->gpr[2] & 0x400u; + /* 0xBFC3D44C: 1180000E beq $t4, $zero, 0xBFC3D488 */ + uint32_t psx_brA_BFC3D44C = cpu->gpr[12]; uint32_t psx_brB_BFC3D44C = cpu->gpr[0]; + int psx_taken_BFC3D44C = (psx_brA_BFC3D44C == psx_brB_BFC3D44C); + /* 0xBFC3D450: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D44C) goto label_BFC3D488; +label_BFC3D454: + psx_check_interrupts(cpu); + /* 0xBFC3D454: 8C8D0014 lw $t5, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D454u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3D458: 00000000 nop */ + /* nop */ + /* 0xBFC3D45C: 15A00006 bne $t5, $zero, 0xBFC3D478 */ + uint32_t psx_brA_BFC3D45C = cpu->gpr[13]; uint32_t psx_brB_BFC3D45C = cpu->gpr[0]; + int psx_taken_BFC3D45C = (psx_brA_BFC3D45C != psx_brB_BFC3D45C); + /* 0xBFC3D460: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D45C) goto label_BFC3D478; +label_BFC3D464: + psx_check_interrupts(cpu); + /* 0xBFC3D464: 94AE01AA lhu $t6, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D464u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D468: 00000000 nop */ + /* nop */ + /* 0xBFC3D46C: 31CFFFFE andi $t7, $t6, 0xFFFE */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFEu; + /* 0xBFC3D470: 10000005 beq $zero, $zero, 0xBFC3D488 */ + uint32_t psx_brA_BFC3D470 = cpu->gpr[0]; uint32_t psx_brB_BFC3D470 = cpu->gpr[0]; + int psx_taken_BFC3D470 = (psx_brA_BFC3D470 == psx_brB_BFC3D470); + /* 0xBFC3D474: A4AF01AA sh $t7, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D474u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + if (psx_taken_BFC3D470) goto label_BFC3D488; +label_BFC3D478: + psx_check_interrupts(cpu); + /* 0xBFC3D478: 94B801AA lhu $t8, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D478u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D47C: 00000000 nop */ + /* nop */ + /* 0xBFC3D480: 37190001 ori $t9, $t8, 0x1 */ + cpu->gpr[25] = cpu->gpr[24] | 0x1u; + /* 0xBFC3D484: A4B901AA sh $t9, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D484u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D488: + psx_check_interrupts(cpu); + /* 0xBFC3D488: 14600004 bne $v1, $zero, 0xBFC3D49C */ + uint32_t psx_brA_BFC3D488 = cpu->gpr[3]; uint32_t psx_brB_BFC3D488 = cpu->gpr[0]; + int psx_taken_BFC3D488 = (psx_brA_BFC3D488 != psx_brB_BFC3D488); + /* 0xBFC3D48C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D488) goto label_BFC3D49C; +label_BFC3D490: + psx_check_interrupts(cpu); + /* 0xBFC3D490: 30480040 andi $t0, $v0, 0x40 */ + cpu->gpr[8] = cpu->gpr[2] & 0x40u; + /* 0xBFC3D494: 11000004 beq $t0, $zero, 0xBFC3D4A8 */ + uint32_t psx_brA_BFC3D494 = cpu->gpr[8]; uint32_t psx_brB_BFC3D494 = cpu->gpr[0]; + int psx_taken_BFC3D494 = (psx_brA_BFC3D494 == psx_brB_BFC3D494); + /* 0xBFC3D498: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D494) goto label_BFC3D4A8; +label_BFC3D49C: + psx_check_interrupts(cpu); + /* 0xBFC3D49C: 94890018 lhu $t1, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D49Cu); return; } cpu->gpr[9] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D4A0: 00000000 nop */ + /* nop */ + /* 0xBFC3D4A4: A4A901B4 sh $t1, 436($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (436)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } +label_BFC3D4A8: + psx_check_interrupts(cpu); + /* 0xBFC3D4A8: 14600004 bne $v1, $zero, 0xBFC3D4BC */ + uint32_t psx_brA_BFC3D4A8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D4A8 = cpu->gpr[0]; + int psx_taken_BFC3D4A8 = (psx_brA_BFC3D4A8 != psx_brB_BFC3D4A8); + /* 0xBFC3D4AC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D4A8) goto label_BFC3D4BC; +label_BFC3D4B0: + psx_check_interrupts(cpu); + /* 0xBFC3D4B0: 304A0080 andi $t2, $v0, 0x80 */ + cpu->gpr[10] = cpu->gpr[2] & 0x80u; + /* 0xBFC3D4B4: 11400004 beq $t2, $zero, 0xBFC3D4C8 */ + uint32_t psx_brA_BFC3D4B4 = cpu->gpr[10]; uint32_t psx_brB_BFC3D4B4 = cpu->gpr[0]; + int psx_taken_BFC3D4B4 = (psx_brA_BFC3D4B4 == psx_brB_BFC3D4B4); + /* 0xBFC3D4B8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D4B4) goto label_BFC3D4C8; +label_BFC3D4BC: + psx_check_interrupts(cpu); + /* 0xBFC3D4BC: 948B001A lhu $t3, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4BCu); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D4C0: 00000000 nop */ + /* nop */ + /* 0xBFC3D4C4: A4AB01B6 sh $t3, 438($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (438)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4C4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D4C8: + psx_check_interrupts(cpu); + /* 0xBFC3D4C8: 14600004 bne $v1, $zero, 0xBFC3D4DC */ + uint32_t psx_brA_BFC3D4C8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D4C8 = cpu->gpr[0]; + int psx_taken_BFC3D4C8 = (psx_brA_BFC3D4C8 != psx_brB_BFC3D4C8); + /* 0xBFC3D4CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D4C8) goto label_BFC3D4DC; +label_BFC3D4D0: + psx_check_interrupts(cpu); + /* 0xBFC3D4D0: 304C0200 andi $t4, $v0, 0x200 */ + cpu->gpr[12] = cpu->gpr[2] & 0x200u; + /* 0xBFC3D4D4: 1180000E beq $t4, $zero, 0xBFC3D510 */ + uint32_t psx_brA_BFC3D4D4 = cpu->gpr[12]; uint32_t psx_brB_BFC3D4D4 = cpu->gpr[0]; + int psx_taken_BFC3D4D4 = (psx_brA_BFC3D4D4 == psx_brB_BFC3D4D4); + /* 0xBFC3D4D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D4D4) goto label_BFC3D510; +label_BFC3D4DC: + psx_check_interrupts(cpu); + /* 0xBFC3D4DC: 8C8D001C lw $t5, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4DCu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3D4E0: 00000000 nop */ + /* nop */ + /* 0xBFC3D4E4: 15A00006 bne $t5, $zero, 0xBFC3D500 */ + uint32_t psx_brA_BFC3D4E4 = cpu->gpr[13]; uint32_t psx_brB_BFC3D4E4 = cpu->gpr[0]; + int psx_taken_BFC3D4E4 = (psx_brA_BFC3D4E4 != psx_brB_BFC3D4E4); + /* 0xBFC3D4E8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D4E4) goto label_BFC3D500; +label_BFC3D4EC: + psx_check_interrupts(cpu); + /* 0xBFC3D4EC: 94AE01AA lhu $t6, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4ECu); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D4F0: 00000000 nop */ + /* nop */ + /* 0xBFC3D4F4: 31CFFFF7 andi $t7, $t6, 0xFFF7 */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFF7u; + /* 0xBFC3D4F8: 10000005 beq $zero, $zero, 0xBFC3D510 */ + uint32_t psx_brA_BFC3D4F8 = cpu->gpr[0]; uint32_t psx_brB_BFC3D4F8 = cpu->gpr[0]; + int psx_taken_BFC3D4F8 = (psx_brA_BFC3D4F8 == psx_brB_BFC3D4F8); + /* 0xBFC3D4FC: A4AF01AA sh $t7, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D4FCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + if (psx_taken_BFC3D4F8) goto label_BFC3D510; +label_BFC3D500: + psx_check_interrupts(cpu); + /* 0xBFC3D500: 94B801AA lhu $t8, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D500u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D504: 00000000 nop */ + /* nop */ + /* 0xBFC3D508: 37190008 ori $t9, $t8, 0x8 */ + cpu->gpr[25] = cpu->gpr[24] | 0x8u; + /* 0xBFC3D50C: A4B901AA sh $t9, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D50Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D510: + psx_check_interrupts(cpu); + /* 0xBFC3D510: 14600004 bne $v1, $zero, 0xBFC3D524 */ + uint32_t psx_brA_BFC3D510 = cpu->gpr[3]; uint32_t psx_brB_BFC3D510 = cpu->gpr[0]; + int psx_taken_BFC3D510 = (psx_brA_BFC3D510 != psx_brB_BFC3D510); + /* 0xBFC3D514: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D510) goto label_BFC3D524; +label_BFC3D518: + psx_check_interrupts(cpu); + /* 0xBFC3D518: 30480800 andi $t0, $v0, 0x800 */ + cpu->gpr[8] = cpu->gpr[2] & 0x800u; + /* 0xBFC3D51C: 1100000E beq $t0, $zero, 0xBFC3D558 */ + uint32_t psx_brA_BFC3D51C = cpu->gpr[8]; uint32_t psx_brB_BFC3D51C = cpu->gpr[0]; + int psx_taken_BFC3D51C = (psx_brA_BFC3D51C == psx_brB_BFC3D51C); + /* 0xBFC3D520: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D51C) goto label_BFC3D558; +label_BFC3D524: + psx_check_interrupts(cpu); + /* 0xBFC3D524: 8C890020 lw $t1, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D524u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3D528: 00000000 nop */ + /* nop */ + /* 0xBFC3D52C: 15200006 bne $t1, $zero, 0xBFC3D548 */ + uint32_t psx_brA_BFC3D52C = cpu->gpr[9]; uint32_t psx_brB_BFC3D52C = cpu->gpr[0]; + int psx_taken_BFC3D52C = (psx_brA_BFC3D52C != psx_brB_BFC3D52C); + /* 0xBFC3D530: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D52C) goto label_BFC3D548; +label_BFC3D534: + psx_check_interrupts(cpu); + /* 0xBFC3D534: 94AA01AA lhu $t2, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D534u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D538: 00000000 nop */ + /* nop */ + /* 0xBFC3D53C: 314BFFFD andi $t3, $t2, 0xFFFD */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFDu; + /* 0xBFC3D540: 10000005 beq $zero, $zero, 0xBFC3D558 */ + uint32_t psx_brA_BFC3D540 = cpu->gpr[0]; uint32_t psx_brB_BFC3D540 = cpu->gpr[0]; + int psx_taken_BFC3D540 = (psx_brA_BFC3D540 == psx_brB_BFC3D540); + /* 0xBFC3D544: A4AB01AA sh $t3, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D544u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + if (psx_taken_BFC3D540) goto label_BFC3D558; +label_BFC3D548: + psx_check_interrupts(cpu); + /* 0xBFC3D548: 94AC01AA lhu $t4, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D548u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D54C: 00000000 nop */ + /* nop */ + /* 0xBFC3D550: 358D0002 ori $t5, $t4, 0x2 */ + cpu->gpr[13] = cpu->gpr[12] | 0x2u; + /* 0xBFC3D554: A4AD01AA sh $t5, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D554u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } +label_BFC3D558: + psx_check_interrupts(cpu); + /* 0xBFC3D558: 14600004 bne $v1, $zero, 0xBFC3D56C */ + uint32_t psx_brA_BFC3D558 = cpu->gpr[3]; uint32_t psx_brB_BFC3D558 = cpu->gpr[0]; + int psx_taken_BFC3D558 = (psx_brA_BFC3D558 != psx_brB_BFC3D558); + /* 0xBFC3D55C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D558) goto label_BFC3D56C; +label_BFC3D560: + psx_check_interrupts(cpu); + /* 0xBFC3D560: 304E1000 andi $t6, $v0, 0x1000 */ + cpu->gpr[14] = cpu->gpr[2] & 0x1000u; + /* 0xBFC3D564: 11C0000C beq $t6, $zero, 0xBFC3D598 */ + uint32_t psx_brA_BFC3D564 = cpu->gpr[14]; uint32_t psx_brB_BFC3D564 = cpu->gpr[0]; + int psx_taken_BFC3D564 = (psx_brA_BFC3D564 == psx_brB_BFC3D564); + /* 0xBFC3D568: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D564) goto label_BFC3D598; +label_BFC3D56C: + psx_check_interrupts(cpu); + /* 0xBFC3D56C: 94AF01AA lhu $t7, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D56Cu); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D570: 00000000 nop */ + /* nop */ + /* 0xBFC3D574: 31F8C0FF andi $t8, $t7, 0xC0FF */ + cpu->gpr[24] = cpu->gpr[15] & 0xC0FFu; + /* 0xBFC3D578: A4B801AA sh $t8, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D578u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC3D57C: 94880024 lhu $t0, 36($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (36)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D57Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D580: 94B901AA lhu $t9, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D580u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D584: 3109003F andi $t1, $t0, 0x3F */ + cpu->gpr[9] = cpu->gpr[8] & 0x3Fu; + /* 0xBFC3D588: 00095200 sll $t2, $t1, 8 */ + cpu->gpr[10] = cpu->gpr[9] << 8u; + /* 0xBFC3D58C: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D590: 032B6025 or $t4, $t9, $t3 */ + cpu->gpr[12] = cpu->gpr[25] | cpu->gpr[11]; + /* 0xBFC3D594: A4AC01AA sh $t4, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D594u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[12] & 0xFFFFu)); } +label_BFC3D598: + psx_check_interrupts(cpu); + /* 0xBFC3D598: 14600004 bne $v1, $zero, 0xBFC3D5AC */ + uint32_t psx_brA_BFC3D598 = cpu->gpr[3]; uint32_t psx_brB_BFC3D598 = cpu->gpr[0]; + int psx_taken_BFC3D598 = (psx_brA_BFC3D598 != psx_brB_BFC3D598); + /* 0xBFC3D59C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D598) goto label_BFC3D5AC; +label_BFC3D5A0: + psx_check_interrupts(cpu); + /* 0xBFC3D5A0: 304D2000 andi $t5, $v0, 0x2000 */ + cpu->gpr[13] = cpu->gpr[2] & 0x2000u; + /* 0xBFC3D5A4: 11A0000C beq $t5, $zero, 0xBFC3D5D8 */ + uint32_t psx_brA_BFC3D5A4 = cpu->gpr[13]; uint32_t psx_brB_BFC3D5A4 = cpu->gpr[0]; + int psx_taken_BFC3D5A4 = (psx_brA_BFC3D5A4 == psx_brB_BFC3D5A4); + /* 0xBFC3D5A8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D5A4) goto label_BFC3D5D8; +label_BFC3D5AC: + psx_check_interrupts(cpu); + /* 0xBFC3D5AC: 94AE01AA lhu $t6, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5ACu); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D5B0: 00000000 nop */ + /* nop */ + /* 0xBFC3D5B4: 31CFFF7F andi $t7, $t6, 0xFF7F */ + cpu->gpr[15] = cpu->gpr[14] & 0xFF7Fu; + /* 0xBFC3D5B8: A4AF01AA sh $t7, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5B8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3D5BC: 94880026 lhu $t0, 38($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (38)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5BCu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D5C0: 94B801AA lhu $t8, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5C0u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D5C4: 31090001 andi $t1, $t0, 0x1 */ + cpu->gpr[9] = cpu->gpr[8] & 0x1u; + /* 0xBFC3D5C8: 000951C0 sll $t2, $t1, 7 */ + cpu->gpr[10] = cpu->gpr[9] << 7u; + /* 0xBFC3D5CC: 3159FFFF andi $t9, $t2, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D5D0: 03195825 or $t3, $t8, $t9 */ + cpu->gpr[11] = cpu->gpr[24] | cpu->gpr[25]; + /* 0xBFC3D5D4: A4AB01AA sh $t3, 426($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5D4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } +label_BFC3D5D8: + psx_check_interrupts(cpu); + /* 0xBFC3D5D8: 14600004 bne $v1, $zero, 0xBFC3D5EC */ + uint32_t psx_brA_BFC3D5D8 = cpu->gpr[3]; uint32_t psx_brB_BFC3D5D8 = cpu->gpr[0]; + int psx_taken_BFC3D5D8 = (psx_brA_BFC3D5D8 != psx_brB_BFC3D5D8); + /* 0xBFC3D5DC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D5D8) goto label_BFC3D5EC; +label_BFC3D5E0: + psx_check_interrupts(cpu); + /* 0xBFC3D5E0: 304C4000 andi $t4, $v0, 0x4000 */ + cpu->gpr[12] = cpu->gpr[2] & 0x4000u; + /* 0xBFC3D5E4: 1180000C beq $t4, $zero, 0xBFC3D618 */ + uint32_t psx_brA_BFC3D5E4 = cpu->gpr[12]; uint32_t psx_brB_BFC3D5E4 = cpu->gpr[0]; + int psx_taken_BFC3D5E4 = (psx_brA_BFC3D5E4 == psx_brB_BFC3D5E4); + /* 0xBFC3D5E8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D5E4) goto label_BFC3D618; +label_BFC3D5EC: + psx_check_interrupts(cpu); + /* 0xBFC3D5EC: 94AD01AC lhu $t5, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5ECu); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D5F0: 00000000 nop */ + /* nop */ + /* 0xBFC3D5F4: 31AEFFF1 andi $t6, $t5, 0xFFF1 */ + cpu->gpr[14] = cpu->gpr[13] & 0xFFF1u; + /* 0xBFC3D5F8: A4AE01AC sh $t6, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5F8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[14] & 0xFFFFu)); } + /* 0xBFC3D5FC: 94880028 lhu $t0, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D5FCu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D600: 94AF01AC lhu $t7, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D600u); return; } cpu->gpr[15] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D604: 31090007 andi $t1, $t0, 0x7 */ + cpu->gpr[9] = cpu->gpr[8] & 0x7u; + /* 0xBFC3D608: 00095040 sll $t2, $t1, 1 */ + cpu->gpr[10] = cpu->gpr[9] << 1u; + /* 0xBFC3D60C: 3158FFFF andi $t8, $t2, 0xFFFF */ + cpu->gpr[24] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D610: 01F8C825 or $t9, $t7, $t8 */ + cpu->gpr[25] = cpu->gpr[15] | cpu->gpr[24]; + /* 0xBFC3D614: A4B901AC sh $t9, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D614u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } +label_BFC3D618: + psx_check_interrupts(cpu); + /* 0xBFC3D618: 14600004 bne $v1, $zero, 0xBFC3D62C */ + uint32_t psx_brA_BFC3D618 = cpu->gpr[3]; uint32_t psx_brB_BFC3D618 = cpu->gpr[0]; + int psx_taken_BFC3D618 = (psx_brA_BFC3D618 != psx_brB_BFC3D618); + /* 0xBFC3D61C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D618) goto label_BFC3D62C; +label_BFC3D620: + psx_check_interrupts(cpu); + /* 0xBFC3D620: 304B8000 andi $t3, $v0, 0x8000 */ + cpu->gpr[11] = cpu->gpr[2] & 0x8000u; + /* 0xBFC3D624: 1160000B beq $t3, $zero, 0xBFC3D654 */ + uint32_t psx_brA_BFC3D624 = cpu->gpr[11]; uint32_t psx_brB_BFC3D624 = cpu->gpr[0]; + int psx_taken_BFC3D624 = (psx_brA_BFC3D624 == psx_brB_BFC3D624); + /* 0xBFC3D628: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D624) goto label_BFC3D654; +label_BFC3D62C: + psx_check_interrupts(cpu); + /* 0xBFC3D62C: 94AC01AC lhu $t4, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D62Cu); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D630: 00000000 nop */ + /* nop */ + /* 0xBFC3D634: 318DFFFE andi $t5, $t4, 0xFFFE */ + cpu->gpr[13] = cpu->gpr[12] & 0xFFFEu; + /* 0xBFC3D638: A4AD01AC sh $t5, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D638u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC3D63C: 9488002A lhu $t0, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D63Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D640: 94AE01AC lhu $t6, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D640u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D644: 31090001 andi $t1, $t0, 0x1 */ + cpu->gpr[9] = cpu->gpr[8] & 0x1u; + /* 0xBFC3D648: 312AFFFF andi $t2, $t1, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC3D64C: 01CA7825 or $t7, $t6, $t2 */ + cpu->gpr[15] = cpu->gpr[14] | cpu->gpr[10]; + /* 0xBFC3D650: A4AF01AC sh $t7, 428($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D650u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } +label_BFC3D654: + psx_check_interrupts(cpu); + /* 0xBFC3D654: 03E00008 jr $ra */ + /* 0xBFC3D658: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +} + +void func_1FC3D65C(CPUState* cpu) { +label_BFC3D65C: + psx_check_interrupts(cpu); + /* 0xBFC3D65C: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC3D660: 8C6397A0 lw $v1, -26720($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-26720)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D660u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3D664: 00000000 nop */ + /* nop */ + /* 0xBFC3D668: 946E0180 lhu $t6, 384($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (384)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D668u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D66C: 00000000 nop */ + /* nop */ + /* 0xBFC3D670: 31CFFFFF andi $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFFu; + /* 0xBFC3D674: A48F0004 sh $t7, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D674u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3D678: 94780182 lhu $t8, 386($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (386)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D678u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D67C: 00000000 nop */ + /* nop */ + /* 0xBFC3D680: 3319FFFF andi $t9, $t8, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFFFu; + /* 0xBFC3D684: A4990006 sh $t9, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D684u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + /* 0xBFC3D688: 94680184 lhu $t0, 388($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (388)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D688u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D68C: 00000000 nop */ + /* nop */ + /* 0xBFC3D690: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3D694: A4890008 sh $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D694u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC3D698: 946A0186 lhu $t2, 390($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (390)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D698u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D69C: 00000000 nop */ + /* nop */ + /* 0xBFC3D6A0: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D6A4: A48B000A sh $t3, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC3D6A8: 946C01B0 lhu $t4, 432($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (432)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6A8u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D6AC: 00000000 nop */ + /* nop */ + /* 0xBFC3D6B0: 318DFFFF andi $t5, $t4, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[12] & 0xFFFFu; + /* 0xBFC3D6B4: A48D000C sh $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, 0xBFC3D6B4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC3D6B8: 946E01B2 lhu $t6, 434($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (434)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6B8u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D6BC: 00000000 nop */ + /* nop */ + /* 0xBFC3D6C0: 31CFFFFF andi $t7, $t6, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[14] & 0xFFFFu; + /* 0xBFC3D6C4: A48F000E sh $t7, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6C4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC3D6C8: 947801AA lhu $t8, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6C8u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D6CC: 00000000 nop */ + /* nop */ + /* 0xBFC3D6D0: 33190004 andi $t9, $t8, 0x4 */ + cpu->gpr[25] = cpu->gpr[24] & 0x4u; + /* 0xBFC3D6D4: 13200004 beq $t9, $zero, 0xBFC3D6E8 */ + uint32_t psx_brA_BFC3D6D4 = cpu->gpr[25]; uint32_t psx_brB_BFC3D6D4 = cpu->gpr[0]; + int psx_taken_BFC3D6D4 = (psx_brA_BFC3D6D4 == psx_brB_BFC3D6D4); + /* 0xBFC3D6D8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D6D4) goto label_BFC3D6E8; +label_BFC3D6DC: + psx_check_interrupts(cpu); + /* 0xBFC3D6DC: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3D6E0: 10000003 beq $zero, $zero, 0xBFC3D6F0 */ + uint32_t psx_brA_BFC3D6E0 = cpu->gpr[0]; uint32_t psx_brB_BFC3D6E0 = cpu->gpr[0]; + int psx_taken_BFC3D6E0 = (psx_brA_BFC3D6E0 == psx_brB_BFC3D6E0); + /* 0xBFC3D6E4: AC820010 sw $v0, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6E4u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC3D6E0) goto label_BFC3D6F0; +label_BFC3D6E8: + psx_check_interrupts(cpu); + /* 0xBFC3D6E8: AC800010 sw $zero, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6E8u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3D6EC: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC3D6F0: + psx_check_interrupts(cpu); + /* 0xBFC3D6F0: 946801AA lhu $t0, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D6F0u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D6F4: 00000000 nop */ + /* nop */ + /* 0xBFC3D6F8: 31090001 andi $t1, $t0, 0x1 */ + cpu->gpr[9] = cpu->gpr[8] & 0x1u; + /* 0xBFC3D6FC: 11200003 beq $t1, $zero, 0xBFC3D70C */ + uint32_t psx_brA_BFC3D6FC = cpu->gpr[9]; uint32_t psx_brB_BFC3D6FC = cpu->gpr[0]; + int psx_taken_BFC3D6FC = (psx_brA_BFC3D6FC == psx_brB_BFC3D6FC); + /* 0xBFC3D700: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D6FC) goto label_BFC3D70C; +label_BFC3D704: + psx_check_interrupts(cpu); + /* 0xBFC3D704: 10000002 beq $zero, $zero, 0xBFC3D710 */ + uint32_t psx_brA_BFC3D704 = cpu->gpr[0]; uint32_t psx_brB_BFC3D704 = cpu->gpr[0]; + int psx_taken_BFC3D704 = (psx_brA_BFC3D704 == psx_brB_BFC3D704); + /* 0xBFC3D708: AC820014 sw $v0, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D708u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC3D704) goto label_BFC3D710; +label_BFC3D70C: + psx_check_interrupts(cpu); + /* 0xBFC3D70C: AC800014 sw $zero, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D70Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC3D710: + psx_check_interrupts(cpu); + /* 0xBFC3D710: 946A01B4 lhu $t2, 436($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (436)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D710u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D714: 00000000 nop */ + /* nop */ + /* 0xBFC3D718: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D71C: A48B0018 sh $t3, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D71Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[11] & 0xFFFFu)); } + /* 0xBFC3D720: 946C01B6 lhu $t4, 438($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (438)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D720u); return; } cpu->gpr[12] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D724: 00000000 nop */ + /* nop */ + /* 0xBFC3D728: 318DFFFF andi $t5, $t4, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[12] & 0xFFFFu; + /* 0xBFC3D72C: A48D001A sh $t5, 26($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (26)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D72Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + /* 0xBFC3D730: 946E01AA lhu $t6, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D730u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D734: 00000000 nop */ + /* nop */ + /* 0xBFC3D738: 31CF0008 andi $t7, $t6, 0x8 */ + cpu->gpr[15] = cpu->gpr[14] & 0x8u; + /* 0xBFC3D73C: 11E00003 beq $t7, $zero, 0xBFC3D74C */ + uint32_t psx_brA_BFC3D73C = cpu->gpr[15]; uint32_t psx_brB_BFC3D73C = cpu->gpr[0]; + int psx_taken_BFC3D73C = (psx_brA_BFC3D73C == psx_brB_BFC3D73C); + /* 0xBFC3D740: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D73C) goto label_BFC3D74C; +label_BFC3D744: + psx_check_interrupts(cpu); + /* 0xBFC3D744: 10000002 beq $zero, $zero, 0xBFC3D750 */ + uint32_t psx_brA_BFC3D744 = cpu->gpr[0]; uint32_t psx_brB_BFC3D744 = cpu->gpr[0]; + int psx_taken_BFC3D744 = (psx_brA_BFC3D744 == psx_brB_BFC3D744); + /* 0xBFC3D748: AC82001C sw $v0, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D748u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC3D744) goto label_BFC3D750; +label_BFC3D74C: + psx_check_interrupts(cpu); + /* 0xBFC3D74C: AC80001C sw $zero, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D74Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC3D750: + psx_check_interrupts(cpu); + /* 0xBFC3D750: 947801AA lhu $t8, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D750u); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D754: 00000000 nop */ + /* nop */ + /* 0xBFC3D758: 33190002 andi $t9, $t8, 0x2 */ + cpu->gpr[25] = cpu->gpr[24] & 0x2u; + /* 0xBFC3D75C: 13200003 beq $t9, $zero, 0xBFC3D76C */ + uint32_t psx_brA_BFC3D75C = cpu->gpr[25]; uint32_t psx_brB_BFC3D75C = cpu->gpr[0]; + int psx_taken_BFC3D75C = (psx_brA_BFC3D75C == psx_brB_BFC3D75C); + /* 0xBFC3D760: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D75C) goto label_BFC3D76C; +label_BFC3D764: + psx_check_interrupts(cpu); + /* 0xBFC3D764: 10000002 beq $zero, $zero, 0xBFC3D770 */ + uint32_t psx_brA_BFC3D764 = cpu->gpr[0]; uint32_t psx_brB_BFC3D764 = cpu->gpr[0]; + int psx_taken_BFC3D764 = (psx_brA_BFC3D764 == psx_brB_BFC3D764); + /* 0xBFC3D768: AC820020 sw $v0, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D768u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC3D764) goto label_BFC3D770; +label_BFC3D76C: + psx_check_interrupts(cpu); + /* 0xBFC3D76C: AC800020 sw $zero, 32($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D76Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } +label_BFC3D770: + psx_check_interrupts(cpu); + /* 0xBFC3D770: 946801AA lhu $t0, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D770u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D774: 00000000 nop */ + /* nop */ + /* 0xBFC3D778: 31093F00 andi $t1, $t0, 0x3F00 */ + cpu->gpr[9] = cpu->gpr[8] & 0x3F00u; + /* 0xBFC3D77C: 00095202 srl $t2, $t1, 8 */ + cpu->gpr[10] = cpu->gpr[9] >> 8u; + /* 0xBFC3D780: A48A0024 sh $t2, 36($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (36)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D780u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + /* 0xBFC3D784: 946B01AA lhu $t3, 426($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (426)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D784u); return; } cpu->gpr[11] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D788: 00000000 nop */ + /* nop */ + /* 0xBFC3D78C: 316C0080 andi $t4, $t3, 0x80 */ + cpu->gpr[12] = cpu->gpr[11] & 0x80u; + /* 0xBFC3D790: 11800004 beq $t4, $zero, 0xBFC3D7A4 */ + uint32_t psx_brA_BFC3D790 = cpu->gpr[12]; uint32_t psx_brB_BFC3D790 = cpu->gpr[0]; + int psx_taken_BFC3D790 = (psx_brA_BFC3D790 == psx_brB_BFC3D790); + /* 0xBFC3D794: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D790) goto label_BFC3D7A4; +label_BFC3D798: + psx_check_interrupts(cpu); + /* 0xBFC3D798: 240D0001 addiu $t5, $zero, 1 */ + cpu->gpr[13] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3D79C: 10000002 beq $zero, $zero, 0xBFC3D7A8 */ + uint32_t psx_brA_BFC3D79C = cpu->gpr[0]; uint32_t psx_brB_BFC3D79C = cpu->gpr[0]; + int psx_taken_BFC3D79C = (psx_brA_BFC3D79C == psx_brB_BFC3D79C); + /* 0xBFC3D7A0: A48D0026 sh $t5, 38($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (38)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7A0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[13] & 0xFFFFu)); } + if (psx_taken_BFC3D79C) goto label_BFC3D7A8; +label_BFC3D7A4: + psx_check_interrupts(cpu); + /* 0xBFC3D7A4: A4800026 sh $zero, 38($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (38)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7A4u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } +label_BFC3D7A8: + psx_check_interrupts(cpu); + /* 0xBFC3D7A8: 946E01AC lhu $t6, 428($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7A8u); return; } cpu->gpr[14] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D7AC: 00000000 nop */ + /* nop */ + /* 0xBFC3D7B0: 31CF000E andi $t7, $t6, 0xE */ + cpu->gpr[15] = cpu->gpr[14] & 0xEu; + /* 0xBFC3D7B4: 000FC042 srl $t8, $t7, 1 */ + cpu->gpr[24] = cpu->gpr[15] >> 1u; + /* 0xBFC3D7B8: A4980028 sh $t8, 40($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (40)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7B8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[24] & 0xFFFFu)); } + /* 0xBFC3D7BC: 947901AC lhu $t9, 428($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7BCu); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D7C0: 00000000 nop */ + /* nop */ + /* 0xBFC3D7C4: 33280001 andi $t0, $t9, 0x1 */ + cpu->gpr[8] = cpu->gpr[25] & 0x1u; + /* 0xBFC3D7C8: 11000004 beq $t0, $zero, 0xBFC3D7DC */ + uint32_t psx_brA_BFC3D7C8 = cpu->gpr[8]; uint32_t psx_brB_BFC3D7C8 = cpu->gpr[0]; + int psx_taken_BFC3D7C8 = (psx_brA_BFC3D7C8 == psx_brB_BFC3D7C8); + /* 0xBFC3D7CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3D7C8) goto label_BFC3D7DC; +label_BFC3D7D0: + psx_check_interrupts(cpu); + /* 0xBFC3D7D0: 24090001 addiu $t1, $zero, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3D7D4: 10000002 beq $zero, $zero, 0xBFC3D7E0 */ + uint32_t psx_brA_BFC3D7D4 = cpu->gpr[0]; uint32_t psx_brB_BFC3D7D4 = cpu->gpr[0]; + int psx_taken_BFC3D7D4 = (psx_brA_BFC3D7D4 == psx_brB_BFC3D7D4); + /* 0xBFC3D7D8: A489002A sh $t1, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7D8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + if (psx_taken_BFC3D7D4) goto label_BFC3D7E0; +label_BFC3D7DC: + psx_check_interrupts(cpu); + /* 0xBFC3D7DC: A480002A sh $zero, 42($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (42)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7DCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } +label_BFC3D7E0: + psx_check_interrupts(cpu); + /* 0xBFC3D7E0: 946A019E lhu $t2, 414($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (414)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7E0u); return; } cpu->gpr[10] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D7E4: 946D019C lhu $t5, 412($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (412)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7E4u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D7E8: 314BFFFF andi $t3, $t2, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC3D7EC: 000B6400 sll $t4, $t3, 16 */ + cpu->gpr[12] = cpu->gpr[11] << 16u; + /* 0xBFC3D7F0: 31AEFFFF andi $t6, $t5, 0xFFFF */ + cpu->gpr[14] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC3D7F4: 018E7821 addu $t7, $t4, $t6 */ + cpu->gpr[15] = cpu->gpr[12] + cpu->gpr[14]; + /* 0xBFC3D7F8: AC8F002C sw $t7, 44($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7F8u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3D7FC: 947801AE lhu $t8, 430($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (430)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D7FCu); return; } cpu->gpr[24] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3D800: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3D804: 3319FFFF andi $t9, $t8, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[24] & 0xFFFFu; + /* 0xBFC3D808: 03E00008 jr $ra */ + /* 0xBFC3D80C: A4990030 sh $t9, 48($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (48)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D80Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[25] & 0xFFFFu)); } + return; +} + void func_1FC3D810(CPUState* cpu) { label_BFC3D810: psx_check_interrupts(cpu); @@ -118153,6 +139204,50 @@ label_BFC3D850: return; } +void func_1FC3D870(CPUState* cpu) { +label_BFC3D870: + psx_check_interrupts(cpu); + /* 0xBFC3D870: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC3D874: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3D878: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC3D87C: AC239F1C sw $v1, -24804($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24804)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D87Cu); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC3D880: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3D884: 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, 0xBFC3D884u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3D888: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3D88C: 8C849F18 lw $a0, -24808($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24808)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D88Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3D890: AC239F2C sw $v1, -24788($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24788)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D890u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC3D894: 27A60018 addiu $a2, $sp, 24 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC3D898: AFA30018 sw $v1, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D898u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC3D89C: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC3D8A0: 24050060 addiu $a1, $zero, 96 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (96)); + cpu->gpr[31] = 0xBFC3D8A4u; + psx_dispatch(cpu, 0x80054710u); +label_BFC3D8A4: + psx_check_interrupts(cpu); + /* 0xBFC3D8A4: 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, 0xBFC3D8A4u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3D8A8: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC3D8AC: 8C429F1C lw $v0, -24804($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-24804)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3D8ACu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3D8B0: 03E00008 jr $ra */ + /* 0xBFC3D8B4: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + return; +} + void func_1FC3D8C0(CPUState* cpu) { label_BFC3D8C0: psx_check_interrupts(cpu); @@ -119079,6 +140174,54 @@ label_BFC3DE2C: return; } +void func_1FC3DED0(CPUState* cpu) { +label_BFC3DED0: + psx_check_interrupts(cpu); + /* 0xBFC3DED0: 3C010007 lui $at, 0x7 */ + cpu->gpr[1] = 0x00070000u; + /* 0xBFC3DED4: 3421F001 ori $at, $at, 0xF001 */ + cpu->gpr[1] = cpu->gpr[1] | 0xF001u; + /* 0xBFC3DED8: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC3DEDC: 00A1082B sltu $at, $a1, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC3DEE0: 14200003 bne $at, $zero, 0xBFC3DEF0 */ + uint32_t psx_brA_BFC3DEE0 = cpu->gpr[1]; uint32_t psx_brB_BFC3DEE0 = cpu->gpr[0]; + int psx_taken_BFC3DEE0 = (psx_brA_BFC3DEE0 != psx_brB_BFC3DEE0); + /* 0xBFC3DEE4: 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, 0xBFC3DEE4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC3DEE0) goto label_BFC3DEF0; +label_BFC3DEE8: + psx_check_interrupts(cpu); + /* 0xBFC3DEE8: 3C050007 lui $a1, 0x7 */ + cpu->gpr[5] = 0x00070000u; + /* 0xBFC3DEEC: 34A5F000 ori $a1, $a1, 0xF000 */ + cpu->gpr[5] = cpu->gpr[5] | 0xF000u; +label_BFC3DEF0: + psx_check_interrupts(cpu); + /* 0xBFC3DEF0: 0C01510A jal 0xB0054428 */ + /* 0xBFC3DEF4: AFA5001C sw $a1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DEF4u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + cpu->gpr[31] = 0xBFC3DEF8u; + psx_dispatch(cpu, 0x80054428u); +label_BFC3DEF8: + psx_check_interrupts(cpu); + /* 0xBFC3DEF8: 8FA5001C lw $a1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DEF8u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3DEFC: 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, 0xBFC3DEFCu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3DF00: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3DF04: AC209F28 sw $zero, -24792($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24792)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DF04u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3DF08: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC3DF0C: 03E00008 jr $ra */ + /* 0xBFC3DF10: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + return; +} + void func_1FC3DF20(CPUState* cpu) { label_BFC3DF20: psx_check_interrupts(cpu); @@ -119161,6 +140304,112 @@ label_BFC3DF78: return; } +void func_1FC3DF90(CPUState* cpu) { +label_BFC3DF90: + psx_check_interrupts(cpu); + /* 0xBFC3DF90: 3C010007 lui $at, 0x7 */ + cpu->gpr[1] = 0x00070000u; + /* 0xBFC3DF94: 3421F001 ori $at, $at, 0xF001 */ + cpu->gpr[1] = cpu->gpr[1] | 0xF001u; + /* 0xBFC3DF98: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC3DF9C: 0081082B sltu $at, $a0, $at */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < cpu->gpr[1] ? 1 : 0); + /* 0xBFC3DFA0: 14200003 bne $at, $zero, 0xBFC3DFB0 */ + uint32_t psx_brA_BFC3DFA0 = cpu->gpr[1]; uint32_t psx_brB_BFC3DFA0 = cpu->gpr[0]; + int psx_taken_BFC3DFA0 = (psx_brA_BFC3DFA0 != psx_brB_BFC3DFA0); + /* 0xBFC3DFA4: 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, 0xBFC3DFA4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + if (psx_taken_BFC3DFA0) goto label_BFC3DFB0; +label_BFC3DFA8: + psx_check_interrupts(cpu); + /* 0xBFC3DFA8: 10000017 beq $zero, $zero, 0xBFC3E008 */ + uint32_t psx_brA_BFC3DFA8 = cpu->gpr[0]; uint32_t psx_brB_BFC3DFA8 = cpu->gpr[0]; + int psx_taken_BFC3DFA8 = (psx_brA_BFC3DFA8 == psx_brB_BFC3DFA8); + /* 0xBFC3DFAC: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3DFA8) goto label_BFC3E008; +label_BFC3DFB0: + psx_check_interrupts(cpu); + /* 0xBFC3DFB0: 2C811000 sltiu $at, $a0, 4096 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < 0x00001000u ? 1 : 0); + /* 0xBFC3DFB4: 10200004 beq $at, $zero, 0xBFC3DFC8 */ + uint32_t psx_brA_BFC3DFB4 = cpu->gpr[1]; uint32_t psx_brB_BFC3DFB4 = cpu->gpr[0]; + int psx_taken_BFC3DFB4 = (psx_brA_BFC3DFB4 == psx_brB_BFC3DFB4); + /* 0xBFC3DFB8: 308E0007 andi $t6, $a0, 0x7 */ + cpu->gpr[14] = cpu->gpr[4] & 0x7u; + if (psx_taken_BFC3DFB4) goto label_BFC3DFC8; +label_BFC3DFBC: + psx_check_interrupts(cpu); + /* 0xBFC3DFBC: 10000012 beq $zero, $zero, 0xBFC3E008 */ + uint32_t psx_brA_BFC3DFBC = cpu->gpr[0]; uint32_t psx_brB_BFC3DFBC = cpu->gpr[0]; + int psx_taken_BFC3DFBC = (psx_brA_BFC3DFBC == psx_brB_BFC3DFBC); + /* 0xBFC3DFC0: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3DFBC) goto label_BFC3E008; +label_BFC3DFC4: + psx_check_interrupts(cpu); + /* 0xBFC3DFC4: 308E0007 andi $t6, $a0, 0x7 */ + cpu->gpr[14] = cpu->gpr[4] & 0x7u; +label_BFC3DFC8: + psx_check_interrupts(cpu); + /* 0xBFC3DFC8: 15C00003 bne $t6, $zero, 0xBFC3DFD8 */ + uint32_t psx_brA_BFC3DFC8 = cpu->gpr[14]; uint32_t psx_brB_BFC3DFC8 = cpu->gpr[0]; + int psx_taken_BFC3DFC8 = (psx_brA_BFC3DFC8 != psx_brB_BFC3DFC8); + /* 0xBFC3DFCC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3DFC8) goto label_BFC3DFD8; +label_BFC3DFD0: + psx_check_interrupts(cpu); + /* 0xBFC3DFD0: 10000005 beq $zero, $zero, 0xBFC3DFE8 */ + uint32_t psx_brA_BFC3DFD0 = cpu->gpr[0]; uint32_t psx_brB_BFC3DFD0 = cpu->gpr[0]; + int psx_taken_BFC3DFD0 = (psx_brA_BFC3DFD0 == psx_brB_BFC3DFD0); + /* 0xBFC3DFD4: AFA40018 sw $a0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DFD4u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + if (psx_taken_BFC3DFD0) goto label_BFC3DFE8; +label_BFC3DFD8: + psx_check_interrupts(cpu); + /* 0xBFC3DFD8: 24840008 addiu $a0, $a0, 8 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (8)); + /* 0xBFC3DFDC: 2401FFFB addiu $at, $zero, -5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-5)); + /* 0xBFC3DFE0: 00812024 and $a0, $a0, $at */ + cpu->gpr[4] = cpu->gpr[4] & cpu->gpr[1]; + /* 0xBFC3DFE4: AFA40018 sw $a0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DFE4u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } +label_BFC3DFE8: + psx_check_interrupts(cpu); + /* 0xBFC3DFE8: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3DFEC: 8C849F18 lw $a0, -24808($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-24808)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DFECu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3DFF0: 2405002B addiu $a1, $zero, 43 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (43)); + /* 0xBFC3DFF4: 0C0151C4 jal 0xB0054710 */ + /* 0xBFC3DFF8: 27A60018 addiu $a2, $sp, 24 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + cpu->gpr[31] = 0xBFC3DFFCu; + psx_dispatch(cpu, 0x80054710u); +label_BFC3DFFC: + psx_check_interrupts(cpu); + /* 0xBFC3DFFC: 8FA40018 lw $a0, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3DFFCu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3E000: 00000000 nop */ + /* nop */ + /* 0xBFC3E004: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC3E008: + psx_check_interrupts(cpu); + /* 0xBFC3E008: 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, 0xBFC3E008u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3E00C: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC3E010: 03E00008 jr $ra */ + /* 0xBFC3E014: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3E020(CPUState* cpu) { label_BFC3E020: psx_check_interrupts(cpu); @@ -119284,6 +140533,66 @@ label_BFC3E0B0: return; } +void func_1FC3E0C0(CPUState* cpu) { +label_BFC3E0C0: + psx_check_interrupts(cpu); + /* 0xBFC3E0C0: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3E0C4: 14810003 bne $a0, $at, 0xBFC3E0D4 */ + uint32_t psx_brA_BFC3E0C4 = cpu->gpr[4]; uint32_t psx_brB_BFC3E0C4 = cpu->gpr[1]; + int psx_taken_BFC3E0C4 = (psx_brA_BFC3E0C4 != psx_brB_BFC3E0C4); + /* 0xBFC3E0C8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC3E0C4) goto label_BFC3E0D4; +label_BFC3E0CC: + psx_check_interrupts(cpu); + /* 0xBFC3E0CC: 03E00008 jr $ra */ + /* 0xBFC3E0D0: AC209F28 sw $zero, -24792($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24792)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E0D0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + return; +label_BFC3E0D4: + psx_check_interrupts(cpu); + /* 0xBFC3E0D4: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3E0D8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E0DC: AC2E9F28 sw $t6, -24792($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-24792)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E0DCu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E0E0: 03E00008 jr $ra */ + /* 0xBFC3E0E4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3E0E8(CPUState* cpu) { +label_BFC3E0E8: + psx_check_interrupts(cpu); + /* 0xBFC3E0E8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3E0EC: 8DCE9F28 lw $t6, -24792($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-24792)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E0ECu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E0F0: 00000000 nop */ + /* nop */ + /* 0xBFC3E0F4: 15C00004 bne $t6, $zero, 0xBFC3E108 */ + uint32_t psx_brA_BFC3E0F4 = cpu->gpr[14]; uint32_t psx_brB_BFC3E0F4 = cpu->gpr[0]; + int psx_taken_BFC3E0F4 = (psx_brA_BFC3E0F4 != psx_brB_BFC3E0F4); + /* 0xBFC3E0F8: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3E0F4) goto label_BFC3E108; +label_BFC3E0FC: + psx_check_interrupts(cpu); + /* 0xBFC3E0FC: 03E00008 jr $ra */ + /* 0xBFC3E100: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + return; +label_BFC3E108: + psx_check_interrupts(cpu); + /* 0xBFC3E108: 03E00008 jr $ra */ + /* 0xBFC3E10C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3E110(CPUState* cpu) { label_BFC3E110: psx_check_interrupts(cpu); @@ -119673,6 +140982,1086 @@ label_BFC3E318: return; } +void func_1FC3E324(CPUState* cpu) { +label_BFC3E324: + psx_check_interrupts(cpu); + /* 0xBFC3E324: 18800017 blez $a0, 0xBFC3E384 */ + uint32_t psx_brA_BFC3E324 = cpu->gpr[4]; + int psx_taken_BFC3E324 = ((int32_t)psx_brA_BFC3E324 <= 0); + /* 0xBFC3E328: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + if (psx_taken_BFC3E324) goto label_BFC3E384; +label_BFC3E32C: + psx_check_interrupts(cpu); + /* 0xBFC3E32C: AC25EE44 sw $a1, -4540($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E32Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3E330: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E334: 3C0E4000 lui $t6, 0x4000 */ + cpu->gpr[14] = 0x40000000u; + /* 0xBFC3E338: AC209BF8 sw $zero, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E338u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3E33C: 35CE1000 ori $t6, $t6, 0x1000 */ + cpu->gpr[14] = cpu->gpr[14] | 0x1000u; + /* 0xBFC3E340: 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, 0xBFC3E340u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E344: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3E348: 8DEF9BF0 lw $t7, -25616($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25616)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E348u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E34C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E350: AC249BF4 sw $a0, -25612($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E350u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC3E354: 95E301AC lhu $v1, 428($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (428)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E354u); return; } cpu->gpr[3] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3E358: 3C180001 lui $t8, 0x1 */ + cpu->gpr[24] = 0x00010000u; + /* 0xBFC3E35C: 3063000E andi $v1, $v1, 0xE */ + cpu->gpr[3] = cpu->gpr[3] & 0xEu; + /* 0xBFC3E360: 00031842 srl $v1, $v1, 1 */ + cpu->gpr[3] = cpu->gpr[3] >> 1u; + /* 0xBFC3E364: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); + /* 0xBFC3E368: 0078C804 sllv $t9, $t8, $v1 */ + cpu->gpr[25] = cpu->gpr[24] << (cpu->gpr[3] & 0x1Fu); + /* 0xBFC3E36C: 2728F000 addiu $t0, $t9, -4096 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[25] + (-4096)); + /* 0xBFC3E370: 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, 0xBFC3E370u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3E374: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3E378: AC23EE40 sw $v1, -4544($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4544)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E378u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC3E37C: 03E00008 jr $ra */ + /* 0xBFC3E380: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + return; +label_BFC3E384: + psx_check_interrupts(cpu); + /* 0xBFC3E384: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3E388: 03E00008 jr $ra */ + /* 0xBFC3E38C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3E390(CPUState* cpu) { +label_BFC3E390: + psx_check_interrupts(cpu); + /* 0xBFC3E390: 3C07800E lui $a3, 0x800E */ + cpu->gpr[7] = 0x800E0000u; + /* 0xBFC3E394: 8CE7EE40 lw $a3, -4544($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (-4544)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E394u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC3E398: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3E39C: 8DEF9F2C lw $t7, -24788($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-24788)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E39Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E3A0: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3E3A4: 27BDFFD0 addiu $sp, $sp, -48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-48)); + /* 0xBFC3E3A8: 00EE1804 sllv $v1, $t6, $a3 */ + cpu->gpr[3] = cpu->gpr[14] << (cpu->gpr[7] & 0x1Fu); + /* 0xBFC3E3AC: 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, 0xBFC3E3ACu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3E3B0: 00804021 addu $t0, $a0, $zero */ + cpu->gpr[8] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC3E3B4: 00002821 addu $a1, $zero, $zero */ + cpu->gpr[5] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3E3B8: 240BFFFF addiu $t3, $zero, -1 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC3E3BC: 15E00003 bne $t7, $zero, 0xBFC3E3CC */ + uint32_t psx_brA_BFC3E3BC = cpu->gpr[15]; uint32_t psx_brB_BFC3E3BC = cpu->gpr[0]; + int psx_taken_BFC3E3BC = (psx_brA_BFC3E3BC != psx_brB_BFC3E3BC); + /* 0xBFC3E3C0: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + if (psx_taken_BFC3E3BC) goto label_BFC3E3CC; +label_BFC3E3C4: + psx_check_interrupts(cpu); + /* 0xBFC3E3C4: 1000000A beq $zero, $zero, 0xBFC3E3F0 */ + uint32_t psx_brA_BFC3E3C4 = cpu->gpr[0]; uint32_t psx_brB_BFC3E3C4 = cpu->gpr[0]; + int psx_taken_BFC3E3C4 = (psx_brA_BFC3E3C4 == psx_brB_BFC3E3C4); + /* 0xBFC3E3C8: 00006021 addu $t4, $zero, $zero */ + cpu->gpr[12] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3E3C4) goto label_BFC3E3F0; +label_BFC3E3CC: + psx_check_interrupts(cpu); + /* 0xBFC3E3CC: 3C188014 lui $t8, 0x8014 */ + cpu->gpr[24] = 0x80140000u; + /* 0xBFC3E3D0: 8F18E40C lw $t8, -7156($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-7156)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E3D0u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E3D4: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3E3D8: 0018C880 sll $t9, $t8, 2 */ + cpu->gpr[25] = cpu->gpr[24] << 2u; + /* 0xBFC3E3DC: 01D97021 addu $t6, $t6, $t9 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[25]; + /* 0xBFC3E3E0: 8DCE9910 lw $t6, -26352($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-26352)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E3E0u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E3E4: 3C0F0001 lui $t7, 0x1 */ + cpu->gpr[15] = 0x00010000u; + /* 0xBFC3E3E8: 01EEC023 subu $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] - cpu->gpr[14]; + /* 0xBFC3E3EC: 00F86004 sllv $t4, $t8, $a3 */ + cpu->gpr[12] = cpu->gpr[24] << (cpu->gpr[7] & 0x1Fu); +label_BFC3E3F0: + psx_check_interrupts(cpu); + /* 0xBFC3E3F0: 2462FFFF addiu $v0, $v1, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[3] + (-1)); + /* 0xBFC3E3F4: 0040C827 nor $t9, $v0, $zero */ + cpu->gpr[25] = ~(cpu->gpr[2] | cpu->gpr[0]); + /* 0xBFC3E3F8: 01197824 and $t7, $t0, $t9 */ + cpu->gpr[15] = cpu->gpr[8] & cpu->gpr[25]; + /* 0xBFC3E3FC: 11E00004 beq $t7, $zero, 0xBFC3E410 */ + uint32_t psx_brA_BFC3E3FC = cpu->gpr[15]; uint32_t psx_brB_BFC3E3FC = cpu->gpr[0]; + int psx_taken_BFC3E3FC = (psx_brA_BFC3E3FC == psx_brB_BFC3E3FC); + /* 0xBFC3E400: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3E3FC) goto label_BFC3E410; +label_BFC3E404: + psx_check_interrupts(cpu); + /* 0xBFC3E404: 10000002 beq $zero, $zero, 0xBFC3E410 */ + uint32_t psx_brA_BFC3E404 = cpu->gpr[0]; uint32_t psx_brB_BFC3E404 = cpu->gpr[0]; + int psx_taken_BFC3E404 = (psx_brA_BFC3E404 == psx_brB_BFC3E404); + /* 0xBFC3E408: 00401821 addu $v1, $v0, $zero */ + cpu->gpr[3] = cpu->gpr[2] + cpu->gpr[0]; + if (psx_taken_BFC3E404) goto label_BFC3E410; +label_BFC3E40C: + psx_check_interrupts(cpu); + /* 0xBFC3E40C: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC3E410: + psx_check_interrupts(cpu); + /* 0xBFC3E410: 3C0D800E lui $t5, 0x800E */ + cpu->gpr[13] = 0x800E0000u; + /* 0xBFC3E414: 8DADEE44 lw $t5, -4540($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E414u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3E418: 3C064000 lui $a2, 0x4000 */ + cpu->gpr[6] = 0x40000000u; + /* 0xBFC3E41C: 8DAE0000 lw $t6, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E41Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E420: 01034021 addu $t0, $t0, $v1 */ + cpu->gpr[8] = cpu->gpr[8] + cpu->gpr[3]; + /* 0xBFC3E424: 00E84007 srav $t0, $t0, $a3 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> (cpu->gpr[7] & 0x1Fu)); + /* 0xBFC3E428: 01C6C024 and $t8, $t6, $a2 */ + cpu->gpr[24] = cpu->gpr[14] & cpu->gpr[6]; + /* 0xBFC3E42C: 13000005 beq $t8, $zero, 0xBFC3E444 */ + uint32_t psx_brA_BFC3E42C = cpu->gpr[24]; uint32_t psx_brB_BFC3E42C = cpu->gpr[0]; + int psx_taken_BFC3E42C = (psx_brA_BFC3E42C == psx_brB_BFC3E42C); + /* 0xBFC3E430: 00E84004 sllv $t0, $t0, $a3 */ + cpu->gpr[8] = cpu->gpr[8] << (cpu->gpr[7] & 0x1Fu); + if (psx_taken_BFC3E42C) goto label_BFC3E444; +label_BFC3E434: + psx_check_interrupts(cpu); + /* 0xBFC3E434: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC3E438: 8D4A9BF4 lw $t2, -25612($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E438u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3E43C: 1000002C beq $zero, $zero, 0xBFC3E4F0 */ + uint32_t psx_brA_BFC3E43C = cpu->gpr[0]; uint32_t psx_brB_BFC3E43C = cpu->gpr[0]; + int psx_taken_BFC3E43C = (psx_brA_BFC3E43C == psx_brB_BFC3E43C); + /* 0xBFC3E440: 00005821 addu $t3, $zero, $zero */ + cpu->gpr[11] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3E43C) goto label_BFC3E4F0; +label_BFC3E444: + psx_check_interrupts(cpu); + /* 0xBFC3E444: AFA5002C sw $a1, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E444u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3E448: AFA80030 sw $t0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E448u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3E44C: AFAB0028 sw $t3, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E44Cu); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC3E450: 0C015844 jal 0xB0056110 */ + /* 0xBFC3E454: AFAC0018 sw $t4, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E454u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + cpu->gpr[31] = 0xBFC3E458u; + psx_dispatch(cpu, 0x80056110u); +label_BFC3E458: + psx_check_interrupts(cpu); + /* 0xBFC3E458: 3C0A8008 lui $t2, 0x8008 */ + cpu->gpr[10] = 0x80080000u; + /* 0xBFC3E45C: 8D4A9BF4 lw $t2, -25612($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E45Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3E460: 8FA5002C lw $a1, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E460u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3E464: 8FA80030 lw $t0, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E464u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3E468: 8FAB0028 lw $t3, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E468u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC3E46C: 8FAC0018 lw $t4, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E46Cu); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC3E470: 1D400005 bgtz $t2, 0xBFC3E488 */ + uint32_t psx_brA_BFC3E470 = cpu->gpr[10]; + int psx_taken_BFC3E470 = ((int32_t)psx_brA_BFC3E470 > 0); + /* 0xBFC3E474: 3C064000 lui $a2, 0x4000 */ + cpu->gpr[6] = 0x40000000u; + if (psx_taken_BFC3E470) goto label_BFC3E488; +label_BFC3E478: + psx_check_interrupts(cpu); + /* 0xBFC3E478: 3C0D800E lui $t5, 0x800E */ + cpu->gpr[13] = 0x800E0000u; + /* 0xBFC3E47C: 8DADEE44 lw $t5, -4540($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E47Cu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3E480: 1000001C beq $zero, $zero, 0xBFC3E4F4 */ + uint32_t psx_brA_BFC3E480 = cpu->gpr[0]; uint32_t psx_brB_BFC3E480 = cpu->gpr[0]; + int psx_taken_BFC3E480 = (psx_brA_BFC3E480 == psx_brB_BFC3E480); + /* 0xBFC3E484: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E480) goto label_BFC3E4F4; +label_BFC3E488: + psx_check_interrupts(cpu); + /* 0xBFC3E488: 3C0D800E lui $t5, 0x800E */ + cpu->gpr[13] = 0x800E0000u; + /* 0xBFC3E48C: 8DADEE44 lw $t5, -4540($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E48Cu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3E490: 0005C8C0 sll $t9, $a1, 3 */ + cpu->gpr[25] = cpu->gpr[5] << 3u; + /* 0xBFC3E494: 3C048000 lui $a0, 0x8000 */ + cpu->gpr[4] = 0x80000000u; + /* 0xBFC3E498: 01B91821 addu $v1, $t5, $t9 */ + cpu->gpr[3] = cpu->gpr[13] + cpu->gpr[25]; +label_BFC3E49C: + psx_check_interrupts(cpu); + /* 0xBFC3E49C: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E49Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3E4A0: 00000000 nop */ + /* nop */ + /* 0xBFC3E4A4: 00467824 and $t7, $v0, $a2 */ + cpu->gpr[15] = cpu->gpr[2] & cpu->gpr[6]; + /* 0xBFC3E4A8: 15E0000B bne $t7, $zero, 0xBFC3E4D8 */ + uint32_t psx_brA_BFC3E4A8 = cpu->gpr[15]; uint32_t psx_brB_BFC3E4A8 = cpu->gpr[0]; + int psx_taken_BFC3E4A8 = (psx_brA_BFC3E4A8 != psx_brB_BFC3E4A8); + /* 0xBFC3E4AC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E4A8) goto label_BFC3E4D8; +label_BFC3E4B0: + psx_check_interrupts(cpu); + /* 0xBFC3E4B0: 00447024 and $t6, $v0, $a0 */ + cpu->gpr[14] = cpu->gpr[2] & cpu->gpr[4]; + /* 0xBFC3E4B4: 11C0000A beq $t6, $zero, 0xBFC3E4E0 */ + uint32_t psx_brA_BFC3E4B4 = cpu->gpr[14]; uint32_t psx_brB_BFC3E4B4 = cpu->gpr[0]; + int psx_taken_BFC3E4B4 = (psx_brA_BFC3E4B4 == psx_brB_BFC3E4B4); + /* 0xBFC3E4B8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E4B4) goto label_BFC3E4E0; +label_BFC3E4BC: + psx_check_interrupts(cpu); + /* 0xBFC3E4BC: 8C780004 lw $t8, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E4BCu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E4C0: 00000000 nop */ + /* nop */ + /* 0xBFC3E4C4: 0308082B sltu $at, $t8, $t0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[24] < cpu->gpr[8] ? 1 : 0); + /* 0xBFC3E4C8: 14200005 bne $at, $zero, 0xBFC3E4E0 */ + uint32_t psx_brA_BFC3E4C8 = cpu->gpr[1]; uint32_t psx_brB_BFC3E4C8 = cpu->gpr[0]; + int psx_taken_BFC3E4C8 = (psx_brA_BFC3E4C8 != psx_brB_BFC3E4C8); + /* 0xBFC3E4CC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E4C8) goto label_BFC3E4E0; +label_BFC3E4D0: + psx_check_interrupts(cpu); + /* 0xBFC3E4D0: 10000007 beq $zero, $zero, 0xBFC3E4F0 */ + uint32_t psx_brA_BFC3E4D0 = cpu->gpr[0]; uint32_t psx_brB_BFC3E4D0 = cpu->gpr[0]; + int psx_taken_BFC3E4D0 = (psx_brA_BFC3E4D0 == psx_brB_BFC3E4D0); + /* 0xBFC3E4D4: 00A05821 addu $t3, $a1, $zero */ + cpu->gpr[11] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3E4D0) goto label_BFC3E4F0; +label_BFC3E4D8: + psx_check_interrupts(cpu); + /* 0xBFC3E4D8: 10000005 beq $zero, $zero, 0xBFC3E4F0 */ + uint32_t psx_brA_BFC3E4D8 = cpu->gpr[0]; uint32_t psx_brB_BFC3E4D8 = cpu->gpr[0]; + int psx_taken_BFC3E4D8 = (psx_brA_BFC3E4D8 == psx_brB_BFC3E4D8); + /* 0xBFC3E4DC: 00A05821 addu $t3, $a1, $zero */ + cpu->gpr[11] = cpu->gpr[5] + cpu->gpr[0]; + if (psx_taken_BFC3E4D8) goto label_BFC3E4F0; +label_BFC3E4E0: + psx_check_interrupts(cpu); + /* 0xBFC3E4E0: 24A50001 addiu $a1, $a1, 1 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (1)); + /* 0xBFC3E4E4: 00AA082A slt $at, $a1, $t2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[5] < (int32_t)cpu->gpr[10] ? 1 : 0); + /* 0xBFC3E4E8: 1420FFEC bne $at, $zero, 0xBFC3E49C */ + uint32_t psx_brA_BFC3E4E8 = cpu->gpr[1]; uint32_t psx_brB_BFC3E4E8 = cpu->gpr[0]; + int psx_taken_BFC3E4E8 = (psx_brA_BFC3E4E8 != psx_brB_BFC3E4E8); + /* 0xBFC3E4EC: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + if (psx_taken_BFC3E4E8) goto label_BFC3E49C; +label_BFC3E4F0: + psx_check_interrupts(cpu); + /* 0xBFC3E4F0: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); +label_BFC3E4F4: + psx_check_interrupts(cpu); + /* 0xBFC3E4F4: 15610004 bne $t3, $at, 0xBFC3E508 */ + uint32_t psx_brA_BFC3E4F4 = cpu->gpr[11]; uint32_t psx_brB_BFC3E4F4 = cpu->gpr[1]; + int psx_taken_BFC3E4F4 = (psx_brA_BFC3E4F4 != psx_brB_BFC3E4F4); + /* 0xBFC3E4F8: 000BC8C0 sll $t9, $t3, 3 */ + cpu->gpr[25] = cpu->gpr[11] << 3u; + if (psx_taken_BFC3E4F4) goto label_BFC3E508; +label_BFC3E4FC: + psx_check_interrupts(cpu); + /* 0xBFC3E4FC: 10000049 beq $zero, $zero, 0xBFC3E624 */ + uint32_t psx_brA_BFC3E4FC = cpu->gpr[0]; uint32_t psx_brB_BFC3E4FC = cpu->gpr[0]; + int psx_taken_BFC3E4FC = (psx_brA_BFC3E4FC == psx_brB_BFC3E4FC); + /* 0xBFC3E500: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E4FC) goto label_BFC3E624; +label_BFC3E504: + psx_check_interrupts(cpu); + /* 0xBFC3E504: 000BC8C0 sll $t9, $t3, 3 */ + cpu->gpr[25] = cpu->gpr[11] << 3u; +label_BFC3E508: + psx_check_interrupts(cpu); + /* 0xBFC3E508: 01B92821 addu $a1, $t5, $t9 */ + cpu->gpr[5] = cpu->gpr[13] + cpu->gpr[25]; + /* 0xBFC3E50C: 8CA90000 lw $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, 0xBFC3E50Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E510: 00000000 nop */ + /* nop */ + /* 0xBFC3E514: 01267824 and $t7, $t1, $a2 */ + cpu->gpr[15] = cpu->gpr[9] & cpu->gpr[6]; + /* 0xBFC3E518: 11E00021 beq $t7, $zero, 0xBFC3E5A0 */ + uint32_t psx_brA_BFC3E518 = cpu->gpr[15]; uint32_t psx_brB_BFC3E518 = cpu->gpr[0]; + int psx_taken_BFC3E518 = (psx_brA_BFC3E518 == psx_brB_BFC3E518); + /* 0xBFC3E51C: 016A082A slt $at, $t3, $t2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[11] < (int32_t)cpu->gpr[10] ? 1 : 0); + if (psx_taken_BFC3E518) goto label_BFC3E5A0; +label_BFC3E520: + psx_check_interrupts(cpu); + /* 0xBFC3E520: 1020001D beq $at, $zero, 0xBFC3E598 */ + uint32_t psx_brA_BFC3E520 = cpu->gpr[1]; uint32_t psx_brB_BFC3E520 = cpu->gpr[0]; + int psx_taken_BFC3E520 = (psx_brA_BFC3E520 == psx_brB_BFC3E520); + /* 0xBFC3E524: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E520) goto label_BFC3E598; +label_BFC3E528: + psx_check_interrupts(cpu); + /* 0xBFC3E528: 8CAE0004 lw $t6, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E528u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E52C: 00000000 nop */ + /* nop */ + /* 0xBFC3E530: 01CCC023 subu $t8, $t6, $t4 */ + cpu->gpr[24] = cpu->gpr[14] - cpu->gpr[12]; + /* 0xBFC3E534: 0308082B sltu $at, $t8, $t0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[24] < cpu->gpr[8] ? 1 : 0); + /* 0xBFC3E538: 14200015 bne $at, $zero, 0xBFC3E590 */ + uint32_t psx_brA_BFC3E538 = cpu->gpr[1]; uint32_t psx_brB_BFC3E538 = cpu->gpr[0]; + int psx_taken_BFC3E538 = (psx_brA_BFC3E538 != psx_brB_BFC3E538); + /* 0xBFC3E53C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E538) goto label_BFC3E590; +label_BFC3E540: + psx_check_interrupts(cpu); + /* 0xBFC3E540: 3C040FFF lui $a0, 0xFFF */ + cpu->gpr[4] = 0x0FFF0000u; + /* 0xBFC3E544: 3484FFFF ori $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] | 0xFFFFu; + /* 0xBFC3E548: 25670001 addiu $a3, $t3, 1 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[11] + (1)); + /* 0xBFC3E54C: 01247824 and $t7, $t1, $a0 */ + cpu->gpr[15] = cpu->gpr[9] & cpu->gpr[4]; + /* 0xBFC3E550: 01E87021 addu $t6, $t7, $t0 */ + cpu->gpr[14] = cpu->gpr[15] + cpu->gpr[8]; + /* 0xBFC3E554: 0007C8C0 sll $t9, $a3, 3 */ + cpu->gpr[25] = cpu->gpr[7] << 3u; + /* 0xBFC3E558: 01B91821 addu $v1, $t5, $t9 */ + cpu->gpr[3] = cpu->gpr[13] + cpu->gpr[25]; + /* 0xBFC3E55C: 01C6C025 or $t8, $t6, $a2 */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[6]; + /* 0xBFC3E560: AC780000 sw $t8, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E560u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E564: 8CB90004 lw $t9, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E564u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E568: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E56C: 03287823 subu $t7, $t9, $t0 */ + cpu->gpr[15] = cpu->gpr[25] - cpu->gpr[8]; + /* 0xBFC3E570: AC6F0004 sw $t7, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E570u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3E574: 8CAE0000 lw $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, 0xBFC3E574u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E578: 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, 0xBFC3E578u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3E57C: 01C4C024 and $t8, $t6, $a0 */ + cpu->gpr[24] = cpu->gpr[14] & cpu->gpr[4]; + /* 0xBFC3E580: ACB80000 sw $t8, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E580u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E584: 8CA20000 lw $v0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E584u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3E588: 10000026 beq $zero, $zero, 0xBFC3E624 */ + uint32_t psx_brA_BFC3E588 = cpu->gpr[0]; uint32_t psx_brB_BFC3E588 = cpu->gpr[0]; + int psx_taken_BFC3E588 = (psx_brA_BFC3E588 == psx_brB_BFC3E588); + /* 0xBFC3E58C: AC279BF8 sw $a3, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E58Cu); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + if (psx_taken_BFC3E588) goto label_BFC3E624; +label_BFC3E590: + psx_check_interrupts(cpu); + /* 0xBFC3E590: 10000024 beq $zero, $zero, 0xBFC3E624 */ + uint32_t psx_brA_BFC3E590 = cpu->gpr[0]; uint32_t psx_brB_BFC3E590 = cpu->gpr[0]; + int psx_taken_BFC3E590 = (psx_brA_BFC3E590 == psx_brB_BFC3E590); + /* 0xBFC3E594: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E590) goto label_BFC3E624; +label_BFC3E598: + psx_check_interrupts(cpu); + /* 0xBFC3E598: 10000022 beq $zero, $zero, 0xBFC3E624 */ + uint32_t psx_brA_BFC3E598 = cpu->gpr[0]; uint32_t psx_brB_BFC3E598 = cpu->gpr[0]; + int psx_taken_BFC3E598 = (psx_brA_BFC3E598 == psx_brB_BFC3E598); + /* 0xBFC3E59C: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E598) goto label_BFC3E624; +label_BFC3E5A0: + psx_check_interrupts(cpu); + /* 0xBFC3E5A0: 8CA60004 lw $a2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5A0u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC3E5A4: 00000000 nop */ + /* nop */ + /* 0xBFC3E5A8: 0106082B sltu $at, $t0, $a2 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[8] < cpu->gpr[6] ? 1 : 0); + /* 0xBFC3E5AC: 10200018 beq $at, $zero, 0xBFC3E610 */ + uint32_t psx_brA_BFC3E5AC = cpu->gpr[1]; uint32_t psx_brB_BFC3E5AC = cpu->gpr[0]; + int psx_taken_BFC3E5AC = (psx_brA_BFC3E5AC == psx_brB_BFC3E5AC); + /* 0xBFC3E5B0: 3C040FFF lui $a0, 0xFFF */ + cpu->gpr[4] = 0x0FFF0000u; + if (psx_taken_BFC3E5AC) goto label_BFC3E610; +label_BFC3E5B4: + psx_check_interrupts(cpu); + /* 0xBFC3E5B4: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC3E5B8: 8CE79BF8 lw $a3, -25608($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5B8u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC3E5BC: 00000000 nop */ + /* nop */ + /* 0xBFC3E5C0: 00EA082A slt $at, $a3, $t2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[7] < (int32_t)cpu->gpr[10] ? 1 : 0); + /* 0xBFC3E5C4: 10200012 beq $at, $zero, 0xBFC3E610 */ + uint32_t psx_brA_BFC3E5C4 = cpu->gpr[1]; uint32_t psx_brB_BFC3E5C4 = cpu->gpr[0]; + int psx_taken_BFC3E5C4 = (psx_brA_BFC3E5C4 == psx_brB_BFC3E5C4); + /* 0xBFC3E5C8: 3C040FFF lui $a0, 0xFFF */ + cpu->gpr[4] = 0x0FFF0000u; + if (psx_taken_BFC3E5C4) goto label_BFC3E610; +label_BFC3E5CC: + psx_check_interrupts(cpu); + /* 0xBFC3E5CC: 0007C8C0 sll $t9, $a3, 3 */ + cpu->gpr[25] = cpu->gpr[7] << 3u; + /* 0xBFC3E5D0: 01B91821 addu $v1, $t5, $t9 */ + cpu->gpr[3] = cpu->gpr[13] + cpu->gpr[25]; + /* 0xBFC3E5D4: 8C6F0000 lw $t7, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5D4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E5D8: 8C6E0004 lw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5D8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E5DC: 01282021 addu $a0, $t1, $t0 */ + cpu->gpr[4] = cpu->gpr[9] + cpu->gpr[8]; + /* 0xBFC3E5E0: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + /* 0xBFC3E5E4: AC6F0008 sw $t7, 8($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5E4u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3E5E8: 00C81023 subu $v0, $a2, $t0 */ + cpu->gpr[2] = cpu->gpr[6] - cpu->gpr[8]; + /* 0xBFC3E5EC: 0081C025 or $t8, $a0, $at */ + cpu->gpr[24] = cpu->gpr[4] | cpu->gpr[1]; + /* 0xBFC3E5F0: AC780000 sw $t8, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5F0u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E5F4: AC620004 sw $v0, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5F4u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC3E5F8: AC6E000C sw $t6, 12($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E5F8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E5FC: 24E70001 addiu $a3, $a3, 1 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (1)); + /* 0xBFC3E600: 8CA90000 lw $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, 0xBFC3E600u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E604: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E608: AC279BF8 sw $a3, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E608u); return; } cpu->write_word(psx_addr, cpu->gpr[7]); } + /* 0xBFC3E60C: 3C040FFF lui $a0, 0xFFF */ + cpu->gpr[4] = 0x0FFF0000u; +label_BFC3E610: + psx_check_interrupts(cpu); + /* 0xBFC3E610: 3484FFFF ori $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] | 0xFFFFu; + /* 0xBFC3E614: 0124C824 and $t9, $t1, $a0 */ + cpu->gpr[25] = cpu->gpr[9] & cpu->gpr[4]; + /* 0xBFC3E618: ACB90000 sw $t9, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E618u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E61C: 8CA20000 lw $v0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E61Cu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3E620: 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, 0xBFC3E620u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } +label_BFC3E624: + psx_check_interrupts(cpu); + /* 0xBFC3E624: 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, 0xBFC3E624u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3E628: 27BD0030 addiu $sp, $sp, 48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (48)); + /* 0xBFC3E62C: 03E00008 jr $ra */ + /* 0xBFC3E630: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3E634(CPUState* cpu) { +label_BFC3E634: + psx_check_interrupts(cpu); + /* 0xBFC3E634: 3C08800E lui $t0, 0x800E */ + cpu->gpr[8] = 0x800E0000u; + /* 0xBFC3E638: 8D08EE44 lw $t0, -4540($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E638u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3E63C: 000470C0 sll $t6, $a0, 3 */ + cpu->gpr[14] = cpu->gpr[4] << 3u; + /* 0xBFC3E640: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3E644: 010E1021 addu $v0, $t0, $t6 */ + cpu->gpr[2] = cpu->gpr[8] + cpu->gpr[14]; + /* 0xBFC3E648: 8C470000 lw $a3, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E648u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC3E64C: 8DEF9F2C lw $t7, -24788($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-24788)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E64Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E650: 8C490004 lw $t1, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E650u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E654: 27BDFFD0 addiu $sp, $sp, -48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-48)); + /* 0xBFC3E658: 15E00003 bne $t7, $zero, 0xBFC3E668 */ + uint32_t psx_brA_BFC3E658 = cpu->gpr[15]; uint32_t psx_brB_BFC3E658 = cpu->gpr[0]; + int psx_taken_BFC3E658 = (psx_brA_BFC3E658 != psx_brB_BFC3E658); + /* 0xBFC3E65C: 00E01821 addu $v1, $a3, $zero */ + cpu->gpr[3] = cpu->gpr[7] + cpu->gpr[0]; + if (psx_taken_BFC3E658) goto label_BFC3E668; +label_BFC3E660: + psx_check_interrupts(cpu); + /* 0xBFC3E660: 1000000C beq $zero, $zero, 0xBFC3E694 */ + uint32_t psx_brA_BFC3E660 = cpu->gpr[0]; uint32_t psx_brB_BFC3E660 = cpu->gpr[0]; + int psx_taken_BFC3E660 = (psx_brA_BFC3E660 == psx_brB_BFC3E660); + /* 0xBFC3E664: 00005821 addu $t3, $zero, $zero */ + cpu->gpr[11] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC3E660) goto label_BFC3E694; +label_BFC3E668: + psx_check_interrupts(cpu); + /* 0xBFC3E668: 3C188014 lui $t8, 0x8014 */ + cpu->gpr[24] = 0x80140000u; + /* 0xBFC3E66C: 8F18E40C lw $t8, -7156($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-7156)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E66Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E670: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3E674: 0018C880 sll $t9, $t8, 2 */ + cpu->gpr[25] = cpu->gpr[24] << 2u; + /* 0xBFC3E678: 01D97021 addu $t6, $t6, $t9 */ + cpu->gpr[14] = cpu->gpr[14] + cpu->gpr[25]; + /* 0xBFC3E67C: 8DCE9910 lw $t6, -26352($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-26352)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E67Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E680: 3C19800E lui $t9, 0x800E */ + cpu->gpr[25] = 0x800E0000u; + /* 0xBFC3E684: 8F39EE40 lw $t9, -4544($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-4544)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E684u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E688: 3C0F0001 lui $t7, 0x1 */ + cpu->gpr[15] = 0x00010000u; + /* 0xBFC3E68C: 01EEC023 subu $t8, $t7, $t6 */ + cpu->gpr[24] = cpu->gpr[15] - cpu->gpr[14]; + /* 0xBFC3E690: 03385804 sllv $t3, $t8, $t9 */ + cpu->gpr[11] = cpu->gpr[24] << (cpu->gpr[25] & 0x1Fu); +label_BFC3E694: + psx_check_interrupts(cpu); + /* 0xBFC3E694: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + /* 0xBFC3E698: 00616024 and $t4, $v1, $at */ + cpu->gpr[12] = cpu->gpr[3] & cpu->gpr[1]; + /* 0xBFC3E69C: 11800009 beq $t4, $zero, 0xBFC3E6C4 */ + uint32_t psx_brA_BFC3E69C = cpu->gpr[12]; uint32_t psx_brB_BFC3E69C = cpu->gpr[0]; + int psx_taken_BFC3E69C = (psx_brA_BFC3E69C == psx_brB_BFC3E69C); + /* 0xBFC3E6A0: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + if (psx_taken_BFC3E69C) goto label_BFC3E6C4; +label_BFC3E6A4: + psx_check_interrupts(cpu); + /* 0xBFC3E6A4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3E6A8: 00612024 and $a0, $v1, $at */ + cpu->gpr[4] = cpu->gpr[3] & cpu->gpr[1]; + /* 0xBFC3E6AC: 00A45023 subu $t2, $a1, $a0 */ + cpu->gpr[10] = cpu->gpr[5] - cpu->gpr[4]; + /* 0xBFC3E6B0: 012A7823 subu $t7, $t1, $t2 */ + cpu->gpr[15] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC3E6B4: AFAF0000 sw $t7, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E6B4u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3E6B8: 8FAE0000 lw $t6, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E6B8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E6BC: 10000009 beq $zero, $zero, 0xBFC3E6E4 */ + uint32_t psx_brA_BFC3E6BC = cpu->gpr[0]; uint32_t psx_brB_BFC3E6BC = cpu->gpr[0]; + int psx_taken_BFC3E6BC = (psx_brA_BFC3E6BC == psx_brB_BFC3E6BC); + /* 0xBFC3E6C0: 01CB6823 subu $t5, $t6, $t3 */ + cpu->gpr[13] = cpu->gpr[14] - cpu->gpr[11]; + if (psx_taken_BFC3E6BC) goto label_BFC3E6E4; +label_BFC3E6C4: + psx_check_interrupts(cpu); + /* 0xBFC3E6C4: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + /* 0xBFC3E6C8: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3E6CC: 00612024 and $a0, $v1, $at */ + cpu->gpr[4] = cpu->gpr[3] & cpu->gpr[1]; + /* 0xBFC3E6D0: 00A45023 subu $t2, $a1, $a0 */ + cpu->gpr[10] = cpu->gpr[5] - cpu->gpr[4]; + /* 0xBFC3E6D4: 012AC023 subu $t8, $t1, $t2 */ + cpu->gpr[24] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC3E6D8: AFB80000 sw $t8, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E6D8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E6DC: 8FAD0000 lw $t5, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E6DCu); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3E6E0: 00000000 nop */ + /* nop */ +label_BFC3E6E4: + psx_check_interrupts(cpu); + /* 0xBFC3E6E4: 01A6082A slt $at, $t5, $a2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[13] < (int32_t)cpu->gpr[6] ? 1 : 0); + /* 0xBFC3E6E8: 10200003 beq $at, $zero, 0xBFC3E6F8 */ + uint32_t psx_brA_BFC3E6E8 = cpu->gpr[1]; uint32_t psx_brB_BFC3E6E8 = cpu->gpr[0]; + int psx_taken_BFC3E6E8 = (psx_brA_BFC3E6E8 == psx_brB_BFC3E6E8); + /* 0xBFC3E6EC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E6E8) goto label_BFC3E6F8; +label_BFC3E6F0: + psx_check_interrupts(cpu); + /* 0xBFC3E6F0: 100000A1 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E6F0 = cpu->gpr[0]; uint32_t psx_brB_BFC3E6F0 = cpu->gpr[0]; + int psx_taken_BFC3E6F0 = (psx_brA_BFC3E6F0 == psx_brB_BFC3E6F0); + /* 0xBFC3E6F4: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E6F0) goto label_BFC3E978; +label_BFC3E6F8: + psx_check_interrupts(cpu); + /* 0xBFC3E6F8: 1180003F beq $t4, $zero, 0xBFC3E7F8 */ + uint32_t psx_brA_BFC3E6F8 = cpu->gpr[12]; uint32_t psx_brB_BFC3E6F8 = cpu->gpr[0]; + int psx_taken_BFC3E6F8 = (psx_brA_BFC3E6F8 == psx_brB_BFC3E6F8); + /* 0xBFC3E6FC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E6F8) goto label_BFC3E7F8; +label_BFC3E700: + psx_check_interrupts(cpu); + /* 0xBFC3E700: 1940001E blez $t2, 0xBFC3E77C */ + uint32_t psx_brA_BFC3E700 = cpu->gpr[10]; + int psx_taken_BFC3E700 = ((int32_t)psx_brA_BFC3E700 <= 0); + /* 0xBFC3E704: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E700) goto label_BFC3E77C; +label_BFC3E708: + psx_check_interrupts(cpu); + /* 0xBFC3E708: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3E70C: 8F399BF4 lw $t9, -25612($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E70Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E710: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E714: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E714u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E718: 272FFFFE addiu $t7, $t9, -2 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[25] + (-2)); + /* 0xBFC3E71C: 01E9082A slt $at, $t7, $t1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[15] < (int32_t)cpu->gpr[9] ? 1 : 0); + /* 0xBFC3E720: 10200004 beq $at, $zero, 0xBFC3E734 */ + uint32_t psx_brA_BFC3E720 = cpu->gpr[1]; uint32_t psx_brB_BFC3E720 = cpu->gpr[0]; + int psx_taken_BFC3E720 = (psx_brA_BFC3E720 == psx_brB_BFC3E720); + /* 0xBFC3E724: 000970C0 sll $t6, $t1, 3 */ + cpu->gpr[14] = cpu->gpr[9] << 3u; + if (psx_taken_BFC3E720) goto label_BFC3E734; +label_BFC3E728: + psx_check_interrupts(cpu); + /* 0xBFC3E728: 10000093 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E728 = cpu->gpr[0]; uint32_t psx_brB_BFC3E728 = cpu->gpr[0]; + int psx_taken_BFC3E728 = (psx_brA_BFC3E728 == psx_brB_BFC3E728); + /* 0xBFC3E72C: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E728) goto label_BFC3E978; +label_BFC3E730: + psx_check_interrupts(cpu); + /* 0xBFC3E730: 000970C0 sll $t6, $t1, 3 */ + cpu->gpr[14] = cpu->gpr[9] << 3u; +label_BFC3E734: + psx_check_interrupts(cpu); + /* 0xBFC3E734: 010E3821 addu $a3, $t0, $t6 */ + cpu->gpr[7] = cpu->gpr[8] + cpu->gpr[14]; + /* 0xBFC3E738: 8CF80000 lw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E738u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E73C: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + /* 0xBFC3E740: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3E744: 0301C824 and $t9, $t8, $at */ + cpu->gpr[25] = cpu->gpr[24] & cpu->gpr[1]; + /* 0xBFC3E748: ACF90000 sw $t9, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E748u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E74C: 8CEF0000 lw $t7, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E74Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E750: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + /* 0xBFC3E754: 25290001 addiu $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (1)); + /* 0xBFC3E758: 01E17025 or $t6, $t7, $at */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC3E75C: ACEE0000 sw $t6, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E75Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E760: 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, 0xBFC3E760u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC3E764: 24E70008 addiu $a3, $a3, 8 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (8)); + /* 0xBFC3E768: 0009C0C0 sll $t8, $t1, 3 */ + cpu->gpr[24] = cpu->gpr[9] << 3u; + /* 0xBFC3E76C: 01183821 addu $a3, $t0, $t8 */ + cpu->gpr[7] = cpu->gpr[8] + cpu->gpr[24]; + /* 0xBFC3E770: ACE50000 sw $a1, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E770u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3E774: 10000013 beq $zero, $zero, 0xBFC3E7C4 */ + uint32_t psx_brA_BFC3E774 = cpu->gpr[0]; uint32_t psx_brB_BFC3E774 = cpu->gpr[0]; + int psx_taken_BFC3E774 = (psx_brA_BFC3E774 == psx_brB_BFC3E774); + /* 0xBFC3E778: ACE60004 sw $a2, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E778u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + if (psx_taken_BFC3E774) goto label_BFC3E7C4; +label_BFC3E77C: + psx_check_interrupts(cpu); + /* 0xBFC3E77C: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E780: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3E784: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E784u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E788: 8F399BF4 lw $t9, -25612($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E788u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E78C: 00000000 nop */ + /* nop */ + /* 0xBFC3E790: 0139082A slt $at, $t1, $t9 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[9] < (int32_t)cpu->gpr[25] ? 1 : 0); + /* 0xBFC3E794: 14200004 bne $at, $zero, 0xBFC3E7A8 */ + uint32_t psx_brA_BFC3E794 = cpu->gpr[1]; uint32_t psx_brB_BFC3E794 = cpu->gpr[0]; + int psx_taken_BFC3E794 = (psx_brA_BFC3E794 != psx_brB_BFC3E794); + /* 0xBFC3E798: 000978C0 sll $t7, $t1, 3 */ + cpu->gpr[15] = cpu->gpr[9] << 3u; + if (psx_taken_BFC3E794) goto label_BFC3E7A8; +label_BFC3E79C: + psx_check_interrupts(cpu); + /* 0xBFC3E79C: 10000076 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E79C = cpu->gpr[0]; uint32_t psx_brB_BFC3E79C = cpu->gpr[0]; + int psx_taken_BFC3E79C = (psx_brA_BFC3E79C == psx_brB_BFC3E79C); + /* 0xBFC3E7A0: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E79C) goto label_BFC3E978; +label_BFC3E7A4: + psx_check_interrupts(cpu); + /* 0xBFC3E7A4: 000978C0 sll $t7, $t1, 3 */ + cpu->gpr[15] = cpu->gpr[9] << 3u; +label_BFC3E7A8: + psx_check_interrupts(cpu); + /* 0xBFC3E7A8: 010F3821 addu $a3, $t0, $t7 */ + cpu->gpr[7] = cpu->gpr[8] + cpu->gpr[15]; + /* 0xBFC3E7AC: 8CEE0000 lw $t6, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7ACu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E7B0: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + /* 0xBFC3E7B4: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3E7B8: 01C1C024 and $t8, $t6, $at */ + cpu->gpr[24] = cpu->gpr[14] & cpu->gpr[1]; + /* 0xBFC3E7BC: ACF80000 sw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7BCu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E7C0: ACE60004 sw $a2, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7C0u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } +label_BFC3E7C4: + psx_check_interrupts(cpu); + /* 0xBFC3E7C4: 008AC821 addu $t9, $a0, $t2 */ + cpu->gpr[25] = cpu->gpr[4] + cpu->gpr[10]; + /* 0xBFC3E7C8: 03267821 addu $t7, $t9, $a2 */ + cpu->gpr[15] = cpu->gpr[25] + cpu->gpr[6]; + /* 0xBFC3E7CC: 3C014000 lui $at, 0x4000 */ + cpu->gpr[1] = 0x40000000u; + /* 0xBFC3E7D0: 01E17025 or $t6, $t7, $at */ + cpu->gpr[14] = cpu->gpr[15] | cpu->gpr[1]; + /* 0xBFC3E7D4: ACEE0008 sw $t6, 8($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7D4u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E7D8: 8FB80000 lw $t8, 0($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7D8u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E7DC: 25290001 addiu $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (1)); + /* 0xBFC3E7E0: 0306C823 subu $t9, $t8, $a2 */ + cpu->gpr[25] = cpu->gpr[24] - cpu->gpr[6]; + /* 0xBFC3E7E4: ACF9000C sw $t9, 12($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7E4u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E7E8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E7EC: 24E70008 addiu $a3, $a3, 8 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (8)); + /* 0xBFC3E7F0: 10000060 beq $zero, $zero, 0xBFC3E974 */ + uint32_t psx_brA_BFC3E7F0 = cpu->gpr[0]; uint32_t psx_brB_BFC3E7F0 = cpu->gpr[0]; + int psx_taken_BFC3E7F0 = (psx_brA_BFC3E7F0 == psx_brB_BFC3E7F0); + /* 0xBFC3E7F4: AC299BF8 sw $t1, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E7F4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + if (psx_taken_BFC3E7F0) goto label_BFC3E974; +label_BFC3E7F8: + psx_check_interrupts(cpu); + /* 0xBFC3E7F8: 19400038 blez $t2, 0xBFC3E8DC */ + uint32_t psx_brA_BFC3E7F8 = cpu->gpr[10]; + int psx_taken_BFC3E7F8 = ((int32_t)psx_brA_BFC3E7F8 <= 0); + /* 0xBFC3E7FC: 00CD082A slt $at, $a2, $t5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[6] < (int32_t)cpu->gpr[13] ? 1 : 0); + if (psx_taken_BFC3E7F8) goto label_BFC3E8DC; +label_BFC3E800: + psx_check_interrupts(cpu); + /* 0xBFC3E800: 15A6000B bne $t5, $a2, 0xBFC3E830 */ + uint32_t psx_brA_BFC3E800 = cpu->gpr[13]; uint32_t psx_brB_BFC3E800 = cpu->gpr[6]; + int psx_taken_BFC3E800 = (psx_brA_BFC3E800 != psx_brB_BFC3E800); + /* 0xBFC3E804: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E800) goto label_BFC3E830; +label_BFC3E808: + psx_check_interrupts(cpu); + /* 0xBFC3E808: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3E80C: 8DEF9BF4 lw $t7, -25612($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E80Cu); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E810: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E814: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E814u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E818: 25EEFFFE addiu $t6, $t7, -2 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[15] + (-2)); + /* 0xBFC3E81C: 01C9082A slt $at, $t6, $t1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[14] < (int32_t)cpu->gpr[9] ? 1 : 0); + /* 0xBFC3E820: 1020000E beq $at, $zero, 0xBFC3E85C */ + uint32_t psx_brA_BFC3E820 = cpu->gpr[1]; uint32_t psx_brB_BFC3E820 = cpu->gpr[0]; + int psx_taken_BFC3E820 = (psx_brA_BFC3E820 == psx_brB_BFC3E820); + /* 0xBFC3E824: 0009C8C0 sll $t9, $t1, 3 */ + cpu->gpr[25] = cpu->gpr[9] << 3u; + if (psx_taken_BFC3E820) goto label_BFC3E85C; +label_BFC3E828: + psx_check_interrupts(cpu); + /* 0xBFC3E828: 10000053 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E828 = cpu->gpr[0]; uint32_t psx_brB_BFC3E828 = cpu->gpr[0]; + int psx_taken_BFC3E828 = (psx_brA_BFC3E828 == psx_brB_BFC3E828); + /* 0xBFC3E82C: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E828) goto label_BFC3E978; +label_BFC3E830: + psx_check_interrupts(cpu); + /* 0xBFC3E830: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E834: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC3E838: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E838u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E83C: 8F189BF4 lw $t8, -25612($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E83Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E840: 00000000 nop */ + /* nop */ + /* 0xBFC3E844: 0138082A slt $at, $t1, $t8 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[9] < (int32_t)cpu->gpr[24] ? 1 : 0); + /* 0xBFC3E848: 14200004 bne $at, $zero, 0xBFC3E85C */ + uint32_t psx_brA_BFC3E848 = cpu->gpr[1]; uint32_t psx_brB_BFC3E848 = cpu->gpr[0]; + int psx_taken_BFC3E848 = (psx_brA_BFC3E848 != psx_brB_BFC3E848); + /* 0xBFC3E84C: 0009C8C0 sll $t9, $t1, 3 */ + cpu->gpr[25] = cpu->gpr[9] << 3u; + if (psx_taken_BFC3E848) goto label_BFC3E85C; +label_BFC3E850: + psx_check_interrupts(cpu); + /* 0xBFC3E850: 10000049 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E850 = cpu->gpr[0]; uint32_t psx_brB_BFC3E850 = cpu->gpr[0]; + int psx_taken_BFC3E850 = (psx_brA_BFC3E850 == psx_brB_BFC3E850); + /* 0xBFC3E854: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E850) goto label_BFC3E978; +label_BFC3E858: + psx_check_interrupts(cpu); + /* 0xBFC3E858: 0009C8C0 sll $t9, $t1, 3 */ + cpu->gpr[25] = cpu->gpr[9] << 3u; +label_BFC3E85C: + psx_check_interrupts(cpu); + /* 0xBFC3E85C: 01193821 addu $a3, $t0, $t9 */ + cpu->gpr[7] = cpu->gpr[8] + cpu->gpr[25]; + /* 0xBFC3E860: AC4A0004 sw $t2, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E860u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC3E864: 8CEF0000 lw $t7, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E864u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E868: 8CEE0004 lw $t6, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E868u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3E86C: ACE50000 sw $a1, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E86Cu); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3E870: 01A6082A slt $at, $t5, $a2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[13] < (int32_t)cpu->gpr[6] ? 1 : 0); + /* 0xBFC3E874: ACE60004 sw $a2, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E874u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC3E878: ACEF0008 sw $t7, 8($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E878u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3E87C: 24E70008 addiu $a3, $a3, 8 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (8)); + /* 0xBFC3E880: 25290001 addiu $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (1)); + /* 0xBFC3E884: 10200004 beq $at, $zero, 0xBFC3E898 */ + uint32_t psx_brA_BFC3E884 = cpu->gpr[1]; uint32_t psx_brB_BFC3E884 = cpu->gpr[0]; + int psx_taken_BFC3E884 = (psx_brA_BFC3E884 == psx_brB_BFC3E884); + /* 0xBFC3E888: ACEE0004 sw $t6, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E888u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + if (psx_taken_BFC3E884) goto label_BFC3E898; +label_BFC3E88C: + psx_check_interrupts(cpu); + /* 0xBFC3E88C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E890: 10000038 beq $zero, $zero, 0xBFC3E974 */ + uint32_t psx_brA_BFC3E890 = cpu->gpr[0]; uint32_t psx_brB_BFC3E890 = cpu->gpr[0]; + int psx_taken_BFC3E890 = (psx_brA_BFC3E890 == psx_brB_BFC3E890); + /* 0xBFC3E894: AC299BF8 sw $t1, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E894u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + if (psx_taken_BFC3E890) goto label_BFC3E974; +label_BFC3E898: + psx_check_interrupts(cpu); + /* 0xBFC3E898: 8CF80000 lw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E898u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3E89C: 8CF90004 lw $t9, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E89Cu); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E8A0: 008A7821 addu $t7, $a0, $t2 */ + cpu->gpr[15] = cpu->gpr[4] + cpu->gpr[10]; + /* 0xBFC3E8A4: 01E67021 addu $t6, $t7, $a2 */ + cpu->gpr[14] = cpu->gpr[15] + cpu->gpr[6]; + /* 0xBFC3E8A8: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + /* 0xBFC3E8AC: ACF80008 sw $t8, 8($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8ACu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E8B0: 01C1C025 or $t8, $t6, $at */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[1]; + /* 0xBFC3E8B4: ACF9000C sw $t9, 12($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8B4u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E8B8: 01A6C823 subu $t9, $t5, $a2 */ + cpu->gpr[25] = cpu->gpr[13] - cpu->gpr[6]; + /* 0xBFC3E8BC: ACF80000 sw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8BCu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E8C0: ACF90004 sw $t9, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8C0u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E8C4: 25290001 addiu $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (1)); + /* 0xBFC3E8C8: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E8CC: 24E70008 addiu $a3, $a3, 8 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[7] + (8)); + /* 0xBFC3E8D0: 10000028 beq $zero, $zero, 0xBFC3E974 */ + uint32_t psx_brA_BFC3E8D0 = cpu->gpr[0]; uint32_t psx_brB_BFC3E8D0 = cpu->gpr[0]; + int psx_taken_BFC3E8D0 = (psx_brA_BFC3E8D0 == psx_brB_BFC3E8D0); + /* 0xBFC3E8D4: AC299BF8 sw $t1, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8D4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + if (psx_taken_BFC3E8D0) goto label_BFC3E974; +label_BFC3E8D8: + psx_check_interrupts(cpu); + /* 0xBFC3E8D8: 00CD082A slt $at, $a2, $t5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[6] < (int32_t)cpu->gpr[13] ? 1 : 0); +label_BFC3E8DC: + psx_check_interrupts(cpu); + /* 0xBFC3E8DC: 14200005 bne $at, $zero, 0xBFC3E8F4 */ + uint32_t psx_brA_BFC3E8DC = cpu->gpr[1]; uint32_t psx_brB_BFC3E8DC = cpu->gpr[0]; + int psx_taken_BFC3E8DC = (psx_brA_BFC3E8DC != psx_brB_BFC3E8DC); + /* 0xBFC3E8E0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3E8DC) goto label_BFC3E8F4; +label_BFC3E8E4: + psx_check_interrupts(cpu); + /* 0xBFC3E8E4: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E8E8: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8E8u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E8EC: 1000000C beq $zero, $zero, 0xBFC3E920 */ + uint32_t psx_brA_BFC3E8EC = cpu->gpr[0]; uint32_t psx_brB_BFC3E8EC = cpu->gpr[0]; + int psx_taken_BFC3E8EC = (psx_brA_BFC3E8EC == psx_brB_BFC3E8EC); + /* 0xBFC3E8F0: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + if (psx_taken_BFC3E8EC) goto label_BFC3E920; +label_BFC3E8F4: + psx_check_interrupts(cpu); + /* 0xBFC3E8F4: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3E8F8: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3E8FC: 8D299BF8 lw $t1, -25608($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E8FCu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3E900: 8DEF9BF4 lw $t7, -25612($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25612)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E900u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E904: 00000000 nop */ + /* nop */ + /* 0xBFC3E908: 012F082A slt $at, $t1, $t7 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[9] < (int32_t)cpu->gpr[15] ? 1 : 0); + /* 0xBFC3E90C: 14200004 bne $at, $zero, 0xBFC3E920 */ + uint32_t psx_brA_BFC3E90C = cpu->gpr[1]; uint32_t psx_brB_BFC3E90C = cpu->gpr[0]; + int psx_taken_BFC3E90C = (psx_brA_BFC3E90C != psx_brB_BFC3E90C); + /* 0xBFC3E910: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; + if (psx_taken_BFC3E90C) goto label_BFC3E920; +label_BFC3E914: + psx_check_interrupts(cpu); + /* 0xBFC3E914: 10000018 beq $zero, $zero, 0xBFC3E978 */ + uint32_t psx_brA_BFC3E914 = cpu->gpr[0]; uint32_t psx_brB_BFC3E914 = cpu->gpr[0]; + int psx_taken_BFC3E914 = (psx_brA_BFC3E914 == psx_brB_BFC3E914); + /* 0xBFC3E918: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3E914) goto label_BFC3E978; +label_BFC3E91C: + psx_check_interrupts(cpu); + /* 0xBFC3E91C: 3C010FFF lui $at, 0xFFF */ + cpu->gpr[1] = 0x0FFF0000u; +label_BFC3E920: + psx_check_interrupts(cpu); + /* 0xBFC3E920: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3E924: 00E17024 and $t6, $a3, $at */ + cpu->gpr[14] = cpu->gpr[7] & cpu->gpr[1]; + /* 0xBFC3E928: 00CD082A slt $at, $a2, $t5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[6] < (int32_t)cpu->gpr[13] ? 1 : 0); + /* 0xBFC3E92C: AC4E0000 sw $t6, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E92Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3E930: 10200010 beq $at, $zero, 0xBFC3E974 */ + uint32_t psx_brA_BFC3E930 = cpu->gpr[1]; uint32_t psx_brB_BFC3E930 = cpu->gpr[0]; + int psx_taken_BFC3E930 = (psx_brA_BFC3E930 == psx_brB_BFC3E930); + /* 0xBFC3E934: AC460004 sw $a2, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E934u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + if (psx_taken_BFC3E930) goto label_BFC3E974; +label_BFC3E938: + psx_check_interrupts(cpu); + /* 0xBFC3E938: 0009C0C0 sll $t8, $t1, 3 */ + cpu->gpr[24] = cpu->gpr[9] << 3u; + /* 0xBFC3E93C: 01183821 addu $a3, $t0, $t8 */ + cpu->gpr[7] = cpu->gpr[8] + cpu->gpr[24]; + /* 0xBFC3E940: 8CF90000 lw $t9, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E940u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3E944: 00867021 addu $t6, $a0, $a2 */ + cpu->gpr[14] = cpu->gpr[4] + cpu->gpr[6]; + /* 0xBFC3E948: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + /* 0xBFC3E94C: ACF90008 sw $t9, 8($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E94Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E950: 8CEF0004 lw $t7, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E950u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3E954: 01C1C025 or $t8, $t6, $at */ + cpu->gpr[24] = cpu->gpr[14] | cpu->gpr[1]; + /* 0xBFC3E958: ACF80000 sw $t8, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E958u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3E95C: 01A6C823 subu $t9, $t5, $a2 */ + cpu->gpr[25] = cpu->gpr[13] - cpu->gpr[6]; + /* 0xBFC3E960: ACF90004 sw $t9, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E960u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3E964: 25290001 addiu $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] + (1)); + /* 0xBFC3E968: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC3E96C: ACEF000C sw $t7, 12($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E96Cu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3E970: AC299BF8 sw $t1, -25608($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-25608)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3E970u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } +label_BFC3E974: + psx_check_interrupts(cpu); + /* 0xBFC3E974: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; +label_BFC3E978: + psx_check_interrupts(cpu); + /* 0xBFC3E978: 03E00008 jr $ra */ + /* 0xBFC3E97C: 27BD0030 addiu $sp, $sp, 48 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (48)); + return; +} + void func_1FC3E980(CPUState* cpu) { label_BFC3E980: psx_check_interrupts(cpu); @@ -120262,6 +142651,105 @@ label_BFC3ECA8: return; } +void func_1FC3ECB8(CPUState* cpu) { +label_BFC3ECB8: + psx_check_interrupts(cpu); + /* 0xBFC3ECB8: 3C03800E lui $v1, 0x800E */ + cpu->gpr[3] = 0x800E0000u; + /* 0xBFC3ECBC: 3C080FFF lui $t0, 0xFFF */ + cpu->gpr[8] = 0x0FFF0000u; + /* 0xBFC3ECC0: 8C63EE44 lw $v1, -4540($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-4540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ECC0u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3ECC4: 3508FFFF ori $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] | 0xFFFFu; + /* 0xBFC3ECC8: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3ECCC: 3C068000 lui $a2, 0x8000 */ + cpu->gpr[6] = 0x80000000u; + /* 0xBFC3ECD0: 3C074000 lui $a3, 0x4000 */ + cpu->gpr[7] = 0x40000000u; +label_BFC3ECD4: + psx_check_interrupts(cpu); + /* 0xBFC3ECD4: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ECD4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3ECD8: 00000000 nop */ + /* nop */ + /* 0xBFC3ECDC: 00467024 and $t6, $v0, $a2 */ + cpu->gpr[14] = cpu->gpr[2] & cpu->gpr[6]; + /* 0xBFC3ECE0: 15C00012 bne $t6, $zero, 0xBFC3ED2C */ + uint32_t psx_brA_BFC3ECE0 = cpu->gpr[14]; uint32_t psx_brB_BFC3ECE0 = cpu->gpr[0]; + int psx_taken_BFC3ECE0 = (psx_brA_BFC3ECE0 != psx_brB_BFC3ECE0); + /* 0xBFC3ECE4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ECE0) goto label_BFC3ED2C; +label_BFC3ECE8: + psx_check_interrupts(cpu); + /* 0xBFC3ECE8: 00477824 and $t7, $v0, $a3 */ + cpu->gpr[15] = cpu->gpr[2] & cpu->gpr[7]; + /* 0xBFC3ECEC: 15E00011 bne $t7, $zero, 0xBFC3ED34 */ + uint32_t psx_brA_BFC3ECEC = cpu->gpr[15]; uint32_t psx_brB_BFC3ECEC = cpu->gpr[0]; + int psx_taken_BFC3ECEC = (psx_brA_BFC3ECEC != psx_brB_BFC3ECEC); + /* 0xBFC3ECF0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ECEC) goto label_BFC3ED34; +label_BFC3ECF4: + psx_check_interrupts(cpu); + /* 0xBFC3ECF4: 00482824 and $a1, $v0, $t0 */ + cpu->gpr[5] = cpu->gpr[2] & cpu->gpr[8]; + /* 0xBFC3ECF8: 00A4082B sltu $at, $a1, $a0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[4] ? 1 : 0); + /* 0xBFC3ECFC: 14200003 bne $at, $zero, 0xBFC3ED0C */ + uint32_t psx_brA_BFC3ECFC = cpu->gpr[1]; uint32_t psx_brB_BFC3ECFC = cpu->gpr[0]; + int psx_taken_BFC3ECFC = (psx_brA_BFC3ECFC != psx_brB_BFC3ECFC); + /* 0xBFC3ED00: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ECFC) goto label_BFC3ED0C; +label_BFC3ED04: + psx_check_interrupts(cpu); + /* 0xBFC3ED04: 03E00008 jr $ra */ + /* 0xBFC3ED08: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + return; +label_BFC3ED0C: + psx_check_interrupts(cpu); + /* 0xBFC3ED0C: 8C780004 lw $t8, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3ED0Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3ED10: 00000000 nop */ + /* nop */ + /* 0xBFC3ED14: 00B8C821 addu $t9, $a1, $t8 */ + cpu->gpr[25] = cpu->gpr[5] + cpu->gpr[24]; + /* 0xBFC3ED18: 0099082B sltu $at, $a0, $t9 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[4] < cpu->gpr[25] ? 1 : 0); + /* 0xBFC3ED1C: 10200003 beq $at, $zero, 0xBFC3ED2C */ + uint32_t psx_brA_BFC3ED1C = cpu->gpr[1]; uint32_t psx_brB_BFC3ED1C = cpu->gpr[0]; + int psx_taken_BFC3ED1C = (psx_brA_BFC3ED1C == psx_brB_BFC3ED1C); + /* 0xBFC3ED20: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3ED1C) goto label_BFC3ED2C; +label_BFC3ED24: + psx_check_interrupts(cpu); + /* 0xBFC3ED24: 03E00008 jr $ra */ + /* 0xBFC3ED28: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + return; +label_BFC3ED2C: + psx_check_interrupts(cpu); + /* 0xBFC3ED2C: 1000FFE9 beq $zero, $zero, 0xBFC3ECD4 */ + uint32_t psx_brA_BFC3ED2C = cpu->gpr[0]; uint32_t psx_brB_BFC3ED2C = cpu->gpr[0]; + int psx_taken_BFC3ED2C = (psx_brA_BFC3ED2C == psx_brB_BFC3ED2C); + /* 0xBFC3ED30: 24630008 addiu $v1, $v1, 8 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (8)); + if (psx_taken_BFC3ED2C) goto label_BFC3ECD4; +label_BFC3ED34: + psx_check_interrupts(cpu); + /* 0xBFC3ED34: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3ED38: 03E00008 jr $ra */ + /* 0xBFC3ED3C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3ED40(CPUState* cpu) { label_BFC3ED40: psx_check_interrupts(cpu); @@ -120481,6 +142969,259 @@ label_BFC3EE70: return; } +void func_1FC3EE80(CPUState* cpu) { +label_BFC3EE80: + psx_check_interrupts(cpu); + /* 0xBFC3EE80: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3EE84: 8DEF9C10 lw $t7, -25584($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25584)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EE84u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3EE88: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3EE8C: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3EE90: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC3EE94: 8F399C1C lw $t9, -25572($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25572)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EE94u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3EE98: 2418001F addiu $t8, $zero, 31 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC3EE9C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3EEA0: 24030004 addiu $v1, $zero, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[0] + (4)); + /* 0xBFC3EEA4: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); +label_BFC3EEA8: + psx_check_interrupts(cpu); + /* 0xBFC3EEA8: 24480003 addiu $t0, $v0, 3 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[2] + (3)); + /* 0xBFC3EEAC: 24420004 addiu $v0, $v0, 4 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (4)); + /* 0xBFC3EEB0: 1443FFFD bne $v0, $v1, 0xBFC3EEA8 */ + uint32_t psx_brA_BFC3EEB0 = cpu->gpr[2]; uint32_t psx_brB_BFC3EEB0 = cpu->gpr[3]; + int psx_taken_BFC3EEB0 = (psx_brA_BFC3EEB0 != psx_brB_BFC3EEB0); + /* 0xBFC3EEB4: AC080000 sw $t0, 0($zero) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[0] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EEB4u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + if (psx_taken_BFC3EEB0) goto label_BFC3EEA8; +label_BFC3EEB8: + psx_check_interrupts(cpu); + /* 0xBFC3EEB8: 03E00008 jr $ra */ + /* 0xBFC3EEBC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3EEC0(CPUState* cpu) { +label_BFC3EEC0: + psx_check_interrupts(cpu); + /* 0xBFC3EEC0: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3EEC4: 8DEF9C10 lw $t7, -25584($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25584)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EEC4u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3EEC8: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3EECC: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3EED0: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC3EED4: 8F399C18 lw $t9, -25576($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25576)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EED4u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3EED8: 2418001F addiu $t8, $zero, 31 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC3EEDC: 03E00008 jr $ra */ + /* 0xBFC3EEE0: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + return; +} + +void func_1FC3EEE4(CPUState* cpu) { +label_BFC3EEE4: + psx_check_interrupts(cpu); + /* 0xBFC3EEE4: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC3EEE8: 8DEF9C10 lw $t7, -25584($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25584)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EEE8u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3EEEC: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC3EEF0: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC3EEF4: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC3EEF8: 8F399C18 lw $t9, -25576($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25576)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EEF8u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC3EEFC: 24180018 addiu $t8, $zero, 24 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (24)); + /* 0xBFC3EF00: 03E00008 jr $ra */ + /* 0xBFC3EF04: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + return; +} + +void func_1FC3EF08(CPUState* cpu) { +label_BFC3EF08: + psx_check_interrupts(cpu); + /* 0xBFC3EF08: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3EF0C: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3EF10: 27BDFFD8 addiu $sp, $sp, -40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-40)); + /* 0xBFC3EF14: 8CA59C1C lw $a1, -25572($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-25572)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF14u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3EF18: 8C849C10 lw $a0, -25584($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-25584)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF18u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3EF1C: 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, 0xBFC3EF1Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3EF20: 24060001 addiu $a2, $zero, 1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC3EF24: + psx_check_interrupts(cpu); + /* 0xBFC3EF24: A0860000 sb $a2, 0($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (0)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC3EF28: 90A20000 lbu $v0, 0($a1) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC3EF2C: 00000000 nop */ + /* nop */ + /* 0xBFC3EF30: 30430007 andi $v1, $v0, 0x7 */ + cpu->gpr[3] = cpu->gpr[2] & 0x7u; + /* 0xBFC3EF34: 1060FFFB beq $v1, $zero, 0xBFC3EF24 */ + uint32_t psx_brA_BFC3EF34 = cpu->gpr[3]; uint32_t psx_brB_BFC3EF34 = cpu->gpr[0]; + int psx_taken_BFC3EF34 = (psx_brA_BFC3EF34 == psx_brB_BFC3EF34); + /* 0xBFC3EF38: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3EF34) goto label_BFC3EF24; +label_BFC3EF3C: + psx_check_interrupts(cpu); + /* 0xBFC3EF3C: 0C015BA0 jal 0xB0056E80 */ + /* 0xBFC3EF40: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF40u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + cpu->gpr[31] = 0xBFC3EF44u; + psx_dispatch(cpu, 0x80056E80u); +label_BFC3EF44: + psx_check_interrupts(cpu); + /* 0xBFC3EF44: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3EF48: 8DCE9C14 lw $t6, -25580($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25580)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF48u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3EF4C: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF4Cu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3EF50: 24010005 addiu $at, $zero, 5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (5)); + /* 0xBFC3EF54: 91C40000 lbu $a0, 0($t6) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (0))); + /* 0xBFC3EF58: 14610004 bne $v1, $at, 0xBFC3EF6C */ + uint32_t psx_brA_BFC3EF58 = cpu->gpr[3]; uint32_t psx_brB_BFC3EF58 = cpu->gpr[1]; + int psx_taken_BFC3EF58 = (psx_brA_BFC3EF58 != psx_brB_BFC3EF58); + /* 0xBFC3EF5C: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC3EF58) goto label_BFC3EF6C; +label_BFC3EF60: + psx_check_interrupts(cpu); + /* 0xBFC3EF60: 10000002 beq $zero, $zero, 0xBFC3EF6C */ + uint32_t psx_brA_BFC3EF60 = cpu->gpr[0]; uint32_t psx_brB_BFC3EF60 = cpu->gpr[0]; + int psx_taken_BFC3EF60 = (psx_brA_BFC3EF60 == psx_brB_BFC3EF60); + /* 0xBFC3EF64: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3EF60) goto label_BFC3EF6C; +label_BFC3EF68: + psx_check_interrupts(cpu); + /* 0xBFC3EF68: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC3EF6C: + psx_check_interrupts(cpu); + /* 0xBFC3EF6C: 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, 0xBFC3EF6Cu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3EF70: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + /* 0xBFC3EF74: 03E00008 jr $ra */ + /* 0xBFC3EF78: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3EF7C(CPUState* cpu) { +label_BFC3EF7C: + psx_check_interrupts(cpu); + /* 0xBFC3EF7C: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3EF80: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC3EF84: 27BDFFD8 addiu $sp, $sp, -40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-40)); + /* 0xBFC3EF88: 8CA59C1C lw $a1, -25572($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (-25572)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF88u); return; } cpu->gpr[5] = cpu->read_word(psx_addr); } + /* 0xBFC3EF8C: 8C849C10 lw $a0, -25584($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-25584)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EF8Cu); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3EF90: 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, 0xBFC3EF90u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3EF94: 24060001 addiu $a2, $zero, 1 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); +label_BFC3EF98: + psx_check_interrupts(cpu); + /* 0xBFC3EF98: A0860000 sb $a2, 0($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (0)), (uint8_t)(cpu->gpr[6] & 0xFFu)); + /* 0xBFC3EF9C: 90A20000 lbu $v0, 0($a1) */ + cpu->gpr[2] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC3EFA0: 00000000 nop */ + /* nop */ + /* 0xBFC3EFA4: 30430007 andi $v1, $v0, 0x7 */ + cpu->gpr[3] = cpu->gpr[2] & 0x7u; + /* 0xBFC3EFA8: 1060FFFB beq $v1, $zero, 0xBFC3EF98 */ + uint32_t psx_brA_BFC3EFA8 = cpu->gpr[3]; uint32_t psx_brB_BFC3EFA8 = cpu->gpr[0]; + int psx_taken_BFC3EFA8 = (psx_brA_BFC3EFA8 == psx_brB_BFC3EFA8); + /* 0xBFC3EFAC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC3EFA8) goto label_BFC3EF98; +label_BFC3EFB0: + psx_check_interrupts(cpu); + /* 0xBFC3EFB0: 0C015BA0 jal 0xB0056E80 */ + /* 0xBFC3EFB4: AFA3001C sw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EFB4u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + cpu->gpr[31] = 0xBFC3EFB8u; + psx_dispatch(cpu, 0x80056E80u); +label_BFC3EFB8: + psx_check_interrupts(cpu); + /* 0xBFC3EFB8: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC3EFBC: 8DCE9C14 lw $t6, -25580($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25580)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EFBCu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3EFC0: 8FA3001C lw $v1, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3EFC0u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3EFC4: 24010005 addiu $at, $zero, 5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (5)); + /* 0xBFC3EFC8: 91C40000 lbu $a0, 0($t6) */ + cpu->gpr[4] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (0))); + /* 0xBFC3EFCC: 14610004 bne $v1, $at, 0xBFC3EFE0 */ + uint32_t psx_brA_BFC3EFCC = cpu->gpr[3]; uint32_t psx_brB_BFC3EFCC = cpu->gpr[1]; + int psx_taken_BFC3EFCC = (psx_brA_BFC3EFCC != psx_brB_BFC3EFCC); + /* 0xBFC3EFD0: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + if (psx_taken_BFC3EFCC) goto label_BFC3EFE0; +label_BFC3EFD4: + psx_check_interrupts(cpu); + /* 0xBFC3EFD4: 10000002 beq $zero, $zero, 0xBFC3EFE0 */ + uint32_t psx_brA_BFC3EFD4 = cpu->gpr[0]; uint32_t psx_brB_BFC3EFD4 = cpu->gpr[0]; + int psx_taken_BFC3EFD4 = (psx_brA_BFC3EFD4 == psx_brB_BFC3EFD4); + /* 0xBFC3EFD8: 2402FFFF addiu $v0, $zero, -1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + if (psx_taken_BFC3EFD4) goto label_BFC3EFE0; +label_BFC3EFDC: + psx_check_interrupts(cpu); + /* 0xBFC3EFDC: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC3EFE0: + psx_check_interrupts(cpu); + /* 0xBFC3EFE0: 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, 0xBFC3EFE0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3EFE4: 27BD0028 addiu $sp, $sp, 40 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (40)); + /* 0xBFC3EFE8: 03E00008 jr $ra */ + /* 0xBFC3EFEC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3EFF0(CPUState* cpu) { label_BFC3EFF0: psx_check_interrupts(cpu); @@ -120615,6 +143356,173 @@ label_BFC3F080: return; } +void func_1FC3F090(CPUState* cpu) { +label_BFC3F090: + psx_check_interrupts(cpu); + /* 0xBFC3F090: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F094: AC20EEA8 sw $zero, -4440($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4440)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F094u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3F098: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F09C: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC3F0A0: AC20EEAC sw $zero, -4436($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4436)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0A0u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3F0A4: 8C639C44 lw $v1, -25532($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-25532)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0A4u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3F0A8: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC3F0AC: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F0B0: 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, 0xBFC3F0B0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC3F0B4: AC20EEB0 sw $zero, -4432($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4432)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0B4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3F0B8: 8C6E0004 lw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0B8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC3F0BC: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC3F0C0: 2406FFFB addiu $a2, $zero, -5 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (-5)); + /* 0xBFC3F0C4: 8C849C3C lw $a0, -25540($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-25540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0C4u); return; } cpu->gpr[4] = cpu->read_word(psx_addr); } + /* 0xBFC3F0C8: 01C67824 and $t7, $t6, $a2 */ + cpu->gpr[15] = cpu->gpr[14] & cpu->gpr[6]; + /* 0xBFC3F0CC: AC6F0004 sw $t7, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0CCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC3F0D0: 8C780004 lw $t8, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0D0u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC3F0D4: 2405FFF7 addiu $a1, $zero, -9 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (-9)); + /* 0xBFC3F0D8: 0305C824 and $t9, $t8, $a1 */ + cpu->gpr[25] = cpu->gpr[24] & cpu->gpr[5]; + /* 0xBFC3F0DC: AC790004 sw $t9, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0DCu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3F0E0: AC660000 sw $a2, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0E0u); return; } cpu->write_word(psx_addr, cpu->gpr[6]); } + /* 0xBFC3F0E4: 3C098008 lui $t1, 0x8008 */ + cpu->gpr[9] = 0x80080000u; + /* 0xBFC3F0E8: AC650000 sw $a1, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0E8u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC3F0EC: 8D299C38 lw $t1, -25544($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (-25544)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0ECu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3F0F0: 34089099 ori $t0, $zero, 0x9099 */ + cpu->gpr[8] = cpu->gpr[0] | 0x9099u; + /* 0xBFC3F0F4: AD280000 sw $t0, 0($t1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[9] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F0F4u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3F0F8: 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, 0xBFC3F0F8u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC3F0FC: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC3F100: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC3F104: 00411024 and $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC3F108: 3C018800 lui $at, 0x8800 */ + cpu->gpr[1] = 0x88000000u; + /* 0xBFC3F10C: 00411025 or $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] | cpu->gpr[1]; + /* 0xBFC3F110: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F114: 340AFFFF ori $t2, $zero, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3F118: AC820000 sw $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, 0xBFC3F118u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC3F11C: AC2AEE58 sw $t2, -4520($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F11Cu); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC3F120: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F124: 240B0CCC addiu $t3, $zero, 3276 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (3276)); + /* 0xBFC3F128: AC2BEE54 sw $t3, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F128u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC3F12C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F130: AC20EE60 sw $zero, -4512($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4512)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F130u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC3F134: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F138: 0C0161D1 jal 0xB0058744 */ + /* 0xBFC3F13C: AC20EE5C sw $zero, -4516($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4516)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F13Cu); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + cpu->gpr[31] = 0xBFC3F140u; + psx_dispatch(cpu, 0x80058744u); +label_BFC3F140: + psx_check_interrupts(cpu); + /* 0xBFC3F140: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC3F144: 8C639C44 lw $v1, -25532($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-25532)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F144u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3F148: 0C0161C8 jal 0xB0058720 */ + /* 0xBFC3F14C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC3F150u; + psx_dispatch(cpu, 0x80058720u); +label_BFC3F150: + psx_check_interrupts(cpu); + /* 0xBFC3F150: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC3F154: 8C639C44 lw $v1, -25532($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-25532)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F154u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC3F158: 240CFFFB addiu $t4, $zero, -5 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[0] + (-5)); + /* 0xBFC3F15C: AC6C0000 sw $t4, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F15Cu); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC3F160: 8C6D0004 lw $t5, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F160u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC3F164: 00000000 nop */ + /* nop */ + /* 0xBFC3F168: 35AE0004 ori $t6, $t5, 0x4 */ + cpu->gpr[14] = cpu->gpr[13] | 0x4u; + /* 0xBFC3F16C: AC6E0004 sw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F16Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3F170: 8C6F0004 lw $t7, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F170u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC3F174: 00000000 nop */ + /* nop */ + /* 0xBFC3F178: 35F80008 ori $t8, $t7, 0x8 */ + cpu->gpr[24] = cpu->gpr[15] | 0x8u; + /* 0xBFC3F17C: 0C016A84 jal 0xB005AA10 */ + /* 0xBFC3F180: AC780004 sw $t8, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F180u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + cpu->gpr[31] = 0xBFC3F184u; + psx_dispatch(cpu, 0x8005AA10u); +label_BFC3F184: + psx_check_interrupts(cpu); + /* 0xBFC3F184: 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, 0xBFC3F184u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC3F188: 3419FFFF ori $t9, $zero, 0xFFFF */ + cpu->gpr[25] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC3F18C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC3F190: AC39EE54 sw $t9, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3F190u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC3F194: 03E00008 jr $ra */ + /* 0xBFC3F198: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + return; +} + +void func_1FC3F19C(CPUState* cpu) { +label_BFC3F19C: + psx_check_interrupts(cpu); + /* 0xBFC3F19C: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC3F1A0: 91CEEEA0 lbu $t6, -4448($t6) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[14] + (-4448))); + /* 0xBFC3F1A4: 3C0F800E lui $t7, 0x800E */ + cpu->gpr[15] = 0x800E0000u; + /* 0xBFC3F1A8: A08E0000 sb $t6, 0($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC3F1AC: 91EFEEA1 lbu $t7, -4447($t7) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[15] + (-4447))); + /* 0xBFC3F1B0: 03E00008 jr $ra */ + /* 0xBFC3F1B4: A0AF0000 sb $t7, 0($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (0)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + return; +} + void func_1FC3F1B8(CPUState* cpu) { label_BFC3F1B8: psx_check_interrupts(cpu); @@ -123826,6 +146734,140 @@ label_BFC403B4: return; } +void func_1FC403C4(CPUState* cpu) { +label_BFC403C4: + psx_check_interrupts(cpu); + /* 0xBFC403C4: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC403C8: 8DCEEE54 lw $t6, -4524($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC403C8u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC403CC: 3401FFFF ori $at, $zero, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC403D0: 11C10003 beq $t6, $at, 0xBFC403E0 */ + uint32_t psx_brA_BFC403D0 = cpu->gpr[14]; uint32_t psx_brB_BFC403D0 = cpu->gpr[1]; + int psx_taken_BFC403D0 = (psx_brA_BFC403D0 == psx_brB_BFC403D0); + /* 0xBFC403D4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC403D0) goto label_BFC403E0; +label_BFC403D8: + psx_check_interrupts(cpu); + /* 0xBFC403D8: 03E00008 jr $ra */ + /* 0xBFC403DC: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC403E0: + psx_check_interrupts(cpu); + /* 0xBFC403E0: 3C0F800E lui $t7, 0x800E */ + cpu->gpr[15] = 0x800E0000u; + /* 0xBFC403E4: 91EFEEA2 lbu $t7, -4446($t7) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[15] + (-4446))); + /* 0xBFC403E8: 3C18800E lui $t8, 0x800E */ + cpu->gpr[24] = 0x800E0000u; + /* 0xBFC403EC: A08F0000 sb $t7, 0($a0) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[4] + (0)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + /* 0xBFC403F0: 9318EEA3 lbu $t8, -4445($t8) */ + cpu->gpr[24] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[24] + (-4445))); + /* 0xBFC403F4: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC403F8: A0B80000 sb $t8, 0($a1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[5] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC403FC: 03E00008 jr $ra */ + /* 0xBFC40400: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC40404(CPUState* cpu) { +label_BFC40404: + psx_check_interrupts(cpu); + /* 0xBFC40404: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC40408: 8C42EE54 lw $v0, -4524($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40408u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC4040C: 24010003 addiu $at, $zero, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC40410: 10410007 beq $v0, $at, 0xBFC40430 */ + uint32_t psx_brA_BFC40410 = cpu->gpr[2]; uint32_t psx_brB_BFC40410 = cpu->gpr[1]; + int psx_taken_BFC40410 = (psx_brA_BFC40410 == psx_brB_BFC40410); + /* 0xBFC40414: 24010004 addiu $at, $zero, 4 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (4)); + if (psx_taken_BFC40410) goto label_BFC40430; +label_BFC40418: + psx_check_interrupts(cpu); + /* 0xBFC40418: 10410005 beq $v0, $at, 0xBFC40430 */ + uint32_t psx_brA_BFC40418 = cpu->gpr[2]; uint32_t psx_brB_BFC40418 = cpu->gpr[1]; + int psx_taken_BFC40418 = (psx_brA_BFC40418 == psx_brB_BFC40418); + /* 0xBFC4041C: 24010005 addiu $at, $zero, 5 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (5)); + if (psx_taken_BFC40418) goto label_BFC40430; +label_BFC40420: + psx_check_interrupts(cpu); + /* 0xBFC40420: 10410004 beq $v0, $at, 0xBFC40434 */ + uint32_t psx_brA_BFC40420 = cpu->gpr[2]; uint32_t psx_brB_BFC40420 = cpu->gpr[1]; + int psx_taken_BFC40420 = (psx_brA_BFC40420 == psx_brB_BFC40420); + /* 0xBFC40424: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC40420) goto label_BFC40434; +label_BFC40428: + psx_check_interrupts(cpu); + /* 0xBFC40428: 03E00008 jr $ra */ + /* 0xBFC4042C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC40430: + psx_check_interrupts(cpu); + /* 0xBFC40430: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC40434: + psx_check_interrupts(cpu); + /* 0xBFC40434: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC40438: 3C05800E lui $a1, 0x800E */ + cpu->gpr[5] = 0x800E0000u; + /* 0xBFC4043C: 24A5EEB8 addiu $a1, $a1, -4424 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-4424)); + /* 0xBFC40440: 2442EEC0 addiu $v0, $v0, -4416 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (-4416)); + /* 0xBFC40444: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; +label_BFC40448: + psx_check_interrupts(cpu); + /* 0xBFC40448: 90AE0000 lbu $t6, 0($a1) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC4044C: 24A50004 addiu $a1, $a1, 4 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (4)); + /* 0xBFC40450: A06E0000 sb $t6, 0($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC40454: 90AFFFFD lbu $t7, -3($a1) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (-3))); + /* 0xBFC40458: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC4045C: A06FFFFD sb $t7, -3($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-3)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + /* 0xBFC40460: 90B8FFFE lbu $t8, -2($a1) */ + cpu->gpr[24] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (-2))); + /* 0xBFC40464: 00000000 nop */ + /* nop */ + /* 0xBFC40468: A078FFFE sb $t8, -2($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-2)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC4046C: 90B9FFFF lbu $t9, -1($a1) */ + cpu->gpr[25] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (-1))); + /* 0xBFC40470: 14A2FFF5 bne $a1, $v0, 0xBFC40448 */ + uint32_t psx_brA_BFC40470 = cpu->gpr[5]; uint32_t psx_brB_BFC40470 = cpu->gpr[2]; + int psx_taken_BFC40470 = (psx_brA_BFC40470 != psx_brB_BFC40470); + /* 0xBFC40474: A079FFFF sb $t9, -1($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-1)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + if (psx_taken_BFC40470) goto label_BFC40448; +label_BFC40478: + psx_check_interrupts(cpu); + /* 0xBFC40478: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC4047C: 03E00008 jr $ra */ + /* 0xBFC40480: 00000000 nop */ + /* nop */ + return; +} + void func_1FC40484(CPUState* cpu) { label_BFC40484: psx_check_interrupts(cpu); @@ -124187,6 +147229,102 @@ label_BFC40710: return; } +void func_1FC40720(CPUState* cpu) { +label_BFC40720: + psx_check_interrupts(cpu); + /* 0xBFC40720: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC40724: 8DEF9C28 lw $t7, -25560($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25560)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40724u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC40728: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC4072C: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC40730: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC40734: 8F399C30 lw $t9, -25552($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25552)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40734u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC40738: 2418001F addiu $t8, $zero, 31 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC4073C: 03E00008 jr $ra */ + /* 0xBFC40740: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + return; +} + +void func_1FC40744(CPUState* cpu) { +label_BFC40744: + psx_check_interrupts(cpu); + /* 0xBFC40744: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC40748: 8DEF9C28 lw $t7, -25560($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25560)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40748u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC4074C: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC40750: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC40754: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC40758: 8F399C34 lw $t9, -25548($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25548)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40758u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC4075C: 2418001F addiu $t8, $zero, 31 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC40760: 27BDFFF8 addiu $sp, $sp, -8 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-8)); + /* 0xBFC40764: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC40768: AFA00004 sw $zero, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40768u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC4076C: 8FA80004 lw $t0, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4076Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC40770: 00000000 nop */ + /* nop */ + /* 0xBFC40774: 29010004 slti $at, $t0, 4 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[8] < (4) ? 1 : 0); + /* 0xBFC40778: 1020000D beq $at, $zero, 0xBFC407B0 */ + uint32_t psx_brA_BFC40778 = cpu->gpr[1]; uint32_t psx_brB_BFC40778 = cpu->gpr[0]; + int psx_taken_BFC40778 = (psx_brA_BFC40778 == psx_brB_BFC40778); + /* 0xBFC4077C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC40778) goto label_BFC407B0; +label_BFC40780: + psx_check_interrupts(cpu); + /* 0xBFC40780: 8FA90004 lw $t1, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40780u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } +label_BFC40784: + psx_check_interrupts(cpu); + /* 0xBFC40784: 00000000 nop */ + /* nop */ + /* 0xBFC40788: AC090000 sw $t1, 0($zero) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[0] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40788u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC4078C: 8FAA0004 lw $t2, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4078Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC40790: 00000000 nop */ + /* nop */ + /* 0xBFC40794: 254B0001 addiu $t3, $t2, 1 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[10] + (1)); + /* 0xBFC40798: AFAB0004 sw $t3, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC40798u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC4079C: 8FAC0004 lw $t4, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4079Cu); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC407A0: 00000000 nop */ + /* nop */ + /* 0xBFC407A4: 29810004 slti $at, $t4, 4 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[12] < (4) ? 1 : 0); + /* 0xBFC407A8: 1420FFF6 bne $at, $zero, 0xBFC40784 */ + uint32_t psx_brA_BFC407A8 = cpu->gpr[1]; uint32_t psx_brB_BFC407A8 = cpu->gpr[0]; + int psx_taken_BFC407A8 = (psx_brA_BFC407A8 != psx_brB_BFC407A8); + /* 0xBFC407AC: 8FA90004 lw $t1, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC407ACu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + if (psx_taken_BFC407A8) goto label_BFC40784; +label_BFC407B0: + psx_check_interrupts(cpu); + /* 0xBFC407B0: 03E00008 jr $ra */ + /* 0xBFC407B4: 27BD0008 addiu $sp, $sp, 8 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (8)); + return; +} + void func_1FC407B8(CPUState* cpu) { label_BFC407B8: psx_check_interrupts(cpu); @@ -126515,6 +149653,112 @@ label_BFC412FC: return; } +void func_1FC4130C(CPUState* cpu) { +label_BFC4130C: + psx_check_interrupts(cpu); + /* 0xBFC4130C: 3C03800E lui $v1, 0x800E */ + cpu->gpr[3] = 0x800E0000u; + /* 0xBFC41310: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC41314: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC41318: 8C429C2C lw $v0, -25556($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25556)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41318u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC4131C: 8C63EEC4 lw $v1, -4412($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-4412)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4131Cu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC41320: 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, 0xBFC41320u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC41324: 00002021 addu $a0, $zero, $zero */ + cpu->gpr[4] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC41328: 24050008 addiu $a1, $zero, 8 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (8)); +label_BFC4132C: + psx_check_interrupts(cpu); + /* 0xBFC4132C: 904E0000 lbu $t6, 0($v0) */ + cpu->gpr[14] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC41330: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + /* 0xBFC41334: A06E0000 sb $t6, 0($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC41338: 904F0000 lbu $t7, 0($v0) */ + cpu->gpr[15] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC4133C: 24630004 addiu $v1, $v1, 4 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (4)); + /* 0xBFC41340: A06FFFFD sb $t7, -3($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-3)), (uint8_t)(cpu->gpr[15] & 0xFFu)); + /* 0xBFC41344: 90580000 lbu $t8, 0($v0) */ + cpu->gpr[24] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC41348: 00000000 nop */ + /* nop */ + /* 0xBFC4134C: A078FFFE sb $t8, -2($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-2)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC41350: 90590000 lbu $t9, 0($v0) */ + cpu->gpr[25] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[2] + (0))); + /* 0xBFC41354: 1485FFF5 bne $a0, $a1, 0xBFC4132C */ + uint32_t psx_brA_BFC41354 = cpu->gpr[4]; uint32_t psx_brB_BFC41354 = cpu->gpr[5]; + int psx_taken_BFC41354 = (psx_brA_BFC41354 != psx_brB_BFC41354); + /* 0xBFC41358: A079FFFF sb $t9, -1($v1) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[3] + (-1)), (uint8_t)(cpu->gpr[25] & 0xFFu)); + if (psx_taken_BFC41354) goto label_BFC4132C; +label_BFC4135C: + psx_check_interrupts(cpu); + /* 0xBFC4135C: 3C02800E lui $v0, 0x800E */ + cpu->gpr[2] = 0x800E0000u; + /* 0xBFC41360: 8C42EE58 lw $v0, -4520($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41360u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC41364: 3401FFFF ori $at, $zero, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC41368: 10410006 beq $v0, $at, 0xBFC41384 */ + uint32_t psx_brA_BFC41368 = cpu->gpr[2]; uint32_t psx_brB_BFC41368 = cpu->gpr[1]; + int psx_taken_BFC41368 = (psx_brA_BFC41368 == psx_brB_BFC41368); + /* 0xBFC4136C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + if (psx_taken_BFC41368) goto label_BFC41384; +label_BFC41370: + psx_check_interrupts(cpu); + /* 0xBFC41370: AC22EE54 sw $v0, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41370u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC41374: 3402FFFF ori $v0, $zero, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC41378: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC4137C: 10000004 beq $zero, $zero, 0xBFC41390 */ + uint32_t psx_brA_BFC4137C = cpu->gpr[0]; uint32_t psx_brB_BFC4137C = cpu->gpr[0]; + int psx_taken_BFC4137C = (psx_brA_BFC4137C == psx_brB_BFC4137C); + /* 0xBFC41380: AC22EE58 sw $v0, -4520($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41380u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + if (psx_taken_BFC4137C) goto label_BFC41390; +label_BFC41384: + psx_check_interrupts(cpu); + /* 0xBFC41384: 3408FFFF ori $t0, $zero, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC41388: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC4138C: AC28EE54 sw $t0, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4138Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } +label_BFC41390: + psx_check_interrupts(cpu); + /* 0xBFC41390: 3C04F000 lui $a0, 0xF000 */ + cpu->gpr[4] = 0xF0000000u; + /* 0xBFC41394: 34840003 ori $a0, $a0, 0x3 */ + cpu->gpr[4] = cpu->gpr[4] | 0x3u; + /* 0xBFC41398: 0C016AE4 jal 0xB005AB90 */ + /* 0xBFC4139C: 24050020 addiu $a1, $zero, 32 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + cpu->gpr[31] = 0xBFC413A0u; + psx_dispatch(cpu, 0x8005AB90u); +label_BFC413A0: + psx_check_interrupts(cpu); + /* 0xBFC413A0: 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, 0xBFC413A0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC413A4: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC413A8: 03E00008 jr $ra */ + /* 0xBFC413AC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC413B0(CPUState* cpu) { label_BFC413B0: psx_check_interrupts(cpu); @@ -127147,6 +150391,48 @@ label_BFC41778: return; } +void func_1FC41788(CPUState* cpu) { +label_BFC41788: + psx_check_interrupts(cpu); + /* 0xBFC41788: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC4178C: 8DCEEE58 lw $t6, -4520($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4178Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41790: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC41794: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC41798: AC2EEE54 sw $t6, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41798u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC4179C: 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, 0xBFC4179Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC417A0: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC417A4: 340FFFFF ori $t7, $zero, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC417A8: 3C04F000 lui $a0, 0xF000 */ + cpu->gpr[4] = 0xF0000000u; + /* 0xBFC417AC: AC2FEE58 sw $t7, -4520($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC417ACu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC417B0: 34840003 ori $a0, $a0, 0x3 */ + cpu->gpr[4] = cpu->gpr[4] | 0x3u; + /* 0xBFC417B4: 0C016AE4 jal 0xB005AB90 */ + /* 0xBFC417B8: 24050020 addiu $a1, $zero, 32 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + cpu->gpr[31] = 0xBFC417BCu; + psx_dispatch(cpu, 0x8005AB90u); +label_BFC417BC: + psx_check_interrupts(cpu); + /* 0xBFC417BC: 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, 0xBFC417BCu); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC417C0: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC417C4: 03E00008 jr $ra */ + /* 0xBFC417C8: 00000000 nop */ + /* nop */ + return; +} + void func_1FC417CC(CPUState* cpu) { label_BFC417CC: psx_check_interrupts(cpu); @@ -127183,6 +150469,48 @@ label_BFC417F4: return; } +void func_1FC41804(CPUState* cpu) { +label_BFC41804: + psx_check_interrupts(cpu); + /* 0xBFC41804: 3C0E800E lui $t6, 0x800E */ + cpu->gpr[14] = 0x800E0000u; + /* 0xBFC41808: 8DCEEE58 lw $t6, -4520($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41808u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC4180C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC41810: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC41814: AC2EEE54 sw $t6, -4524($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4524)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41814u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC41818: 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, 0xBFC41818u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC4181C: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC41820: 340FFFFF ori $t7, $zero, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[0] | 0xFFFFu; + /* 0xBFC41824: 3C04F000 lui $a0, 0xF000 */ + cpu->gpr[4] = 0xF0000000u; + /* 0xBFC41828: AC2FEE58 sw $t7, -4520($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-4520)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41828u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC4182C: 34840003 ori $a0, $a0, 0x3 */ + cpu->gpr[4] = cpu->gpr[4] | 0x3u; + /* 0xBFC41830: 0C016AE4 jal 0xB005AB90 */ + /* 0xBFC41834: 24050020 addiu $a1, $zero, 32 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + cpu->gpr[31] = 0xBFC41838u; + psx_dispatch(cpu, 0x8005AB90u); +label_BFC41838: + psx_check_interrupts(cpu); + /* 0xBFC41838: 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, 0xBFC41838u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC4183C: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC41840: 03E00008 jr $ra */ + /* 0xBFC41844: 00000000 nop */ + /* nop */ + return; +} + void func_1FC41848(CPUState* cpu) { label_BFC41848: psx_check_interrupts(cpu); @@ -127717,6 +151045,139 @@ label_BFC41B9C: return; } +void func_1FC41BA8(CPUState* cpu) { +label_BFC41BA8: + psx_check_interrupts(cpu); + /* 0xBFC41BA8: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC41BAC: 8C639C3C lw $v1, -25540($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-25540)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BACu); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC41BB0: 3C0100FF lui $at, 0xFF */ + cpu->gpr[1] = 0x00FF0000u; + /* 0xBFC41BB4: 8C620000 lw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BB4u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC41BB8: 3421FFFF ori $at, $at, 0xFFFF */ + cpu->gpr[1] = cpu->gpr[1] | 0xFFFFu; + /* 0xBFC41BBC: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC41BC0: 00411024 and $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] & cpu->gpr[1]; + /* 0xBFC41BC4: 8CC69C38 lw $a2, -25544($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-25544)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BC4u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC41BC8: 3C078008 lui $a3, 0x8008 */ + cpu->gpr[7] = 0x80080000u; + /* 0xBFC41BCC: 3C010088 lui $at, 0x88 */ + cpu->gpr[1] = 0x00880000u; + /* 0xBFC41BD0: 8CE79C40 lw $a3, -25536($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (-25536)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BD0u); return; } cpu->gpr[7] = cpu->read_word(psx_addr); } + /* 0xBFC41BD4: 00411025 or $v0, $v0, $at */ + cpu->gpr[2] = cpu->gpr[2] | cpu->gpr[1]; + /* 0xBFC41BD8: AC620000 sw $v0, 0($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BD8u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC41BDC: 8CC20000 lw $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, 0xBFC41BDCu); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC41BE0: 3C010001 lui $at, 0x1 */ + cpu->gpr[1] = 0x00010000u; + /* 0xBFC41BE4: 34428000 ori $v0, $v0, 0x8000 */ + cpu->gpr[2] = cpu->gpr[2] | 0x8000u; + /* 0xBFC41BE8: 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, 0xBFC41BE8u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC41BEC: 00A17025 or $t6, $a1, $at */ + cpu->gpr[14] = cpu->gpr[5] | cpu->gpr[1]; + /* 0xBFC41BF0: ACE40000 sw $a0, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BF0u); return; } cpu->write_word(psx_addr, cpu->gpr[4]); } + /* 0xBFC41BF4: 3C0F1100 lui $t7, 0x1100 */ + cpu->gpr[15] = 0x11000000u; + /* 0xBFC41BF8: ACEE0004 sw $t6, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41BF8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC41BFC: 03E00008 jr $ra */ + /* 0xBFC41C00: ACEF0008 sw $t7, 8($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C00u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + return; +} + +void func_1FC41C04(CPUState* cpu) { +label_BFC41C04: + psx_check_interrupts(cpu); + /* 0xBFC41C04: 03E00008 jr $ra */ + /* 0xBFC41C08: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC41C0C(CPUState* cpu) { +label_BFC41C0C: + psx_check_interrupts(cpu); + /* 0xBFC41C0C: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC41C10: 8DEF9C28 lw $t7, -25560($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (-25560)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C10u); return; } cpu->gpr[15] = cpu->read_word(psx_addr); } + /* 0xBFC41C14: 240E0001 addiu $t6, $zero, 1 */ + cpu->gpr[14] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41C18: 3C198008 lui $t9, 0x8008 */ + cpu->gpr[25] = 0x80080000u; + /* 0xBFC41C1C: A1EE0000 sb $t6, 0($t7) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[15] + (0)), (uint8_t)(cpu->gpr[14] & 0xFFu)); + /* 0xBFC41C20: 8F399C34 lw $t9, -25548($t9) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[25] + (-25548)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C20u); return; } cpu->gpr[25] = cpu->read_word(psx_addr); } + /* 0xBFC41C24: 24180040 addiu $t8, $zero, 64 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (64)); + /* 0xBFC41C28: 27BDFFF8 addiu $sp, $sp, -8 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-8)); + /* 0xBFC41C2C: A3380000 sb $t8, 0($t9) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[25] + (0)), (uint8_t)(cpu->gpr[24] & 0xFFu)); + /* 0xBFC41C30: AFA00004 sw $zero, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C30u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + /* 0xBFC41C34: 8FA80004 lw $t0, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C34u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC41C38: 00000000 nop */ + /* nop */ + /* 0xBFC41C3C: 29010004 slti $at, $t0, 4 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[8] < (4) ? 1 : 0); + /* 0xBFC41C40: 1020000D beq $at, $zero, 0xBFC41C78 */ + uint32_t psx_brA_BFC41C40 = cpu->gpr[1]; uint32_t psx_brB_BFC41C40 = cpu->gpr[0]; + int psx_taken_BFC41C40 = (psx_brA_BFC41C40 == psx_brB_BFC41C40); + /* 0xBFC41C44: 00000000 nop */ + /* nop */ + if (psx_taken_BFC41C40) goto label_BFC41C78; +label_BFC41C48: + psx_check_interrupts(cpu); + /* 0xBFC41C48: 8FA90004 lw $t1, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C48u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } +label_BFC41C4C: + psx_check_interrupts(cpu); + /* 0xBFC41C4C: 00000000 nop */ + /* nop */ + /* 0xBFC41C50: AC090000 sw $t1, 0($zero) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[0] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C50u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC41C54: 8FAA0004 lw $t2, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C54u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC41C58: 00000000 nop */ + /* nop */ + /* 0xBFC41C5C: 254B0001 addiu $t3, $t2, 1 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[10] + (1)); + /* 0xBFC41C60: AFAB0004 sw $t3, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C60u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC41C64: 8FAC0004 lw $t4, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C64u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC41C68: 00000000 nop */ + /* nop */ + /* 0xBFC41C6C: 29810004 slti $at, $t4, 4 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[12] < (4) ? 1 : 0); + /* 0xBFC41C70: 1420FFF6 bne $at, $zero, 0xBFC41C4C */ + uint32_t psx_brA_BFC41C70 = cpu->gpr[1]; uint32_t psx_brB_BFC41C70 = cpu->gpr[0]; + int psx_taken_BFC41C70 = (psx_brA_BFC41C70 != psx_brB_BFC41C70); + /* 0xBFC41C74: 8FA90004 lw $t1, 4($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41C74u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + if (psx_taken_BFC41C70) goto label_BFC41C4C; +label_BFC41C78: + psx_check_interrupts(cpu); + /* 0xBFC41C78: 03E00008 jr $ra */ + /* 0xBFC41C7C: 27BD0008 addiu $sp, $sp, 8 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (8)); + return; +} + void func_1FC41C80(CPUState* cpu) { label_BFC41C80: psx_check_interrupts(cpu); @@ -127996,6 +151457,297 @@ label_BFC41E18: return; } +void func_1FC41E30(CPUState* cpu) { +label_BFC41E30: + psx_check_interrupts(cpu); + /* 0xBFC41E30: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC41E34: 28810003 slti $at, $a0, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3) ? 1 : 0); + /* 0xBFC41E38: 30A5FFFF andi $a1, $a1, 0xFFFF */ + cpu->gpr[5] = cpu->gpr[5] & 0xFFFFu; + /* 0xBFC41E3C: 14200003 bne $at, $zero, 0xBFC41E4C */ + uint32_t psx_brA_BFC41E3C = cpu->gpr[1]; uint32_t psx_brB_BFC41E3C = cpu->gpr[0]; + int psx_taken_BFC41E3C = (psx_brA_BFC41E3C != psx_brB_BFC41E3C); + /* 0xBFC41E40: 00C03821 addu $a3, $a2, $zero */ + cpu->gpr[7] = cpu->gpr[6] + cpu->gpr[0]; + if (psx_taken_BFC41E3C) goto label_BFC41E4C; +label_BFC41E44: + psx_check_interrupts(cpu); + /* 0xBFC41E44: 03E00008 jr $ra */ + /* 0xBFC41E48: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC41E4C: + psx_check_interrupts(cpu); + /* 0xBFC41E4C: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC41E50: 8DCE9CB4 lw $t6, -25420($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25420)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41E50u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41E54: 00047900 sll $t7, $a0, 4 */ + cpu->gpr[15] = cpu->gpr[4] << 4u; + /* 0xBFC41E58: 01CF1821 addu $v1, $t6, $t7 */ + cpu->gpr[3] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC41E5C: A4600004 sh $zero, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41E5Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC41E60: A4650008 sh $a1, 8($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41E60u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[5] & 0xFFFFu)); } + /* 0xBFC41E64: 10800004 beq $a0, $zero, 0xBFC41E78 */ + uint32_t psx_brA_BFC41E64 = cpu->gpr[4]; uint32_t psx_brB_BFC41E64 = cpu->gpr[0]; + int psx_taken_BFC41E64 = (psx_brA_BFC41E64 == psx_brB_BFC41E64); + /* 0xBFC41E68: 24060048 addiu $a2, $zero, 72 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (72)); + if (psx_taken_BFC41E64) goto label_BFC41E78; +label_BFC41E6C: + psx_check_interrupts(cpu); + /* 0xBFC41E6C: 24010001 addiu $at, $zero, 1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41E70: 1481000B bne $a0, $at, 0xBFC41EA0 */ + uint32_t psx_brA_BFC41E70 = cpu->gpr[4]; uint32_t psx_brB_BFC41E70 = cpu->gpr[1]; + int psx_taken_BFC41E70 = (psx_brA_BFC41E70 != psx_brB_BFC41E70); + /* 0xBFC41E74: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + if (psx_taken_BFC41E70) goto label_BFC41EA0; +label_BFC41E78: + psx_check_interrupts(cpu); + /* 0xBFC41E78: 30F80010 andi $t8, $a3, 0x10 */ + cpu->gpr[24] = cpu->gpr[7] & 0x10u; + /* 0xBFC41E7C: 13000003 beq $t8, $zero, 0xBFC41E8C */ + uint32_t psx_brA_BFC41E7C = cpu->gpr[24]; uint32_t psx_brB_BFC41E7C = cpu->gpr[0]; + int psx_taken_BFC41E7C = (psx_brA_BFC41E7C == psx_brB_BFC41E7C); + /* 0xBFC41E80: 30F90001 andi $t9, $a3, 0x1 */ + cpu->gpr[25] = cpu->gpr[7] & 0x1u; + if (psx_taken_BFC41E7C) goto label_BFC41E8C; +label_BFC41E84: + psx_check_interrupts(cpu); + /* 0xBFC41E84: 24060049 addiu $a2, $zero, 73 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (73)); + /* 0xBFC41E88: 30F90001 andi $t9, $a3, 0x1 */ + cpu->gpr[25] = cpu->gpr[7] & 0x1u; +label_BFC41E8C: + psx_check_interrupts(cpu); + /* 0xBFC41E8C: 1720000B bne $t9, $zero, 0xBFC41EBC */ + uint32_t psx_brA_BFC41E8C = cpu->gpr[25]; uint32_t psx_brB_BFC41E8C = cpu->gpr[0]; + int psx_taken_BFC41E8C = (psx_brA_BFC41E8C != psx_brB_BFC41E8C); + /* 0xBFC41E90: 30E91000 andi $t1, $a3, 0x1000 */ + cpu->gpr[9] = cpu->gpr[7] & 0x1000u; + if (psx_taken_BFC41E8C) goto label_BFC41EBC; +label_BFC41E94: + psx_check_interrupts(cpu); + /* 0xBFC41E94: 10000008 beq $zero, $zero, 0xBFC41EB8 */ + uint32_t psx_brA_BFC41E94 = cpu->gpr[0]; uint32_t psx_brB_BFC41E94 = cpu->gpr[0]; + int psx_taken_BFC41E94 = (psx_brA_BFC41E94 == psx_brB_BFC41E94); + /* 0xBFC41E98: 34C60100 ori $a2, $a2, 0x100 */ + cpu->gpr[6] = cpu->gpr[6] | 0x100u; + if (psx_taken_BFC41E94) goto label_BFC41EB8; +label_BFC41E9C: + psx_check_interrupts(cpu); + /* 0xBFC41E9C: 24010002 addiu $at, $zero, 2 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); +label_BFC41EA0: + psx_check_interrupts(cpu); + /* 0xBFC41EA0: 14810006 bne $a0, $at, 0xBFC41EBC */ + uint32_t psx_brA_BFC41EA0 = cpu->gpr[4]; uint32_t psx_brB_BFC41EA0 = cpu->gpr[1]; + int psx_taken_BFC41EA0 = (psx_brA_BFC41EA0 != psx_brB_BFC41EA0); + /* 0xBFC41EA4: 30E91000 andi $t1, $a3, 0x1000 */ + cpu->gpr[9] = cpu->gpr[7] & 0x1000u; + if (psx_taken_BFC41EA0) goto label_BFC41EBC; +label_BFC41EA8: + psx_check_interrupts(cpu); + /* 0xBFC41EA8: 30E80001 andi $t0, $a3, 0x1 */ + cpu->gpr[8] = cpu->gpr[7] & 0x1u; + /* 0xBFC41EAC: 15000003 bne $t0, $zero, 0xBFC41EBC */ + uint32_t psx_brA_BFC41EAC = cpu->gpr[8]; uint32_t psx_brB_BFC41EAC = cpu->gpr[0]; + int psx_taken_BFC41EAC = (psx_brA_BFC41EAC != psx_brB_BFC41EAC); + /* 0xBFC41EB0: 30E91000 andi $t1, $a3, 0x1000 */ + cpu->gpr[9] = cpu->gpr[7] & 0x1000u; + if (psx_taken_BFC41EAC) goto label_BFC41EBC; +label_BFC41EB4: + psx_check_interrupts(cpu); + /* 0xBFC41EB4: 24060248 addiu $a2, $zero, 584 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[0] + (584)); +label_BFC41EB8: + psx_check_interrupts(cpu); + /* 0xBFC41EB8: 30E91000 andi $t1, $a3, 0x1000 */ + cpu->gpr[9] = cpu->gpr[7] & 0x1000u; +label_BFC41EBC: + psx_check_interrupts(cpu); + /* 0xBFC41EBC: 11200002 beq $t1, $zero, 0xBFC41EC8 */ + uint32_t psx_brA_BFC41EBC = cpu->gpr[9]; uint32_t psx_brB_BFC41EBC = cpu->gpr[0]; + int psx_taken_BFC41EBC = (psx_brA_BFC41EBC == psx_brB_BFC41EBC); + /* 0xBFC41EC0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC41EBC) goto label_BFC41EC8; +label_BFC41EC4: + psx_check_interrupts(cpu); + /* 0xBFC41EC4: 34C60010 ori $a2, $a2, 0x10 */ + cpu->gpr[6] = cpu->gpr[6] | 0x10u; +label_BFC41EC8: + psx_check_interrupts(cpu); + /* 0xBFC41EC8: A4660004 sh $a2, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41EC8u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[6] & 0xFFFFu)); } + /* 0xBFC41ECC: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41ED0: 03E00008 jr $ra */ + /* 0xBFC41ED4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC41ED8(CPUState* cpu) { +label_BFC41ED8: + psx_check_interrupts(cpu); + /* 0xBFC41ED8: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC41EDC: 28810003 slti $at, $a0, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3) ? 1 : 0); + /* 0xBFC41EE0: 14200003 bne $at, $zero, 0xBFC41EF0 */ + uint32_t psx_brA_BFC41EE0 = cpu->gpr[1]; uint32_t psx_brB_BFC41EE0 = cpu->gpr[0]; + int psx_taken_BFC41EE0 = (psx_brA_BFC41EE0 != psx_brB_BFC41EE0); + /* 0xBFC41EE4: 00000000 nop */ + /* nop */ + if (psx_taken_BFC41EE0) goto label_BFC41EF0; +label_BFC41EE8: + psx_check_interrupts(cpu); + /* 0xBFC41EE8: 03E00008 jr $ra */ + /* 0xBFC41EEC: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC41EF0: + psx_check_interrupts(cpu); + /* 0xBFC41EF0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC41EF4: 8DCE9CB4 lw $t6, -25420($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25420)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41EF4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41EF8: 00047900 sll $t7, $a0, 4 */ + cpu->gpr[15] = cpu->gpr[4] << 4u; + /* 0xBFC41EFC: 01CFC021 addu $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC41F00: 97020000 lhu $v0, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F00u); return; } cpu->gpr[2] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC41F04: 00000000 nop */ + /* nop */ + /* 0xBFC41F08: 03E00008 jr $ra */ + /* 0xBFC41F0C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC41F10(CPUState* cpu) { +label_BFC41F10: + psx_check_interrupts(cpu); + /* 0xBFC41F10: 3C028008 lui $v0, 0x8008 */ + cpu->gpr[2] = 0x80080000u; + /* 0xBFC41F14: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC41F18: 8C429CB0 lw $v0, -25424($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (-25424)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F18u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC41F1C: 00047880 sll $t7, $a0, 2 */ + cpu->gpr[15] = cpu->gpr[4] << 2u; + /* 0xBFC41F20: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC41F24: 030FC021 addu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[15]; + /* 0xBFC41F28: 8F189CB8 lw $t8, -25416($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-25416)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F28u); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC41F2C: 8C4E0004 lw $t6, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F2Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41F30: 28810003 slti $at, $a0, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3) ? 1 : 0); + /* 0xBFC41F34: 01D8C825 or $t9, $t6, $t8 */ + cpu->gpr[25] = cpu->gpr[14] | cpu->gpr[24]; + /* 0xBFC41F38: 14200003 bne $at, $zero, 0xBFC41F48 */ + uint32_t psx_brA_BFC41F38 = cpu->gpr[1]; uint32_t psx_brB_BFC41F38 = cpu->gpr[0]; + int psx_taken_BFC41F38 = (psx_brA_BFC41F38 != psx_brB_BFC41F38); + /* 0xBFC41F3C: AC590004 sw $t9, 4($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F3Cu); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + if (psx_taken_BFC41F38) goto label_BFC41F48; +label_BFC41F40: + psx_check_interrupts(cpu); + /* 0xBFC41F40: 03E00008 jr $ra */ + /* 0xBFC41F44: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC41F48: + psx_check_interrupts(cpu); + /* 0xBFC41F48: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41F4C: 03E00008 jr $ra */ + /* 0xBFC41F50: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC41F54(CPUState* cpu) { +label_BFC41F54: + psx_check_interrupts(cpu); + /* 0xBFC41F54: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC41F58: 3C038008 lui $v1, 0x8008 */ + cpu->gpr[3] = 0x80080000u; + /* 0xBFC41F5C: 00047880 sll $t7, $a0, 2 */ + cpu->gpr[15] = cpu->gpr[4] << 2u; + /* 0xBFC41F60: 3C188008 lui $t8, 0x8008 */ + cpu->gpr[24] = 0x80080000u; + /* 0xBFC41F64: 8C639CB0 lw $v1, -25424($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (-25424)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F64u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC41F68: 030FC021 addu $t8, $t8, $t7 */ + cpu->gpr[24] = cpu->gpr[24] + cpu->gpr[15]; + /* 0xBFC41F6C: 8F189CB8 lw $t8, -25416($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-25416)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F6Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC41F70: 8C6E0004 lw $t6, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F70u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41F74: 0300C827 nor $t9, $t8, $zero */ + cpu->gpr[25] = ~(cpu->gpr[24] | cpu->gpr[0]); + /* 0xBFC41F78: 01D94024 and $t0, $t6, $t9 */ + cpu->gpr[8] = cpu->gpr[14] & cpu->gpr[25]; + /* 0xBFC41F7C: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41F80: 03E00008 jr $ra */ + /* 0xBFC41F84: AC680004 sw $t0, 4($v1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[3] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41F84u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + return; +} + +void func_1FC41F88(CPUState* cpu) { +label_BFC41F88: + psx_check_interrupts(cpu); + /* 0xBFC41F88: 3084FFFF andi $a0, $a0, 0xFFFF */ + cpu->gpr[4] = cpu->gpr[4] & 0xFFFFu; + /* 0xBFC41F8C: 28810003 slti $at, $a0, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3) ? 1 : 0); + /* 0xBFC41F90: 14200003 bne $at, $zero, 0xBFC41FA0 */ + uint32_t psx_brA_BFC41F90 = cpu->gpr[1]; uint32_t psx_brB_BFC41F90 = cpu->gpr[0]; + int psx_taken_BFC41F90 = (psx_brA_BFC41F90 != psx_brB_BFC41F90); + /* 0xBFC41F94: 00000000 nop */ + /* nop */ + if (psx_taken_BFC41F90) goto label_BFC41FA0; +label_BFC41F98: + psx_check_interrupts(cpu); + /* 0xBFC41F98: 03E00008 jr $ra */ + /* 0xBFC41F9C: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + return; +label_BFC41FA0: + psx_check_interrupts(cpu); + /* 0xBFC41FA0: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC41FA4: 8DCE9CB4 lw $t6, -25420($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-25420)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41FA4u); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC41FA8: 00047900 sll $t7, $a0, 4 */ + cpu->gpr[15] = cpu->gpr[4] << 4u; + /* 0xBFC41FAC: 01CFC021 addu $t8, $t6, $t7 */ + cpu->gpr[24] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC41FB0: A7000000 sh $zero, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC41FB0u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[0] & 0xFFFFu)); } + /* 0xBFC41FB4: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC41FB8: 03E00008 jr $ra */ + /* 0xBFC41FBC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC42014(CPUState* cpu) { label_BFC42014: psx_check_interrupts(cpu); @@ -128569,6 +152321,107 @@ label_BFC42370: return; } +void func_1FC42380(CPUState* cpu) { +label_BFC42380: + psx_check_interrupts(cpu); + /* 0xBFC42380: 3C0F800E lui $t7, 0x800E */ + cpu->gpr[15] = 0x800E0000u; + /* 0xBFC42384: 25EFFEE0 addiu $t7, $t7, -288 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-288)); + /* 0xBFC42388: 00047080 sll $t6, $a0, 2 */ + cpu->gpr[14] = cpu->gpr[4] << 2u; + /* 0xBFC4238C: 01CF1021 addu $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC42390: 8C430000 lw $v1, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42390u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC42394: 00000000 nop */ + /* nop */ + /* 0xBFC42398: 10A30020 beq $a1, $v1, 0xBFC4241C */ + uint32_t psx_brA_BFC42398 = cpu->gpr[5]; uint32_t psx_brB_BFC42398 = cpu->gpr[3]; + int psx_taken_BFC42398 = (psx_brA_BFC42398 == psx_brB_BFC42398); + /* 0xBFC4239C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC42398) goto label_BFC4241C; +label_BFC423A0: + psx_check_interrupts(cpu); + /* 0xBFC423A0: 10A00010 beq $a1, $zero, 0xBFC423E4 */ + uint32_t psx_brA_BFC423A0 = cpu->gpr[5]; uint32_t psx_brB_BFC423A0 = cpu->gpr[0]; + int psx_taken_BFC423A0 = (psx_brA_BFC423A0 == psx_brB_BFC423A0); + /* 0xBFC423A4: AC400000 sw $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423A4u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC423A0) goto label_BFC423E4; +label_BFC423A8: + psx_check_interrupts(cpu); + /* 0xBFC423A8: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC423AC: 8CC69D54 lw $a2, -25260($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-25260)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423ACu); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC423B0: AC450000 sw $a1, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423B0u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC423B4: 24180001 addiu $t8, $zero, 1 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC423B8: 94D90000 lhu $t9, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423B8u); return; } cpu->gpr[25] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC423BC: 00983804 sllv $a3, $t8, $a0 */ + cpu->gpr[7] = cpu->gpr[24] << (cpu->gpr[4] & 0x1Fu); + /* 0xBFC423C0: 30E8FFFF andi $t0, $a3, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[7] & 0xFFFFu; + /* 0xBFC423C4: 03284825 or $t1, $t9, $t0 */ + cpu->gpr[9] = cpu->gpr[25] | cpu->gpr[8]; + /* 0xBFC423C8: 3C0A800E lui $t2, 0x800E */ + cpu->gpr[10] = 0x800E0000u; + /* 0xBFC423CC: A4C90000 sh $t1, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423CCu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC423D0: 8D4AFF0C lw $t2, -244($t2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[10] + (-244)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423D0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC423D4: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC423D8: 01475825 or $t3, $t2, $a3 */ + cpu->gpr[11] = cpu->gpr[10] | cpu->gpr[7]; + /* 0xBFC423DC: 1000000F beq $zero, $zero, 0xBFC4241C */ + uint32_t psx_brA_BFC423DC = cpu->gpr[0]; uint32_t psx_brB_BFC423DC = cpu->gpr[0]; + int psx_taken_BFC423DC = (psx_brA_BFC423DC == psx_brB_BFC423DC); + /* 0xBFC423E0: AC2BFF0C sw $t3, -244($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-244)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423E0u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + if (psx_taken_BFC423DC) goto label_BFC4241C; +label_BFC423E4: + psx_check_interrupts(cpu); + /* 0xBFC423E4: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC423E8: 8CC69D54 lw $a2, -25260($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-25260)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423E8u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC423EC: 240C0001 addiu $t4, $zero, 1 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC423F0: 008C1004 sllv $v0, $t4, $a0 */ + cpu->gpr[2] = cpu->gpr[12] << (cpu->gpr[4] & 0x1Fu); + /* 0xBFC423F4: 94CD0000 lhu $t5, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC423F4u); return; } cpu->gpr[13] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC423F8: 00401027 nor $v0, $v0, $zero */ + cpu->gpr[2] = ~(cpu->gpr[2] | cpu->gpr[0]); + /* 0xBFC423FC: 304EFFFF andi $t6, $v0, 0xFFFF */ + cpu->gpr[14] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC42400: 01AE7824 and $t7, $t5, $t6 */ + cpu->gpr[15] = cpu->gpr[13] & cpu->gpr[14]; + /* 0xBFC42404: 3C18800E lui $t8, 0x800E */ + cpu->gpr[24] = 0x800E0000u; + /* 0xBFC42408: A4CF0000 sh $t7, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42408u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + /* 0xBFC4240C: 8F18FF0C lw $t8, -244($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (-244)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4240Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC42410: 3C01800E lui $at, 0x800E */ + cpu->gpr[1] = 0x800E0000u; + /* 0xBFC42414: 0302C824 and $t9, $t8, $v0 */ + cpu->gpr[25] = cpu->gpr[24] & cpu->gpr[2]; + /* 0xBFC42418: AC39FF0C sw $t9, -244($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-244)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42418u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } +label_BFC4241C: + psx_check_interrupts(cpu); + /* 0xBFC4241C: 03E00008 jr $ra */ + /* 0xBFC42420: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + void func_1FC42424(CPUState* cpu) { label_BFC42424: psx_check_interrupts(cpu); @@ -129210,11 +153063,180 @@ label_BFC42838: return; } +void func_1FC42844(CPUState* cpu) { +label_BFC42844: + psx_check_interrupts(cpu); + /* 0xBFC42844: 3C0F800E lui $t7, 0x800E */ + cpu->gpr[15] = 0x800E0000u; + /* 0xBFC42848: 25EFFF50 addiu $t7, $t7, -176 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-176)); + /* 0xBFC4284C: 00047080 sll $t6, $a0, 2 */ + cpu->gpr[14] = cpu->gpr[4] << 2u; + /* 0xBFC42850: 01CF1021 addu $v0, $t6, $t7 */ + cpu->gpr[2] = cpu->gpr[14] + cpu->gpr[15]; + /* 0xBFC42854: 8C430000 lw $v1, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42854u); return; } cpu->gpr[3] = cpu->read_word(psx_addr); } + /* 0xBFC42858: 00000000 nop */ + /* nop */ + /* 0xBFC4285C: 10A30017 beq $a1, $v1, 0xBFC428BC */ + uint32_t psx_brA_BFC4285C = cpu->gpr[5]; uint32_t psx_brB_BFC4285C = cpu->gpr[3]; + int psx_taken_BFC4285C = (psx_brA_BFC4285C == psx_brB_BFC4285C); + /* 0xBFC42860: 00000000 nop */ + /* nop */ + if (psx_taken_BFC4285C) goto label_BFC428BC; +label_BFC42864: + psx_check_interrupts(cpu); + /* 0xBFC42864: 10A0000C beq $a1, $zero, 0xBFC42898 */ + uint32_t psx_brA_BFC42864 = cpu->gpr[5]; uint32_t psx_brB_BFC42864 = cpu->gpr[0]; + int psx_taken_BFC42864 = (psx_brA_BFC42864 == psx_brB_BFC42864); + /* 0xBFC42868: AC400000 sw $zero, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42868u); return; } cpu->write_word(psx_addr, cpu->gpr[0]); } + if (psx_taken_BFC42864) goto label_BFC42898; +label_BFC4286C: + psx_check_interrupts(cpu); + /* 0xBFC4286C: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC42870: 8CC69DA0 lw $a2, -25184($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-25184)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42870u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC42874: AC450000 sw $a1, 0($v0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[2] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42874u); return; } cpu->write_word(psx_addr, cpu->gpr[5]); } + /* 0xBFC42878: 3C190101 lui $t9, 0x101 */ + cpu->gpr[25] = 0x01010000u; + /* 0xBFC4287C: 8CD80000 lw $t8, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4287Cu); return; } cpu->gpr[24] = cpu->read_word(psx_addr); } + /* 0xBFC42880: 00994004 sllv $t0, $t9, $a0 */ + cpu->gpr[8] = cpu->gpr[25] << (cpu->gpr[4] & 0x1Fu); + /* 0xBFC42884: 3C010080 lui $at, 0x80 */ + cpu->gpr[1] = 0x00800000u; + /* 0xBFC42888: 01014825 or $t1, $t0, $at */ + cpu->gpr[9] = cpu->gpr[8] | cpu->gpr[1]; + /* 0xBFC4288C: 03095025 or $t2, $t8, $t1 */ + cpu->gpr[10] = cpu->gpr[24] | cpu->gpr[9]; + /* 0xBFC42890: 1000000A beq $zero, $zero, 0xBFC428BC */ + uint32_t psx_brA_BFC42890 = cpu->gpr[0]; uint32_t psx_brB_BFC42890 = cpu->gpr[0]; + int psx_taken_BFC42890 = (psx_brA_BFC42890 == psx_brB_BFC42890); + /* 0xBFC42894: ACCA0000 sw $t2, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC42894u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + if (psx_taken_BFC42890) goto label_BFC428BC; +label_BFC42898: + psx_check_interrupts(cpu); + /* 0xBFC42898: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC4289C: 8CC69DA0 lw $a2, -25184($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (-25184)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC4289Cu); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC428A0: 3C0C0001 lui $t4, 0x1 */ + cpu->gpr[12] = 0x00010000u; + /* 0xBFC428A4: 8CCB0000 lw $t3, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC428A4u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC428A8: 008C6804 sllv $t5, $t4, $a0 */ + cpu->gpr[13] = cpu->gpr[12] << (cpu->gpr[4] & 0x1Fu); + /* 0xBFC428AC: 3C01FF00 lui $at, 0xFF00 */ + cpu->gpr[1] = 0xFF000000u; + /* 0xBFC428B0: 01A17027 nor $t6, $t5, $at */ + cpu->gpr[14] = ~(cpu->gpr[13] | cpu->gpr[1]); + /* 0xBFC428B4: 016E7824 and $t7, $t3, $t6 */ + cpu->gpr[15] = cpu->gpr[11] & cpu->gpr[14]; + /* 0xBFC428B8: ACCF0000 sw $t7, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC428B8u); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } +label_BFC428BC: + psx_check_interrupts(cpu); + /* 0xBFC428BC: 03E00008 jr $ra */ + /* 0xBFC428C0: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + return; +} + +void func_1FC42A10(CPUState* cpu) { +label_BFC42A10: + psx_check_interrupts(cpu); + /* 0xBFC42A10: 24040002 addiu $a0, $zero, 2 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (2)); + /* 0xBFC42A14: 0000000C syscall */ + cpu->pc = 0xBFC42A14u; psx_syscall(cpu, cpu->gpr[2]); return; + /* 0xBFC42A18: 03E00008 jr $ra */ + /* 0xBFC42A1C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC42A90(CPUState* cpu) { +label_BFC42A90: + psx_check_interrupts(cpu); + /* 0xBFC42A90: 24040001 addiu $a0, $zero, 1 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + /* 0xBFC42A94: 0000000C syscall */ + cpu->pc = 0xBFC42A94u; psx_syscall(cpu, cpu->gpr[2]); return; + /* 0xBFC42A98: 03E00008 jr $ra */ + /* 0xBFC42A9C: 00000000 nop */ + /* nop */ + return; +} + void func_1FC02324(CPUState* cpu) { psx_unknown_dispatch(cpu, 0xBFC02324u, 0x1FC02324u); } +void func_1FC336F0(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC336F0u, 0x1FC336F0u); +} + +void func_1FC33C98(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33C98u, 0x1FC33C98u); +} + void func_1FC33CC0(CPUState* cpu) { psx_unknown_dispatch(cpu, 0xBFC33CC0u, 0x1FC33CC0u); } +void func_1FC33F00(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33F00u, 0x1FC33F00u); +} + +void func_1FC33F20(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33F20u, 0x1FC33F20u); +} + +void func_1FC33FB4(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33FB4u, 0x1FC33FB4u); +} + +void func_1FC33FCC(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33FCCu, 0x1FC33FCCu); +} + +void func_1FC33FD8(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33FD8u, 0x1FC33FD8u); +} + +void func_1FC33FE4(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC33FE4u, 0x1FC33FE4u); +} + +void func_1FC35AD8(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC35AD8u, 0x1FC35AD8u); +} + +void func_1FC35B08(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC35B08u, 0x1FC35B08u); +} + +void func_1FC35B38(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC35B38u, 0x1FC35B38u); +} + +void func_1FC35B68(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC35B68u, 0x1FC35B68u); +} + +void func_1FC36068(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC36068u, 0x1FC36068u); +} + +void func_1FC362D0(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC362D0u, 0x1FC362D0u); +} + +void func_1FC36740(CPUState* cpu) { + psx_unknown_dispatch(cpu, 0xBFC36740u, 0x1FC36740u); +} + diff --git a/generated/discovery_run.log.json b/generated/discovery_run.log.json index cb57955a..274b95d6 100644 --- a/generated/discovery_run.log.json +++ b/generated/discovery_run.log.json @@ -2,77 +2,971 @@ "schema": "psxrecomp-v4 phase1c discovery_run v1", "seeds": [ {"address": "0xBFC00000", "label": "reset_vector"}, - {"address": "0xBFC00180", "label": "general_exception_bev1"} + {"address": "0xBFC00180", "label": "general_exception_bev1"}, + {"address": "0xBFC00420", "label": "ghidra_BFC00420"}, + {"address": "0xBFC00678", "label": "ghidra_BFC00678"}, + {"address": "0xBFC006A8", "label": "ghidra_BFC006A8"}, + {"address": "0xBFC006D8", "label": "ghidra_BFC006D8"}, + {"address": "0xBFC00778", "label": "ghidra_BFC00778"}, + {"address": "0xBFC00810", "label": "ghidra_BFC00810"}, + {"address": "0xBFC008A0", "label": "ghidra_BFC008A0"}, + {"address": "0xBFC00944", "label": "ghidra_BFC00944"}, + {"address": "0xBFC00B7C", "label": "ghidra_BFC00B7C"}, + {"address": "0xBFC00DA0", "label": "ghidra_BFC00DA0"}, + {"address": "0xBFC018E0", "label": "ghidra_BFC018E0"}, + {"address": "0xBFC01920", "label": "ghidra_BFC01920"}, + {"address": "0xBFC01A60", "label": "ghidra_BFC01A60"}, + {"address": "0xBFC01A90", "label": "ghidra_BFC01A90"}, + {"address": "0xBFC01ACC", "label": "ghidra_BFC01ACC"}, + {"address": "0xBFC01B80", "label": "ghidra_BFC01B80"}, + {"address": "0xBFC01C8C", "label": "ghidra_BFC01C8C"}, + {"address": "0xBFC01E24", "label": "SysInitMemory"}, + {"address": "0xBFC01E5C", "label": "ghidra_BFC01E5C"}, + {"address": "0xBFC020F0", "label": "ghidra_BFC020F0"}, + {"address": "0xBFC02104", "label": "ghidra_BFC02104"}, + {"address": "0xBFC02240", "label": "ghidra_BFC02240"}, + {"address": "0xBFC0227C", "label": "ghidra_BFC0227C"}, + {"address": "0xBFC022C0", "label": "ghidra_BFC022C0"}, + {"address": "0xBFC02324", "label": "ghidra_BFC02324"}, + {"address": "0xBFC02590", "label": "ghidra_BFC02590"}, + {"address": "0xBFC025B0", "label": "ghidra_BFC025B0"}, + {"address": "0xBFC02738", "label": "ghidra_BFC02738"}, + {"address": "0xBFC02950", "label": "ghidra_BFC02950"}, + {"address": "0xBFC02AF0", "label": "ghidra_BFC02AF0"}, + {"address": "0xBFC02B10", "label": "ghidra_BFC02B10"}, + {"address": "0xBFC02B50", "label": "ghidra_BFC02B50"}, + {"address": "0xBFC02CC0", "label": "ghidra_BFC02CC0"}, + {"address": "0xBFC02D20", "label": "ghidra_BFC02D20"}, + {"address": "0xBFC02DAC", "label": "ghidra_BFC02DAC"}, + {"address": "0xBFC02EA0", "label": "ghidra_BFC02EA0"}, + {"address": "0xBFC02EDC", "label": "ghidra_BFC02EDC"}, + {"address": "0xBFC02F20", "label": "ghidra_BFC02F20"}, + {"address": "0xBFC03098", "label": "ghidra_BFC03098"}, + {"address": "0xBFC03104", "label": "ghidra_BFC03104"}, + {"address": "0xBFC03190", "label": "ghidra_BFC03190"}, + {"address": "0xBFC03288", "label": "ghidra_BFC03288"}, + {"address": "0xBFC03310", "label": "ghidra_BFC03310"}, + {"address": "0xBFC033C8", "label": "ghidra_BFC033C8"}, + {"address": "0xBFC03418", "label": "ghidra_BFC03418"}, + {"address": "0xBFC03494", "label": "ghidra_BFC03494"}, + {"address": "0xBFC03764", "label": "ghidra_BFC03764"}, + {"address": "0xBFC03910", "label": "ghidra_BFC03910"}, + {"address": "0xBFC03968", "label": "ghidra_BFC03968"}, + {"address": "0xBFC03978", "label": "ghidra_BFC03978"}, + {"address": "0xBFC03990", "label": "ghidra_BFC03990"}, + {"address": "0xBFC039B0", "label": "ghidra_BFC039B0"}, + {"address": "0xBFC03A18", "label": "ghidra_BFC03A18"}, + {"address": "0xBFC03AA4", "label": "ghidra_BFC03AA4"}, + {"address": "0xBFC03C90", "label": "ghidra_BFC03C90"}, + {"address": "0xBFC03CF0", "label": "ghidra_BFC03CF0"}, + {"address": "0xBFC03D80", "label": "ghidra_BFC03D80"}, + {"address": "0xBFC03EA0", "label": "ghidra_BFC03EA0"}, + {"address": "0xBFC03F8C", "label": "ghidra_BFC03F8C"}, + {"address": "0xBFC03FAC", "label": "ghidra_BFC03FAC"}, + {"address": "0xBFC03FE0", "label": "ghidra_BFC03FE0"}, + {"address": "0xBFC0403C", "label": "ghidra_BFC0403C"}, + {"address": "0xBFC040EC", "label": "ghidra_BFC040EC"}, + {"address": "0xBFC04138", "label": "ghidra_BFC04138"}, + {"address": "0xBFC04260", "label": "ghidra_BFC04260"}, + {"address": "0xBFC042A0", "label": "ghidra_BFC042A0"}, + {"address": "0xBFC042D0", "label": "ghidra_BFC042D0"}, + {"address": "0xBFC04610", "label": "ghidra_BFC04610"}, + {"address": "0xBFC04678", "label": "ghidra_BFC04678"}, + {"address": "0xBFC0472C", "label": "ghidra_BFC0472C"}, + {"address": "0xBFC048D0", "label": "ghidra_BFC048D0"}, + {"address": "0xBFC04ABC", "label": "ghidra_BFC04ABC"}, + {"address": "0xBFC04BC4", "label": "ghidra_BFC04BC4"}, + {"address": "0xBFC04C38", "label": "ghidra_BFC04C38"}, + {"address": "0xBFC04D50", "label": "ghidra_BFC04D50"}, + {"address": "0xBFC04DEC", "label": "ghidra_BFC04DEC"}, + {"address": "0xBFC04FBC", "label": "ghidra_BFC04FBC"}, + {"address": "0xBFC0506C", "label": "ghidra_BFC0506C"}, + {"address": "0xBFC050A4", "label": "ghidra_BFC050A4"}, + {"address": "0xBFC050FC", "label": "ghidra_BFC050FC"}, + {"address": "0xBFC05120", "label": "ghidra_BFC05120"}, + {"address": "0xBFC05194", "label": "ghidra_BFC05194"}, + {"address": "0xBFC05558", "label": "ghidra_BFC05558"}, + {"address": "0xBFC057B0", "label": "ghidra_BFC057B0"}, + {"address": "0xBFC0593C", "label": "ghidra_BFC0593C"}, + {"address": "0xBFC05A44", "label": "ghidra_BFC05A44"}, + {"address": "0xBFC05C18", "label": "ghidra_BFC05C18"}, + {"address": "0xBFC05C50", "label": "ghidra_BFC05C50"}, + {"address": "0xBFC05D04", "label": "ghidra_BFC05D04"}, + {"address": "0xBFC05DB0", "label": "ghidra_BFC05DB0"}, + {"address": "0xBFC05DF4", "label": "ghidra_BFC05DF4"}, + {"address": "0xBFC05E58", "label": "ghidra_BFC05E58"}, + {"address": "0xBFC05F08", "label": "ghidra_BFC05F08"}, + {"address": "0xBFC06010", "label": "ghidra_BFC06010"}, + {"address": "0xBFC06038", "label": "ghidra_BFC06038"}, + {"address": "0xBFC060DC", "label": "ghidra_BFC060DC"}, + {"address": "0xBFC0615C", "label": "ghidra_BFC0615C"}, + {"address": "0xBFC061A0", "label": "ghidra_BFC061A0"}, + {"address": "0xBFC061D4", "label": "ghidra_BFC061D4"}, + {"address": "0xBFC06218", "label": "ghidra_BFC06218"}, + {"address": "0xBFC06288", "label": "ghidra_BFC06288"}, + {"address": "0xBFC062CC", "label": "ghidra_BFC062CC"}, + {"address": "0xBFC063CC", "label": "ghidra_BFC063CC"}, + {"address": "0xBFC064D8", "label": "ghidra_BFC064D8"}, + {"address": "0xBFC06548", "label": "ghidra_BFC06548"}, + {"address": "0xBFC065C0", "label": "ghidra_BFC065C0"}, + {"address": "0xBFC0661C", "label": "ghidra_BFC0661C"}, + {"address": "0xBFC06680", "label": "ghidra_BFC06680"}, + {"address": "0xBFC06700", "label": "ghidra_BFC06700"}, + {"address": "0xBFC06784", "label": "ghidra_BFC06784"}, + {"address": "0xBFC067E8", "label": "ghidra_BFC067E8"}, + {"address": "0xBFC06CA4", "label": "ghidra_BFC06CA4"}, + {"address": "0xBFC06EC4", "label": "ghidra_BFC06EC4"}, + {"address": "0xBFC06F28", "label": "ghidra_BFC06F28"}, + {"address": "0xBFC06FA4", "label": "ghidra_BFC06FA4"}, + {"address": "0xBFC06FF0", "label": "ghidra_BFC06FF0"}, + {"address": "0xBFC0703C", "label": "ghidra_BFC0703C"}, + {"address": "0xBFC070AC", "label": "ghidra_BFC070AC"}, + {"address": "0xBFC0711C", "label": "ghidra_BFC0711C"}, + {"address": "0xBFC07148", "label": "ghidra_BFC07148"}, + {"address": "0xBFC071A0", "label": "ghidra_BFC071A0"}, + {"address": "0xBFC072B8", "label": "ghidra_BFC072B8"}, + {"address": "0xBFC07330", "label": "ghidra_BFC07330"}, + {"address": "0xBFC07370", "label": "ghidra_BFC07370"}, + {"address": "0xBFC073A0", "label": "ghidra_BFC073A0"}, + {"address": "0xBFC07410", "label": "ghidra_BFC07410"}, + {"address": "0xBFC07664", "label": "ghidra_BFC07664"}, + {"address": "0xBFC07700", "label": "ghidra_BFC07700"}, + {"address": "0xBFC078A4", "label": "ghidra_BFC078A4"}, + {"address": "0xBFC07A04", "label": "ghidra_BFC07A04"}, + {"address": "0xBFC07B88", "label": "ghidra_BFC07B88"}, + {"address": "0xBFC07C1C", "label": "ghidra_BFC07C1C"}, + {"address": "0xBFC07F28", "label": "ghidra_BFC07F28"}, + {"address": "0xBFC08020", "label": "ghidra_BFC08020"}, + {"address": "0xBFC08098", "label": "ghidra_BFC08098"}, + {"address": "0xBFC081FC", "label": "ghidra_BFC081FC"}, + {"address": "0xBFC08354", "label": "ghidra_BFC08354"}, + {"address": "0xBFC083CC", "label": "ghidra_BFC083CC"}, + {"address": "0xBFC085B0", "label": "ghidra_BFC085B0"}, + {"address": "0xBFC085D4", "label": "ghidra_BFC085D4"}, + {"address": "0xBFC086B0", "label": "ghidra_BFC086B0"}, + {"address": "0xBFC086EC", "label": "ghidra_BFC086EC"}, + {"address": "0xBFC08720", "label": "ghidra_BFC08720"}, + {"address": "0xBFC087C4", "label": "ghidra_BFC087C4"}, + {"address": "0xBFC0884C", "label": "ghidra_BFC0884C"}, + {"address": "0xBFC088A0", "label": "ghidra_BFC088A0"}, + {"address": "0xBFC0895C", "label": "ghidra_BFC0895C"}, + {"address": "0xBFC089C0", "label": "ghidra_BFC089C0"}, + {"address": "0xBFC08B3C", "label": "ghidra_BFC08B3C"}, + {"address": "0xBFC08FFC", "label": "ghidra_BFC08FFC"}, + {"address": "0xBFC09144", "label": "ghidra_BFC09144"}, + {"address": "0xBFC091CC", "label": "ghidra_BFC091CC"}, + {"address": "0xBFC092EC", "label": "ghidra_BFC092EC"}, + {"address": "0xBFC09540", "label": "ghidra_BFC09540"}, + {"address": "0xBFC09598", "label": "ghidra_BFC09598"}, + {"address": "0xBFC09720", "label": "ghidra_BFC09720"}, + {"address": "0xBFC098A8", "label": "ghidra_BFC098A8"}, + {"address": "0xBFC09914", "label": "ghidra_BFC09914"}, + {"address": "0xBFC0994C", "label": "ghidra_BFC0994C"}, + {"address": "0xBFC0996C", "label": "ghidra_BFC0996C"}, + {"address": "0xBFC09CDC", "label": "ghidra_BFC09CDC"}, + {"address": "0xBFC09D3C", "label": "ghidra_BFC09D3C"}, + {"address": "0xBFC0A080", "label": "ghidra_BFC0A080"}, + {"address": "0xBFC0A3D4", "label": "ghidra_BFC0A3D4"}, + {"address": "0xBFC0A43C", "label": "ghidra_BFC0A43C"}, + {"address": "0xBFC0A4B4", "label": "ghidra_BFC0A4B4"}, + {"address": "0xBFC0A5E4", "label": "ghidra_BFC0A5E4"}, + {"address": "0xBFC0A754", "label": "ghidra_BFC0A754"}, + {"address": "0xBFC0A8BC", "label": "ghidra_BFC0A8BC"}, + {"address": "0xBFC0AB60", "label": "ghidra_BFC0AB60"}, + {"address": "0xBFC0AD08", "label": "ghidra_BFC0AD08"}, + {"address": "0xBFC0B0D0", "label": "ghidra_BFC0B0D0"}, + {"address": "0xBFC0B170", "label": "ghidra_BFC0B170"}, + {"address": "0xBFC0B394", "label": "ghidra_BFC0B394"}, + {"address": "0xBFC0B54C", "label": "ghidra_BFC0B54C"}, + {"address": "0xBFC0B5A0", "label": "ghidra_BFC0B5A0"}, + {"address": "0xBFC0B5F4", "label": "ghidra_BFC0B5F4"}, + {"address": "0xBFC0B648", "label": "ghidra_BFC0B648"}, + {"address": "0xBFC0BFF0", "label": "ghidra_BFC0BFF0"}, + {"address": "0xBFC0C048", "label": "ghidra_BFC0C048"}, + {"address": "0xBFC0C0DC", "label": "ghidra_BFC0C0DC"}, + {"address": "0xBFC0C140", "label": "ghidra_BFC0C140"}, + {"address": "0xBFC0C1FC", "label": "ghidra_BFC0C1FC"}, + {"address": "0xBFC0C220", "label": "ghidra_BFC0C220"}, + {"address": "0xBFC0C248", "label": "ghidra_BFC0C248"}, + {"address": "0xBFC0C270", "label": "ghidra_BFC0C270"}, + {"address": "0xBFC0C298", "label": "ghidra_BFC0C298"}, + {"address": "0xBFC0C2C0", "label": "ghidra_BFC0C2C0"}, + {"address": "0xBFC0C2E8", "label": "ghidra_BFC0C2E8"}, + {"address": "0xBFC0C318", "label": "ghidra_BFC0C318"}, + {"address": "0xBFC0C354", "label": "ghidra_BFC0C354"}, + {"address": "0xBFC0C580", "label": "ghidra_BFC0C580"}, + {"address": "0xBFC0C720", "label": "ghidra_BFC0C720"}, + {"address": "0xBFC0C830", "label": "ghidra_BFC0C830"}, + {"address": "0xBFC0C890", "label": "ghidra_BFC0C890"}, + {"address": "0xBFC0C9CC", "label": "ghidra_BFC0C9CC"}, + {"address": "0xBFC0CAB4", "label": "ghidra_BFC0CAB4"}, + {"address": "0xBFC0CC68", "label": "ghidra_BFC0CC68"}, + {"address": "0xBFC0CD80", "label": "ghidra_BFC0CD80"}, + {"address": "0xBFC0CF84", "label": "ghidra_BFC0CF84"}, + {"address": "0xBFC0D0CC", "label": "ghidra_BFC0D0CC"}, + {"address": "0xBFC0D11C", "label": "ghidra_BFC0D11C"}, + {"address": "0xBFC0D34C", "label": "ghidra_BFC0D34C"}, + {"address": "0xBFC0D4CC", "label": "ghidra_BFC0D4CC"}, + {"address": "0xBFC0D570", "label": "ghidra_BFC0D570"}, + {"address": "0xBFC0D600", "label": "ghidra_BFC0D600"}, + {"address": "0xBFC0D640", "label": "ghidra_BFC0D640"}, + {"address": "0xBFC0D664", "label": "ghidra_BFC0D664"}, + {"address": "0xBFC0D688", "label": "ghidra_BFC0D688"}, + {"address": "0xBFC0D72C", "label": "ghidra_BFC0D72C"}, + {"address": "0xBFC0D7BC", "label": "ghidra_BFC0D7BC"}, + {"address": "0xBFC0D850", "label": "ghidra_BFC0D850"}, + {"address": "0xBFC0D880", "label": "ghidra_BFC0D880"}, + {"address": "0xBFC0D890", "label": "ghidra_BFC0D890"}, + {"address": "0xBFC0D8A0", "label": "ghidra_BFC0D8A0"}, + {"address": "0xBFC0D8B0", "label": "ghidra_BFC0D8B0"}, + {"address": "0xBFC0D8C0", "label": "ghidra_BFC0D8C0"}, + {"address": "0xBFC0D8D0", "label": "ghidra_BFC0D8D0"}, + {"address": "0xBFC0D950", "label": "ghidra_BFC0D950"}, + {"address": "0xBFC0D960", "label": "ghidra_BFC0D960"}, + {"address": "0xBFC0D970", "label": "ghidra_BFC0D970"}, + {"address": "0xBFC0D980", "label": "ghidra_BFC0D980"}, + {"address": "0xBFC0D990", "label": "ghidra_BFC0D990"}, + {"address": "0xBFC0D9A0", "label": "ghidra_BFC0D9A0"}, + {"address": "0xBFC0D9B0", "label": "ghidra_BFC0D9B0"}, + {"address": "0xBFC0D9C0", "label": "ghidra_BFC0D9C0"}, + {"address": "0xBFC0D9D0", "label": "ghidra_BFC0D9D0"}, + {"address": "0xBFC0D9E0", "label": "ghidra_BFC0D9E0"}, + {"address": "0xBFC0D9F0", "label": "ghidra_BFC0D9F0"}, + {"address": "0xBFC0DA00", "label": "ghidra_BFC0DA00"}, + {"address": "0xBFC0DA10", "label": "ghidra_BFC0DA10"}, + {"address": "0xBFC0DA20", "label": "ghidra_BFC0DA20"}, + {"address": "0xBFC0DA30", "label": "ghidra_BFC0DA30"}, + {"address": "0xBFC0DA40", "label": "ghidra_BFC0DA40"}, + {"address": "0xBFC0DA50", "label": "ghidra_BFC0DA50"}, + {"address": "0xBFC0DA60", "label": "ghidra_BFC0DA60"}, + {"address": "0xBFC0DAA0", "label": "ghidra_BFC0DAA0"}, + {"address": "0xBFC0DAB0", "label": "ghidra_BFC0DAB0"}, + {"address": "0xBFC0DAC0", "label": "ghidra_BFC0DAC0"}, + {"address": "0xBFC0DAD0", "label": "ghidra_BFC0DAD0"}, + {"address": "0xBFC0DAE0", "label": "ghidra_BFC0DAE0"}, + {"address": "0xBFC0DAF0", "label": "ghidra_BFC0DAF0"}, + {"address": "0xBFC0DB00", "label": "ghidra_BFC0DB00"}, + {"address": "0xBFC0DB10", "label": "ghidra_BFC0DB10"}, + {"address": "0xBFC0DB20", "label": "ghidra_BFC0DB20"}, + {"address": "0xBFC0DB30", "label": "ghidra_BFC0DB30"}, + {"address": "0xBFC0DB40", "label": "ghidra_BFC0DB40"}, + {"address": "0xBFC0DB50", "label": "ghidra_BFC0DB50"}, + {"address": "0xBFC0DB60", "label": "ghidra_BFC0DB60"}, + {"address": "0xBFC0DB70", "label": "ghidra_BFC0DB70"}, + {"address": "0xBFC0DB80", "label": "ghidra_BFC0DB80"}, + {"address": "0xBFC0DB90", "label": "ghidra_BFC0DB90"}, + {"address": "0xBFC0DBA0", "label": "ghidra_BFC0DBA0"}, + {"address": "0xBFC0DBB0", "label": "ghidra_BFC0DBB0"}, + {"address": "0xBFC0DBC0", "label": "ghidra_BFC0DBC0"}, + {"address": "0xBFC0DBD0", "label": "ghidra_BFC0DBD0"}, + {"address": "0xBFC0DBE0", "label": "ghidra_BFC0DBE0"}, + {"address": "0xBFC0DBF0", "label": "ghidra_BFC0DBF0"}, + {"address": "0xBFC0DC00", "label": "ghidra_BFC0DC00"}, + {"address": "0xBFC0DC10", "label": "ghidra_BFC0DC10"}, + {"address": "0xBFC0DC20", "label": "ghidra_BFC0DC20"}, + {"address": "0xBFC0DC30", "label": "ghidra_BFC0DC30"}, + {"address": "0xBFC0DC40", "label": "ghidra_BFC0DC40"}, + {"address": "0xBFC0DC50", "label": "ghidra_BFC0DC50"}, + {"address": "0xBFC10C74", "label": "ghidra_BFC10C74"}, + {"address": "0xBFC11008", "label": "ghidra_BFC11008"}, + {"address": "0xBFC11294", "label": "ghidra_BFC11294"}, + {"address": "0xBFC112F4", "label": "ghidra_BFC112F4"}, + {"address": "0xBFC11358", "label": "ghidra_BFC11358"}, + {"address": "0xBFC113BC", "label": "ghidra_BFC113BC"}, + {"address": "0xBFC11420", "label": "ghidra_BFC11420"}, + {"address": "0xBFC11458", "label": "ghidra_BFC11458"}, + {"address": "0xBFC11490", "label": "ghidra_BFC11490"}, + {"address": "0xBFC114C8", "label": "ghidra_BFC114C8"}, + {"address": "0xBFC11500", "label": "ghidra_BFC11500"}, + {"address": "0xBFC11620", "label": "ghidra_BFC11620"}, + {"address": "0xBFC1188C", "label": "ghidra_BFC1188C"}, + {"address": "0xBFC11B18", "label": "ghidra_BFC11B18"}, + {"address": "0xBFC11C8C", "label": "ghidra_BFC11C8C"}, + {"address": "0xBFC11F58", "label": "ghidra_BFC11F58"}, + {"address": "0xBFC122C0", "label": "ghidra_BFC122C0"}, + {"address": "0xBFC12370", "label": "ghidra_BFC12370"}, + {"address": "0xBFC12408", "label": "ghidra_BFC12408"}, + {"address": "0xBFC12458", "label": "ghidra_BFC12458"}, + {"address": "0xBFC12564", "label": "ghidra_BFC12564"}, + {"address": "0xBFC12628", "label": "ghidra_BFC12628"}, + {"address": "0xBFC12794", "label": "ghidra_BFC12794"}, + {"address": "0xBFC12900", "label": "ghidra_BFC12900"}, + {"address": "0xBFC12998", "label": "ghidra_BFC12998"}, + {"address": "0xBFC129FC", "label": "ghidra_BFC129FC"}, + {"address": "0xBFC12AC8", "label": "ghidra_BFC12AC8"}, + {"address": "0xBFC12B00", "label": "ghidra_BFC12B00"}, + {"address": "0xBFC12B60", "label": "ghidra_BFC12B60"}, + {"address": "0xBFC12C08", "label": "ghidra_BFC12C08"}, + {"address": "0xBFC12CE8", "label": "ghidra_BFC12CE8"}, + {"address": "0xBFC12F6C", "label": "ghidra_BFC12F6C"}, + {"address": "0xBFC12FB4", "label": "ghidra_BFC12FB4"}, + {"address": "0xBFC13070", "label": "ghidra_BFC13070"}, + {"address": "0xBFC130AC", "label": "ghidra_BFC130AC"}, + {"address": "0xBFC13178", "label": "ghidra_BFC13178"}, + {"address": "0xBFC13244", "label": "ghidra_BFC13244"}, + {"address": "0xBFC13310", "label": "ghidra_BFC13310"}, + {"address": "0xBFC133D8", "label": "ghidra_BFC133D8"}, + {"address": "0xBFC134A4", "label": "ghidra_BFC134A4"}, + {"address": "0xBFC135AC", "label": "ghidra_BFC135AC"}, + {"address": "0xBFC137E0", "label": "ghidra_BFC137E0"}, + {"address": "0xBFC13980", "label": "ghidra_BFC13980"}, + {"address": "0xBFC13AF0", "label": "ghidra_BFC13AF0"}, + {"address": "0xBFC13B24", "label": "ghidra_BFC13B24"}, + {"address": "0xBFC13B6C", "label": "ghidra_BFC13B6C"}, + {"address": "0xBFC13C34", "label": "ghidra_BFC13C34"}, + {"address": "0xBFC13C64", "label": "ghidra_BFC13C64"}, + {"address": "0xBFC13E04", "label": "ghidra_BFC13E04"}, + {"address": "0xBFC13E60", "label": "ghidra_BFC13E60"}, + {"address": "0xBFC13EE8", "label": "ghidra_BFC13EE8"}, + {"address": "0xBFC13F98", "label": "ghidra_BFC13F98"}, + {"address": "0xBFC144BC", "label": "ghidra_BFC144BC"}, + {"address": "0xBFC145C8", "label": "ghidra_BFC145C8"}, + {"address": "0xBFC14690", "label": "ghidra_BFC14690"}, + {"address": "0xBFC14710", "label": "ghidra_BFC14710"}, + {"address": "0xBFC14770", "label": "ghidra_BFC14770"}, + {"address": "0xBFC147F4", "label": "ghidra_BFC147F4"}, + {"address": "0xBFC14A90", "label": "ghidra_BFC14A90"}, + {"address": "0xBFC14B00", "label": "ghidra_BFC14B00"}, + {"address": "0xBFC14CF4", "label": "ghidra_BFC14CF4"}, + {"address": "0xBFC158A8", "label": "ghidra_BFC158A8"}, + {"address": "0xBFC15B9C", "label": "ghidra_BFC15B9C"}, + {"address": "0xBFC16170", "label": "ghidra_BFC16170"}, + {"address": "0xBFC18254", "label": "ghidra_BFC18254"}, + {"address": "0xBFC18684", "label": "ghidra_BFC18684"}, + {"address": "0xBFC18798", "label": "ghidra_BFC18798"}, + {"address": "0xBFC188F0", "label": "ghidra_BFC188F0"}, + {"address": "0xBFC18990", "label": "ghidra_BFC18990"}, + {"address": "0xBFC18D10", "label": "ghidra_BFC18D10"}, + {"address": "0xBFC192E4", "label": "ghidra_BFC192E4"}, + {"address": "0xBFC193C0", "label": "ghidra_BFC193C0"}, + {"address": "0xBFC1952C", "label": "ghidra_BFC1952C"}, + {"address": "0xBFC19630", "label": "ghidra_BFC19630"}, + {"address": "0xBFC196D4", "label": "ghidra_BFC196D4"}, + {"address": "0xBFC19A58", "label": "ghidra_BFC19A58"}, + {"address": "0xBFC19DF4", "label": "ghidra_BFC19DF4"}, + {"address": "0xBFC1A15C", "label": "ghidra_BFC1A15C"}, + {"address": "0xBFC1A17C", "label": "ghidra_BFC1A17C"}, + {"address": "0xBFC1A19C", "label": "ghidra_BFC1A19C"}, + {"address": "0xBFC1A430", "label": "ghidra_BFC1A430"}, + {"address": "0xBFC1A5B0", "label": "ghidra_BFC1A5B0"}, + {"address": "0xBFC1A6EC", "label": "ghidra_BFC1A6EC"}, + {"address": "0xBFC1AA90", "label": "ghidra_BFC1AA90"}, + {"address": "0xBFC1AC68", "label": "ghidra_BFC1AC68"}, + {"address": "0xBFC1AE68", "label": "ghidra_BFC1AE68"}, + {"address": "0xBFC1B7E0", "label": "ghidra_BFC1B7E0"}, + {"address": "0xBFC1BD68", "label": "ghidra_BFC1BD68"}, + {"address": "0xBFC1BEE0", "label": "ghidra_BFC1BEE0"}, + {"address": "0xBFC1BF44", "label": "ghidra_BFC1BF44"}, + {"address": "0xBFC1C130", "label": "ghidra_BFC1C130"}, + {"address": "0xBFC1C4C0", "label": "ghidra_BFC1C4C0"}, + {"address": "0xBFC1C78C", "label": "ghidra_BFC1C78C"}, + {"address": "0xBFC1C8EC", "label": "ghidra_BFC1C8EC"}, + {"address": "0xBFC1C9B4", "label": "ghidra_BFC1C9B4"}, + {"address": "0xBFC1CAF0", "label": "ghidra_BFC1CAF0"}, + {"address": "0xBFC1CBAC", "label": "ghidra_BFC1CBAC"}, + {"address": "0xBFC1CDD8", "label": "ghidra_BFC1CDD8"}, + {"address": "0xBFC1DBF4", "label": "ghidra_BFC1DBF4"}, + {"address": "0xBFC1DDD8", "label": "ghidra_BFC1DDD8"}, + {"address": "0xBFC1DF50", "label": "ghidra_BFC1DF50"}, + {"address": "0xBFC1E0C4", "label": "ghidra_BFC1E0C4"}, + {"address": "0xBFC1E10C", "label": "ghidra_BFC1E10C"}, + {"address": "0xBFC1E3CC", "label": "ghidra_BFC1E3CC"}, + {"address": "0xBFC1F6AC", "label": "ghidra_BFC1F6AC"}, + {"address": "0xBFC1F980", "label": "ghidra_BFC1F980"}, + {"address": "0xBFC1FFA8", "label": "ghidra_BFC1FFA8"}, + {"address": "0xBFC20338", "label": "ghidra_BFC20338"}, + {"address": "0xBFC2069C", "label": "ghidra_BFC2069C"}, + {"address": "0xBFC20BE4", "label": "ghidra_BFC20BE4"}, + {"address": "0xBFC20C64", "label": "ghidra_BFC20C64"}, + {"address": "0xBFC20CE4", "label": "ghidra_BFC20CE4"}, + {"address": "0xBFC20D4C", "label": "ghidra_BFC20D4C"}, + {"address": "0xBFC20DB4", "label": "ghidra_BFC20DB4"}, + {"address": "0xBFC20E10", "label": "ghidra_BFC20E10"}, + {"address": "0xBFC20E6C", "label": "ghidra_BFC20E6C"}, + {"address": "0xBFC20EC8", "label": "ghidra_BFC20EC8"}, + {"address": "0xBFC20F24", "label": "ghidra_BFC20F24"}, + {"address": "0xBFC20F8C", "label": "ghidra_BFC20F8C"}, + {"address": "0xBFC20FE8", "label": "ghidra_BFC20FE8"}, + {"address": "0xBFC21044", "label": "ghidra_BFC21044"}, + {"address": "0xBFC210C0", "label": "ghidra_BFC210C0"}, + {"address": "0xBFC21128", "label": "ghidra_BFC21128"}, + {"address": "0xBFC21184", "label": "ghidra_BFC21184"}, + {"address": "0xBFC21200", "label": "ghidra_BFC21200"}, + {"address": "0xBFC2125C", "label": "ghidra_BFC2125C"}, + {"address": "0xBFC212C4", "label": "ghidra_BFC212C4"}, + {"address": "0xBFC21320", "label": "ghidra_BFC21320"}, + {"address": "0xBFC213A4", "label": "ghidra_BFC213A4"}, + {"address": "0xBFC213FC", "label": "ghidra_BFC213FC"}, + {"address": "0xBFC214B0", "label": "ghidra_BFC214B0"}, + {"address": "0xBFC218CC", "label": "ghidra_BFC218CC"}, + {"address": "0xBFC2193C", "label": "ghidra_BFC2193C"}, + {"address": "0xBFC21A9C", "label": "ghidra_BFC21A9C"}, + {"address": "0xBFC22164", "label": "ghidra_BFC22164"}, + {"address": "0xBFC226D0", "label": "ghidra_BFC226D0"}, + {"address": "0xBFC228D8", "label": "ghidra_BFC228D8"}, + {"address": "0xBFC22B80", "label": "ghidra_BFC22B80"}, + {"address": "0xBFC22E1C", "label": "ghidra_BFC22E1C"}, + {"address": "0xBFC22E90", "label": "ghidra_BFC22E90"}, + {"address": "0xBFC23078", "label": "ghidra_BFC23078"}, + {"address": "0xBFC230C4", "label": "ghidra_BFC230C4"}, + {"address": "0xBFC2311C", "label": "ghidra_BFC2311C"}, + {"address": "0xBFC232DC", "label": "ghidra_BFC232DC"}, + {"address": "0xBFC23500", "label": "ghidra_BFC23500"}, + {"address": "0xBFC23524", "label": "ghidra_BFC23524"}, + {"address": "0xBFC23D3C", "label": "ghidra_BFC23D3C"}, + {"address": "0xBFC24288", "label": "ghidra_BFC24288"}, + {"address": "0xBFC24418", "label": "ghidra_BFC24418"}, + {"address": "0xBFC24640", "label": "ghidra_BFC24640"}, + {"address": "0xBFC24A48", "label": "ghidra_BFC24A48"}, + {"address": "0xBFC24F00", "label": "ghidra_BFC24F00"}, + {"address": "0xBFC251A8", "label": "ghidra_BFC251A8"}, + {"address": "0xBFC25200", "label": "ghidra_BFC25200"}, + {"address": "0xBFC252BC", "label": "ghidra_BFC252BC"}, + {"address": "0xBFC2531C", "label": "ghidra_BFC2531C"}, + {"address": "0xBFC25390", "label": "ghidra_BFC25390"}, + {"address": "0xBFC254B0", "label": "ghidra_BFC254B0"}, + {"address": "0xBFC25558", "label": "ghidra_BFC25558"}, + {"address": "0xBFC25754", "label": "ghidra_BFC25754"}, + {"address": "0xBFC25B74", "label": "ghidra_BFC25B74"}, + {"address": "0xBFC25CC0", "label": "ghidra_BFC25CC0"}, + {"address": "0xBFC25D8C", "label": "ghidra_BFC25D8C"}, + {"address": "0xBFC25E8C", "label": "ghidra_BFC25E8C"}, + {"address": "0xBFC25EF8", "label": "ghidra_BFC25EF8"}, + {"address": "0xBFC2632C", "label": "ghidra_BFC2632C"}, + {"address": "0xBFC2644C", "label": "ghidra_BFC2644C"}, + {"address": "0xBFC264A0", "label": "ghidra_BFC264A0"}, + {"address": "0xBFC26550", "label": "ghidra_BFC26550"}, + {"address": "0xBFC265C0", "label": "ghidra_BFC265C0"}, + {"address": "0xBFC26610", "label": "ghidra_BFC26610"}, + {"address": "0xBFC26670", "label": "ghidra_BFC26670"}, + {"address": "0xBFC266B0", "label": "ghidra_BFC266B0"}, + {"address": "0xBFC268EC", "label": "ghidra_BFC268EC"}, + {"address": "0xBFC26C10", "label": "ghidra_BFC26C10"}, + {"address": "0xBFC26E64", "label": "ghidra_BFC26E64"}, + {"address": "0xBFC27190", "label": "ghidra_BFC27190"}, + {"address": "0xBFC273E4", "label": "ghidra_BFC273E4"}, + {"address": "0xBFC27868", "label": "ghidra_BFC27868"}, + {"address": "0xBFC27910", "label": "ghidra_BFC27910"}, + {"address": "0xBFC27A2C", "label": "ghidra_BFC27A2C"}, + {"address": "0xBFC27B24", "label": "ghidra_BFC27B24"}, + {"address": "0xBFC27BDC", "label": "ghidra_BFC27BDC"}, + {"address": "0xBFC27CC8", "label": "ghidra_BFC27CC8"}, + {"address": "0xBFC27DB0", "label": "ghidra_BFC27DB0"}, + {"address": "0xBFC27E68", "label": "ghidra_BFC27E68"}, + {"address": "0xBFC27E88", "label": "ghidra_BFC27E88"}, + {"address": "0xBFC27EB4", "label": "ghidra_BFC27EB4"}, + {"address": "0xBFC28064", "label": "ghidra_BFC28064"}, + {"address": "0xBFC28490", "label": "ghidra_BFC28490"}, + {"address": "0xBFC284F0", "label": "ghidra_BFC284F0"}, + {"address": "0xBFC2886C", "label": "ghidra_BFC2886C"}, + {"address": "0xBFC28B84", "label": "ghidra_BFC28B84"}, + {"address": "0xBFC29770", "label": "ghidra_BFC29770"}, + {"address": "0xBFC29AE0", "label": "ghidra_BFC29AE0"}, + {"address": "0xBFC29FE8", "label": "ghidra_BFC29FE8"}, + {"address": "0xBFC2A31C", "label": "ghidra_BFC2A31C"}, + {"address": "0xBFC2ACD0", "label": "ghidra_BFC2ACD0"}, + {"address": "0xBFC2BF1C", "label": "ghidra_BFC2BF1C"}, + {"address": "0xBFC2BF74", "label": "ghidra_BFC2BF74"}, + {"address": "0xBFC2C2F0", "label": "ghidra_BFC2C2F0"}, + {"address": "0xBFC2C3E0", "label": "ghidra_BFC2C3E0"}, + {"address": "0xBFC2CA9C", "label": "ghidra_BFC2CA9C"}, + {"address": "0xBFC2CAE0", "label": "ghidra_BFC2CAE0"}, + {"address": "0xBFC2CB24", "label": "ghidra_BFC2CB24"}, + {"address": "0xBFC2CB80", "label": "ghidra_BFC2CB80"}, + {"address": "0xBFC2CC10", "label": "ghidra_BFC2CC10"}, + {"address": "0xBFC2CCC4", "label": "ghidra_BFC2CCC4"}, + {"address": "0xBFC2CE08", "label": "ghidra_BFC2CE08"}, + {"address": "0xBFC2CF54", "label": "ghidra_BFC2CF54"}, + {"address": "0xBFC2D0E0", "label": "ghidra_BFC2D0E0"}, + {"address": "0xBFC2E44C", "label": "ghidra_BFC2E44C"}, + {"address": "0xBFC2E600", "label": "ghidra_BFC2E600"}, + {"address": "0xBFC2E65C", "label": "ghidra_BFC2E65C"}, + {"address": "0xBFC2ED1C", "label": "ghidra_BFC2ED1C"}, + {"address": "0xBFC2EE6C", "label": "ghidra_BFC2EE6C"}, + {"address": "0xBFC2EF40", "label": "ghidra_BFC2EF40"}, + {"address": "0xBFC2F210", "label": "ghidra_BFC2F210"}, + {"address": "0xBFC2F618", "label": "ghidra_BFC2F618"}, + {"address": "0xBFC2F65C", "label": "ghidra_BFC2F65C"}, + {"address": "0xBFC2F718", "label": "ghidra_BFC2F718"}, + {"address": "0xBFC2F808", "label": "ghidra_BFC2F808"}, + {"address": "0xBFC2F85C", "label": "ghidra_BFC2F85C"}, + {"address": "0xBFC2F8AC", "label": "ghidra_BFC2F8AC"}, + {"address": "0xBFC2FCC4", "label": "ghidra_BFC2FCC4"}, + {"address": "0xBFC2FE6C", "label": "ghidra_BFC2FE6C"}, + {"address": "0xBFC3010C", "label": "ghidra_BFC3010C"}, + {"address": "0xBFC3015C", "label": "ghidra_BFC3015C"}, + {"address": "0xBFC301AC", "label": "ghidra_BFC301AC"}, + {"address": "0xBFC3022C", "label": "ghidra_BFC3022C"}, + {"address": "0xBFC3029C", "label": "ghidra_BFC3029C"}, + {"address": "0xBFC302BC", "label": "ghidra_BFC302BC"}, + {"address": "0xBFC3031C", "label": "ghidra_BFC3031C"}, + {"address": "0xBFC30350", "label": "ghidra_BFC30350"}, + {"address": "0xBFC3079C", "label": "ghidra_BFC3079C"}, + {"address": "0xBFC30868", "label": "ghidra_BFC30868"}, + {"address": "0xBFC30960", "label": "ghidra_BFC30960"}, + {"address": "0xBFC30A80", "label": "ghidra_BFC30A80"}, + {"address": "0xBFC30DF0", "label": "ghidra_BFC30DF0"}, + {"address": "0xBFC31194", "label": "ghidra_BFC31194"}, + {"address": "0xBFC31380", "label": "ghidra_BFC31380"}, + {"address": "0xBFC313EC", "label": "ghidra_BFC313EC"}, + {"address": "0xBFC31448", "label": "ghidra_BFC31448"}, + {"address": "0xBFC31580", "label": "ghidra_BFC31580"}, + {"address": "0xBFC31638", "label": "ghidra_BFC31638"}, + {"address": "0xBFC317D0", "label": "ghidra_BFC317D0"}, + {"address": "0xBFC31968", "label": "ghidra_BFC31968"}, + {"address": "0xBFC31C64", "label": "ghidra_BFC31C64"}, + {"address": "0xBFC31D14", "label": "ghidra_BFC31D14"}, + {"address": "0xBFC31DC4", "label": "ghidra_BFC31DC4"}, + {"address": "0xBFC31E74", "label": "ghidra_BFC31E74"}, + {"address": "0xBFC322E4", "label": "ghidra_BFC322E4"}, + {"address": "0xBFC32410", "label": "ghidra_BFC32410"}, + {"address": "0xBFC32450", "label": "ghidra_BFC32450"}, + {"address": "0xBFC3255C", "label": "ghidra_BFC3255C"}, + {"address": "0xBFC32724", "label": "ghidra_BFC32724"}, + {"address": "0xBFC32820", "label": "ghidra_BFC32820"}, + {"address": "0xBFC328F4", "label": "ghidra_BFC328F4"}, + {"address": "0xBFC329F0", "label": "ghidra_BFC329F0"}, + {"address": "0xBFC32CCC", "label": "ghidra_BFC32CCC"}, + {"address": "0xBFC33138", "label": "ghidra_BFC33138"}, + {"address": "0xBFC331A0", "label": "ghidra_BFC331A0"}, + {"address": "0xBFC33358", "label": "ghidra_BFC33358"}, + {"address": "0xBFC33400", "label": "ghidra_BFC33400"}, + {"address": "0xBFC34160", "label": "ghidra_BFC34160"}, + {"address": "0xBFC34304", "label": "ghidra_BFC34304"}, + {"address": "0xBFC344A4", "label": "ghidra_BFC344A4"}, + {"address": "0xBFC345F4", "label": "ghidra_BFC345F4"}, + {"address": "0xBFC34748", "label": "ghidra_BFC34748"}, + {"address": "0xBFC34898", "label": "ghidra_BFC34898"}, + {"address": "0xBFC34B58", "label": "ghidra_BFC34B58"}, + {"address": "0xBFC36CF0", "label": "ghidra_BFC36CF0"}, + {"address": "0xBFC36D1C", "label": "ghidra_BFC36D1C"}, + {"address": "0xBFC36EC0", "label": "ghidra_BFC36EC0"}, + {"address": "0xBFC36F90", "label": "ghidra_BFC36F90"}, + {"address": "0xBFC37028", "label": "ghidra_BFC37028"}, + {"address": "0xBFC37070", "label": "ghidra_BFC37070"}, + {"address": "0xBFC370A0", "label": "ghidra_BFC370A0"}, + {"address": "0xBFC370F4", "label": "ghidra_BFC370F4"}, + {"address": "0xBFC37130", "label": "ghidra_BFC37130"}, + {"address": "0xBFC3716C", "label": "ghidra_BFC3716C"}, + {"address": "0xBFC37334", "label": "ghidra_BFC37334"}, + {"address": "0xBFC37368", "label": "ghidra_BFC37368"}, + {"address": "0xBFC373E0", "label": "ghidra_BFC373E0"}, + {"address": "0xBFC37434", "label": "ghidra_BFC37434"}, + {"address": "0xBFC374BC", "label": "ghidra_BFC374BC"}, + {"address": "0xBFC374EC", "label": "ghidra_BFC374EC"}, + {"address": "0xBFC37838", "label": "ghidra_BFC37838"}, + {"address": "0xBFC37868", "label": "ghidra_BFC37868"}, + {"address": "0xBFC378B4", "label": "ghidra_BFC378B4"}, + {"address": "0xBFC37908", "label": "ghidra_BFC37908"}, + {"address": "0xBFC37998", "label": "ghidra_BFC37998"}, + {"address": "0xBFC37A4C", "label": "ghidra_BFC37A4C"}, + {"address": "0xBFC37AC4", "label": "ghidra_BFC37AC4"}, + {"address": "0xBFC38204", "label": "ghidra_BFC38204"}, + {"address": "0xBFC382E0", "label": "ghidra_BFC382E0"}, + {"address": "0xBFC38524", "label": "ghidra_BFC38524"}, + {"address": "0xBFC387D4", "label": "ghidra_BFC387D4"}, + {"address": "0xBFC38A7C", "label": "ghidra_BFC38A7C"}, + {"address": "0xBFC38BE8", "label": "ghidra_BFC38BE8"}, + {"address": "0xBFC38C68", "label": "ghidra_BFC38C68"}, + {"address": "0xBFC38DAC", "label": "ghidra_BFC38DAC"}, + {"address": "0xBFC39080", "label": "ghidra_BFC39080"}, + {"address": "0xBFC39410", "label": "ghidra_BFC39410"}, + {"address": "0xBFC394EC", "label": "ghidra_BFC394EC"}, + {"address": "0xBFC3954C", "label": "ghidra_BFC3954C"}, + {"address": "0xBFC39630", "label": "ghidra_BFC39630"}, + {"address": "0xBFC396E8", "label": "ghidra_BFC396E8"}, + {"address": "0xBFC39D38", "label": "ghidra_BFC39D38"}, + {"address": "0xBFC39E84", "label": "ghidra_BFC39E84"}, + {"address": "0xBFC39FE4", "label": "ghidra_BFC39FE4"}, + {"address": "0xBFC3A094", "label": "ghidra_BFC3A094"}, + {"address": "0xBFC3A228", "label": "ghidra_BFC3A228"}, + {"address": "0xBFC3A2C0", "label": "ghidra_BFC3A2C0"}, + {"address": "0xBFC3AAC4", "label": "ghidra_BFC3AAC4"}, + {"address": "0xBFC3AD68", "label": "ghidra_BFC3AD68"}, + {"address": "0xBFC3B054", "label": "ghidra_BFC3B054"}, + {"address": "0xBFC3B30C", "label": "ghidra_BFC3B30C"}, + {"address": "0xBFC3B368", "label": "ghidra_BFC3B368"}, + {"address": "0xBFC3B85C", "label": "ghidra_BFC3B85C"}, + {"address": "0xBFC3B93C", "label": "ghidra_BFC3B93C"}, + {"address": "0xBFC3BA74", "label": "ghidra_BFC3BA74"}, + {"address": "0xBFC3BD78", "label": "ghidra_BFC3BD78"}, + {"address": "0xBFC3BD98", "label": "ghidra_BFC3BD98"}, + {"address": "0xBFC3BE6C", "label": "ghidra_BFC3BE6C"}, + {"address": "0xBFC3BF10", "label": "ghidra_BFC3BF10"}, + {"address": "0xBFC3C060", "label": "ghidra_BFC3C060"}, + {"address": "0xBFC3C140", "label": "ghidra_BFC3C140"}, + {"address": "0xBFC3C428", "label": "ghidra_BFC3C428"}, + {"address": "0xBFC3C4E0", "label": "ghidra_BFC3C4E0"}, + {"address": "0xBFC3C710", "label": "ghidra_BFC3C710"}, + {"address": "0xBFC3D810", "label": "ghidra_BFC3D810"}, + {"address": "0xBFC3D8C0", "label": "ghidra_BFC3D8C0"}, + {"address": "0xBFC3DF20", "label": "ghidra_BFC3DF20"}, + {"address": "0xBFC3E020", "label": "ghidra_BFC3E020"}, + {"address": "0xBFC3E110", "label": "ghidra_BFC3E110"}, + {"address": "0xBFC3E980", "label": "ghidra_BFC3E980"}, + {"address": "0xBFC3ED40", "label": "ghidra_BFC3ED40"}, + {"address": "0xBFC3EDB4", "label": "ghidra_BFC3EDB4"}, + {"address": "0xBFC3EFF0", "label": "ghidra_BFC3EFF0"}, + {"address": "0xBFC3F1B8", "label": "ghidra_BFC3F1B8"}, + {"address": "0xBFC3F2B4", "label": "ghidra_BFC3F2B4"}, + {"address": "0xBFC3F484", "label": "ghidra_BFC3F484"}, + {"address": "0xBFC3F4F0", "label": "ghidra_BFC3F4F0"}, + {"address": "0xBFC3F570", "label": "ghidra_BFC3F570"}, + {"address": "0xBFC3F5D8", "label": "ghidra_BFC3F5D8"}, + {"address": "0xBFC3F6F0", "label": "ghidra_BFC3F6F0"}, + {"address": "0xBFC3F7E8", "label": "ghidra_BFC3F7E8"}, + {"address": "0xBFC3F8E4", "label": "ghidra_BFC3F8E4"}, + {"address": "0xBFC3F9AC", "label": "ghidra_BFC3F9AC"}, + {"address": "0xBFC3FA10", "label": "ghidra_BFC3FA10"}, + {"address": "0xBFC3FAEC", "label": "ghidra_BFC3FAEC"}, + {"address": "0xBFC3FB74", "label": "ghidra_BFC3FB74"}, + {"address": "0xBFC3FC50", "label": "ghidra_BFC3FC50"}, + {"address": "0xBFC3FD0C", "label": "ghidra_BFC3FD0C"}, + {"address": "0xBFC3FDC8", "label": "ghidra_BFC3FDC8"}, + {"address": "0xBFC3FE60", "label": "ghidra_BFC3FE60"}, + {"address": "0xBFC3FF40", "label": "ghidra_BFC3FF40"}, + {"address": "0xBFC40034", "label": "ghidra_BFC40034"}, + {"address": "0xBFC400DC", "label": "ghidra_BFC400DC"}, + {"address": "0xBFC40184", "label": "ghidra_BFC40184"}, + {"address": "0xBFC40260", "label": "ghidra_BFC40260"}, + {"address": "0xBFC402DC", "label": "ghidra_BFC402DC"}, + {"address": "0xBFC40484", "label": "ghidra_BFC40484"}, + {"address": "0xBFC40628", "label": "ghidra_BFC40628"}, + {"address": "0xBFC406E0", "label": "ghidra_BFC406E0"}, + {"address": "0xBFC40700", "label": "ghidra_BFC40700"}, + {"address": "0xBFC407B8", "label": "ghidra_BFC407B8"}, + {"address": "0xBFC40B68", "label": "ghidra_BFC40B68"}, + {"address": "0xBFC40DE8", "label": "ghidra_BFC40DE8"}, + {"address": "0xBFC40F34", "label": "ghidra_BFC40F34"}, + {"address": "0xBFC4102C", "label": "ghidra_BFC4102C"}, + {"address": "0xBFC41200", "label": "ghidra_BFC41200"}, + {"address": "0xBFC41258", "label": "ghidra_BFC41258"}, + {"address": "0xBFC413B0", "label": "ghidra_BFC413B0"}, + {"address": "0xBFC413F4", "label": "ghidra_BFC413F4"}, + {"address": "0xBFC41458", "label": "ghidra_BFC41458"}, + {"address": "0xBFC41520", "label": "ghidra_BFC41520"}, + {"address": "0xBFC41648", "label": "ghidra_BFC41648"}, + {"address": "0xBFC41670", "label": "ghidra_BFC41670"}, + {"address": "0xBFC41708", "label": "ghidra_BFC41708"}, + {"address": "0xBFC417CC", "label": "ghidra_BFC417CC"}, + {"address": "0xBFC41848", "label": "ghidra_BFC41848"}, + {"address": "0xBFC418C4", "label": "ghidra_BFC418C4"}, + {"address": "0xBFC4192C", "label": "ghidra_BFC4192C"}, + {"address": "0xBFC41A44", "label": "ghidra_BFC41A44"}, + {"address": "0xBFC41C80", "label": "ghidra_BFC41C80"}, + {"address": "0xBFC41DA4", "label": "ghidra_BFC41DA4"}, + {"address": "0xBFC42014", "label": "ghidra_BFC42014"}, + {"address": "0xBFC4203C", "label": "ghidra_BFC4203C"}, + {"address": "0xBFC42060", "label": "ghidra_BFC42060"}, + {"address": "0xBFC42090", "label": "ghidra_BFC42090"}, + {"address": "0xBFC420C0", "label": "ghidra_BFC420C0"}, + {"address": "0xBFC420F0", "label": "ghidra_BFC420F0"}, + {"address": "0xBFC42120", "label": "ghidra_BFC42120"}, + {"address": "0xBFC42160", "label": "ghidra_BFC42160"}, + {"address": "0xBFC42424", "label": "ghidra_BFC42424"}, + {"address": "0xBFC424A8", "label": "ghidra_BFC424A8"}, + {"address": "0xBFC42540", "label": "ghidra_BFC42540"}, + {"address": "0xBFC425FC", "label": "ghidra_BFC425FC"}, + {"address": "0xBFC42640", "label": "ghidra_BFC42640"}, + {"address": "0xBFC426DC", "label": "ghidra_BFC426DC"}, + {"address": "0xBFC4270C", "label": "ghidra_BFC4270C"}, + {"address": "0xBFC10000", "label": "kernel_trampoline_0"}, + {"address": "0xBFC10010", "label": "kernel_trampoline_1"}, + {"address": "0xBFC10020", "label": "kernel_trampoline_2"}, + {"address": "0xBFC10030", "label": "kernel_trampoline_3"}, + {"address": "0xBFC10040", "label": "kernel_memcpy"}, + {"address": "0xBFC10098", "label": "kernel_bzero"}, + {"address": "0xBFC100C4", "label": "a0_vector_dispatch"}, + {"address": "0xBFC100E0", "label": "b0_vector_dispatch"}, + {"address": "0xBFC10100", "label": "c0_vector_dispatch"}, + {"address": "0xBFC10120", "label": "kernel_get_cause"}, + {"address": "0xBFC10130", "label": "kernel_get_sr"}, + {"address": "0xBFC10140", "label": "kernel_set_sr"}, + {"address": "0xBFC10150", "label": "kernel_syscall"}, + {"address": "0xBFC1015C", "label": "kernel_get_c0_table"}, + {"address": "0xBFC10168", "label": "kernel_get_b0_table"}, + {"address": "0xBFC10174", "label": "kernel_BFC10174"}, + {"address": "0xBFC109A0", "label": "kernel_BFC109A0"}, + {"address": "0xBFC109B0", "label": "kernel_BFC109B0"}, + {"address": "0xBFC10A20", "label": "kernel_BFC10A20"}, + {"address": "0xBFC10A2C", "label": "kernel_BFC10A2C"}, + {"address": "0xBFC10A40", "label": "kernel_BFC10A40"}, + {"address": "0xBFC10BB8", "label": "kernel_BFC10BB8"}, + {"address": "0xBFC10BE0", "label": "kernel_BFC10BE0"}, + {"address": "0xBFC10C3C", "label": "kernel_BFC10C3C"}, + {"address": "0xBFC10F08", "label": "kernel_BFC10F08"}, + {"address": "0xBFC10F20", "label": "kernel_BFC10F20"}, + {"address": "0xBFC10F44", "label": "kernel_BFC10F44"}, + {"address": "0xBFC110D8", "label": "kernel_BFC110D8"}, + {"address": "0xBFC110F8", "label": "kernel_BFC110F8"}, + {"address": "0xBFC11114", "label": "kernel_BFC11114"}, + {"address": "0xBFC111AC", "label": "kernel_BFC111AC"}, + {"address": "0xBFC111C4", "label": "kernel_BFC111C4"}, + {"address": "0xBFC111E4", "label": "kernel_BFC111E4"}, + {"address": "0xBFC1121C", "label": "kernel_BFC1121C"}, + {"address": "0xBFC11228", "label": "kernel_BFC11228"}, + {"address": "0xBFC1125C", "label": "kernel_BFC1125C"}, + {"address": "0xBFC11274", "label": "kernel_BFC11274"}, + {"address": "0xBFC11644", "label": "kernel_BFC11644"}, + {"address": "0xBFC1175C", "label": "kernel_BFC1175C"}, + {"address": "0xBFC11800", "label": "kernel_BFC11800"}, + {"address": "0xBFC11870", "label": "kernel_BFC11870"}, + {"address": "0xBFC1191C", "label": "kernel_BFC1191C"}, + {"address": "0xBFC11944", "label": "kernel_BFC11944"}, + {"address": "0xBFC11980", "label": "kernel_BFC11980"}, + {"address": "0xBFC11998", "label": "kernel_BFC11998"}, + {"address": "0xBFC119C8", "label": "kernel_BFC119C8"}, + {"address": "0xBFC11A04", "label": "kernel_BFC11A04"}, + {"address": "0xBFC11A10", "label": "kernel_BFC11A10"}, + {"address": "0xBFC11A4C", "label": "kernel_BFC11A4C"}, + {"address": "0xBFC11A88", "label": "kernel_BFC11A88"}, + {"address": "0xBFC11AFC", "label": "kernel_BFC11AFC"}, + {"address": "0xBFC11BA8", "label": "kernel_BFC11BA8"}, + {"address": "0xBFC11BD4", "label": "kernel_BFC11BD4"}, + {"address": "0xBFC11C14", "label": "kernel_BFC11C14"}, + {"address": "0xBFC11C24", "label": "kernel_BFC11C24"}, + {"address": "0xBFC11C50", "label": "kernel_BFC11C50"}, + {"address": "0xBFC11C68", "label": "kernel_BFC11C68"}, + {"address": "0xBFC12224", "label": "kernel_BFC12224"}, + {"address": "0xBFC1228C", "label": "kernel_BFC1228C"}, + {"address": "0xBFC122A0", "label": "kernel_BFC122A0"}, + {"address": "0xBFC129EC", "label": "kernel_BFC129EC"}, + {"address": "0xBFC12BC8", "label": "kernel_BFC12BC8"}, + {"address": "0xBFC12BE0", "label": "kernel_BFC12BE0"}, + {"address": "0xBFC12EA4", "label": "kernel_BFC12EA4"}, + {"address": "0xBFC1302C", "label": "kernel_BFC1302C"}, + {"address": "0xBFC130A4", "label": "kernel_BFC130A4"}, + {"address": "0xBFC13570", "label": "kernel_BFC13570"}, + {"address": "0xBFC1372C", "label": "kernel_BFC1372C"}, + {"address": "0xBFC138AC", "label": "kernel_BFC138AC"}, + {"address": "0xBFC1395C", "label": "kernel_BFC1395C"}, + {"address": "0xBFC13968", "label": "kernel_BFC13968"}, + {"address": "0xBFC13A04", "label": "kernel_BFC13A04"}, + {"address": "0xBFC13ED0", "label": "kernel_BFC13ED0"}, + {"address": "0xBFC13F5C", "label": "kernel_BFC13F5C"}, + {"address": "0xBFC1454C", "label": "kernel_BFC1454C"}, + {"address": "0xBFC14588", "label": "kernel_BFC14588"}, + {"address": "0xBFC14594", "label": "kernel_BFC14594"}, + {"address": "0xBFC14670", "label": "kernel_BFC14670"}, + {"address": "0xBFC14754", "label": "kernel_BFC14754"}, + {"address": "0xBFC14764", "label": "kernel_BFC14764"}, + {"address": "0xBFC1483C", "label": "kernel_BFC1483C"}, + {"address": "0xBFC1484C", "label": "kernel_BFC1484C"}, + {"address": "0xBFC14864", "label": "kernel_BFC14864"}, + {"address": "0xBFC1486C", "label": "kernel_BFC1486C"}, + {"address": "0xBFC15188", "label": "kernel_BFC15188"}, + {"address": "0xBFC15664", "label": "kernel_BFC15664"}, + {"address": "0xBFC15930", "label": "kernel_BFC15930"}, + {"address": "0xBFC15950", "label": "kernel_BFC15950"}, + {"address": "0xBFC15998", "label": "kernel_BFC15998"}, + {"address": "0xBFC15A04", "label": "kernel_BFC15A04"}, + {"address": "0xBFC15A4C", "label": "kernel_BFC15A4C"}, + {"address": "0xBFC15AB8", "label": "kernel_BFC15AB8"}, + {"address": "0xBFC15AF0", "label": "kernel_BFC15AF0"}, + {"address": "0xBFC15B5C", "label": "kernel_BFC15B5C"}, + {"address": "0xBFC15B70", "label": "kernel_BFC15B70"}, + {"address": "0xBFC15CC4", "label": "kernel_BFC15CC4"}, + {"address": "0xBFC15E90", "label": "kernel_BFC15E90"}, + {"address": "0xBFC15EBC", "label": "kernel_BFC15EBC"}, + {"address": "0xBFC15F08", "label": "kernel_BFC15F08"}, + {"address": "0xBFC1609C", "label": "kernel_BFC1609C"}, + {"address": "0xBFC16690", "label": "kernel_BFC16690"}, + {"address": "0xBFC166A0", "label": "kernel_BFC166A0"}, + {"address": "0xBFC166B0", "label": "kernel_BFC166B0"}, + {"address": "0xBFC166C0", "label": "kernel_BFC166C0"}, + {"address": "0xBFC166D0", "label": "kernel_BFC166D0"}, + {"address": "0xBFC166E0", "label": "kernel_BFC166E0"}, + {"address": "0xBFC166F0", "label": "kernel_BFC166F0"}, + {"address": "0xBFC16700", "label": "kernel_BFC16700"}, + {"address": "0xBFC16710", "label": "kernel_BFC16710"}, + {"address": "0xBFC16720", "label": "kernel_BFC16720"}, + {"address": "0xBFC18788", "label": "kernel_BFC18788"}, + {"address": "0xBFC188B4", "label": "kernel_BFC188B4"}, + {"address": "0xBFC0193C", "label": "cache_flush_continuation"}, + {"address": "0xBFC02200", "label": "jal_BFC02200"}, + {"address": "0xBFC03FC0", "label": "jal_BFC03FC0"}, + {"address": "0xBFC0DA70", "label": "jal_BFC0DA70"}, + {"address": "0xBFC0DA80", "label": "jal_BFC0DA80"}, + {"address": "0xBFC0DA90", "label": "jal_BFC0DA90"}, + {"address": "0xBFC33CC0", "label": "jal_BFC33CC0"}, + {"address": "0xBFC06FDC", "label": "indirect_BFC06FDC"}, + {"address": "0xBFC137B4", "label": "indirect_BFC137B4"}, + {"address": "0xBFC12BE4", "label": "rmiss_BFC12BE4"}, + {"address": "0xBFC137BC", "label": "rmiss_BFC137BC"}, + {"address": "0xBFC1376C", "label": "rmiss_BFC1376C"}, + {"address": "0xBFC10B30", "label": "rmiss_BFC10B30"}, + {"address": "0xBFC10BE4", "label": "rmiss_BFC10BE4"}, + {"address": "0xBFC18000", "label": "shell_entry"}, + {"address": "0xBFC10780", "label": "rmiss_BFC10780"}, + {"address": "0xBFC11560", "label": "rmiss_BFC11560"}, + {"address": "0xBFC115E8", "label": "rmiss_BFC115E8"}, + {"address": "0xBFC1152C", "label": "rmiss_BFC1152C"}, + {"address": "0xBFC115FC", "label": "rmiss_BFC115FC"}, + {"address": "0xBFC27FB0", "label": "rmiss_BFC27FB0"}, + {"address": "0xBFC283F0", "label": "rmiss_BFC283F0"}, + {"address": "0xBFC2B22C", "label": "rmiss_BFC2B22C"}, + {"address": "0xBFC2BF00", "label": "rmiss_BFC2BF00"}, + {"address": "0xBFC2BF10", "label": "rmiss_BFC2BF10"}, + {"address": "0xBFC2F6A0", "label": "rmiss_BFC2F6A0"}, + {"address": "0xBFC2F79C", "label": "rmiss_BFC2F79C"}, + {"address": "0xBFC2FC10", "label": "rmiss_BFC2FC10"}, + {"address": "0xBFC36D48", "label": "rmiss_BFC36D48"}, + {"address": "0xBFC36FF0", "label": "rmiss_BFC36FF0"}, + {"address": "0xBFC37DC8", "label": "rmiss_BFC37DC8"}, + {"address": "0xBFC37E60", "label": "rmiss_BFC37E60"}, + {"address": "0xBFC37F4C", "label": "rmiss_BFC37F4C"}, + {"address": "0xBFC38038", "label": "rmiss_BFC38038"}, + {"address": "0xBFC38090", "label": "rmiss_BFC38090"}, + {"address": "0xBFC38AA4", "label": "rmiss_BFC38AA4"}, + {"address": "0xBFC38B28", "label": "rmiss_BFC38B28"}, + {"address": "0xBFC392E8", "label": "rmiss_BFC392E8"}, + {"address": "0xBFC39300", "label": "rmiss_BFC39300"}, + {"address": "0xBFC393CC", "label": "rmiss_BFC393CC"}, + {"address": "0xBFC395EC", "label": "rmiss_BFC395EC"}, + {"address": "0xBFC399EC", "label": "rmiss_BFC399EC"}, + {"address": "0xBFC3A44C", "label": "rmiss_BFC3A44C"}, + {"address": "0xBFC3A638", "label": "rmiss_BFC3A638"}, + {"address": "0xBFC3A9EC", "label": "rmiss_BFC3A9EC"}, + {"address": "0xBFC3AB70", "label": "rmiss_BFC3AB70"}, + {"address": "0xBFC3AC9C", "label": "rmiss_BFC3AC9C"}, + {"address": "0xBFC3B160", "label": "rmiss_BFC3B160"}, + {"address": "0xBFC3BE18", "label": "rmiss_BFC3BE18"}, + {"address": "0xBFC3BE90", "label": "rmiss_BFC3BE90"}, + {"address": "0xBFC3BF40", "label": "rmiss_BFC3BF40"}, + {"address": "0xBFC3BFF0", "label": "rmiss_BFC3BFF0"}, + {"address": "0xBFC3C19C", "label": "rmiss_BFC3C19C"}, + {"address": "0xBFC3C418", "label": "rmiss_BFC3C418"}, + {"address": "0xBFC3E0C0", "label": "rmiss_BFC3E0C0"}, + {"address": "0xBFC3E0E8", "label": "rmiss_BFC3E0E8"}, + {"address": "0xBFC3E324", "label": "rmiss_BFC3E324"}, + {"address": "0xBFC3E390", "label": "rmiss_BFC3E390"}, + {"address": "0xBFC42A10", "label": "rmiss_BFC42A10"}, + {"address": "0xBFC42A90", "label": "rmiss_BFC42A90"}, + {"address": "0xBFC3BDB8", "label": "rmiss_BFC3BDB8"}, + {"address": "0xBFC3D304", "label": "rmiss_BFC3D304"}, + {"address": "0xBFC3D870", "label": "rmiss_BFC3D870"}, + {"address": "0xBFC3ECB8", "label": "rmiss_BFC3ECB8"}, + {"address": "0xBFC3CEC8", "label": "rmiss_BFC3CEC8"} ], "counters": { - "functions_discovered": 76, - "total_instructions": 2988, - "total_call_edges": 199, - "total_indirect_jumps": 27, - "unsupported_instructions": 0 + "functions_discovered": 1020, + "total_instructions": 55477, + "total_call_edges": 2807, + "total_indirect_jumps": 196, + "unsupported_instructions": 34 }, "opcode_histogram": { - "ADDIU": 623, - "NOP": 303, - "LW": 271, - "SW": 242, - "BEQ": 241, - "ADDU": 233, - "JAL": 199, - "LUI": 197, - "BNE": 93, - "JR": 89, - "LB": 62, - "ANDI": 57, - "SLL": 55, - "ORI": 45, - "SB": 34, - "OR": 33, - "LBU": 25, - "SH": 21, - "SLTIU": 20, - "SLT": 15, - "SUBU": 14, - "ADDI": 13, - "MTC0": 13, - "BGEZ": 12, - "SLTU": 9, - "DIV": 8, - "BGTZ": 8, - "BLEZ": 7, - "BLTZ": 7, - "MFLO": 6, - "SLTI": 6, - "LH": 4, - "MFHI": 4, - "JALR": 4, - "SRA": 3, - "MFC0": 2, - "J": 2, - "AND": 2, - "SYSCALL": 2, - "ADD": 1, - "DIVU": 1, - "BREAK": 1, - "XOR": 1 + "ADDIU": 8379, + "LW": 6355, + "LUI": 5262, + "NOP": 4971, + "SW": 4860, + "ADDU": 4659, + "BEQ": 3286, + "JAL": 2807, + "SLL": 2298, + "BNE": 1850, + "JR": 1090, + "SH": 1040, + "ANDI": 1029, + "SB": 803, + "SUBU": 686, + "LH": 654, + "ORI": 626, + "LBU": 559, + "SRA": 461, + "OR": 319, + "LHU": 312, + "SLTI": 295, + "MFLO": 279, + "LB": 270, + "BGEZ": 260, + "AND": 242, + "SRL": 211, + "SLT": 203, + "SLTU": 191, + "MULTU": 170, + "BLEZ": 150, + "SLTIU": 133, + "BREAK": 126, + "DIV": 112, + "JALR": 87, + "BGTZ": 56, + "MFHI": 55, + "BLTZ": 38, + "SLLV": 38, + "DIVU": 37, + "XOR": 35, + "ADDI": 27, + "NOR": 21, + "MTC0": 21, + "SWL": 11, + "LWR": 11, + "LWL": 11, + "SWR": 11, + "CTC2": 11, + "MFC0": 9, + "SRAV": 9, + "SYSCALL": 7, + "ADD": 7, + "J": 6, + "XORI": 6, + "SRLV": 5, + "???": 3, + "RFE": 2, + "SUB": 1, + "MTLO": 1, + "MTHI": 1, + "MTC2": 1, + "CFC2": 1 }, "indirect_jumps": [ {"func": "0xBFC00420", "pc": "0xBFC00454", "reg": 4, "kind": "jr_non_ra"}, {"func": "0xBFC01920", "pc": "0xBFC01938", "reg": 26, "kind": "jr_non_ra"}, + {"func": "0xBFC02D20", "pc": "0xBFC02D5C", "reg": 18, "kind": "jalr"}, + {"func": "0xBFC02DAC", "pc": "0xBFC02E58", "reg": 19, "kind": "jalr"}, + {"func": "0xBFC02DAC", "pc": "0xBFC02E20", "reg": 19, "kind": "jalr"}, + {"func": "0xBFC02F20", "pc": "0xBFC02FC8", "reg": 22, "kind": "jalr"}, + {"func": "0xBFC02F20", "pc": "0xBFC0300C", "reg": 22, "kind": "jalr"}, {"func": "0xBFC03CF0", "pc": "0xBFC03D58", "reg": 11, "kind": "jalr"}, + {"func": "0xBFC04DEC", "pc": "0xBFC04F40", "reg": 8, "kind": "jr_non_ra"}, {"func": "0xBFC06FF0", "pc": "0xBFC07024", "reg": 14, "kind": "jalr"}, {"func": "0xBFC0711C", "pc": "0xBFC07130", "reg": 2, "kind": "jalr"}, {"func": "0xBFC07148", "pc": "0xBFC0717C", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC09720", "pc": "0xBFC09788", "reg": 19, "kind": "jalr"}, + {"func": "0xBFC0B648", "pc": "0xBFC0B6B4", "reg": 15, "kind": "jr_non_ra"}, {"func": "0xBFC0D880", "pc": "0xBFC0D884", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D890", "pc": "0xBFC0D894", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D8A0", "pc": "0xBFC0D8A4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D8B0", "pc": "0xBFC0D8B4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D8D0", "pc": "0xBFC0D8D4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D950", "pc": "0xBFC0D954", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D970", "pc": "0xBFC0D974", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D980", "pc": "0xBFC0D984", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D990", "pc": "0xBFC0D994", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D9A0", "pc": "0xBFC0D9A4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D9B0", "pc": "0xBFC0D9B4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D9C0", "pc": "0xBFC0D9C4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D9D0", "pc": "0xBFC0D9D4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0D9E0", "pc": "0xBFC0D9E4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0D9F0", "pc": "0xBFC0D9F4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA00", "pc": "0xBFC0DA04", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA10", "pc": "0xBFC0DA14", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA20", "pc": "0xBFC0DA24", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA30", "pc": "0xBFC0DA34", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA40", "pc": "0xBFC0DA44", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA50", "pc": "0xBFC0DA54", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA60", "pc": "0xBFC0DA64", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA70", "pc": "0xBFC0DA74", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA80", "pc": "0xBFC0DA84", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DA90", "pc": "0xBFC0DA94", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DAA0", "pc": "0xBFC0DAA4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DAB0", "pc": "0xBFC0DAB4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DAC0", "pc": "0xBFC0DAC4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DAD0", "pc": "0xBFC0DAD4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DAE0", "pc": "0xBFC0DAE4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DAF0", "pc": "0xBFC0DAF4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DB00", "pc": "0xBFC0DB04", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DB10", "pc": "0xBFC0DB14", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DB20", "pc": "0xBFC0DB24", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DB30", "pc": "0xBFC0DB34", "reg": 10, "kind": "jr_non_ra"}, @@ -80,11 +974,184 @@ {"func": "0xBFC0DB50", "pc": "0xBFC0DB54", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DB60", "pc": "0xBFC0DB64", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DB70", "pc": "0xBFC0DB74", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DB80", "pc": "0xBFC0DB84", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DB90", "pc": "0xBFC0DB94", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DBA0", "pc": "0xBFC0DBA4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DBB0", "pc": "0xBFC0DBB4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DBC0", "pc": "0xBFC0DBC4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DBD0", "pc": "0xBFC0DBD4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DBE0", "pc": "0xBFC0DBE4", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DBF0", "pc": "0xBFC0DBF4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DC00", "pc": "0xBFC0DC04", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DC10", "pc": "0xBFC0DC14", "reg": 10, "kind": "jr_non_ra"}, {"func": "0xBFC0DC20", "pc": "0xBFC0DC24", "reg": 10, "kind": "jr_non_ra"}, - {"func": "0xBFC0DC30", "pc": "0xBFC0DC34", "reg": 10, "kind": "jr_non_ra"} + {"func": "0xBFC0DC30", "pc": "0xBFC0DC34", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DC40", "pc": "0xBFC0DC44", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC0DC50", "pc": "0xBFC0DC54", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC10000", "pc": "0xBFC10008", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC10010", "pc": "0xBFC10018", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC10020", "pc": "0xBFC10028", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC10030", "pc": "0xBFC10038", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC100C4", "pc": "0xBFC100D8", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC100E0", "pc": "0xBFC100F8", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC10100", "pc": "0xBFC10118", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC10174", "pc": "0xBFC10174", "reg": 0, "kind": "jr_non_ra"}, + {"func": "0xBFC10780", "pc": "0xBFC10908", "reg": 17, "kind": "jalr"}, + {"func": "0xBFC10780", "pc": "0xBFC10920", "reg": 16, "kind": "jalr"}, + {"func": "0xBFC10A40", "pc": "0xBFC10B10", "reg": 26, "kind": "jr_non_ra"}, + {"func": "0xBFC1152C", "pc": "0xBFC11558", "reg": 25, "kind": "jr_non_ra"}, + {"func": "0xBFC11644", "pc": "0xBFC11718", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC12458", "pc": "0xBFC12504", "reg": 11, "kind": "jalr"}, + {"func": "0xBFC12628", "pc": "0xBFC126A0", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC12628", "pc": "0xBFC12748", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC12794", "pc": "0xBFC1280C", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC12794", "pc": "0xBFC128B4", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC12900", "pc": "0xBFC12958", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC129FC", "pc": "0xBFC12A8C", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC130AC", "pc": "0xBFC1313C", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC13178", "pc": "0xBFC13208", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC13244", "pc": "0xBFC132D4", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC13310", "pc": "0xBFC1339C", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC133D8", "pc": "0xBFC13468", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC134A4", "pc": "0xBFC13558", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC13570", "pc": "0xBFC13594", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC135AC", "pc": "0xBFC136D8", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC1376C", "pc": "0xBFC137AC", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC137E0", "pc": "0xBFC13854", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC1486C", "pc": "0xBFC148D4", "reg": 12, "kind": "jalr"}, + {"func": "0xBFC14CF4", "pc": "0xBFC14D3C", "reg": 15, "kind": "jr_non_ra"}, + {"func": "0xBFC15188", "pc": "0xBFC151E0", "reg": 24, "kind": "jr_non_ra"}, + {"func": "0xBFC15664", "pc": "0xBFC1569C", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC15F08", "pc": "0xBFC15F10", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC1609C", "pc": "0xBFC160CC", "reg": 26, "kind": "jr_non_ra"}, + {"func": "0xBFC16170", "pc": "0xBFC161BC", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC16570", "pc": "0xBFC16574", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16580", "pc": "0xBFC16584", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16590", "pc": "0xBFC16594", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165A0", "pc": "0xBFC165A4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165B0", "pc": "0xBFC165B4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165C0", "pc": "0xBFC165C4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165D0", "pc": "0xBFC165D4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165E0", "pc": "0xBFC165E4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC165F0", "pc": "0xBFC165F4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16600", "pc": "0xBFC16604", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16610", "pc": "0xBFC16614", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16620", "pc": "0xBFC16624", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16630", "pc": "0xBFC16634", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16640", "pc": "0xBFC16644", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16650", "pc": "0xBFC16654", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166A0", "pc": "0xBFC166A4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166B0", "pc": "0xBFC166B4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166C0", "pc": "0xBFC166C4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166D0", "pc": "0xBFC166D4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166E0", "pc": "0xBFC166E4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC166F0", "pc": "0xBFC166F4", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16700", "pc": "0xBFC16704", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16710", "pc": "0xBFC16714", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC16720", "pc": "0xBFC16724", "reg": 10, "kind": "jr_non_ra"}, + {"func": "0xBFC1A5B0", "pc": "0xBFC1A664", "reg": 9, "kind": "jr_non_ra"}, + {"func": "0xBFC1AC68", "pc": "0xBFC1ACB4", "reg": 15, "kind": "jr_non_ra"}, + {"func": "0xBFC1BD68", "pc": "0xBFC1BE0C", "reg": 9, "kind": "jr_non_ra"}, + {"func": "0xBFC1CDD8", "pc": "0xBFC1CE50", "reg": 8, "kind": "jr_non_ra"}, + {"func": "0xBFC1E1CC", "pc": "0xBFC1E200", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC1E3CC", "pc": "0xBFC1E424", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC27EB4", "pc": "0xBFC27EE8", "reg": 15, "kind": "jr_non_ra"}, + {"func": "0xBFC2ACD0", "pc": "0xBFC2AD1C", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC2D0E0", "pc": "0xBFC2D19C", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC2E6B8", "pc": "0xBFC2E73C", "reg": 10, "kind": "jalr"}, + {"func": "0xBFC3041C", "pc": "0xBFC30454", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC30514", "pc": "0xBFC3054C", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC34B58", "pc": "0xBFC34D94", "reg": 25, "kind": "jr_non_ra"}, + {"func": "0xBFC36D1C", "pc": "0xBFC36D40", "reg": 14, "kind": "jr_non_ra"}, + {"func": "0xBFC36D48", "pc": "0xBFC36D8C", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC36D48", "pc": "0xBFC36DBC", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC36D48", "pc": "0xBFC36E2C", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC36D48", "pc": "0xBFC36DE4", "reg": 11, "kind": "jalr"}, + {"func": "0xBFC36D48", "pc": "0xBFC36E4C", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC36D48", "pc": "0xBFC36EA8", "reg": 12, "kind": "jalr"}, + {"func": "0xBFC36EC0", "pc": "0xBFC36F00", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC36EC0", "pc": "0xBFC36F20", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC36EC0", "pc": "0xBFC36F78", "reg": 12, "kind": "jalr"}, + {"func": "0xBFC36F90", "pc": "0xBFC36FD0", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC37028", "pc": "0xBFC37058", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC37070", "pc": "0xBFC37088", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC370A0", "pc": "0xBFC370DC", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC370F4", "pc": "0xBFC37118", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC37130", "pc": "0xBFC37154", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC3716C", "pc": "0xBFC371CC", "reg": 13, "kind": "jalr"}, + {"func": "0xBFC37334", "pc": "0xBFC37350", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC37368", "pc": "0xBFC373A4", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC37368", "pc": "0xBFC373C8", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC373E0", "pc": "0xBFC3741C", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC37434", "pc": "0xBFC3748C", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC374EC", "pc": "0xBFC37568", "reg": 11, "kind": "jalr"}, + {"func": "0xBFC374EC", "pc": "0xBFC376C0", "reg": 11, "kind": "jalr"}, + {"func": "0xBFC374EC", "pc": "0xBFC376F8", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC374EC", "pc": "0xBFC37804", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC37868", "pc": "0xBFC37880", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC38DAC", "pc": "0xBFC38F5C", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC38DAC", "pc": "0xBFC38F18", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC396E8", "pc": "0xBFC39738", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC396E8", "pc": "0xBFC39778", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39D68", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39D84", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39DAC", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39DC4", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39DDC", "reg": 10, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39E28", "reg": 13, "kind": "jalr"}, + {"func": "0xBFC39D38", "pc": "0xBFC39E6C", "reg": 24, "kind": "jalr"}, + {"func": "0xBFC39E84", "pc": "0xBFC39EB4", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC39E84", "pc": "0xBFC39EDC", "reg": 25, "kind": "jalr"}, + {"func": "0xBFC39E84", "pc": "0xBFC39EF4", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC39E84", "pc": "0xBFC39F0C", "reg": 9, "kind": "jalr"}, + {"func": "0xBFC3A094", "pc": "0xBFC3A0C0", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC3A094", "pc": "0xBFC3A208", "reg": 8, "kind": "jalr"}, + {"func": "0xBFC3A094", "pc": "0xBFC3A190", "reg": 14, "kind": "jalr"}, + {"func": "0xBFC3A094", "pc": "0xBFC3A148", "reg": 10, "kind": "jalr"}, + {"func": "0xBFC3A228", "pc": "0xBFC3A29C", "reg": 10, "kind": "jalr"}, + {"func": "0xBFC40484", "pc": "0xBFC4052C", "reg": 12, "kind": "jr_non_ra"}, + {"func": "0xBFC42060", "pc": "0xBFC42078", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC42090", "pc": "0xBFC420A8", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC420C0", "pc": "0xBFC420D8", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC420F0", "pc": "0xBFC42108", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC42120", "pc": "0xBFC42138", "reg": 15, "kind": "jalr"}, + {"func": "0xBFC42160", "pc": "0xBFC422B0", "reg": 2, "kind": "jalr"}, + {"func": "0xBFC4270C", "pc": "0xBFC427A8", "reg": 2, "kind": "jalr"} ], "unsupported": [ + {"address": "0xBFC0233C", "raw": "0x44801000", "reason": "addr=0xBFC0233C raw=0x44801000 opcode=0x11: top-level opcode 0x11 not implemented in Phase 1a"}, + {"address": "0xBFC33CCC", "raw": "0x012A4822", "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator"}, + {"address": "0xBFC33FBC", "raw": "0x48C4C000", "reason": "addr=0xBFC33FBC raw=0x48C4C000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FCC", "raw": "0x48C4D000", "reason": "addr=0xBFC33FCC raw=0x48C4D000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33F0C", "raw": "0x48C46800", "reason": "addr=0xBFC33F0C raw=0x48C46800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33F2C", "raw": "0x48C4A800", "reason": "addr=0xBFC33F2C raw=0x48C4A800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC3370C", "raw": "0x48C8E800", "reason": "addr=0xBFC3370C raw=0x48C8E800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B4C", "raw": "0x48C88000", "reason": "addr=0xBFC35B4C raw=0x48C88000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B1C", "raw": "0x48C84000", "reason": "addr=0xBFC35B1C raw=0x48C84000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35AEC", "raw": "0x48C80000", "reason": "addr=0xBFC35AEC raw=0x48C80000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B74", "raw": "0x48C82800", "reason": "addr=0xBFC35B74 raw=0x48C82800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC36740", "raw": "0xC8800000", "reason": "addr=0xBFC36740 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"}, + {"address": "0xBFC36068", "raw": "0xC8800000", "reason": "addr=0xBFC36068 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"}, + {"address": "0xBFC362D0", "raw": "0x484D0000", "reason": "addr=0xBFC362D0 raw=0x484D0000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FD8", "raw": "0x48C4D800", "reason": "addr=0xBFC33FD8 raw=0x48C4D800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FE4", "raw": "0x48C4E000", "reason": "addr=0xBFC33FE4 raw=0x48C4E000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33C98", "raw": "0x4884F000", "reason": "addr=0xBFC33C98 raw=0x4884F000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC0233C", "raw": "0x44801000", "reason": "addr=0xBFC0233C raw=0x44801000 opcode=0x11: top-level opcode 0x11 not implemented in Phase 1a"}, + {"address": "0xBFC3370C", "raw": "0x48C8E800", "reason": "addr=0xBFC3370C raw=0x48C8E800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33C98", "raw": "0x4884F000", "reason": "addr=0xBFC33C98 raw=0x4884F000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33CCC", "raw": "0x012A4822", "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator"}, + {"address": "0xBFC33F0C", "raw": "0x48C46800", "reason": "addr=0xBFC33F0C raw=0x48C46800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33F2C", "raw": "0x48C4A800", "reason": "addr=0xBFC33F2C raw=0x48C4A800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FBC", "raw": "0x48C4C000", "reason": "addr=0xBFC33FBC raw=0x48C4C000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FCC", "raw": "0x48C4D000", "reason": "addr=0xBFC33FCC raw=0x48C4D000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FD8", "raw": "0x48C4D800", "reason": "addr=0xBFC33FD8 raw=0x48C4D800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FE4", "raw": "0x48C4E000", "reason": "addr=0xBFC33FE4 raw=0x48C4E000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35AEC", "raw": "0x48C80000", "reason": "addr=0xBFC35AEC raw=0x48C80000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B1C", "raw": "0x48C84000", "reason": "addr=0xBFC35B1C raw=0x48C84000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B4C", "raw": "0x48C88000", "reason": "addr=0xBFC35B4C raw=0x48C88000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B74", "raw": "0x48C82800", "reason": "addr=0xBFC35B74 raw=0x48C82800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC36068", "raw": "0xC8800000", "reason": "addr=0xBFC36068 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"}, + {"address": "0xBFC362D0", "raw": "0x484D0000", "reason": "addr=0xBFC362D0 raw=0x484D0000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC36740", "raw": "0xC8800000", "reason": "addr=0xBFC36740 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"} ] } diff --git a/generated/function_edges.json b/generated/function_edges.json index 928178a0..ba5669fa 100644 --- a/generated/function_edges.json +++ b/generated/function_edges.json @@ -1,7 +1,115 @@ { "schema": "psxrecomp-v4 phase1c function_edges v1", - "total_edges": 199, + "total_edges": 2807, "edges": [ + { + "caller_func": "0xBFC00678", + "caller_pc": "0xBFC00680", + "callee_addr": "0xBFC03910", + "in_rom": true + }, + { + "caller_func": "0xBFC00678", + "caller_pc": "0xBFC00690", + "callee_addr": "0xBFC006D8", + "in_rom": true + }, + { + "caller_func": "0xBFC006A8", + "caller_pc": "0xBFC006B0", + "callee_addr": "0xBFC03910", + "in_rom": true + }, + { + "caller_func": "0xBFC006A8", + "caller_pc": "0xBFC006C0", + "callee_addr": "0xBFC006D8", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC006EC", + "callee_addr": "0xBFC03F8C", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC006F4", + "callee_addr": "0xBFC03F8C", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00700", + "callee_addr": "0xBFC03F8C", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC0070C", + "callee_addr": "0xBFC03FAC", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00714", + "callee_addr": "0xBFC03FAC", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00720", + "callee_addr": "0xBFC03FAC", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00728", + "callee_addr": "0xBFC03FAC", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00734", + "callee_addr": "0xBFC03F8C", + "in_rom": true + }, + { + "caller_func": "0xBFC006D8", + "caller_pc": "0xBFC00760", + "callee_addr": "0xBFC00810", + "in_rom": true + }, + { + "caller_func": "0xBFC00778", + "caller_pc": "0xBFC00798", + "callee_addr": "0xBFC00810", + "in_rom": true + }, + { + "caller_func": "0xBFC00778", + "caller_pc": "0xBFC007B8", + "callee_addr": "0xBFC00810", + "in_rom": true + }, + { + "caller_func": "0xBFC00778", + "caller_pc": "0xBFC007D8", + "callee_addr": "0xBFC00810", + "in_rom": true + }, + { + "caller_func": "0xBFC00778", + "caller_pc": "0xBFC007F8", + "callee_addr": "0xBFC00810", + "in_rom": true + }, + { + "caller_func": "0xBFC00810", + "caller_pc": "0xBFC00888", + "callee_addr": "0xBFC03FE0", + "in_rom": true + }, { "caller_func": "0xBFC008A0", "caller_pc": "0xBFC008E4", @@ -194,6 +302,222 @@ "callee_addr": "0xBFC03990", "in_rom": true }, + { + "caller_func": "0xBFC01E5C", + "caller_pc": "0xBFC02088", + "callee_addr": "0xBFC01B80", + "in_rom": true + }, + { + "caller_func": "0xBFC01E5C", + "caller_pc": "0xBFC01EE4", + "callee_addr": "0xBFC01B80", + "in_rom": true + }, + { + "caller_func": "0xBFC01E5C", + "caller_pc": "0xBFC01FDC", + "callee_addr": "0xBFC01B80", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC0211C", + "callee_addr": "0xBFC01E5C", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC02134", + "callee_addr": "0xBFC020F0", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC0214C", + "callee_addr": "0xBFC01C8C", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC02164", + "callee_addr": "0xBFC01E5C", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC0217C", + "callee_addr": "0xBFC01A90", + "in_rom": true + }, + { + "caller_func": "0xBFC02104", + "caller_pc": "0xBFC02184", + "callee_addr": "0xBFC020F0", + "in_rom": true + }, + { + "caller_func": "0xBFC022C0", + "caller_pc": "0xBFC022FC", + "callee_addr": "0xBFC02EDC", + "in_rom": true + }, + { + "caller_func": "0xBFC02590", + "caller_pc": "0xBFC02598", + "callee_addr": "0xBFC02324", + "in_rom": true + }, + { + "caller_func": "0xBFC025B0", + "caller_pc": "0xBFC026AC", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC025B0", + "caller_pc": "0xBFC026D0", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC025B0", + "caller_pc": "0xBFC026F8", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC02738", + "caller_pc": "0xBFC0285C", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC02738", + "caller_pc": "0xBFC02880", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC02738", + "caller_pc": "0xBFC028C4", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC02950", + "caller_pc": "0xBFC02A54", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC02950", + "caller_pc": "0xBFC02AA0", + "callee_addr": "0xBFC022C0", + "in_rom": true + }, + { + "caller_func": "0xBFC02AF0", + "caller_pc": "0xBFC02AF8", + "callee_addr": "0xBFC02950", + "in_rom": true + }, + { + "caller_func": "0xBFC02B10", + "caller_pc": "0xBFC02B20", + "callee_addr": "0xBFC02738", + "in_rom": true + }, + { + "caller_func": "0xBFC02F20", + "caller_pc": "0xBFC02F7C", + "callee_addr": "0xBFC03104", + "in_rom": true + }, + { + "caller_func": "0xBFC02F20", + "caller_pc": "0xBFC03048", + "callee_addr": "0xBFC03104", + "in_rom": true + }, + { + "caller_func": "0xBFC02F20", + "caller_pc": "0xBFC0305C", + "callee_addr": "0xBFC02F20", + "in_rom": true + }, + { + "caller_func": "0xBFC02F20", + "caller_pc": "0xBFC0302C", + "callee_addr": "0xBFC03104", + "in_rom": true + }, + { + "caller_func": "0xBFC03098", + "caller_pc": "0xBFC030B8", + "callee_addr": "0xBFC01E5C", + "in_rom": true + }, + { + "caller_func": "0xBFC03098", + "caller_pc": "0xBFC030DC", + "callee_addr": "0xBFC02F20", + "in_rom": true + }, + { + "caller_func": "0xBFC03098", + "caller_pc": "0xBFC030EC", + "callee_addr": "0xBFC020F0", + "in_rom": true + }, + { + "caller_func": "0xBFC03104", + "caller_pc": "0xBFC03144", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC03104", + "caller_pc": "0xBFC03158", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC03104", + "caller_pc": "0xBFC03170", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC03764", + "caller_pc": "0xBFC03794", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC039B0", + "caller_pc": "0xBFC039BC", + "callee_addr": "0xBFC0D890", + "in_rom": true + }, + { + "caller_func": "0xBFC039B0", + "caller_pc": "0xBFC039D8", + "callee_addr": "0xBFC03C90", + "in_rom": true + }, + { + "caller_func": "0xBFC039B0", + "caller_pc": "0xBFC039EC", + "callee_addr": "0xBFC0D8A0", + "in_rom": true + }, + { + "caller_func": "0xBFC039B0", + "caller_pc": "0xBFC039FC", + "callee_addr": "0xBFC0D8A0", + "in_rom": true + }, { "caller_func": "0xBFC03A18", "caller_pc": "0xBFC03A24", @@ -230,6 +554,78 @@ "callee_addr": "0xBFC01920", "in_rom": true }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03B00", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03B18", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03B70", + "callee_addr": "0xBFC03190", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03B94", + "callee_addr": "0xBFC0D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03BA8", + "callee_addr": "0xBFC03A18", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03BF0", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03C04", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03C0C", + "callee_addr": "0xBFC0D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03BDC", + "callee_addr": "0xBFC03CF0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03C1C", + "callee_addr": "0xBFC03A18", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03C6C", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC03AA4", + "caller_pc": "0xBFC03C54", + "callee_addr": "0xBFC03CF0", + "in_rom": true + }, { "caller_func": "0xBFC03C90", "caller_pc": "0xBFC03CA4", @@ -242,6 +638,84 @@ "callee_addr": "0xBFC02B50", "in_rom": true }, + { + "caller_func": "0xBFC03D80", + "caller_pc": "0xBFC03DD4", + "callee_addr": "0xBFC04260", + "in_rom": true + }, + { + "caller_func": "0xBFC03EA0", + "caller_pc": "0xBFC03EB4", + "callee_addr": "0xBFC04138", + "in_rom": true + }, + { + "caller_func": "0xBFC03FAC", + "caller_pc": "0xBFC03FB4", + "callee_addr": "0xBFC04138", + "in_rom": true + }, + { + "caller_func": "0xBFC03FE0", + "caller_pc": "0xBFC03FEC", + "callee_addr": "0xBFC04138", + "in_rom": true + }, + { + "caller_func": "0xBFC0403C", + "caller_pc": "0xBFC04050", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0403C", + "caller_pc": "0xBFC04058", + "callee_addr": "0xBFC04138", + "in_rom": true + }, + { + "caller_func": "0xBFC0403C", + "caller_pc": "0xBFC040B4", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0403C", + "caller_pc": "0xBFC040D4", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC04138", + "caller_pc": "0xBFC04180", + "callee_addr": "0xBFC04260", + "in_rom": true + }, + { + "caller_func": "0xBFC04138", + "caller_pc": "0xBFC041DC", + "callee_addr": "0xBFC04260", + "in_rom": true + }, + { + "caller_func": "0xBFC04138", + "caller_pc": "0xBFC04238", + "callee_addr": "0xBFC04260", + "in_rom": true + }, + { + "caller_func": "0xBFC04260", + "caller_pc": "0xBFC0427C", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC04260", + "caller_pc": "0xBFC04284", + "callee_addr": "0xBFC040EC", + "in_rom": true + }, { "caller_func": "0xBFC04610", "caller_pc": "0xBFC04624", @@ -284,6 +758,450 @@ "callee_addr": "0xBFC0DAE0", "in_rom": true }, + { + "caller_func": "0xBFC048D0", + "caller_pc": "0xBFC048E4", + "callee_addr": "0xBFC0DB00", + "in_rom": true + }, + { + "caller_func": "0xBFC048D0", + "caller_pc": "0xBFC048F8", + "callee_addr": "0xBFC0DB00", + "in_rom": true + }, + { + "caller_func": "0xBFC04ABC", + "caller_pc": "0xBFC04B3C", + "callee_addr": "0xBFC064D8", + "in_rom": true + }, + { + "caller_func": "0xBFC04BC4", + "caller_pc": "0xBFC04BE8", + "callee_addr": "0xBFC06548", + "in_rom": true + }, + { + "caller_func": "0xBFC04C38", + "caller_pc": "0xBFC04C68", + "callee_addr": "0xBFC06548", + "in_rom": true + }, + { + "caller_func": "0xBFC04D50", + "caller_pc": "0xBFC04D70", + "callee_addr": "0xBFC06548", + "in_rom": true + }, + { + "caller_func": "0xBFC04FBC", + "caller_pc": "0xBFC05048", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC0506C", + "caller_pc": "0xBFC0508C", + "callee_addr": "0xBFC0D980", + "in_rom": true + }, + { + "caller_func": "0xBFC050A4", + "caller_pc": "0xBFC050C4", + "callee_addr": "0xBFC0D980", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC051AC", + "callee_addr": "0xBFC05C50", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC051C8", + "callee_addr": "0xBFC05D04", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC051F0", + "callee_addr": "0xBFC05C18", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC052D4", + "callee_addr": "0xBFC060DC", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05200", + "callee_addr": "0xBFC05C18", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC052B4", + "callee_addr": "0xBFC061A0", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC052C4", + "callee_addr": "0xBFC062CC", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC052EC", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC052A4", + "callee_addr": "0xBFC063CC", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05284", + "callee_addr": "0xBFC0615C", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05274", + "callee_addr": "0xBFC061D4", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05264", + "callee_addr": "0xBFC05E58", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05294", + "callee_addr": "0xBFC06288", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05254", + "callee_addr": "0xBFC05DF4", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05244", + "callee_addr": "0xBFC05DB0", + "in_rom": true + }, + { + "caller_func": "0xBFC05194", + "caller_pc": "0xBFC05234", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC05580", + "callee_addr": "0xBFC06218", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC056D0", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC0560C", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC05744", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC05638", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC055E8", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05558", + "caller_pc": "0xBFC056B8", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC057B0", + "caller_pc": "0xBFC058E4", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC057B0", + "caller_pc": "0xBFC05880", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC0593C", + "caller_pc": "0xBFC0598C", + "callee_addr": "0xBFC05F08", + "in_rom": true + }, + { + "caller_func": "0xBFC0593C", + "caller_pc": "0xBFC059C4", + "callee_addr": "0xBFC06010", + "in_rom": true + }, + { + "caller_func": "0xBFC0593C", + "caller_pc": "0xBFC059F0", + "callee_addr": "0xBFC06038", + "in_rom": true + }, + { + "caller_func": "0xBFC0593C", + "caller_pc": "0xBFC05A2C", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC0593C", + "caller_pc": "0xBFC05A14", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05A44", + "caller_pc": "0xBFC05AA0", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05A44", + "caller_pc": "0xBFC05B3C", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05A44", + "caller_pc": "0xBFC05BB4", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05A44", + "caller_pc": "0xBFC05C00", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05A44", + "caller_pc": "0xBFC05BE8", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05C50", + "caller_pc": "0xBFC05CEC", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05D04", + "caller_pc": "0xBFC05D98", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05DB0", + "caller_pc": "0xBFC05DDC", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05DF4", + "caller_pc": "0xBFC05E40", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC05F08", + "caller_pc": "0xBFC05F8C", + "callee_addr": "0xBFC065C0", + "in_rom": true + }, + { + "caller_func": "0xBFC06010", + "caller_pc": "0xBFC06020", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC06038", + "caller_pc": "0xBFC060C4", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC060DC", + "caller_pc": "0xBFC06144", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC0615C", + "caller_pc": "0xBFC06188", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC061A0", + "caller_pc": "0xBFC061BC", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC061D4", + "caller_pc": "0xBFC06200", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC06218", + "caller_pc": "0xBFC0623C", + "callee_addr": "0xBFC0661C", + "in_rom": true + }, + { + "caller_func": "0xBFC062CC", + "caller_pc": "0xBFC0635C", + "callee_addr": "0xBFC0661C", + "in_rom": true + }, + { + "caller_func": "0xBFC063CC", + "caller_pc": "0xBFC06434", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC063CC", + "caller_pc": "0xBFC06464", + "callee_addr": "0xBFC0661C", + "in_rom": true + }, + { + "caller_func": "0xBFC064D8", + "caller_pc": "0xBFC064E8", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC064D8", + "caller_pc": "0xBFC064F8", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC064D8", + "caller_pc": "0xBFC06508", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC064D8", + "caller_pc": "0xBFC06518", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC064D8", + "caller_pc": "0xBFC06528", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC06560", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC0656C", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC06578", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC06584", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC06590", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC0659C", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06548", + "caller_pc": "0xBFC065A8", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC06680", + "caller_pc": "0xBFC066E8", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06680", + "caller_pc": "0xBFC066D4", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06700", + "caller_pc": "0xBFC06710", + "callee_addr": "0xBFC0227C", + "in_rom": true + }, { "caller_func": "0xBFC06784", "caller_pc": "0xBFC06794", @@ -758,6 +1676,246 @@ "callee_addr": "0xBFC06FA4", "in_rom": true }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CC0", + "callee_addr": "0xBFC03968", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CCC", + "callee_addr": "0xBFC03978", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CD4", + "callee_addr": "0xBFC00420", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CDC", + "callee_addr": "0xBFC042D0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CE4", + "callee_addr": "0xBFC042A0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CEC", + "callee_addr": "0xBFC0DB10", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06CF4", + "callee_addr": "0xBFC0DB20", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D14", + "callee_addr": "0xBFC0DB30", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D20", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D28", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D38", + "callee_addr": "0xBFC0DB40", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D40", + "callee_addr": "0xBFC04610", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D48", + "callee_addr": "0xBFC0DB50", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D50", + "callee_addr": "0xBFC0DB60", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D60", + "callee_addr": "0xBFC04678", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D70", + "callee_addr": "0xBFC0472C", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D78", + "callee_addr": "0xBFC0DB70", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D8C", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06D98", + "callee_addr": "0xBFC02240", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DA8", + "callee_addr": "0xBFC06FA4", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DB0", + "callee_addr": "0xBFC073A0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DBC", + "callee_addr": "0xBFC02240", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DCC", + "callee_addr": "0xBFC06FA4", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DD4", + "callee_addr": "0xBFC0D850", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DE8", + "callee_addr": "0xBFC03A18", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06DF8", + "callee_addr": "0xBFC06FA4", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E1C", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E38", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E60", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E68", + "callee_addr": "0xBFC0D960", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E74", + "callee_addr": "0xBFC02240", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E84", + "callee_addr": "0xBFC06FA4", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06E98", + "callee_addr": "0xBFC0D570", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06EA4", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC06CA4", + "caller_pc": "0xBFC06EAC", + "callee_addr": "0xBFC06FA4", + "in_rom": true + }, + { + "caller_func": "0xBFC06EC4", + "caller_pc": "0xBFC06ECC", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC06EC4", + "caller_pc": "0xBFC06EE8", + "callee_addr": "0xBFC0703C", + "in_rom": true + }, + { + "caller_func": "0xBFC06EC4", + "caller_pc": "0xBFC06EFC", + "callee_addr": "0xBFC0711C", + "in_rom": true + }, + { + "caller_func": "0xBFC06EC4", + "caller_pc": "0xBFC06F04", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC06EC4", + "caller_pc": "0xBFC06F10", + "callee_addr": "0xBFC06784", + "in_rom": true + }, { "caller_func": "0xBFC06F28", "caller_pc": "0xBFC06F34", @@ -920,6 +2078,48 @@ "callee_addr": "0xBFC0D8C0", "in_rom": true }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC072C0", + "callee_addr": "0xBFC0D960", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC072D0", + "callee_addr": "0xBFC0D9D0", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC072E0", + "callee_addr": "0xBFC0D9D0", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC072F0", + "callee_addr": "0xBFC0D9D0", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC07300", + "callee_addr": "0xBFC0D9D0", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC07310", + "callee_addr": "0xBFC0D9D0", + "in_rom": true + }, + { + "caller_func": "0xBFC072B8", + "caller_pc": "0xBFC07318", + "callee_addr": "0xBFC0DC00", + "in_rom": true + }, { "caller_func": "0xBFC07330", "caller_pc": "0xBFC07338", @@ -938,6 +2138,18 @@ "callee_addr": "0xBFC0DC10", "in_rom": true }, + { + "caller_func": "0xBFC07370", + "caller_pc": "0xBFC07378", + "callee_addr": "0xBFC07330", + "in_rom": true + }, + { + "caller_func": "0xBFC07370", + "caller_pc": "0xBFC07388", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, { "caller_func": "0xBFC073A0", "caller_pc": "0xBFC073A8", @@ -974,6 +2186,96 @@ "callee_addr": "0xBFC02B50", "in_rom": true }, + { + "caller_func": "0xBFC07664", + "caller_pc": "0xBFC076B0", + "callee_addr": "0xBFC03288", + "in_rom": true + }, + { + "caller_func": "0xBFC07700", + "caller_pc": "0xBFC07754", + "callee_addr": "0xBFC07C1C", + "in_rom": true + }, + { + "caller_func": "0xBFC07700", + "caller_pc": "0xBFC0782C", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC078C0", + "callee_addr": "0xBFC07F28", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC078D4", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC07900", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC07918", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC0797C", + "callee_addr": "0xBFC083CC", + "in_rom": true + }, + { + "caller_func": "0xBFC078A4", + "caller_pc": "0xBFC07970", + "callee_addr": "0xBFC03190", + "in_rom": true + }, + { + "caller_func": "0xBFC07A04", + "caller_pc": "0xBFC07A84", + "callee_addr": "0xBFC07F28", + "in_rom": true + }, + { + "caller_func": "0xBFC07A04", + "caller_pc": "0xBFC07A9C", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC07A04", + "caller_pc": "0xBFC07B18", + "callee_addr": "0xBFC07C1C", + "in_rom": true + }, + { + "caller_func": "0xBFC07B88", + "caller_pc": "0xBFC07B90", + "callee_addr": "0xBFC07F28", + "in_rom": true + }, + { + "caller_func": "0xBFC07B88", + "caller_pc": "0xBFC07BA4", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC07B88", + "caller_pc": "0xBFC07BCC", + "callee_addr": "0xBFC083CC", + "in_rom": true + }, { "caller_func": "0xBFC07C1C", "caller_pc": "0xBFC07C68", @@ -1064,6 +2366,1692 @@ "callee_addr": "0xBFC0D950", "in_rom": true }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07F3C", + "callee_addr": "0xBFC0DC40", + "in_rom": true + }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07F5C", + "callee_addr": "0xBFC0DC40", + "in_rom": true + }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07F7C", + "callee_addr": "0xBFC0D950", + "in_rom": true + }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07FA4", + "callee_addr": "0xBFC0D9E0", + "in_rom": true + }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07FCC", + "callee_addr": "0xBFC0D9E0", + "in_rom": true + }, + { + "caller_func": "0xBFC07F28", + "caller_pc": "0xBFC07FE4", + "callee_addr": "0xBFC0D950", + "in_rom": true + }, + { + "caller_func": "0xBFC08098", + "caller_pc": "0xBFC080A8", + "callee_addr": "0xBFC07F28", + "in_rom": true + }, + { + "caller_func": "0xBFC08098", + "caller_pc": "0xBFC080C4", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC08098", + "caller_pc": "0xBFC0816C", + "callee_addr": "0xBFC083CC", + "in_rom": true + }, + { + "caller_func": "0xBFC08098", + "caller_pc": "0xBFC081E0", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC081FC", + "caller_pc": "0xBFC08210", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC081FC", + "caller_pc": "0xBFC08248", + "callee_addr": "0xBFC03494", + "in_rom": true + }, + { + "caller_func": "0xBFC081FC", + "caller_pc": "0xBFC082AC", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC081FC", + "caller_pc": "0xBFC08324", + "callee_addr": "0xBFC08098", + "in_rom": true + }, + { + "caller_func": "0xBFC08354", + "caller_pc": "0xBFC083B0", + "callee_addr": "0xBFC07410", + "in_rom": true + }, + { + "caller_func": "0xBFC08354", + "caller_pc": "0xBFC0838C", + "callee_addr": "0xBFC02EA0", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC0844C", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC08414", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC08424", + "callee_addr": "0xBFC03190", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC08430", + "callee_addr": "0xBFC03190", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC084B4", + "callee_addr": "0xBFC07664", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC08508", + "callee_addr": "0xBFC07700", + "in_rom": true + }, + { + "caller_func": "0xBFC083CC", + "caller_pc": "0xBFC08558", + "callee_addr": "0xBFC08020", + "in_rom": true + }, + { + "caller_func": "0xBFC085B0", + "caller_pc": "0xBFC085BC", + "callee_addr": "0xBFC0D9F0", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC085DC", + "callee_addr": "0xBFC0D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC085E4", + "callee_addr": "0xBFC0DC50", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC08600", + "callee_addr": "0xBFC0DC50", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC0861C", + "callee_addr": "0xBFC0D950", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC08644", + "callee_addr": "0xBFC0D9E0", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC08668", + "callee_addr": "0xBFC0D9E0", + "in_rom": true + }, + { + "caller_func": "0xBFC085D4", + "caller_pc": "0xBFC0867C", + "callee_addr": "0xBFC0D950", + "in_rom": true + }, + { + "caller_func": "0xBFC086B0", + "caller_pc": "0xBFC086BC", + "callee_addr": "0xBFC0D9F0", + "in_rom": true + }, + { + "caller_func": "0xBFC086EC", + "caller_pc": "0xBFC08700", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0884C", + "caller_pc": "0xBFC08888", + "callee_addr": "0xBFC0C354", + "in_rom": true + }, + { + "caller_func": "0xBFC088A0", + "caller_pc": "0xBFC088CC", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC088A0", + "caller_pc": "0xBFC088FC", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC088A0", + "caller_pc": "0xBFC08908", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0895C", + "caller_pc": "0xBFC08988", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC089C0", + "caller_pc": "0xBFC08A04", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC089C0", + "caller_pc": "0xBFC08A18", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC089C0", + "caller_pc": "0xBFC08A88", + "callee_addr": "0xBFC08B3C", + "in_rom": true + }, + { + "caller_func": "0xBFC089C0", + "caller_pc": "0xBFC08A5C", + "callee_addr": "0xBFC0B170", + "in_rom": true + }, + { + "caller_func": "0xBFC089C0", + "caller_pc": "0xBFC08AC4", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08B5C", + "callee_addr": "0xBFC0DA10", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08B90", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08BA4", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08C7C", + "callee_addr": "0xBFC0DA10", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08C2C", + "callee_addr": "0xBFC0B170", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08C8C", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08C94", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08F94", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08CD0", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08D00", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08D10", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08D44", + "callee_addr": "0xBFC08720", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08D84", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08DB0", + "callee_addr": "0xBFC08FFC", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08F20", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08F30", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08F48", + "callee_addr": "0xBFC08720", + "in_rom": true + }, + { + "caller_func": "0xBFC08B3C", + "caller_pc": "0xBFC08F6C", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC09144", + "caller_pc": "0xBFC0916C", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC09144", + "caller_pc": "0xBFC09198", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC091CC", + "caller_pc": "0xBFC09230", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC091CC", + "caller_pc": "0xBFC09248", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC091CC", + "caller_pc": "0xBFC0926C", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC09440", + "callee_addr": "0xBFC0C0DC", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC0945C", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC09354", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC0936C", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC09488", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC09390", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC094A0", + "callee_addr": "0xBFC09598", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC093AC", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC092EC", + "caller_pc": "0xBFC093C4", + "callee_addr": "0xBFC09598", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC09660", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC09670", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC096A8", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC096B8", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC096C0", + "callee_addr": "0xBFC087C4", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC096D0", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC09598", + "caller_pc": "0xBFC096E8", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC0982C", + "callee_addr": "0xBFC0C0DC", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC09840", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC097D4", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC09854", + "callee_addr": "0xBFC0227C", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC097DC", + "callee_addr": "0xBFC087C4", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC097F0", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC09804", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC09720", + "caller_pc": "0xBFC09818", + "callee_addr": "0xBFC0227C", + "in_rom": true + }, + { + "caller_func": "0xBFC098A8", + "caller_pc": "0xBFC098B8", + "callee_addr": "0xBFC02240", + "in_rom": true + }, + { + "caller_func": "0xBFC098A8", + "caller_pc": "0xBFC098D8", + "callee_addr": "0xBFC09720", + "in_rom": true + }, + { + "caller_func": "0xBFC098A8", + "caller_pc": "0xBFC098F0", + "callee_addr": "0xBFC09720", + "in_rom": true + }, + { + "caller_func": "0xBFC09914", + "caller_pc": "0xBFC09924", + "callee_addr": "0xBFC088A0", + "in_rom": true + }, + { + "caller_func": "0xBFC09914", + "caller_pc": "0xBFC0992C", + "callee_addr": "0xBFC08B3C", + "in_rom": true + }, + { + "caller_func": "0xBFC09914", + "caller_pc": "0xBFC09934", + "callee_addr": "0xBFC08B3C", + "in_rom": true + }, + { + "caller_func": "0xBFC0994C", + "caller_pc": "0xBFC09954", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC099D0", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC099EC", + "callee_addr": "0xBFC089C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09A14", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09C58", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09A24", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09C68", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09B44", + "callee_addr": "0xBFC03418", + "in_rom": true + }, + { + "caller_func": "0xBFC0996C", + "caller_pc": "0xBFC09BCC", + "callee_addr": "0xBFC098A8", + "in_rom": true + }, + { + "caller_func": "0xBFC09CDC", + "caller_pc": "0xBFC09D20", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09DAC", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09FB0", + "callee_addr": "0xBFC0A3D4", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09FC4", + "callee_addr": "0xBFC091CC", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09EAC", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09EF8", + "callee_addr": "0xBFC0A3D4", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09ED0", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09F08", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC09D3C", + "caller_pc": "0xBFC09F28", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A0F0", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A304", + "callee_addr": "0xBFC0A3D4", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A318", + "callee_addr": "0xBFC092EC", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A1F0", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A23C", + "callee_addr": "0xBFC0A3D4", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A214", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A24C", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC0A080", + "caller_pc": "0xBFC0A27C", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0A4B4", + "caller_pc": "0xBFC0A514", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A4B4", + "caller_pc": "0xBFC0A540", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0A4B4", + "caller_pc": "0xBFC0A5BC", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC0A5E4", + "caller_pc": "0xBFC0A638", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A5E4", + "caller_pc": "0xBFC0A644", + "callee_addr": "0xBFC089C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0A5E4", + "caller_pc": "0xBFC0A670", + "callee_addr": "0xBFC03494", + "in_rom": true + }, + { + "caller_func": "0xBFC0A5E4", + "caller_pc": "0xBFC0A73C", + "callee_addr": "0xBFC0A4B4", + "in_rom": true + }, + { + "caller_func": "0xBFC0A754", + "caller_pc": "0xBFC0A7BC", + "callee_addr": "0xBFC0DB90", + "in_rom": true + }, + { + "caller_func": "0xBFC0A754", + "caller_pc": "0xBFC0A7E0", + "callee_addr": "0xBFC03494", + "in_rom": true + }, + { + "caller_func": "0xBFC0A754", + "caller_pc": "0xBFC0A838", + "callee_addr": "0xBFC03494", + "in_rom": true + }, + { + "caller_func": "0xBFC0A754", + "caller_pc": "0xBFC0A7F4", + "callee_addr": "0xBFC0A43C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A754", + "caller_pc": "0xBFC0A84C", + "callee_addr": "0xBFC0A43C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A8BC", + "caller_pc": "0xBFC0A910", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0A8BC", + "caller_pc": "0xBFC0A91C", + "callee_addr": "0xBFC089C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0A8BC", + "caller_pc": "0xBFC0A934", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0A8BC", + "caller_pc": "0xBFC0A944", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0A8BC", + "caller_pc": "0xBFC0AADC", + "callee_addr": "0xBFC098A8", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ABC0", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ABCC", + "callee_addr": "0xBFC089C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ABE4", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ABF4", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0AC20", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ACA0", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ACC0", + "callee_addr": "0xBFC098A8", + "in_rom": true + }, + { + "caller_func": "0xBFC0AB60", + "caller_pc": "0xBFC0ACD8", + "callee_addr": "0xBFC033C8", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0AD5C", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0AD68", + "callee_addr": "0xBFC089C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0AD80", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0AD90", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0ADB8", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0ADC8", + "callee_addr": "0xBFC0A754", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0ADD8", + "callee_addr": "0xBFC0DB80", + "in_rom": true + }, + { + "caller_func": "0xBFC0AD08", + "caller_pc": "0xBFC0B02C", + "callee_addr": "0xBFC098A8", + "in_rom": true + }, + { + "caller_func": "0xBFC0B0D0", + "caller_pc": "0xBFC0B120", + "callee_addr": "0xBFC0884C", + "in_rom": true + }, + { + "caller_func": "0xBFC0B0D0", + "caller_pc": "0xBFC0B134", + "callee_addr": "0xBFC0B170", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B1B0", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B1C8", + "callee_addr": "0xBFC087C4", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B1D0", + "callee_addr": "0xBFC0DA10", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B1E0", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B210", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B250", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B26C", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B274", + "callee_addr": "0xBFC087C4", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B288", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B2B8", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B304", + "callee_addr": "0xBFC02B50", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B30C", + "callee_addr": "0xBFC087C4", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B31C", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0B170", + "caller_pc": "0xBFC0B34C", + "callee_addr": "0xBFC0895C", + "in_rom": true + }, + { + "caller_func": "0xBFC0B394", + "caller_pc": "0xBFC0B39C", + "callee_addr": "0xBFC0DA30", + "in_rom": true + }, + { + "caller_func": "0xBFC0B394", + "caller_pc": "0xBFC0B534", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0B394", + "caller_pc": "0xBFC0B430", + "callee_addr": "0xBFC0A3D4", + "in_rom": true + }, + { + "caller_func": "0xBFC0B394", + "caller_pc": "0xBFC0B448", + "callee_addr": "0xBFC09540", + "in_rom": true + }, + { + "caller_func": "0xBFC0B394", + "caller_pc": "0xBFC0B4D8", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0B54C", + "caller_pc": "0xBFC0B554", + "callee_addr": "0xBFC0DA30", + "in_rom": true + }, + { + "caller_func": "0xBFC0B54C", + "caller_pc": "0xBFC0B588", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0B5A0", + "caller_pc": "0xBFC0B5A8", + "callee_addr": "0xBFC0DA30", + "in_rom": true + }, + { + "caller_func": "0xBFC0B5A0", + "caller_pc": "0xBFC0B5DC", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0B5F4", + "caller_pc": "0xBFC0B5FC", + "callee_addr": "0xBFC0DA30", + "in_rom": true + }, + { + "caller_func": "0xBFC0B5F4", + "caller_pc": "0xBFC0B630", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0B648", + "caller_pc": "0xBFC0B650", + "callee_addr": "0xBFC0DA30", + "in_rom": true + }, + { + "caller_func": "0xBFC0B648", + "caller_pc": "0xBFC0BFD0", + "callee_addr": "0xBFC0BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC0BFF0", + "caller_pc": "0xBFC0C030", + "callee_addr": "0xBFC0D970", + "in_rom": true + }, + { + "caller_func": "0xBFC0C048", + "caller_pc": "0xBFC0C088", + "callee_addr": "0xBFC0DA10", + "in_rom": true + }, + { + "caller_func": "0xBFC0C048", + "caller_pc": "0xBFC0C0A8", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0C0DC", + "caller_pc": "0xBFC0C10C", + "callee_addr": "0xBFC0DA40", + "in_rom": true + }, + { + "caller_func": "0xBFC0C140", + "caller_pc": "0xBFC0C188", + "callee_addr": "0xBFC0DA00", + "in_rom": true + }, + { + "caller_func": "0xBFC0C1FC", + "caller_pc": "0xBFC0C208", + "callee_addr": "0xBFC0D9F0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C220", + "caller_pc": "0xBFC0C230", + "callee_addr": "0xBFC0B648", + "in_rom": true + }, + { + "caller_func": "0xBFC0C248", + "caller_pc": "0xBFC0C258", + "callee_addr": "0xBFC0B5A0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C270", + "caller_pc": "0xBFC0C280", + "callee_addr": "0xBFC0B54C", + "in_rom": true + }, + { + "caller_func": "0xBFC0C298", + "caller_pc": "0xBFC0C2A8", + "callee_addr": "0xBFC0B5F4", + "in_rom": true + }, + { + "caller_func": "0xBFC0C2C0", + "caller_pc": "0xBFC0C2D0", + "callee_addr": "0xBFC0B394", + "in_rom": true + }, + { + "caller_func": "0xBFC0C2E8", + "caller_pc": "0xBFC0C2F0", + "callee_addr": "0xBFC0DA50", + "in_rom": true + }, + { + "caller_func": "0xBFC0C2E8", + "caller_pc": "0xBFC0C2F8", + "callee_addr": "0xBFC0DA60", + "in_rom": true + }, + { + "caller_func": "0xBFC0C2E8", + "caller_pc": "0xBFC0C300", + "callee_addr": "0xBFC09914", + "in_rom": true + }, + { + "caller_func": "0xBFC0C318", + "caller_pc": "0xBFC0C324", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0C318", + "caller_pc": "0xBFC0C334", + "callee_addr": "0xBFC0DA20", + "in_rom": true + }, + { + "caller_func": "0xBFC0C318", + "caller_pc": "0xBFC0C33C", + "callee_addr": "0xBFC09144", + "in_rom": true + }, + { + "caller_func": "0xBFC0C354", + "caller_pc": "0xBFC0C364", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C354", + "caller_pc": "0xBFC0C374", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C354", + "caller_pc": "0xBFC0C384", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C354", + "caller_pc": "0xBFC0C394", + "callee_addr": "0xBFC0D990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C590", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C5A4", + "callee_addr": "0xBFC0DAA0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C5AC", + "callee_addr": "0xBFC0DAB0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C638", + "callee_addr": "0xBFC0D960", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C640", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C69C", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C670", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C6F8", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C700", + "callee_addr": "0xBFC0D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C580", + "caller_pc": "0xBFC0C6CC", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C730", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C748", + "callee_addr": "0xBFC0DAC0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C7D4", + "callee_addr": "0xBFC0DAD0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C7DC", + "callee_addr": "0xBFC0D960", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C7E8", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C7F4", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C7FC", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C720", + "caller_pc": "0xBFC0C804", + "callee_addr": "0xBFC0D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C830", + "caller_pc": "0xBFC0C84C", + "callee_addr": "0xBFC0D8A0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C830", + "caller_pc": "0xBFC0C860", + "callee_addr": "0xBFC0DBA0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C830", + "caller_pc": "0xBFC0C86C", + "callee_addr": "0xBFC0D8D0", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C8A8", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C8B8", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C8C8", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C8E8", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C8F4", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C900", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C90C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C918", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C93C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C948", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C954", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C960", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C96C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C98C", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0C890", + "caller_pc": "0xBFC0C9AC", + "callee_addr": "0xBFC01ACC", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0C9E4", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA30", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA3C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA48", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA54", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA60", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA6C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0C9CC", + "caller_pc": "0xBFC0CA88", + "callee_addr": "0xBFC0CD80", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CC50", + "callee_addr": "0xBFC0DBE0", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CB04", + "callee_addr": "0xBFC0D11C", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CB14", + "callee_addr": "0xBFC0DBB0", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CC20", + "callee_addr": "0xBFC0D34C", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CB20", + "callee_addr": "0xBFC0D11C", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CB58", + "callee_addr": "0xBFC0DBC0", + "in_rom": true + }, + { + "caller_func": "0xBFC0CAB4", + "caller_pc": "0xBFC0CB9C", + "callee_addr": "0xBFC0DBD0", + "in_rom": true + }, + { + "caller_func": "0xBFC0CC68", + "caller_pc": "0xBFC0CCD0", + "callee_addr": "0xBFC0D11C", + "in_rom": true + }, + { + "caller_func": "0xBFC0CC68", + "caller_pc": "0xBFC0CCE0", + "callee_addr": "0xBFC0DBB0", + "in_rom": true + }, + { + "caller_func": "0xBFC0CC68", + "caller_pc": "0xBFC0CD44", + "callee_addr": "0xBFC0C9CC", + "in_rom": true + }, + { + "caller_func": "0xBFC0CC68", + "caller_pc": "0xBFC0CCEC", + "callee_addr": "0xBFC0D11C", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CDA4", + "callee_addr": "0xBFC0CF84", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE00", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE0C", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE18", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE24", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE38", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CE44", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CF18", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CF24", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0CD80", + "caller_pc": "0xBFC0CF64", + "callee_addr": "0xBFC01A60", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D254", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D230", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D264", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D284", + "callee_addr": "0xBFC0D0CC", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D290", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D2A4", + "callee_addr": "0xBFC0CD80", + "in_rom": true + }, + { + "caller_func": "0xBFC0D11C", + "caller_pc": "0xBFC0D2DC", + "callee_addr": "0xBFC018E0", + "in_rom": true + }, + { + "caller_func": "0xBFC0D34C", + "caller_pc": "0xBFC0D39C", + "callee_addr": "0xBFC0DBC0", + "in_rom": true + }, + { + "caller_func": "0xBFC0D34C", + "caller_pc": "0xBFC0D3EC", + "callee_addr": "0xBFC0DBC0", + "in_rom": true + }, + { + "caller_func": "0xBFC0D34C", + "caller_pc": "0xBFC0D468", + "callee_addr": "0xBFC03990", + "in_rom": true + }, + { + "caller_func": "0xBFC0D4CC", + "caller_pc": "0xBFC0D4D8", + "callee_addr": "0xBFC0D9F0", + "in_rom": true + }, { "caller_func": "0xBFC0D570", "caller_pc": "0xBFC0D580", @@ -1195,6 +4183,12666 @@ "caller_pc": "0xBFC0D830", "callee_addr": "0xBFC0D640", "in_rom": true + }, + { + "caller_func": "0xBFC10780", + "caller_pc": "0xBFC107B8", + "callee_addr": "0xBFC109A0", + "in_rom": true + }, + { + "caller_func": "0xBFC10C74", + "caller_pc": "0xBFC10EA0", + "callee_addr": "0xBFC10B30", + "in_rom": true + }, + { + "caller_func": "0xBFC10C74", + "caller_pc": "0xBFC10CFC", + "callee_addr": "0xBFC10B30", + "in_rom": true + }, + { + "caller_func": "0xBFC10C74", + "caller_pc": "0xBFC10DF4", + "callee_addr": "0xBFC10B30", + "in_rom": true + }, + { + "caller_func": "0xBFC11008", + "caller_pc": "0xBFC11048", + "callee_addr": "0xBFC122A0", + "in_rom": true + }, + { + "caller_func": "0xBFC11008", + "caller_pc": "0xBFC11078", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC11008", + "caller_pc": "0xBFC11094", + "callee_addr": "0xBFC122A0", + "in_rom": true + }, + { + "caller_func": "0xBFC11008", + "caller_pc": "0xBFC110A0", + "callee_addr": "0xBFC122A0", + "in_rom": true + }, + { + "caller_func": "0xBFC11294", + "caller_pc": "0xBFC112D8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC112F4", + "caller_pc": "0xBFC1133C", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11358", + "caller_pc": "0xBFC113A0", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC113BC", + "caller_pc": "0xBFC11404", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11420", + "caller_pc": "0xBFC11440", + "callee_addr": "0xBFC10A40", + "in_rom": true + }, + { + "caller_func": "0xBFC11458", + "caller_pc": "0xBFC11478", + "callee_addr": "0xBFC10A40", + "in_rom": true + }, + { + "caller_func": "0xBFC11490", + "caller_pc": "0xBFC114B0", + "callee_addr": "0xBFC10A40", + "in_rom": true + }, + { + "caller_func": "0xBFC114C8", + "caller_pc": "0xBFC114E8", + "callee_addr": "0xBFC10A40", + "in_rom": true + }, + { + "caller_func": "0xBFC11560", + "caller_pc": "0xBFC115D8", + "callee_addr": "0xBFC10A40", + "in_rom": true + }, + { + "caller_func": "0xBFC11560", + "caller_pc": "0xBFC115C8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC115FC", + "caller_pc": "0xBFC11600", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC115FC", + "caller_pc": "0xBFC11608", + "callee_addr": "0xBFC16580", + "in_rom": true + }, + { + "caller_func": "0xBFC11620", + "caller_pc": "0xBFC1162C", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC1188C", + "caller_pc": "0xBFC118AC", + "callee_addr": "0xBFC11800", + "in_rom": true + }, + { + "caller_func": "0xBFC11B18", + "caller_pc": "0xBFC11B34", + "callee_addr": "0xBFC11A88", + "in_rom": true + }, + { + "caller_func": "0xBFC11BD4", + "caller_pc": "0xBFC11BFC", + "callee_addr": "0xBFC10150", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11CC0", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11CF8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11D30", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11D68", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11DA0", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11DD8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11E10", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11E48", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11E80", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11EB8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11C8C", + "caller_pc": "0xBFC11EF0", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC11F8C", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC11FC4", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC11FFC", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC12034", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC1206C", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC120A4", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC120DC", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC12114", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC1214C", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC12184", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC11F58", + "caller_pc": "0xBFC121BC", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC12224", + "caller_pc": "0xBFC12274", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC12320", + "callee_addr": "0xBFC11C50", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC12328", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC12334", + "callee_addr": "0xBFC12370", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC1233C", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC12350", + "callee_addr": "0xBFC165A0", + "in_rom": true + }, + { + "caller_func": "0xBFC122C0", + "caller_pc": "0xBFC12358", + "callee_addr": "0xBFC165B0", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC1237C", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC12398", + "callee_addr": "0xBFC137E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123A0", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123C8", + "callee_addr": "0xBFC165C0", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123D8", + "callee_addr": "0xBFC165D0", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123E0", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123E8", + "callee_addr": "0xBFC12408", + "in_rom": true + }, + { + "caller_func": "0xBFC12370", + "caller_pc": "0xBFC123F0", + "callee_addr": "0xBFC13E60", + "in_rom": true + }, + { + "caller_func": "0xBFC12408", + "caller_pc": "0xBFC12410", + "callee_addr": "0xBFC12900", + "in_rom": true + }, + { + "caller_func": "0xBFC12408", + "caller_pc": "0xBFC12418", + "callee_addr": "0xBFC12900", + "in_rom": true + }, + { + "caller_func": "0xBFC12408", + "caller_pc": "0xBFC12428", + "callee_addr": "0xBFC12458", + "in_rom": true + }, + { + "caller_func": "0xBFC12408", + "caller_pc": "0xBFC12440", + "callee_addr": "0xBFC12458", + "in_rom": true + }, + { + "caller_func": "0xBFC12458", + "caller_pc": "0xBFC12464", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC12458", + "caller_pc": "0xBFC12494", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC12564", + "caller_pc": "0xBFC12570", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12564", + "caller_pc": "0xBFC125D0", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12628", + "caller_pc": "0xBFC12634", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12628", + "caller_pc": "0xBFC12668", + "callee_addr": "0xBFC13980", + "in_rom": true + }, + { + "caller_func": "0xBFC12628", + "caller_pc": "0xBFC1270C", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12794", + "caller_pc": "0xBFC127A0", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12794", + "caller_pc": "0xBFC127D4", + "callee_addr": "0xBFC13980", + "in_rom": true + }, + { + "caller_func": "0xBFC12794", + "caller_pc": "0xBFC12878", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12900", + "caller_pc": "0xBFC12910", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12998", + "caller_pc": "0xBFC129A0", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC129FC", + "caller_pc": "0xBFC12A08", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12AC8", + "caller_pc": "0xBFC12AE0", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12AC8", + "caller_pc": "0xBFC12AE8", + "callee_addr": "0xBFC165F0", + "in_rom": true + }, + { + "caller_func": "0xBFC12B00", + "caller_pc": "0xBFC12B1C", + "callee_addr": "0xBFC12900", + "in_rom": true + }, + { + "caller_func": "0xBFC12B00", + "caller_pc": "0xBFC12B38", + "callee_addr": "0xBFC12370", + "in_rom": true + }, + { + "caller_func": "0xBFC12B00", + "caller_pc": "0xBFC12B44", + "callee_addr": "0xBFC16600", + "in_rom": true + }, + { + "caller_func": "0xBFC12B60", + "caller_pc": "0xBFC12BAC", + "callee_addr": "0xBFC12AC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12C08", + "caller_pc": "0xBFC12C64", + "callee_addr": "0xBFC16610", + "in_rom": true + }, + { + "caller_func": "0xBFC12C08", + "caller_pc": "0xBFC12CB0", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12C08", + "caller_pc": "0xBFC12CBC", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC12C08", + "caller_pc": "0xBFC12CC4", + "callee_addr": "0xBFC138AC", + "in_rom": true + }, + { + "caller_func": "0xBFC12CE8", + "caller_pc": "0xBFC12E6C", + "callee_addr": "0xBFC12C08", + "in_rom": true + }, + { + "caller_func": "0xBFC12CE8", + "caller_pc": "0xBFC12DFC", + "callee_addr": "0xBFC16590", + "in_rom": true + }, + { + "caller_func": "0xBFC12EA4", + "caller_pc": "0xBFC12EDC", + "callee_addr": "0xBFC12AC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12F6C", + "caller_pc": "0xBFC12F74", + "callee_addr": "0xBFC12BC8", + "in_rom": true + }, + { + "caller_func": "0xBFC12FB4", + "caller_pc": "0xBFC12FDC", + "callee_addr": "0xBFC12AC8", + "in_rom": true + }, + { + "caller_func": "0xBFC13070", + "caller_pc": "0xBFC13080", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC130AC", + "caller_pc": "0xBFC130B4", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC130AC", + "caller_pc": "0xBFC130E4", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC13178", + "caller_pc": "0xBFC13180", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC13178", + "caller_pc": "0xBFC131B0", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC13244", + "caller_pc": "0xBFC1324C", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC13244", + "caller_pc": "0xBFC1327C", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC13310", + "caller_pc": "0xBFC13318", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC13310", + "caller_pc": "0xBFC13348", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC133D8", + "caller_pc": "0xBFC133E0", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC133D8", + "caller_pc": "0xBFC13410", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC134A4", + "caller_pc": "0xBFC134C0", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC134A4", + "caller_pc": "0xBFC134F4", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC135AC", + "caller_pc": "0xBFC135BC", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC135AC", + "caller_pc": "0xBFC135E0", + "callee_addr": "0xBFC12B60", + "in_rom": true + }, + { + "caller_func": "0xBFC135AC", + "caller_pc": "0xBFC13614", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC135AC", + "caller_pc": "0xBFC1364C", + "callee_addr": "0xBFC12CE8", + "in_rom": true + }, + { + "caller_func": "0xBFC1376C", + "caller_pc": "0xBFC13788", + "callee_addr": "0xBFC16620", + "in_rom": true + }, + { + "caller_func": "0xBFC1376C", + "caller_pc": "0xBFC13794", + "callee_addr": "0xBFC16570", + "in_rom": true + }, + { + "caller_func": "0xBFC137E0", + "caller_pc": "0xBFC1383C", + "callee_addr": "0xBFC16610", + "in_rom": true + }, + { + "caller_func": "0xBFC138AC", + "caller_pc": "0xBFC1390C", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC13980", + "caller_pc": "0xBFC139D4", + "callee_addr": "0xBFC129FC", + "in_rom": true + }, + { + "caller_func": "0xBFC13A04", + "caller_pc": "0xBFC13AD8", + "callee_addr": "0xBFC1302C", + "in_rom": true + }, + { + "caller_func": "0xBFC13A04", + "caller_pc": "0xBFC13A54", + "callee_addr": "0xBFC165F0", + "in_rom": true + }, + { + "caller_func": "0xBFC13AF0", + "caller_pc": "0xBFC13B00", + "callee_addr": "0xBFC12628", + "in_rom": true + }, + { + "caller_func": "0xBFC13B24", + "caller_pc": "0xBFC13B30", + "callee_addr": "0xBFC12628", + "in_rom": true + }, + { + "caller_func": "0xBFC13B6C", + "caller_pc": "0xBFC13BA4", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13B6C", + "caller_pc": "0xBFC13B90", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13B6C", + "caller_pc": "0xBFC13C1C", + "callee_addr": "0xBFC12794", + "in_rom": true + }, + { + "caller_func": "0xBFC13C34", + "caller_pc": "0xBFC13C4C", + "callee_addr": "0xBFC12794", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13CB0", + "callee_addr": "0xBFC13AF0", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D38", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D5C", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13CFC", + "callee_addr": "0xBFC13AF0", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D64", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D6C", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D28", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13D18", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13DC4", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13C64", + "caller_pc": "0xBFC13DB4", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13E04", + "caller_pc": "0xBFC13E34", + "callee_addr": "0xBFC13B6C", + "in_rom": true + }, + { + "caller_func": "0xBFC13E60", + "caller_pc": "0xBFC13E70", + "callee_addr": "0xBFC122A0", + "in_rom": true + }, + { + "caller_func": "0xBFC13EE8", + "caller_pc": "0xBFC13F18", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13EE8", + "caller_pc": "0xBFC13F28", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13EE8", + "caller_pc": "0xBFC13F38", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC14040", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC14088", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC140DC", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC14130", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC14488", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC141F4", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC142C0", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC13F98", + "caller_pc": "0xBFC143C8", + "callee_addr": "0xBFC13F5C", + "in_rom": true + }, + { + "caller_func": "0xBFC144BC", + "caller_pc": "0xBFC144D0", + "callee_addr": "0xBFC13F98", + "in_rom": true + }, + { + "caller_func": "0xBFC144BC", + "caller_pc": "0xBFC144D8", + "callee_addr": "0xBFC13F98", + "in_rom": true + }, + { + "caller_func": "0xBFC144BC", + "caller_pc": "0xBFC144F4", + "callee_addr": "0xBFC15CC4", + "in_rom": true + }, + { + "caller_func": "0xBFC144BC", + "caller_pc": "0xBFC14534", + "callee_addr": "0xBFC14B00", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC145EC", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC145F8", + "callee_addr": "0xBFC14764", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC1460C", + "callee_addr": "0xBFC14670", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC14638", + "callee_addr": "0xBFC11C50", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC14648", + "callee_addr": "0xBFC11C50", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC14650", + "callee_addr": "0xBFC14594", + "in_rom": true + }, + { + "caller_func": "0xBFC145C8", + "caller_pc": "0xBFC14658", + "callee_addr": "0xBFC14754", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC14698", + "callee_addr": "0xBFC13EE8", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146A0", + "callee_addr": "0xBFC16680", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146B0", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146C0", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146E4", + "callee_addr": "0xBFC13ED0", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146F0", + "callee_addr": "0xBFC110D8", + "in_rom": true + }, + { + "caller_func": "0xBFC14690", + "caller_pc": "0xBFC146F8", + "callee_addr": "0xBFC16690", + "in_rom": true + }, + { + "caller_func": "0xBFC14710", + "caller_pc": "0xBFC14718", + "callee_addr": "0xBFC16680", + "in_rom": true + }, + { + "caller_func": "0xBFC14710", + "caller_pc": "0xBFC14724", + "callee_addr": "0xBFC110D8", + "in_rom": true + }, + { + "caller_func": "0xBFC14710", + "caller_pc": "0xBFC14734", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC14710", + "caller_pc": "0xBFC1473C", + "callee_addr": "0xBFC16690", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC14778", + "callee_addr": "0xBFC13EE8", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC14780", + "callee_addr": "0xBFC16680", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC14790", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC147A0", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC147C0", + "callee_addr": "0xBFC13ED0", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC147CC", + "callee_addr": "0xBFC110D8", + "in_rom": true + }, + { + "caller_func": "0xBFC14770", + "caller_pc": "0xBFC147DC", + "callee_addr": "0xBFC16690", + "in_rom": true + }, + { + "caller_func": "0xBFC147F4", + "caller_pc": "0xBFC147FC", + "callee_addr": "0xBFC16680", + "in_rom": true + }, + { + "caller_func": "0xBFC147F4", + "caller_pc": "0xBFC14808", + "callee_addr": "0xBFC110D8", + "in_rom": true + }, + { + "caller_func": "0xBFC147F4", + "caller_pc": "0xBFC14818", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC147F4", + "caller_pc": "0xBFC14824", + "callee_addr": "0xBFC16690", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC14A04", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC149B4", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC14984", + "callee_addr": "0xBFC16640", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC14994", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC14A64", + "callee_addr": "0xBFC16630", + "in_rom": true + }, + { + "caller_func": "0xBFC1486C", + "caller_pc": "0xBFC14A74", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC14A90", + "caller_pc": "0xBFC14AD0", + "callee_addr": "0xBFC15EF8", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14B10", + "callee_addr": "0xBFC1175C", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14B20", + "callee_addr": "0xBFC1175C", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14B30", + "callee_addr": "0xBFC1175C", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14B40", + "callee_addr": "0xBFC1175C", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14B50", + "callee_addr": "0xBFC1175C", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14BD8", + "callee_addr": "0xBFC16650", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14CA8", + "callee_addr": "0xBFC15E90", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14BE8", + "callee_addr": "0xBFC11644", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14CB8", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14BF8", + "callee_addr": "0xBFC10F44", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14CC8", + "callee_addr": "0xBFC10F20", + "in_rom": true + }, + { + "caller_func": "0xBFC14B00", + "caller_pc": "0xBFC14CDC", + "callee_addr": "0xBFC1486C", + "in_rom": true + }, + { + "caller_func": "0xBFC158A8", + "caller_pc": "0xBFC158B0", + "callee_addr": "0xBFC14594", + "in_rom": true + }, + { + "caller_func": "0xBFC158A8", + "caller_pc": "0xBFC15908", + "callee_addr": "0xBFC15EBC", + "in_rom": true + }, + { + "caller_func": "0xBFC158A8", + "caller_pc": "0xBFC15910", + "callee_addr": "0xBFC1484C", + "in_rom": true + }, + { + "caller_func": "0xBFC15B9C", + "caller_pc": "0xBFC15BC0", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC15B9C", + "caller_pc": "0xBFC15BEC", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC15B9C", + "caller_pc": "0xBFC15CA8", + "callee_addr": "0xBFC165E0", + "in_rom": true + }, + { + "caller_func": "0xBFC15B9C", + "caller_pc": "0xBFC15C84", + "callee_addr": "0xBFC145C8", + "in_rom": true + }, + { + "caller_func": "0xBFC15B9C", + "caller_pc": "0xBFC15C94", + "callee_addr": "0xBFC14690", + "in_rom": true + }, + { + "caller_func": "0xBFC16170", + "caller_pc": "0xBFC16184", + "callee_addr": "0xBFC11C14", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18008", + "callee_addr": "0xB005A8D0", + "in_rom": false + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18024", + "callee_addr": "0xB005A8E0", + "in_rom": false + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC1802C", + "callee_addr": "0xBFC18798", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18058", + "callee_addr": "0xBFC283F0", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18060", + "callee_addr": "0xBFC36F90", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18068", + "callee_addr": "0xBFC27DB0", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18070", + "callee_addr": "0xBFC27E88", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18080", + "callee_addr": "0xBFC27910", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18088", + "callee_addr": "0xBFC28490", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18090", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18098", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC180A0", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC180A8", + "callee_addr": "0xBFC1DBF4", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC180B0", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC180B8", + "callee_addr": "0xBFC1DDD8", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC180F4", + "callee_addr": "0xBFC1DF50", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18118", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18120", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18200", + "callee_addr": "0xBFC25E8C", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18158", + "callee_addr": "0xBFC3EFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18160", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18214", + "callee_addr": "0xBFC41E30", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18220", + "callee_addr": "0xBFC41F10", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18228", + "callee_addr": "0xBFC336F0", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC18184", + "callee_addr": "0xBFC27B24", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC1818C", + "callee_addr": "0xBFC18684", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC181C4", + "callee_addr": "0xBFC1E0C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC1823C", + "callee_addr": "0xBFC18254", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC181CC", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC18000", + "caller_pc": "0xBFC181D4", + "callee_addr": "0xBFC25558", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18264", + "callee_addr": "0xBFC2BF1C", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18274", + "callee_addr": "0xBFC41ED8", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18284", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC182A0", + "callee_addr": "0xBFC41E30", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC182A8", + "callee_addr": "0xBFC41F54", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC182B8", + "callee_addr": "0xBFC18D10", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC183D4", + "callee_addr": "0xBFC27B24", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC183DC", + "callee_addr": "0xBFC27E68", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18374", + "callee_addr": "0xBFC1F778", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC183E4", + "callee_addr": "0xBFC37028", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC183EC", + "callee_addr": "0xBFC254B0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC183F4", + "callee_addr": "0xBFC188F0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18454", + "callee_addr": "0xBFC26660", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC1846C", + "callee_addr": "0xBFC193C0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC184E4", + "callee_addr": "0xBFC26660", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC184F4", + "callee_addr": "0xBFC19A58", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18514", + "callee_addr": "0xBFC266B0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC1847C", + "callee_addr": "0xBFC1952C", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18524", + "callee_addr": "0xBFC193C0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC1848C", + "callee_addr": "0xBFC193C0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18638", + "callee_addr": "0xBFC188F0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC1852C", + "callee_addr": "0xBFC1E3CC", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC1849C", + "callee_addr": "0xBFC1952C", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC184AC", + "callee_addr": "0xBFC19A58", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18570", + "callee_addr": "0xBFC2D0E0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18558", + "callee_addr": "0xBFC214B0", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC184C0", + "callee_addr": "0xBFC28064", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18560", + "callee_addr": "0xBFC24288", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18620", + "callee_addr": "0xBFC268EC", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC18630", + "callee_addr": "0xBFC1952C", + "in_rom": true + }, + { + "caller_func": "0xBFC18254", + "caller_pc": "0xBFC185EC", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18698", + "callee_addr": "0xBFC26C10", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC186F8", + "callee_addr": "0xBFC273E4", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18700", + "callee_addr": "0xBFC25558", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18708", + "callee_addr": "0xBFC36F90", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC186D0", + "callee_addr": "0xB005A900", + "in_rom": false + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18718", + "callee_addr": "0xBFC27DB0", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18728", + "callee_addr": "0xBFC29AE0", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC186E0", + "callee_addr": "0xBFC273E4", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18720", + "callee_addr": "0xBFC28064", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18730", + "callee_addr": "0xBFC27190", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18738", + "callee_addr": "0xBFC27BDC", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC1874C", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18764", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC18754", + "callee_addr": "0xBFC27BDC", + "in_rom": true + }, + { + "caller_func": "0xBFC18684", + "caller_pc": "0xBFC1876C", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC187B0", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC187C0", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC18840", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC18864", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC1884C", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC1887C", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC18798", + "caller_pc": "0xBFC18874", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC188F0", + "caller_pc": "0xBFC188F8", + "callee_addr": "0xBFC18990", + "in_rom": true + }, + { + "caller_func": "0xBFC188F0", + "caller_pc": "0xBFC18960", + "callee_addr": "0xBFC2E6B8", + "in_rom": true + }, + { + "caller_func": "0xBFC188F0", + "caller_pc": "0xBFC18940", + "callee_addr": "0xBFC2E6B8", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18A0C", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18A3C", + "callee_addr": "0xBFC1CAF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18A74", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18AB8", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18C50", + "callee_addr": "0xBFC1F778", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18C64", + "callee_addr": "0xBFC1BD3C", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B04", + "callee_addr": "0xBFC3EFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B0C", + "callee_addr": "0xBFC1D9C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B30", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B38", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B40", + "callee_addr": "0xBFC18684", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18C04", + "callee_addr": "0xBFC1F778", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B50", + "callee_addr": "0xBFC4203C", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18C24", + "callee_addr": "0xBFC1BD3C", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B74", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B7C", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B84", + "callee_addr": "0xBFC1E0C4", + "in_rom": true + }, + { + "caller_func": "0xBFC18990", + "caller_pc": "0xBFC18B8C", + "callee_addr": "0xBFC25558", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D24", + "callee_addr": "0xBFC33FB4", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D2C", + "callee_addr": "0xBFC33FCC", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D3C", + "callee_addr": "0xBFC33F00", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D4C", + "callee_addr": "0xBFC33F20", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D54", + "callee_addr": "0xBFC2BF10", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D70", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18D90", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18DB0", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18DD0", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E34", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E40", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E4C", + "callee_addr": "0xBFC374EC", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E58", + "callee_addr": "0xBFC374EC", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E70", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18E88", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18EA0", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18EB8", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18ED0", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18EE8", + "callee_addr": "0xBFC30DF0", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18F40", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC18FC0", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19048", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC190C8", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19148", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC191C8", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19248", + "callee_addr": "0xBFC31194", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19278", + "callee_addr": "0xBFC30960", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19280", + "callee_addr": "0xBFC192E4", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC1928C", + "callee_addr": "0xBFC192E4", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC19294", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC1929C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC192A8", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC192B0", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC192C0", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC18D10", + "caller_pc": "0xBFC192CC", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC192E4", + "caller_pc": "0xBFC192F4", + "callee_addr": "0xBFC399EC", + "in_rom": true + }, + { + "caller_func": "0xBFC192E4", + "caller_pc": "0xBFC1939C", + "callee_addr": "0xBFC31448", + "in_rom": true + }, + { + "caller_func": "0xBFC193C0", + "caller_pc": "0xBFC19410", + "callee_addr": "0xBFC37334", + "in_rom": true + }, + { + "caller_func": "0xBFC193C0", + "caller_pc": "0xBFC19424", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC193C0", + "caller_pc": "0xBFC19438", + "callee_addr": "0xBFC31380", + "in_rom": true + }, + { + "caller_func": "0xBFC193C0", + "caller_pc": "0xBFC194E8", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC1952C", + "caller_pc": "0xBFC1953C", + "callee_addr": "0xBFC256D8", + "in_rom": true + }, + { + "caller_func": "0xBFC1952C", + "caller_pc": "0xBFC1960C", + "callee_addr": "0xBFC255A0", + "in_rom": true + }, + { + "caller_func": "0xBFC19630", + "caller_pc": "0xBFC19650", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC19630", + "caller_pc": "0xBFC19658", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC19630", + "caller_pc": "0xBFC196A0", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC19630", + "caller_pc": "0xBFC196B0", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19724", + "callee_addr": "0xB005A930", + "in_rom": false + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19768", + "callee_addr": "0xB005A930", + "in_rom": false + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC1974C", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19794", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC199F4", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19A10", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19A24", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19A30", + "callee_addr": "0xB005A940", + "in_rom": false + }, + { + "caller_func": "0xBFC196D4", + "caller_pc": "0xBFC19A3C", + "callee_addr": "0xB005A940", + "in_rom": false + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19A6C", + "callee_addr": "0xBFC2644C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19AA4", + "callee_addr": "0xBFC317D0", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19AAC", + "callee_addr": "0xBFC2CC10", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19AD0", + "callee_addr": "0xBFC196D4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19AFC", + "callee_addr": "0xBFC196D4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19B28", + "callee_addr": "0xBFC196D4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19B54", + "callee_addr": "0xBFC196D4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19CF4", + "callee_addr": "0xBFC228D8", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19CFC", + "callee_addr": "0xBFC228D8", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D10", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D04", + "callee_addr": "0xBFC264A0", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D18", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D20", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D34", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D6C", + "callee_addr": "0xBFC19DF4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19D8C", + "callee_addr": "0xBFC19DF4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19DB4", + "callee_addr": "0xBFC19DF4", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19C28", + "callee_addr": "0xBFC2CE08", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19DC0", + "callee_addr": "0xBFC2CA9C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19DCC", + "callee_addr": "0xBFC2CA9C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19DD4", + "callee_addr": "0xBFC25D8C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19C6C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19C78", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19CAC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC19A58", + "caller_pc": "0xBFC19CB8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19E64", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19E88", + "callee_addr": "0xB005A950", + "in_rom": false + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19E98", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19EA4", + "callee_addr": "0xBFC2CA9C", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19EB0", + "callee_addr": "0xBFC2CAE0", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19ECC", + "callee_addr": "0xBFC2CA9C", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19EFC", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19F54", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC19DF4", + "caller_pc": "0xBFC19F44", + "callee_addr": "0xBFC2CF54", + "in_rom": true + }, + { + "caller_func": "0xBFC1A11C", + "caller_pc": "0xBFC1A144", + "callee_addr": "0xBFC25314", + "in_rom": true + }, + { + "caller_func": "0xBFC1A15C", + "caller_pc": "0xBFC1A164", + "callee_addr": "0xBFC24640", + "in_rom": true + }, + { + "caller_func": "0xBFC1A17C", + "caller_pc": "0xBFC1A184", + "callee_addr": "0xBFC24A48", + "in_rom": true + }, + { + "caller_func": "0xBFC1A19C", + "caller_pc": "0xBFC1A1A4", + "callee_addr": "0xBFC24418", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A468", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A4AC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A47C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A484", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A4C0", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A494", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A4CC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A4DC", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A504", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A548", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A518", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A520", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A55C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A530", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A568", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A430", + "caller_pc": "0xBFC1A578", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A5B0", + "caller_pc": "0xBFC1A5C0", + "callee_addr": "0xBFC1C9B4", + "in_rom": true + }, + { + "caller_func": "0xBFC1A5B0", + "caller_pc": "0xBFC1A61C", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC1A5B0", + "caller_pc": "0xBFC1A628", + "callee_addr": "0xBFC1A430", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A714", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A720", + "callee_addr": "0xBFC2ECD8", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A748", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A758", + "callee_addr": "0xBFC2ECD8", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A7C0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A868", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A824", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A7CC", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A874", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A8D8", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A830", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A8B8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1A8C4", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA10", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA28", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA3C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA54", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA6C", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC1A6EC", + "caller_pc": "0xBFC1AA78", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AAB0", + "callee_addr": "0xBFC1CDD8", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AAF8", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AB08", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AB18", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AB28", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AB38", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AB48", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1ABB8", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AC0C", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC1AA90", + "caller_pc": "0xBFC1AC50", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC1AC68", + "caller_pc": "0xBFC1AE0C", + "callee_addr": "0xBFC1A430", + "in_rom": true + }, + { + "caller_func": "0xBFC1AC68", + "caller_pc": "0xBFC1AD2C", + "callee_addr": "0xBFC25B74", + "in_rom": true + }, + { + "caller_func": "0xBFC1AC68", + "caller_pc": "0xBFC1ADE8", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1AE78", + "callee_addr": "0xBFC1C9B4", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1AEBC", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B654", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B138", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B46C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B65C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B474", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B668", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B0DC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B480", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B278", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B16C", + "callee_addr": "0xBFC1CBAC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B2E8", + "callee_addr": "0xBFC1B784", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B4BC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B2C0", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B370", + "callee_addr": "0xBFC1B784", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B688", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B4C8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B690", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B1D4", + "callee_addr": "0xBFC1CBAC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B69C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B04C", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B314", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B334", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B6B4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B5FC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B6C0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B608", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B6C8", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B610", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B6D4", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B61C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B5D8", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B218", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B3C0", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B3E0", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1AE68", + "caller_pc": "0xBFC1B564", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B6EC", + "caller_pc": "0xBFC1B730", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B6EC", + "caller_pc": "0xBFC1B740", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1B6EC", + "caller_pc": "0xBFC1B75C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B6EC", + "caller_pc": "0xBFC1B76C", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B824", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B860", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B8AC", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B8DC", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B92C", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B8E8", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B904", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B938", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B910", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1B9D0", + "callee_addr": "0xBFC1C4C0", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA04", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA20", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA10", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA2C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA50", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA58", + "callee_addr": "0xBFC1A430", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA60", + "callee_addr": "0xBFC1AC68", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BA74", + "callee_addr": "0xBFC1E10C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB10", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB18", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB24", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB6C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB74", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BB80", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BBC8", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BAE0", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BC10", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BC18", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BC24", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BC60", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BC9C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1B7E0", + "caller_pc": "0xBFC1BCEC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1BD68", + "caller_pc": "0xBFC1BD78", + "callee_addr": "0xBFC1C9B4", + "in_rom": true + }, + { + "caller_func": "0xBFC1BD68", + "caller_pc": "0xBFC1BDD4", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC1BEE0", + "caller_pc": "0xBFC1BF2C", + "callee_addr": "0xBFC1BF44", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BF5C", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BF78", + "callee_addr": "0xBFC1CD40", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BF88", + "callee_addr": "0xBFC1E10C", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BFDC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BFE4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1BFF0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C068", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C04C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C054", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C074", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C114", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C060", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1BF44", + "caller_pc": "0xBFC1C0E4", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C130", + "caller_pc": "0xBFC1C18C", + "callee_addr": "0xBFC1C1A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C1DC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C294", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C1E4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C2A0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C1F0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C254", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C25C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C268", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C2D0", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC1C1A4", + "caller_pc": "0xBFC1C4A8", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1C4C0", + "caller_pc": "0xBFC1C510", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1C4C0", + "caller_pc": "0xBFC1C4F8", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1C4C0", + "caller_pc": "0xBFC1C5A0", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C8C8", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C7F4", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C8D4", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C874", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C800", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C8BC", + "callee_addr": "0xBFC1E10C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C81C", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C880", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C828", + "callee_addr": "0xBFC1A6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C868", + "callee_addr": "0xBFC1E10C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C78C", + "caller_pc": "0xBFC1C830", + "callee_addr": "0xBFC1E10C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C8EC", + "caller_pc": "0xBFC1C8FC", + "callee_addr": "0xBFC1C9B4", + "in_rom": true + }, + { + "caller_func": "0xBFC1C8EC", + "caller_pc": "0xBFC1C92C", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1C8EC", + "caller_pc": "0xBFC1C934", + "callee_addr": "0xBFC1E3CC", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CA48", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CA14", + "callee_addr": "0xBFC1F980", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CA24", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CA6C", + "callee_addr": "0xBFC2069C", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CA90", + "callee_addr": "0xBFC20338", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CAB4", + "callee_addr": "0xBFC20B60", + "in_rom": true + }, + { + "caller_func": "0xBFC1C9B4", + "caller_pc": "0xBFC1CAD8", + "callee_addr": "0xBFC20B9C", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB2C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB34", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB40", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB54", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB60", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB68", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB74", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB80", + "callee_addr": "0xBFC1A3B8", + "in_rom": true + }, + { + "caller_func": "0xBFC1CAF0", + "caller_pc": "0xBFC1CB88", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1CBAC", + "caller_pc": "0xBFC1CBD0", + "callee_addr": "0xBFC1CD90", + "in_rom": true + }, + { + "caller_func": "0xBFC1CBAC", + "caller_pc": "0xBFC1CBE8", + "callee_addr": "0xBFC1CD90", + "in_rom": true + }, + { + "caller_func": "0xBFC1CBAC", + "caller_pc": "0xBFC1CC34", + "callee_addr": "0xBFC1CD90", + "in_rom": true + }, + { + "caller_func": "0xBFC1CBAC", + "caller_pc": "0xBFC1CD28", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1CDD8", + "caller_pc": "0xBFC1D874", + "callee_addr": "0xB005A9B0", + "in_rom": false + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1D9F0", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA00", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA08", + "callee_addr": "0xBFC1CAF0", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA30", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA38", + "callee_addr": "0xBFC1CAF0", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA58", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA68", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DAEC", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DA90", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1D9C4", + "caller_pc": "0xBFC1DAFC", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DBFC", + "callee_addr": "0xB005A930", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DC4C", + "callee_addr": "0xB005A9C0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DC9C", + "callee_addr": "0xB005A9C0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DCB4", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DCD4", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DCF4", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD14", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD34", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD54", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD68", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD78", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD88", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DD98", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DDA8", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DDB8", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC1DBF4", + "caller_pc": "0xBFC1DDC0", + "callee_addr": "0xBFC3F090", + "in_rom": true + }, + { + "caller_func": "0xBFC1DDD8", + "caller_pc": "0xBFC1DDEC", + "callee_addr": "0xBFC196C8", + "in_rom": true + }, + { + "caller_func": "0xBFC1DDD8", + "caller_pc": "0xBFC1DE3C", + "callee_addr": "0xBFC1C9A8", + "in_rom": true + }, + { + "caller_func": "0xBFC1DF50", + "caller_pc": "0xBFC1DFC8", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1DF50", + "caller_pc": "0xBFC1E01C", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC1E0C4", + "caller_pc": "0xBFC1E0D4", + "callee_addr": "0xB005A9F0", + "in_rom": false + }, + { + "caller_func": "0xBFC1E0C4", + "caller_pc": "0xBFC1E0F4", + "callee_addr": "0xB005A9F0", + "in_rom": false + }, + { + "caller_func": "0xBFC1E10C", + "caller_pc": "0xBFC1E184", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E10C", + "caller_pc": "0xBFC1E194", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E3DC", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E638", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E64C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E8D4", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E8E8", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F140", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E95C", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E59C", + "callee_addr": "0xBFC1E1CC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E68C", + "callee_addr": "0xBFC2125C", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E96C", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F158", + "callee_addr": "0xBFC3F19C", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E910", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F4A0", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E69C", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E924", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EB94", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EE14", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F178", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E6B4", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E94C", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EBA4", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EE24", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EBB8", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ED40", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EA00", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E9C8", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ED88", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F2D0", + "callee_addr": "0xBFC1D980", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F5F8", + "callee_addr": "0xBFC1AC68", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ED90", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F600", + "callee_addr": "0xBFC1B7E0", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E6DC", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E710", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EA10", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EAC8", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EAEC", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F394", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EEA8", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EE70", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F4F0", + "callee_addr": "0xBFC1E1CC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EA24", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F048", + "callee_addr": "0xBFC20B60", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EEB8", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EF94", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E9F0", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E6F4", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E728", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EAE4", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F640", + "callee_addr": "0xBFC1A420", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ECA0", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ED78", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EB14", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EE98", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EAA0", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EBF8", + "callee_addr": "0xBFC1C1A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EC6C", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F0A0", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F0B8", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F0D8", + "callee_addr": "0xBFC20B9C", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F5E4", + "callee_addr": "0xBFC1E1CC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F638", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EED8", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EAB8", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F100", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EFBC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ECC8", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F670", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F694", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ECD0", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F214", + "callee_addr": "0xBFC1CAF0", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EA58", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EFEC", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F340", + "callee_addr": "0xBFC1CAF0", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EC1C", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E790", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E86C", + "callee_addr": "0xBFC1A420", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F11C", + "callee_addr": "0xBFC20F24", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EDE8", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E7A0", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EB48", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E7B0", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1F014", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EC44", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EF84", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E7D0", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1EF38", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E8A4", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1ED14", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E804", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1E3CC", + "caller_pc": "0xBFC1E844", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F6AC", + "caller_pc": "0xBFC1F6FC", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1F6AC", + "caller_pc": "0xBFC1F734", + "callee_addr": "0xBFC213A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F7AC", + "callee_addr": "0xBFC1A3B8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F7CC", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F81C", + "callee_addr": "0xBFC21184", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F8A0", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F8CC", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F8DC", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F91C", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F778", + "caller_pc": "0xBFC1F92C", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1F9B4", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FB8C", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1F9C8", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FB10", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1F9D0", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FB9C", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FAD4", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FBAC", + "callee_addr": "0xBFC1BF44", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FA0C", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FBD0", + "callee_addr": "0xBFC213FC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FB38", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FA24", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FBE0", + "callee_addr": "0xBFC1FCC8", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FC18", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FC84", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FC8C", + "callee_addr": "0xBFC1E3CC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FC30", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FA70", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FA78", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FCB0", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1F980", + "caller_pc": "0xBFC1FC7C", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FCFC", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD04", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD0C", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD1C", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD2C", + "callee_addr": "0xBFC1C9A8", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD34", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD44", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FE38", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FED0", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD58", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FDC4", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FEB4", + "callee_addr": "0xBFC1C1A4", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FE20", + "callee_addr": "0xBFC1C9A8", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FE28", + "callee_addr": "0xBFC1CD40", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD80", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FF7C", + "callee_addr": "0xBFC1AE34", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FD8C", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FE8C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FE00", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1FCC8", + "caller_pc": "0xBFC1FF30", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC20034", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC200FC", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC202C8", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC2007C", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC2008C", + "callee_addr": "0xBFC1BF44", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC201FC", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC1FFA8", + "caller_pc": "0xBFC20230", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20340", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC2049C", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20394", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC205E0", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC2045C", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC204CC", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC205F0", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20600", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC2062C", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20608", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC203BC", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20484", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC203C8", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20550", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC203DC", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20668", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20578", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20408", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC20338", + "caller_pc": "0xBFC20414", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC206A4", + "callee_addr": "0xBFC1C988", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC2096C", + "callee_addr": "0xBFC1C978", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC206C8", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20A60", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC206E8", + "callee_addr": "0xBFC1AE24", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC206FC", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20790", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC207C0", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC209C8", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20A94", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20720", + "callee_addr": "0xBFC1BD58", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC207D0", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20734", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20AFC", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20B04", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20B20", + "callee_addr": "0xBFC1A414", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC207F0", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20B28", + "callee_addr": "0xBFC1AA90", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20AE0", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC2093C", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC2075C", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20768", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20A30", + "callee_addr": "0xBFC1F6AC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20A14", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20920", + "callee_addr": "0xBFC1FFA8", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC208AC", + "callee_addr": "0xBFC1B6EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2069C", + "caller_pc": "0xBFC20858", + "callee_addr": "0xBFC1C998", + "in_rom": true + }, + { + "caller_func": "0xBFC20BE4", + "caller_pc": "0xBFC20BF4", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20BE4", + "caller_pc": "0xBFC20C10", + "callee_addr": "0xBFC3FE60", + "in_rom": true + }, + { + "caller_func": "0xBFC20BE4", + "caller_pc": "0xBFC20C48", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC20BE4", + "caller_pc": "0xBFC20C2C", + "callee_addr": "0xBFC3FE60", + "in_rom": true + }, + { + "caller_func": "0xBFC20C64", + "caller_pc": "0xBFC20C78", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20C64", + "caller_pc": "0xBFC20CA4", + "callee_addr": "0xBFC3F2B4", + "in_rom": true + }, + { + "caller_func": "0xBFC20C64", + "caller_pc": "0xBFC20CC0", + "callee_addr": "0xBFC3F2B4", + "in_rom": true + }, + { + "caller_func": "0xBFC20CE4", + "caller_pc": "0xBFC20CF8", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20CE4", + "caller_pc": "0xBFC20D0C", + "callee_addr": "0xBFC3F2B4", + "in_rom": true + }, + { + "caller_func": "0xBFC20CE4", + "caller_pc": "0xBFC20D28", + "callee_addr": "0xBFC3F2B4", + "in_rom": true + }, + { + "caller_func": "0xBFC20D4C", + "caller_pc": "0xBFC20D60", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20D4C", + "caller_pc": "0xBFC20D74", + "callee_addr": "0xBFC3F484", + "in_rom": true + }, + { + "caller_func": "0xBFC20D4C", + "caller_pc": "0xBFC20D90", + "callee_addr": "0xBFC3F484", + "in_rom": true + }, + { + "caller_func": "0xBFC20DB4", + "caller_pc": "0xBFC20DC0", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20DB4", + "caller_pc": "0xBFC20DD4", + "callee_addr": "0xBFC3F9AC", + "in_rom": true + }, + { + "caller_func": "0xBFC20DB4", + "caller_pc": "0xBFC20DF0", + "callee_addr": "0xBFC3F9AC", + "in_rom": true + }, + { + "caller_func": "0xBFC20E10", + "caller_pc": "0xBFC20E1C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20E10", + "caller_pc": "0xBFC20E30", + "callee_addr": "0xBFC3FA10", + "in_rom": true + }, + { + "caller_func": "0xBFC20E10", + "caller_pc": "0xBFC20E4C", + "callee_addr": "0xBFC3FA10", + "in_rom": true + }, + { + "caller_func": "0xBFC20E6C", + "caller_pc": "0xBFC20E78", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20E6C", + "caller_pc": "0xBFC20E8C", + "callee_addr": "0xBFC3FAEC", + "in_rom": true + }, + { + "caller_func": "0xBFC20E6C", + "caller_pc": "0xBFC20EA8", + "callee_addr": "0xBFC3FAEC", + "in_rom": true + }, + { + "caller_func": "0xBFC20EC8", + "caller_pc": "0xBFC20ED4", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20EC8", + "caller_pc": "0xBFC20EE8", + "callee_addr": "0xBFC3FB74", + "in_rom": true + }, + { + "caller_func": "0xBFC20EC8", + "caller_pc": "0xBFC20F04", + "callee_addr": "0xBFC3FB74", + "in_rom": true + }, + { + "caller_func": "0xBFC20F24", + "caller_pc": "0xBFC20F38", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20F24", + "caller_pc": "0xBFC20F4C", + "callee_addr": "0xBFC40184", + "in_rom": true + }, + { + "caller_func": "0xBFC20F24", + "caller_pc": "0xBFC20F68", + "callee_addr": "0xBFC40184", + "in_rom": true + }, + { + "caller_func": "0xBFC20F8C", + "caller_pc": "0xBFC20F98", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20F8C", + "caller_pc": "0xBFC20FAC", + "callee_addr": "0xBFC40034", + "in_rom": true + }, + { + "caller_func": "0xBFC20F8C", + "caller_pc": "0xBFC20FC8", + "callee_addr": "0xBFC40034", + "in_rom": true + }, + { + "caller_func": "0xBFC20FE8", + "caller_pc": "0xBFC20FF4", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC20FE8", + "caller_pc": "0xBFC21008", + "callee_addr": "0xBFC400DC", + "in_rom": true + }, + { + "caller_func": "0xBFC20FE8", + "caller_pc": "0xBFC21024", + "callee_addr": "0xBFC400DC", + "in_rom": true + }, + { + "caller_func": "0xBFC21044", + "caller_pc": "0xBFC21058", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC21044", + "caller_pc": "0xBFC2106C", + "callee_addr": "0xBFC3F8E4", + "in_rom": true + }, + { + "caller_func": "0xBFC21044", + "caller_pc": "0xBFC210A4", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC21044", + "caller_pc": "0xBFC21088", + "callee_addr": "0xBFC3F8E4", + "in_rom": true + }, + { + "caller_func": "0xBFC210C0", + "caller_pc": "0xBFC210D4", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC210C0", + "caller_pc": "0xBFC210E8", + "callee_addr": "0xBFC3F4F0", + "in_rom": true + }, + { + "caller_func": "0xBFC210C0", + "caller_pc": "0xBFC21104", + "callee_addr": "0xBFC3F4F0", + "in_rom": true + }, + { + "caller_func": "0xBFC21128", + "caller_pc": "0xBFC21134", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC21128", + "caller_pc": "0xBFC21148", + "callee_addr": "0xBFC3FD0C", + "in_rom": true + }, + { + "caller_func": "0xBFC21128", + "caller_pc": "0xBFC21164", + "callee_addr": "0xBFC3FD0C", + "in_rom": true + }, + { + "caller_func": "0xBFC21184", + "caller_pc": "0xBFC211A0", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC21184", + "caller_pc": "0xBFC211B8", + "callee_addr": "0xBFC403C4", + "in_rom": true + }, + { + "caller_func": "0xBFC21184", + "caller_pc": "0xBFC211D8", + "callee_addr": "0xBFC403C4", + "in_rom": true + }, + { + "caller_func": "0xBFC21200", + "caller_pc": "0xBFC2121C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC21200", + "caller_pc": "0xBFC21234", + "callee_addr": "0xBFC40260", + "in_rom": true + }, + { + "caller_func": "0xBFC2125C", + "caller_pc": "0xBFC21270", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC2125C", + "caller_pc": "0xBFC21284", + "callee_addr": "0xBFC40404", + "in_rom": true + }, + { + "caller_func": "0xBFC2125C", + "caller_pc": "0xBFC212A0", + "callee_addr": "0xBFC40404", + "in_rom": true + }, + { + "caller_func": "0xBFC212C4", + "caller_pc": "0xBFC212D0", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC212C4", + "caller_pc": "0xBFC212E4", + "callee_addr": "0xBFC3F570", + "in_rom": true + }, + { + "caller_func": "0xBFC212C4", + "caller_pc": "0xBFC21300", + "callee_addr": "0xBFC3F570", + "in_rom": true + }, + { + "caller_func": "0xBFC21320", + "caller_pc": "0xBFC21334", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC21320", + "caller_pc": "0xBFC2135C", + "callee_addr": "0xBFC402DC", + "in_rom": true + }, + { + "caller_func": "0xBFC21320", + "caller_pc": "0xBFC2137C", + "callee_addr": "0xBFC402DC", + "in_rom": true + }, + { + "caller_func": "0xBFC213A4", + "caller_pc": "0xBFC213B4", + "callee_addr": "0xBFC213E8", + "in_rom": true + }, + { + "caller_func": "0xBFC213A4", + "caller_pc": "0xBFC213C0", + "callee_addr": "0xBFC213E8", + "in_rom": true + }, + { + "caller_func": "0xBFC213FC", + "caller_pc": "0xBFC21428", + "callee_addr": "0xBFC1E3CC", + "in_rom": true + }, + { + "caller_func": "0xBFC213FC", + "caller_pc": "0xBFC21430", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21534", + "callee_addr": "0xBFC2193C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC214FC", + "callee_addr": "0xBFC24F00", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2153C", + "callee_addr": "0xBFC2193C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21504", + "callee_addr": "0xBFC24F00", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2154C", + "callee_addr": "0xBFC264A0", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21640", + "callee_addr": "0xBFC218CC", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21660", + "callee_addr": "0xBFC21A9C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21674", + "callee_addr": "0xBFC21A9C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216B4", + "callee_addr": "0xBFC26550", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21880", + "callee_addr": "0xBFC2E5B4", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216BC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216C8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21890", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216D0", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216DC", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216E4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216F0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC216F8", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21600", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21704", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2170C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21718", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21740", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21748", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21754", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2175C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21768", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21770", + "callee_addr": "0xBFC2E544", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21780", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2178C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21794", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217A0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217C0", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217A8", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21800", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217CC", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC2180C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217D4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21814", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217E0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21820", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC217E8", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC214B0", + "caller_pc": "0xBFC21828", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC218CC", + "caller_pc": "0xBFC218F4", + "callee_addr": "0xBFC2531C", + "in_rom": true + }, + { + "caller_func": "0xBFC218CC", + "caller_pc": "0xBFC21900", + "callee_addr": "0xBFC1A11C", + "in_rom": true + }, + { + "caller_func": "0xBFC218CC", + "caller_pc": "0xBFC21924", + "callee_addr": "0xBFC2E8CC", + "in_rom": true + }, + { + "caller_func": "0xBFC2193C", + "caller_pc": "0xBFC21964", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC2193C", + "caller_pc": "0xBFC2197C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC2193C", + "caller_pc": "0xBFC21988", + "callee_addr": "0xB005AA30", + "in_rom": false + }, + { + "caller_func": "0xBFC2193C", + "caller_pc": "0xBFC21A1C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC2193C", + "caller_pc": "0xBFC21A4C", + "callee_addr": "0xB005AA40", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21AF0", + "callee_addr": "0xBFC24F00", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21B3C", + "callee_addr": "0xBFC22164", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21B44", + "callee_addr": "0xBFC22164", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21BB4", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21BD0", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21C30", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21C64", + "callee_addr": "0xBFC22E1C", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21D5C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21E88", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21D10", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21FBC", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21E3C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC220F4", + "callee_addr": "0xBFC22E90", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC21F70", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC22094", + "callee_addr": "0xBFC2FCC4", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC220A4", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC220B4", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC21A9C", + "caller_pc": "0xBFC220C0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC2218C", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22198", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC221B0", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC221D8", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC221C0", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC221E8", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22234", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22328", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22368", + "callee_addr": "0xBFC232DC", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22334", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22250", + "callee_addr": "0xB005AA60", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22384", + "callee_addr": "0xBFC232DC", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22260", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22270", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC222A8", + "callee_addr": "0xB005AA60", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC222CC", + "callee_addr": "0xB005AA60", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC222E8", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC22528", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC22164", + "caller_pc": "0xBFC225A0", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC226F8", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC227FC", + "callee_addr": "0xBFC2E8CC", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22714", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22724", + "callee_addr": "0xBFC2E544", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC227A8", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC2272C", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC227B0", + "callee_addr": "0xBFC264A0", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC227B8", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22740", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22758", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22748", + "callee_addr": "0xBFC265C0", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC227CC", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22768", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22780", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22770", + "callee_addr": "0xBFC26610", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22790", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22868", + "callee_addr": "0xB005AA70", + "in_rom": false + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22894", + "callee_addr": "0xB005AA80", + "in_rom": false + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC228B0", + "callee_addr": "0xBFC2531C", + "in_rom": true + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC22884", + "callee_addr": "0xB005AA70", + "in_rom": false + }, + { + "caller_func": "0xBFC226D0", + "caller_pc": "0xBFC228B8", + "callee_addr": "0xBFC19A58", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22B14", + "callee_addr": "0xBFC319EC", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22B28", + "callee_addr": "0xBFC31C64", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22B34", + "callee_addr": "0xBFC31D14", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22B54", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22B68", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22964", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22974", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC229D0", + "callee_addr": "0xBFC213F4", + "in_rom": true + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC229D8", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC229F0", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A10", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A30", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A50", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A64", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A74", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A84", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A94", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC228D8", + "caller_pc": "0xBFC22A9C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22B8C", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22BE8", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22BD8", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22BF0", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C18", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C2C", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C58", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C34", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22CD4", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C78", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22CE0", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C80", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22CF0", + "callee_addr": "0xBFC2E544", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22D98", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22C94", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22D6C", + "callee_addr": "0xBFC26550", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DA8", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22D00", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DB0", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22CA8", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DB8", + "callee_addr": "0xBFC265C0", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DE4", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22CB0", + "callee_addr": "0xBFC264A0", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DF4", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22D44", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22DFC", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22D4C", + "callee_addr": "0xBFC2E544", + "in_rom": true + }, + { + "caller_func": "0xBFC22B80", + "caller_pc": "0xBFC22E04", + "callee_addr": "0xBFC26610", + "in_rom": true + }, + { + "caller_func": "0xBFC22E1C", + "caller_pc": "0xBFC22E28", + "callee_addr": "0xB005AAB0", + "in_rom": false + }, + { + "caller_func": "0xBFC22E1C", + "caller_pc": "0xBFC22E4C", + "callee_addr": "0xB005AAC0", + "in_rom": false + }, + { + "caller_func": "0xBFC22E1C", + "caller_pc": "0xBFC22E64", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC22E1C", + "caller_pc": "0xBFC22E74", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC22E90", + "caller_pc": "0xBFC22FE4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC22E90", + "caller_pc": "0xBFC22FF0", + "callee_addr": "0xBFC2CF54", + "in_rom": true + }, + { + "caller_func": "0xBFC22E90", + "caller_pc": "0xBFC2300C", + "callee_addr": "0xBFC2EA94", + "in_rom": true + }, + { + "caller_func": "0xBFC23078", + "caller_pc": "0xBFC23098", + "callee_addr": "0xBFC2D0A4", + "in_rom": true + }, + { + "caller_func": "0xBFC230C4", + "caller_pc": "0xBFC230F0", + "callee_addr": "0xBFC2D0A4", + "in_rom": true + }, + { + "caller_func": "0xBFC2311C", + "caller_pc": "0xBFC23174", + "callee_addr": "0xB005A900", + "in_rom": false + }, + { + "caller_func": "0xBFC2311C", + "caller_pc": "0xBFC23214", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2311C", + "caller_pc": "0xBFC231D4", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2324C", + "caller_pc": "0xBFC23298", + "callee_addr": "0xB005A900", + "in_rom": false + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC232F4", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23324", + "callee_addr": "0xBFC2A4E0", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23358", + "callee_addr": "0xBFC31DC4", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23374", + "callee_addr": "0xBFC31DC4", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC233B8", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23404", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23448", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC23488", + "callee_addr": "0xBFC2CAE0", + "in_rom": true + }, + { + "caller_func": "0xBFC232DC", + "caller_pc": "0xBFC234C8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC23500", + "caller_pc": "0xBFC2350C", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23BC4", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC236E0", + "callee_addr": "0xBFC31DC4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23C44", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23768", + "callee_addr": "0xBFC31E74", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC237B8", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC237EC", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23820", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23850", + "callee_addr": "0xBFC2CAE0", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC238D8", + "callee_addr": "0xBFC31DC4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23960", + "callee_addr": "0xBFC31E74", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC239A8", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC239DC", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23A10", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC23524", + "caller_pc": "0xBFC23A40", + "callee_addr": "0xBFC2CAE0", + "in_rom": true + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23D6C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23D98", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23D80", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DAC", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DB8", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DCC", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24050", + "callee_addr": "0xB005AAC0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24100", + "callee_addr": "0xB005AAE0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DDC", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DE8", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23DF8", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC2407C", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC2412C", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23E08", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC2408C", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC2413C", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23E18", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23E24", + "callee_addr": "0xB005AAB0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC241C8", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC240B4", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24164", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC241D8", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC240C4", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24174", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC240CC", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC2417C", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23E68", + "callee_addr": "0xB005AAC0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24200", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23EC0", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24210", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23E94", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC24220", + "callee_addr": "0xB005AAF0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23ED8", + "callee_addr": "0xB005AAB0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23F20", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23EFC", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23F2C", + "callee_addr": "0xB005AAB0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23F50", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23F90", + "callee_addr": "0xB005AAE0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23F64", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23FBC", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23FCC", + "callee_addr": "0xB005AAD0", + "in_rom": false + }, + { + "caller_func": "0xBFC23D3C", + "caller_pc": "0xBFC23FEC", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC2430C", + "callee_addr": "0xBFC23D3C", + "in_rom": true + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC242DC", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC24348", + "callee_addr": "0xBFC230C4", + "in_rom": true + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC24354", + "callee_addr": "0xBFC2311C", + "in_rom": true + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC24388", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC24288", + "caller_pc": "0xBFC24400", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC2444C", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC24494", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC24474", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC244BC", + "callee_addr": "0xB005AA50", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC244C4", + "callee_addr": "0xB005AAA0", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC244E4", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC245CC", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC245E0", + "callee_addr": "0xBFC2EC90", + "in_rom": true + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC24590", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC24418", + "caller_pc": "0xBFC245F4", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC2465C", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC2472C", + "callee_addr": "0xBFC2324C", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC246B0", + "callee_addr": "0xBFC2324C", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC24764", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC246E8", + "callee_addr": "0xB005AA20", + "in_rom": false + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC247F0", + "callee_addr": "0xBFC2EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC24894", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC248A8", + "callee_addr": "0xBFC2EF40", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC248B8", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC24A00", + "callee_addr": "0xBFC2EC90", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC248FC", + "callee_addr": "0xBFC2EE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC24934", + "callee_addr": "0xB005A9B0", + "in_rom": false + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC24958", + "callee_addr": "0xB005A9B0", + "in_rom": false + }, + { + "caller_func": "0xBFC24640", + "caller_pc": "0xBFC249E8", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24A74", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24AE8", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24B3C", + "callee_addr": "0xBFC2324C", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24B58", + "callee_addr": "0xBFC2EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24C2C", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24C80", + "callee_addr": "0xBFC2324C", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24C9C", + "callee_addr": "0xBFC2EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24D34", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24D40", + "callee_addr": "0xBFC2EF40", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24D58", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24E9C", + "callee_addr": "0xBFC2EC90", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24D98", + "callee_addr": "0xBFC2EE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24DD0", + "callee_addr": "0xB005A9B0", + "in_rom": false + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24DF4", + "callee_addr": "0xB005A9B0", + "in_rom": false + }, + { + "caller_func": "0xBFC24A48", + "caller_pc": "0xBFC24E84", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24F34", + "callee_addr": "0xBFC251A8", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC2515C", + "callee_addr": "0xBFC2531C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25170", + "callee_addr": "0xBFC37334", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25178", + "callee_addr": "0xBFC19A58", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FC0", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FCC", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FD4", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FE0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FE8", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FF4", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC24FFC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25008", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25010", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC2501C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25024", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25030", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25038", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25044", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC2504C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25058", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25060", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC2506C", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25094", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC2509C", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250A8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250B0", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250BC", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250C8", + "callee_addr": "0xBFC23078", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250D0", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC250E4", + "callee_addr": "0xBFC2E574", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25100", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25108", + "callee_addr": "0xBFC264A0", + "in_rom": true + }, + { + "caller_func": "0xBFC24F00", + "caller_pc": "0xBFC25118", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC251A8", + "caller_pc": "0xBFC251B0", + "callee_addr": "0xB005AB00", + "in_rom": false + }, + { + "caller_func": "0xBFC251A8", + "caller_pc": "0xBFC251BC", + "callee_addr": "0xB005AB10", + "in_rom": false + }, + { + "caller_func": "0xBFC251A8", + "caller_pc": "0xBFC251D4", + "callee_addr": "0xBFC25200", + "in_rom": true + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25218", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25228", + "callee_addr": "0xBFC252BC", + "in_rom": true + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25240", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25250", + "callee_addr": "0xBFC252BC", + "in_rom": true + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25268", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25278", + "callee_addr": "0xBFC252BC", + "in_rom": true + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC25290", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC25200", + "caller_pc": "0xBFC252A0", + "callee_addr": "0xBFC252BC", + "in_rom": true + }, + { + "caller_func": "0xBFC252BC", + "caller_pc": "0xBFC252CC", + "callee_addr": "0xB005AB20", + "in_rom": false + }, + { + "caller_func": "0xBFC252BC", + "caller_pc": "0xBFC252DC", + "callee_addr": "0xB005AB20", + "in_rom": false + }, + { + "caller_func": "0xBFC252BC", + "caller_pc": "0xBFC252EC", + "callee_addr": "0xB005AB20", + "in_rom": false + }, + { + "caller_func": "0xBFC252BC", + "caller_pc": "0xBFC252FC", + "callee_addr": "0xB005AB20", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC25324", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC25334", + "callee_addr": "0xB005AB30", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC25344", + "callee_addr": "0xB005AB30", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC25354", + "callee_addr": "0xB005AB30", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC25364", + "callee_addr": "0xB005AB30", + "in_rom": false + }, + { + "caller_func": "0xBFC2531C", + "caller_pc": "0xBFC2536C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC253D0", + "callee_addr": "0xBFC41F88", + "in_rom": true + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC253DC", + "callee_addr": "0xBFC41ED8", + "in_rom": true + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC25404", + "callee_addr": "0xBFC41ED8", + "in_rom": true + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC2543C", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC25460", + "callee_addr": "0xBFC374EC", + "in_rom": true + }, + { + "caller_func": "0xBFC25390", + "caller_pc": "0xBFC2547C", + "callee_addr": "0xBFC373E0", + "in_rom": true + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC254B8", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC254D4", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC254E4", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC254F8", + "callee_addr": "0xBFC41E30", + "in_rom": true + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC25504", + "callee_addr": "0xBFC41F10", + "in_rom": true + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC25518", + "callee_addr": "0xBFC41E30", + "in_rom": true + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC25524", + "callee_addr": "0xBFC41F10", + "in_rom": true + }, + { + "caller_func": "0xBFC254B0", + "caller_pc": "0xBFC2552C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC25558", + "caller_pc": "0xBFC25568", + "callee_addr": "0xB005AB30", + "in_rom": false + }, + { + "caller_func": "0xBFC25558", + "caller_pc": "0xBFC2557C", + "callee_addr": "0xBFC41E30", + "in_rom": true + }, + { + "caller_func": "0xBFC25558", + "caller_pc": "0xBFC25588", + "callee_addr": "0xBFC41F54", + "in_rom": true + }, + { + "caller_func": "0xBFC255A0", + "caller_pc": "0xBFC255D0", + "callee_addr": "0xBFC25754", + "in_rom": true + }, + { + "caller_func": "0xBFC25754", + "caller_pc": "0xBFC257E4", + "callee_addr": "0xBFC25884", + "in_rom": true + }, + { + "caller_func": "0xBFC25B74", + "caller_pc": "0xBFC25B94", + "callee_addr": "0xBFC259D8", + "in_rom": true + }, + { + "caller_func": "0xBFC25B74", + "caller_pc": "0xBFC25BB4", + "callee_addr": "0xBFC259D8", + "in_rom": true + }, + { + "caller_func": "0xBFC25B74", + "caller_pc": "0xBFC25BF4", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC25CC0", + "caller_pc": "0xBFC25CE0", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC25CC0", + "caller_pc": "0xBFC25D4C", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC25CC0", + "caller_pc": "0xBFC25D74", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DA0", + "callee_addr": "0xBFC25C84", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DA8", + "callee_addr": "0xBFC25C7C", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DB0", + "callee_addr": "0xBFC25C94", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DB8", + "callee_addr": "0xBFC25C74", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DE8", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25DF8", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25E04", + "callee_addr": "0xBFC2CA9C", + "in_rom": true + }, + { + "caller_func": "0xBFC25D8C", + "caller_pc": "0xBFC25E10", + "callee_addr": "0xBFC2CAE0", + "in_rom": true + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25E94", + "callee_addr": "0xBFC26AF8", + "in_rom": true + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25EB0", + "callee_addr": "0xB005AB40", + "in_rom": false + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25EC4", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25ED0", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25ED8", + "callee_addr": "0xB005AB50", + "in_rom": false + }, + { + "caller_func": "0xBFC25E8C", + "caller_pc": "0xBFC25EE0", + "callee_addr": "0xB005A980", + "in_rom": false + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC25F34", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC25F2C", + "callee_addr": "0xBFC25CB0", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC262E8", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC2630C", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC2619C", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC26184", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC261E4", + "callee_addr": "0xBFC23500", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC261F8", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC26244", + "callee_addr": "0xBFC26670", + "in_rom": true + }, + { + "caller_func": "0xBFC25EF8", + "caller_pc": "0xBFC2627C", + "callee_addr": "0xBFC26670", + "in_rom": true + }, + { + "caller_func": "0xBFC2632C", + "caller_pc": "0xBFC26360", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC2632C", + "caller_pc": "0xBFC26350", + "callee_addr": "0xBFC25CB0", + "in_rom": true + }, + { + "caller_func": "0xBFC2632C", + "caller_pc": "0xBFC263FC", + "callee_addr": "0xBFC26670", + "in_rom": true + }, + { + "caller_func": "0xBFC2632C", + "caller_pc": "0xBFC26420", + "callee_addr": "0xBFC26670", + "in_rom": true + }, + { + "caller_func": "0xBFC2644C", + "caller_pc": "0xBFC26460", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC2644C", + "caller_pc": "0xBFC2646C", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC264EC", + "callee_addr": "0xBFC25CB8", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC264C8", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC26500", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC26508", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC26510", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC264E4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC264A0", + "caller_pc": "0xBFC26524", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC26550", + "caller_pc": "0xBFC26564", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC26550", + "caller_pc": "0xBFC26598", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC26550", + "caller_pc": "0xBFC26584", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC265C0", + "caller_pc": "0xBFC265C8", + "callee_addr": "0xBFC25CB0", + "in_rom": true + }, + { + "caller_func": "0xBFC265C0", + "caller_pc": "0xBFC265DC", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC265C0", + "caller_pc": "0xBFC265E8", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC26610", + "caller_pc": "0xBFC26618", + "callee_addr": "0xBFC25CB0", + "in_rom": true + }, + { + "caller_func": "0xBFC26610", + "caller_pc": "0xBFC2662C", + "callee_addr": "0xBFC25E60", + "in_rom": true + }, + { + "caller_func": "0xBFC26610", + "caller_pc": "0xBFC26638", + "callee_addr": "0xBFC2592C", + "in_rom": true + }, + { + "caller_func": "0xBFC26670", + "caller_pc": "0xBFC26678", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC266E4", + "callee_addr": "0xBFC25B74", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC2683C", + "callee_addr": "0xBFC2632C", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC26720", + "callee_addr": "0xBFC25EF8", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC26868", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC26870", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC268C4", + "callee_addr": "0xBFC2E4D0", + "in_rom": true + }, + { + "caller_func": "0xBFC266B0", + "caller_pc": "0xBFC268CC", + "callee_addr": "0xBFC2E65C", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC26A80", + "callee_addr": "0xBFC25C8C", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC269E8", + "callee_addr": "0xBFC25C8C", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC26AA4", + "callee_addr": "0xBFC25CC0", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC26A30", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC26AE0", + "callee_addr": "0xBFC19630", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC26A6C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC268EC", + "caller_pc": "0xBFC269D8", + "callee_addr": "0xBFC25C8C", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26C1C", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26C38", + "callee_addr": "0xBFC26EF8", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26CAC", + "callee_addr": "0xBFC26EF8", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26D54", + "callee_addr": "0xBFC26E64", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26D04", + "callee_addr": "0xBFC18788", + "in_rom": true + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26D10", + "callee_addr": "0xB005AB60", + "in_rom": false + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26D90", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26DE0", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC26C10", + "caller_pc": "0xBFC26DC0", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC26E64", + "caller_pc": "0xBFC26E80", + "callee_addr": "0xBFC40260", + "in_rom": true + }, + { + "caller_func": "0xBFC26E64", + "caller_pc": "0xBFC26E9C", + "callee_addr": "0xBFC40260", + "in_rom": true + }, + { + "caller_func": "0xBFC26E64", + "caller_pc": "0xBFC26EB8", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26E64", + "caller_pc": "0xBFC26ED0", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC2701C", + "callee_addr": "0xBFC3F1B8", + "in_rom": true + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC27034", + "callee_addr": "0xBFC3F1B8", + "in_rom": true + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC27050", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC27074", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC2709C", + "callee_addr": "0xBFC3F5D8", + "in_rom": true + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC270E0", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC270C0", + "callee_addr": "0xBFC3F5D8", + "in_rom": true + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC2710C", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC26EF8", + "caller_pc": "0xBFC27134", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC271B8", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC271C0", + "callee_addr": "0xBFC2BF10", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC271E0", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC27200", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC27220", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC27240", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC272EC", + "callee_addr": "0xBFC2F6A0", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC2731C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC27398", + "callee_addr": "0xBFC2F718", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC273A0", + "callee_addr": "0xBFC27BDC", + "in_rom": true + }, + { + "caller_func": "0xBFC27190", + "caller_pc": "0xBFC27384", + "callee_addr": "0xBFC2CB24", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27464", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27478", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC2748C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC274A0", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC274E4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27528", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC2756C", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC275B0", + "callee_addr": "0xBFC2C988", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC275B8", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC275E8", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC2781C", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC276C4", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27700", + "callee_addr": "0xB005A920", + "in_rom": false + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC276F0", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC2772C", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27754", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27774", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC27794", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC277B4", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC277D4", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC273E4", + "caller_pc": "0xBFC277F4", + "callee_addr": "0xBFC27868", + "in_rom": true + }, + { + "caller_func": "0xBFC27868", + "caller_pc": "0xBFC278C0", + "callee_addr": "0xBFC2B260", + "in_rom": true + }, + { + "caller_func": "0xBFC27868", + "caller_pc": "0xBFC278D0", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC27868", + "caller_pc": "0xBFC278E4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC27868", + "caller_pc": "0xBFC278EC", + "callee_addr": "0xB005A940", + "in_rom": false + }, + { + "caller_func": "0xBFC27910", + "caller_pc": "0xBFC27924", + "callee_addr": "0xBFC28064", + "in_rom": true + }, + { + "caller_func": "0xBFC27910", + "caller_pc": "0xBFC279D8", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC27910", + "caller_pc": "0xBFC27994", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27A2C", + "caller_pc": "0xBFC27AE8", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC27A2C", + "caller_pc": "0xBFC27AA4", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27B2C", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27B50", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27B74", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27B98", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27BBC", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27B24", + "caller_pc": "0xBFC27BC4", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC27BDC", + "caller_pc": "0xBFC27C8C", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC27BDC", + "caller_pc": "0xBFC27C50", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC27CC8", + "caller_pc": "0xBFC27CD0", + "callee_addr": "0xBFC3C060", + "in_rom": true + }, + { + "caller_func": "0xBFC27CC8", + "caller_pc": "0xBFC27CD8", + "callee_addr": "0xBFC3A2C0", + "in_rom": true + }, + { + "caller_func": "0xBFC27D2C", + "caller_pc": "0xBFC27D74", + "callee_addr": "0xBFC3BE90", + "in_rom": true + }, + { + "caller_func": "0xBFC27D2C", + "caller_pc": "0xBFC27D84", + "callee_addr": "0xBFC3BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27DBC", + "callee_addr": "0xBFC27CC8", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27DC4", + "callee_addr": "0xBFC27EB4", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27DD0", + "callee_addr": "0xBFC3BE90", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27DE0", + "callee_addr": "0xBFC3BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27DF0", + "callee_addr": "0xBFC3BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27E00", + "callee_addr": "0xBFC3BF40", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27E10", + "callee_addr": "0xBFC3BF40", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27E20", + "callee_addr": "0xBFC3BF40", + "in_rom": true + }, + { + "caller_func": "0xBFC27DB0", + "caller_pc": "0xBFC27E50", + "callee_addr": "0xBFC3BF10", + "in_rom": true + }, + { + "caller_func": "0xBFC27E68", + "caller_pc": "0xBFC27E70", + "callee_addr": "0xBFC27D2C", + "in_rom": true + }, + { + "caller_func": "0xBFC27E88", + "caller_pc": "0xBFC27E98", + "callee_addr": "0xBFC3B30C", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC27FE4", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC28004", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC28010", + "callee_addr": "0xBFC3C428", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC28024", + "callee_addr": "0xBFC3BDB8", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC28034", + "callee_addr": "0xBFC3BFF0", + "in_rom": true + }, + { + "caller_func": "0xBFC27FB0", + "caller_pc": "0xBFC2804C", + "callee_addr": "0xBFC3BD78", + "in_rom": true + }, + { + "caller_func": "0xBFC28064", + "caller_pc": "0xBFC28074", + "callee_addr": "0xBFC3BE18", + "in_rom": true + }, + { + "caller_func": "0xBFC282E8", + "caller_pc": "0xBFC2831C", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC282E8", + "caller_pc": "0xBFC28344", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC282E8", + "caller_pc": "0xBFC2834C", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC28370", + "caller_pc": "0xBFC283A4", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC28370", + "caller_pc": "0xBFC283C8", + "callee_addr": "0xBFC3AD68", + "in_rom": true + }, + { + "caller_func": "0xBFC28370", + "caller_pc": "0xBFC283D0", + "callee_addr": "0xBFC3BE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC28490", + "caller_pc": "0xBFC284A4", + "callee_addr": "0xBFC284F0", + "in_rom": true + }, + { + "caller_func": "0xBFC28490", + "caller_pc": "0xBFC284C0", + "callee_addr": "0xBFC284F0", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC284FC", + "callee_addr": "0xBFC2F210", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC2850C", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28514", + "callee_addr": "0xBFC2F85C", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28524", + "callee_addr": "0xBFC2F210", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28534", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC2853C", + "callee_addr": "0xBFC2F85C", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28560", + "callee_addr": "0xBFC2886C", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28570", + "callee_addr": "0xBFC28B84", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28578", + "callee_addr": "0xBFC37028", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC2859C", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC285D4", + "callee_addr": "0xBFC2F8AC", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28618", + "callee_addr": "0xBFC291C4", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28620", + "callee_addr": "0xBFC29770", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC2866C", + "callee_addr": "0xBFC291C4", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28674", + "callee_addr": "0xBFC2F6A0", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC286BC", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC286F4", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC2872C", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28800", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28808", + "callee_addr": "0xBFC2F79C", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28748", + "callee_addr": "0xBFC29770", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28810", + "callee_addr": "0xBFC2F718", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28818", + "callee_addr": "0xBFC27A2C", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC28780", + "callee_addr": "0xBFC2CB24", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC287B8", + "callee_addr": "0xBFC2CB24", + "in_rom": true + }, + { + "caller_func": "0xBFC284F0", + "caller_pc": "0xBFC287F0", + "callee_addr": "0xBFC2CB24", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28898", + "callee_addr": "0xBFC2BF1C", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC288F8", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28924", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28950", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28980", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC289B0", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC289E0", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28A50", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28AC0", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2886C", + "caller_pc": "0xBFC28B30", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28CB0", + "callee_addr": "0xBFC3010C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28CE4", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28D18", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28D4C", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28D80", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28DB0", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28DE0", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28E10", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28E40", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28E6C", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28E94", + "callee_addr": "0xBFC3015C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28EC8", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28EFC", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28F30", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28F60", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28F90", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28FC0", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC28FEC", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC29014", + "callee_addr": "0xBFC3015C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC29048", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC2907C", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC290B0", + "callee_addr": "0xBFC301AC", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC290E0", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC29110", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC29140", + "callee_addr": "0xBFC3022C", + "in_rom": true + }, + { + "caller_func": "0xBFC28B84", + "caller_pc": "0xBFC2916C", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC294DC", + "callee_addr": "0xBFC3029C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC293DC", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC29450", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC295D4", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC2965C", + "callee_addr": "0xBFC3029C", + "in_rom": true + }, + { + "caller_func": "0xBFC291C4", + "caller_pc": "0xBFC29754", + "callee_addr": "0xBFC3031C", + "in_rom": true + }, + { + "caller_func": "0xBFC29770", + "caller_pc": "0xBFC2982C", + "callee_addr": "0xBFC37130", + "in_rom": true + }, + { + "caller_func": "0xBFC29770", + "caller_pc": "0xBFC29A80", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC29770", + "caller_pc": "0xBFC29834", + "callee_addr": "0xBFC37070", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B18", + "callee_addr": "0xBFC336F0", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B28", + "callee_addr": "0xBFC29FE8", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B38", + "callee_addr": "0xBFC2FA78", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B58", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B78", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29B98", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29BB8", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C50", + "callee_addr": "0xBFC33FB4", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C58", + "callee_addr": "0xBFC33FCC", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C68", + "callee_addr": "0xBFC33F00", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C78", + "callee_addr": "0xBFC33F20", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C84", + "callee_addr": "0xBFC34AF0", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C90", + "callee_addr": "0xBFC2A31C", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29C9C", + "callee_addr": "0xBFC2A31C", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29CA8", + "callee_addr": "0xBFC35B38", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29CB4", + "callee_addr": "0xBFC35B08", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29CC8", + "callee_addr": "0xBFC359B4", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29CD8", + "callee_addr": "0xBFC282E8", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29CEC", + "callee_addr": "0xBFC34160", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29D00", + "callee_addr": "0xBFC3586C", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29D54", + "callee_addr": "0xBFC37334", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29D6C", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29D74", + "callee_addr": "0xBFC37070", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29D7C", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29DA4", + "callee_addr": "0xBFC35AD8", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29DB0", + "callee_addr": "0xBFC35B68", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29FB0", + "callee_addr": "0xBFC28370", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29DD4", + "callee_addr": "0xBFC34AF0", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29F64", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29F74", + "callee_addr": "0xBFC374EC", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29F84", + "callee_addr": "0xBFC373E0", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29EAC", + "callee_addr": "0xBFC36740", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29EC4", + "callee_addr": "0xBFC36068", + "in_rom": true + }, + { + "caller_func": "0xBFC29AE0", + "caller_pc": "0xBFC29F08", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2A31C", + "caller_pc": "0xBFC2A33C", + "callee_addr": "0xBFC399EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2A31C", + "caller_pc": "0xBFC2A3F8", + "callee_addr": "0xBFC3994C", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A548", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A554", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A5CC", + "callee_addr": "0xBFC2B0A8", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A658", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A668", + "callee_addr": "0xBFC2ACD0", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2A684", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2A4E0", + "caller_pc": "0xBFC2AA18", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2ACD0", + "caller_pc": "0xBFC2ACE4", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2B0A8", + "caller_pc": "0xBFC2B188", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B2D0", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B2DC", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B364", + "callee_addr": "0xBFC2B0A8", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B41C", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B42C", + "callee_addr": "0xBFC2ACD0", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B8CC", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2BCE4", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B6C8", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2B260", + "caller_pc": "0xBFC2B49C", + "callee_addr": "0xBFC2B1FC", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF1C", + "caller_pc": "0xBFC2BF5C", + "callee_addr": "0xBFC317D0", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2BFA4", + "callee_addr": "0xBFC2C1C4", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2BFF0", + "callee_addr": "0xBFC319EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2C018", + "callee_addr": "0xBFC31C64", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2C088", + "callee_addr": "0xBFC39630", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2C058", + "callee_addr": "0xBFC31D14", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2C150", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2BF74", + "caller_pc": "0xBFC2C1A8", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2C2F0", + "caller_pc": "0xBFC2C30C", + "callee_addr": "0xBFC2BF74", + "in_rom": true + }, + { + "caller_func": "0xBFC2C2F0", + "caller_pc": "0xBFC2C3C8", + "callee_addr": "0xBFC2C3E0", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C4A8", + "callee_addr": "0xBFC2BF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C4DC", + "callee_addr": "0xBFC39A14", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C6DC", + "callee_addr": "0xBFC39ADC", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C764", + "callee_addr": "0xBFC396D0", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C78C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C7DC", + "callee_addr": "0xBFC37A4C", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C630", + "callee_addr": "0xBFC396D0", + "in_rom": true + }, + { + "caller_func": "0xBFC2C3E0", + "caller_pc": "0xBFC2C694", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2CA9C", + "caller_pc": "0xBFC2CAB8", + "callee_addr": "0xBFC398D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CA9C", + "caller_pc": "0xBFC2CAC8", + "callee_addr": "0xBFC398D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CAE0", + "caller_pc": "0xBFC2CAFC", + "callee_addr": "0xBFC39910", + "in_rom": true + }, + { + "caller_func": "0xBFC2CAE0", + "caller_pc": "0xBFC2CB0C", + "callee_addr": "0xBFC39910", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB24", + "caller_pc": "0xBFC2CB40", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB24", + "caller_pc": "0xBFC2CB58", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB24", + "caller_pc": "0xBFC2CB68", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB80", + "caller_pc": "0xBFC2CBAC", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB80", + "caller_pc": "0xBFC2CBD4", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CB80", + "caller_pc": "0xBFC2CBF4", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2CC10", + "caller_pc": "0xBFC2CC44", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2CCC4", + "caller_pc": "0xBFC2CCD4", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2CCC4", + "caller_pc": "0xBFC2CD80", + "callee_addr": "0xBFC2C2F0", + "in_rom": true + }, + { + "caller_func": "0xBFC2CCC4", + "caller_pc": "0xBFC2CD98", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CCC4", + "caller_pc": "0xBFC2CDA4", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC2CCC4", + "caller_pc": "0xBFC2CDD8", + "callee_addr": "0xBFC2F1D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CE08", + "caller_pc": "0xBFC2CE20", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2CE08", + "caller_pc": "0xBFC2CECC", + "callee_addr": "0xBFC2C3E0", + "in_rom": true + }, + { + "caller_func": "0xBFC2CE08", + "caller_pc": "0xBFC2CEE4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CE08", + "caller_pc": "0xBFC2CEF0", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC2CE08", + "caller_pc": "0xBFC2CF24", + "callee_addr": "0xBFC2F1D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2CF54", + "caller_pc": "0xBFC2CF64", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2CF54", + "caller_pc": "0xBFC2D064", + "callee_addr": "0xBFC2F1D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D67C", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E12C", + "callee_addr": "0xBFC2C8A8", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D9F8", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D3D0", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D368", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E368", + "callee_addr": "0xBFC2CB80", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D480", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D95C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E154", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DF30", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D3F8", + "callee_addr": "0xBFC2C8A8", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D650", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D764", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D784", + "callee_addr": "0xBFC2D0A4", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D988", + "callee_addr": "0xBFC2C8A8", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D7A8", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E210", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D7B8", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2D8F0", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E058", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E29C", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E024", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DAB4", + "callee_addr": "0xBFC23D3C", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E07C", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DAD4", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DADC", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DE04", + "callee_addr": "0xBFC2CA58", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DD64", + "callee_addr": "0xBFC2CA50", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DE28", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DB48", + "callee_addr": "0xBFC2B22C", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2E0F4", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DDD8", + "callee_addr": "0xBFC23524", + "in_rom": true + }, + { + "caller_func": "0xBFC2D0E0", + "caller_pc": "0xBFC2DEA0", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2E44C", + "caller_pc": "0xBFC2E460", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2E600", + "caller_pc": "0xBFC2E608", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2E65C", + "caller_pc": "0xBFC2E664", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2E6B8", + "caller_pc": "0xBFC2E798", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E6B8", + "caller_pc": "0xBFC2E7F8", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E6B8", + "caller_pc": "0xBFC2E858", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E6B8", + "caller_pc": "0xBFC2E8B4", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E8CC", + "caller_pc": "0xBFC2E9C0", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E8CC", + "caller_pc": "0xBFC2EA20", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E8CC", + "caller_pc": "0xBFC2EA7C", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2E8CC", + "caller_pc": "0xBFC2E960", + "callee_addr": "0xBFC2E44C", + "in_rom": true + }, + { + "caller_func": "0xBFC2EA94", + "caller_pc": "0xBFC2EC60", + "callee_addr": "0xBFC2C7F4", + "in_rom": true + }, + { + "caller_func": "0xBFC2ED1C", + "caller_pc": "0xBFC2ED24", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2EF40", + "caller_pc": "0xBFC2EF64", + "callee_addr": "0xBFC2EF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2EF40", + "caller_pc": "0xBFC2EFB0", + "callee_addr": "0xBFC2E5C0", + "in_rom": true + }, + { + "caller_func": "0xBFC2EF40", + "caller_pc": "0xBFC2EFC0", + "callee_addr": "0xBFC2EE6C", + "in_rom": true + }, + { + "caller_func": "0xBFC2EF40", + "caller_pc": "0xBFC2F00C", + "callee_addr": "0xBFC2F1D4", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F228", + "callee_addr": "0xBFC2BF00", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F240", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F24C", + "callee_addr": "0xBFC2BF10", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F3F4", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F294", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F41C", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F2BC", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F448", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F2E8", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F474", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F314", + "callee_addr": "0xBFC395EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F510", + "callee_addr": "0xBFC399EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F210", + "caller_pc": "0xBFC2F584", + "callee_addr": "0xBFC399EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F618", + "caller_pc": "0xBFC2F63C", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F618", + "caller_pc": "0xBFC2F644", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F65C", + "caller_pc": "0xBFC2F680", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC2F65C", + "caller_pc": "0xBFC2F688", + "callee_addr": "0xBFC36D1C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F6A0", + "caller_pc": "0xBFC2F6D8", + "callee_addr": "0xBFC37334", + "in_rom": true + }, + { + "caller_func": "0xBFC2F718", + "caller_pc": "0xBFC2F720", + "callee_addr": "0xBFC37070", + "in_rom": true + }, + { + "caller_func": "0xBFC2F718", + "caller_pc": "0xBFC2F728", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC2F718", + "caller_pc": "0xBFC2F738", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC2F718", + "caller_pc": "0xBFC2F748", + "callee_addr": "0xBFC374EC", + "in_rom": true + }, + { + "caller_func": "0xBFC2F718", + "caller_pc": "0xBFC2F758", + "callee_addr": "0xBFC373E0", + "in_rom": true + }, + { + "caller_func": "0xBFC2F79C", + "caller_pc": "0xBFC2F7F0", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC2F808", + "caller_pc": "0xBFC2F814", + "callee_addr": "0xBFC42014", + "in_rom": true + }, + { + "caller_func": "0xBFC2F85C", + "caller_pc": "0xBFC2F874", + "callee_addr": "0xBFC2F6A0", + "in_rom": true + }, + { + "caller_func": "0xBFC2F85C", + "caller_pc": "0xBFC2F87C", + "callee_addr": "0xBFC2F79C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F85C", + "caller_pc": "0xBFC2F884", + "callee_addr": "0xBFC2F718", + "in_rom": true + }, + { + "caller_func": "0xBFC2F8AC", + "caller_pc": "0xBFC2F9F0", + "callee_addr": "0xBFC2F6A0", + "in_rom": true + }, + { + "caller_func": "0xBFC2F8AC", + "caller_pc": "0xBFC2FA00", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC2F8AC", + "caller_pc": "0xBFC2FA08", + "callee_addr": "0xBFC2F79C", + "in_rom": true + }, + { + "caller_func": "0xBFC2F8AC", + "caller_pc": "0xBFC2FA10", + "callee_addr": "0xBFC2F718", + "in_rom": true + }, + { + "caller_func": "0xBFC2FA78", + "caller_pc": "0xBFC2FBEC", + "callee_addr": "0xBFC2F85C", + "in_rom": true + }, + { + "caller_func": "0xBFC2FA78", + "caller_pc": "0xBFC2FB94", + "callee_addr": "0xBFC2F6A0", + "in_rom": true + }, + { + "caller_func": "0xBFC2FA78", + "caller_pc": "0xBFC2FBB0", + "callee_addr": "0xBFC2FC10", + "in_rom": true + }, + { + "caller_func": "0xBFC2FA78", + "caller_pc": "0xBFC2FBB8", + "callee_addr": "0xBFC2F79C", + "in_rom": true + }, + { + "caller_func": "0xBFC2FA78", + "caller_pc": "0xBFC2FBC0", + "callee_addr": "0xBFC2F718", + "in_rom": true + }, + { + "caller_func": "0xBFC2FCC4", + "caller_pc": "0xBFC2FD1C", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC2FCC4", + "caller_pc": "0xBFC2FE30", + "callee_addr": "0xBFC2FF34", + "in_rom": true + }, + { + "caller_func": "0xBFC2FCC4", + "caller_pc": "0xBFC2FDAC", + "callee_addr": "0xBFC2FF34", + "in_rom": true + }, + { + "caller_func": "0xBFC2FCC4", + "caller_pc": "0xBFC2FD5C", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC2FCC4", + "caller_pc": "0xBFC2FDEC", + "callee_addr": "0xBFC2FF34", + "in_rom": true + }, + { + "caller_func": "0xBFC2FE6C", + "caller_pc": "0xBFC2FEA4", + "callee_addr": "0xBFC41C80", + "in_rom": true + }, + { + "caller_func": "0xBFC2FE6C", + "caller_pc": "0xBFC2FEE4", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC3010C", + "caller_pc": "0xBFC30124", + "callee_addr": "0xBFC39A3C", + "in_rom": true + }, + { + "caller_func": "0xBFC3010C", + "caller_pc": "0xBFC30130", + "callee_addr": "0xBFC39A3C", + "in_rom": true + }, + { + "caller_func": "0xBFC3015C", + "caller_pc": "0xBFC30174", + "callee_addr": "0xBFC3999C", + "in_rom": true + }, + { + "caller_func": "0xBFC3015C", + "caller_pc": "0xBFC30180", + "callee_addr": "0xBFC3999C", + "in_rom": true + }, + { + "caller_func": "0xBFC301AC", + "caller_pc": "0xBFC301E0", + "callee_addr": "0xBFC303A4", + "in_rom": true + }, + { + "caller_func": "0xBFC301AC", + "caller_pc": "0xBFC301F8", + "callee_addr": "0xBFC3041C", + "in_rom": true + }, + { + "caller_func": "0xBFC3022C", + "caller_pc": "0xBFC30258", + "callee_addr": "0xBFC304B4", + "in_rom": true + }, + { + "caller_func": "0xBFC3022C", + "caller_pc": "0xBFC30268", + "callee_addr": "0xBFC30514", + "in_rom": true + }, + { + "caller_func": "0xBFC3029C", + "caller_pc": "0xBFC302A4", + "callee_addr": "0xBFC302BC", + "in_rom": true + }, + { + "caller_func": "0xBFC302BC", + "caller_pc": "0xBFC302D4", + "callee_addr": "0xBFC3079C", + "in_rom": true + }, + { + "caller_func": "0xBFC302BC", + "caller_pc": "0xBFC302E8", + "callee_addr": "0xBFC30868", + "in_rom": true + }, + { + "caller_func": "0xBFC3031C", + "caller_pc": "0xBFC30338", + "callee_addr": "0xBFC302BC", + "in_rom": true + }, + { + "caller_func": "0xBFC30350", + "caller_pc": "0xBFC3037C", + "callee_addr": "0xBFC302BC", + "in_rom": true + }, + { + "caller_func": "0xBFC3079C", + "caller_pc": "0xBFC307B8", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC3079C", + "caller_pc": "0xBFC307CC", + "callee_addr": "0xBFC3058C", + "in_rom": true + }, + { + "caller_func": "0xBFC30868", + "caller_pc": "0xBFC30884", + "callee_addr": "0xBFC188B4", + "in_rom": true + }, + { + "caller_func": "0xBFC30868", + "caller_pc": "0xBFC30898", + "callee_addr": "0xBFC30670", + "in_rom": true + }, + { + "caller_func": "0xBFC30960", + "caller_pc": "0xBFC30990", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC30960", + "caller_pc": "0xBFC309A0", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC30960", + "caller_pc": "0xBFC309C4", + "callee_addr": "0xBFC39BA4", + "in_rom": true + }, + { + "caller_func": "0xBFC30960", + "caller_pc": "0xBFC30A0C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30960", + "caller_pc": "0xBFC30A18", + "callee_addr": "0xBFC37130", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30ACC", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30AE0", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30B04", + "callee_addr": "0xBFC39A3C", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30BD0", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30BD8", + "callee_addr": "0xBFC39BCC", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30C10", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30C3C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30C7C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30CAC", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30CE0", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30D0C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30D48", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30D78", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC30A80", + "caller_pc": "0xBFC30D84", + "callee_addr": "0xBFC37130", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30E34", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30E44", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30E60", + "callee_addr": "0xBFC329F0", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30E74", + "callee_addr": "0xBFC37130", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30E84", + "callee_addr": "0xBFC32410", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30EA4", + "callee_addr": "0xBFC322E4", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30EC4", + "callee_addr": "0xBFC322E4", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30ED4", + "callee_addr": "0xBFC32710", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30F30", + "callee_addr": "0xBFC32CCC", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30F50", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC310F0", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30F8C", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC30FCC", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC31000", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC3103C", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC3107C", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC30DF0", + "caller_pc": "0xBFC310BC", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC311C4", + "callee_addr": "0xBFC3954C", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC311D4", + "callee_addr": "0xBFC37434", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC311F8", + "callee_addr": "0xBFC39BA4", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC3122C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC31234", + "callee_addr": "0xBFC2BF00", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC31280", + "callee_addr": "0xBFC31448", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC3130C", + "callee_addr": "0xBFC313EC", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC31318", + "callee_addr": "0xBFC37130", + "in_rom": true + }, + { + "caller_func": "0xBFC31194", + "caller_pc": "0xBFC31304", + "callee_addr": "0xBFC31448", + "in_rom": true + }, + { + "caller_func": "0xBFC31380", + "caller_pc": "0xBFC313B0", + "callee_addr": "0xBFC39804", + "in_rom": true + }, + { + "caller_func": "0xBFC313EC", + "caller_pc": "0xBFC31410", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC31448", + "caller_pc": "0xBFC31528", + "callee_addr": "0xBFC31638", + "in_rom": true + }, + { + "caller_func": "0xBFC31580", + "caller_pc": "0xBFC315F4", + "callee_addr": "0xBFC31638", + "in_rom": true + }, + { + "caller_func": "0xBFC31638", + "caller_pc": "0xBFC31654", + "callee_addr": "0xBFC3999C", + "in_rom": true + }, + { + "caller_func": "0xBFC31638", + "caller_pc": "0xBFC316D4", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC31638", + "caller_pc": "0xBFC31700", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC31638", + "caller_pc": "0xBFC3171C", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC31638", + "caller_pc": "0xBFC3173C", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC317D0", + "caller_pc": "0xBFC31804", + "callee_addr": "0xBFC322E4", + "in_rom": true + }, + { + "caller_func": "0xBFC317D0", + "caller_pc": "0xBFC318BC", + "callee_addr": "0xBFC322E4", + "in_rom": true + }, + { + "caller_func": "0xBFC317D0", + "caller_pc": "0xBFC31950", + "callee_addr": "0xBFC31968", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC31974", + "callee_addr": "0xBFC32010", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC3198C", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC319A4", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC319B0", + "callee_addr": "0xBFC32010", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC319C8", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31968", + "caller_pc": "0xBFC319D4", + "callee_addr": "0xBFC32040", + "in_rom": true + }, + { + "caller_func": "0xBFC319EC", + "caller_pc": "0xBFC31A94", + "callee_addr": "0xBFC32450", + "in_rom": true + }, + { + "caller_func": "0xBFC319EC", + "caller_pc": "0xBFC31AEC", + "callee_addr": "0xBFC32450", + "in_rom": true + }, + { + "caller_func": "0xBFC319EC", + "caller_pc": "0xBFC31BB8", + "callee_addr": "0xBFC32450", + "in_rom": true + }, + { + "caller_func": "0xBFC319EC", + "caller_pc": "0xBFC31C10", + "callee_addr": "0xBFC32450", + "in_rom": true + }, + { + "caller_func": "0xBFC31C64", + "caller_pc": "0xBFC31CFC", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31D14", + "caller_pc": "0xBFC31DAC", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31DC4", + "caller_pc": "0xBFC31E5C", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC31E74", + "caller_pc": "0xBFC31F0C", + "callee_addr": "0xBFC33358", + "in_rom": true + }, + { + "caller_func": "0xBFC322E4", + "caller_pc": "0xBFC3231C", + "callee_addr": "0xBFC32368", + "in_rom": true + }, + { + "caller_func": "0xBFC322E4", + "caller_pc": "0xBFC32340", + "callee_addr": "0xBFC32410", + "in_rom": true + }, + { + "caller_func": "0xBFC322E4", + "caller_pc": "0xBFC3234C", + "callee_addr": "0xBFC32010", + "in_rom": true + }, + { + "caller_func": "0xBFC32410", + "caller_pc": "0xBFC3242C", + "callee_addr": "0xBFC32368", + "in_rom": true + }, + { + "caller_func": "0xBFC32450", + "caller_pc": "0xBFC324C0", + "callee_addr": "0xBFC3255C", + "in_rom": true + }, + { + "caller_func": "0xBFC3255C", + "caller_pc": "0xBFC32664", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC32724", + "caller_pc": "0xBFC32750", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC32724", + "caller_pc": "0xBFC327BC", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC32724", + "caller_pc": "0xBFC327D8", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC32724", + "caller_pc": "0xBFC327EC", + "callee_addr": "0xBFC32820", + "in_rom": true + }, + { + "caller_func": "0xBFC32820", + "caller_pc": "0xBFC32864", + "callee_addr": "0xBFC328F4", + "in_rom": true + }, + { + "caller_func": "0xBFC328F4", + "caller_pc": "0xBFC32914", + "callee_addr": "0xBFC32944", + "in_rom": true + }, + { + "caller_func": "0xBFC328F4", + "caller_pc": "0xBFC3292C", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC329F0", + "caller_pc": "0xBFC32A48", + "callee_addr": "0xBFC33138", + "in_rom": true + }, + { + "caller_func": "0xBFC329F0", + "caller_pc": "0xBFC32B04", + "callee_addr": "0xBFC39A3C", + "in_rom": true + }, + { + "caller_func": "0xBFC329F0", + "caller_pc": "0xBFC32C28", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32D04", + "callee_addr": "0xBFC32010", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32D10", + "callee_addr": "0xBFC32010", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC330DC", + "callee_addr": "0xBFC32078", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC330E8", + "callee_addr": "0xBFC32040", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32D3C", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC330FC", + "callee_addr": "0xBFC32724", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC3310C", + "callee_addr": "0xBFC320B4", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC33114", + "callee_addr": "0xBFC33400", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32D78", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32DB8", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32DEC", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32F44", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32E28", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32E68", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32F80", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32FC0", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32FF4", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC32EA8", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC33030", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC33070", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC32CCC", + "caller_pc": "0xBFC330B0", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC33138", + "caller_pc": "0xBFC33140", + "callee_addr": "0xB005A8F0", + "in_rom": false + }, + { + "caller_func": "0xBFC331A0", + "caller_pc": "0xBFC332E4", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC331A0", + "caller_pc": "0xBFC33274", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC33358", + "caller_pc": "0xBFC333B4", + "callee_addr": "0xBFC331A0", + "in_rom": true + }, + { + "caller_func": "0xBFC33400", + "caller_pc": "0xBFC33484", + "callee_addr": "0xBFC32100", + "in_rom": true + }, + { + "caller_func": "0xBFC33400", + "caller_pc": "0xBFC334B4", + "callee_addr": "0xBFC33538", + "in_rom": true + }, + { + "caller_func": "0xBFC33400", + "caller_pc": "0xBFC334D8", + "callee_addr": "0xBFC321F0", + "in_rom": true + }, + { + "caller_func": "0xBFC339F0", + "caller_pc": "0xBFC33A50", + "callee_addr": "0xBFC33C98", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC34180", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC3418C", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC34198", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC341A8", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC341BC", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34160", + "caller_pc": "0xBFC341D4", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC34324", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC34330", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC3433C", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC3434C", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC34360", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34304", + "caller_pc": "0xBFC34378", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC344A4", + "caller_pc": "0xBFC344B4", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC344A4", + "caller_pc": "0xBFC344C8", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC345F4", + "caller_pc": "0xBFC34604", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC345F4", + "caller_pc": "0xBFC34618", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34748", + "caller_pc": "0xBFC34758", + "callee_addr": "0xBFC349B8", + "in_rom": true + }, + { + "caller_func": "0xBFC34748", + "caller_pc": "0xBFC3476C", + "callee_addr": "0xBFC34898", + "in_rom": true + }, + { + "caller_func": "0xBFC34898", + "caller_pc": "0xBFC348E4", + "callee_addr": "0xBFC348FC", + "in_rom": true + }, + { + "caller_func": "0xBFC34898", + "caller_pc": "0xBFC348C0", + "callee_addr": "0xBFC348FC", + "in_rom": true + }, + { + "caller_func": "0xBFC34AF0", + "caller_pc": "0xBFC34B38", + "callee_addr": "0xBFC33FD8", + "in_rom": true + }, + { + "caller_func": "0xBFC34AF0", + "caller_pc": "0xBFC34B40", + "callee_addr": "0xBFC33FE4", + "in_rom": true + }, + { + "caller_func": "0xBFC34B58", + "caller_pc": "0xBFC34E20", + "callee_addr": "0xBFC362D0", + "in_rom": true + }, + { + "caller_func": "0xBFC34B58", + "caller_pc": "0xBFC34E2C", + "callee_addr": "0xBFC339F0", + "in_rom": true + }, + { + "caller_func": "0xBFC34B58", + "caller_pc": "0xBFC34E50", + "callee_addr": "0xBFC339F0", + "in_rom": true + }, + { + "caller_func": "0xBFC34B58", + "caller_pc": "0xBFC34E78", + "callee_addr": "0xBFC362D0", + "in_rom": true + }, + { + "caller_func": "0xBFC34B58", + "caller_pc": "0xBFC34E84", + "callee_addr": "0xBFC339F0", + "in_rom": true + }, + { + "caller_func": "0xBFC36CF0", + "caller_pc": "0xBFC36D04", + "callee_addr": "0xB005AB70", + "in_rom": false + }, + { + "caller_func": "0xBFC36D48", + "caller_pc": "0xBFC36D48", + "callee_addr": "0xBFC42060", + "in_rom": true + }, + { + "caller_func": "0xBFC36D48", + "caller_pc": "0xBFC36D60", + "callee_addr": "0xBFC420C0", + "in_rom": true + }, + { + "caller_func": "0xBFC36D48", + "caller_pc": "0xBFC36D70", + "callee_addr": "0xBFC36CF0", + "in_rom": true + }, + { + "caller_func": "0xBFC36D48", + "caller_pc": "0xBFC36D98", + "callee_addr": "0xBFC38A7C", + "in_rom": true + }, + { + "caller_func": "0xBFC37368", + "caller_pc": "0xBFC37388", + "callee_addr": "0xBFC3A228", + "in_rom": true + }, + { + "caller_func": "0xBFC373E0", + "caller_pc": "0xBFC373F8", + "callee_addr": "0xBFC39FE4", + "in_rom": true + }, + { + "caller_func": "0xBFC37434", + "caller_pc": "0xBFC37450", + "callee_addr": "0xBFC37AC4", + "in_rom": true + }, + { + "caller_func": "0xBFC37434", + "caller_pc": "0xBFC374A0", + "callee_addr": "0xBFC393CC", + "in_rom": true + }, + { + "caller_func": "0xBFC374BC", + "caller_pc": "0xBFC374D4", + "callee_addr": "0xBFC393CC", + "in_rom": true + }, + { + "caller_func": "0xBFC374EC", + "caller_pc": "0xBFC37510", + "callee_addr": "0xBFC38108", + "in_rom": true + }, + { + "caller_func": "0xBFC374EC", + "caller_pc": "0xBFC3781C", + "callee_addr": "0xBFC393CC", + "in_rom": true + }, + { + "caller_func": "0xBFC37838", + "caller_pc": "0xBFC37850", + "callee_addr": "0xBFC393CC", + "in_rom": true + }, + { + "caller_func": "0xBFC378B4", + "caller_pc": "0xBFC378E0", + "callee_addr": "0xBFC38090", + "in_rom": true + }, + { + "caller_func": "0xBFC37908", + "caller_pc": "0xBFC37940", + "callee_addr": "0xBFC37E60", + "in_rom": true + }, + { + "caller_func": "0xBFC37908", + "caller_pc": "0xBFC37974", + "callee_addr": "0xBFC37F4C", + "in_rom": true + }, + { + "caller_func": "0xBFC37998", + "caller_pc": "0xBFC379CC", + "callee_addr": "0xBFC38038", + "in_rom": true + }, + { + "caller_func": "0xBFC37A4C", + "caller_pc": "0xBFC37A88", + "callee_addr": "0xBFC37DC8", + "in_rom": true + }, + { + "caller_func": "0xBFC37A4C", + "caller_pc": "0xBFC37AA0", + "callee_addr": "0xBFC38090", + "in_rom": true + }, + { + "caller_func": "0xBFC37AC4", + "caller_pc": "0xBFC37AE8", + "callee_addr": "0xBFC37E60", + "in_rom": true + }, + { + "caller_func": "0xBFC37AC4", + "caller_pc": "0xBFC37B14", + "callee_addr": "0xBFC37F4C", + "in_rom": true + }, + { + "caller_func": "0xBFC37AC4", + "caller_pc": "0xBFC37B38", + "callee_addr": "0xBFC38038", + "in_rom": true + }, + { + "caller_func": "0xBFC37AC4", + "caller_pc": "0xBFC37B5C", + "callee_addr": "0xBFC37DC8", + "in_rom": true + }, + { + "caller_func": "0xBFC37AC4", + "caller_pc": "0xBFC37B78", + "callee_addr": "0xBFC38090", + "in_rom": true + }, + { + "caller_func": "0xBFC38204", + "caller_pc": "0xBFC38268", + "callee_addr": "0xBFC392E8", + "in_rom": true + }, + { + "caller_func": "0xBFC38204", + "caller_pc": "0xBFC38290", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC382E0", + "caller_pc": "0xBFC3850C", + "callee_addr": "0xBFC38B28", + "in_rom": true + }, + { + "caller_func": "0xBFC382E0", + "caller_pc": "0xBFC38474", + "callee_addr": "0xBFC38B80", + "in_rom": true + }, + { + "caller_func": "0xBFC382E0", + "caller_pc": "0xBFC3848C", + "callee_addr": "0xBFC38B80", + "in_rom": true + }, + { + "caller_func": "0xBFC382E0", + "caller_pc": "0xBFC384A4", + "callee_addr": "0xBFC38B80", + "in_rom": true + }, + { + "caller_func": "0xBFC38524", + "caller_pc": "0xBFC38668", + "callee_addr": "0xBFC392E8", + "in_rom": true + }, + { + "caller_func": "0xBFC38524", + "caller_pc": "0xBFC38690", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC387D4", + "caller_pc": "0xBFC3891C", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC38A7C", + "caller_pc": "0xBFC38A8C", + "callee_addr": "0xB005AB80", + "in_rom": false + }, + { + "caller_func": "0xBFC38BE8", + "caller_pc": "0xBFC38C1C", + "callee_addr": "0xBFC393CC", + "in_rom": true + }, + { + "caller_func": "0xBFC38BE8", + "caller_pc": "0xBFC38C50", + "callee_addr": "0xBFC38C68", + "in_rom": true + }, + { + "caller_func": "0xBFC38C68", + "caller_pc": "0xBFC38C8C", + "callee_addr": "0xBFC392E8", + "in_rom": true + }, + { + "caller_func": "0xBFC38C68", + "caller_pc": "0xBFC38CA8", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC38C68", + "caller_pc": "0xBFC38D78", + "callee_addr": "0xBFC38DAC", + "in_rom": true + }, + { + "caller_func": "0xBFC38DAC", + "caller_pc": "0xBFC38DE0", + "callee_addr": "0xBFC392E8", + "in_rom": true + }, + { + "caller_func": "0xBFC38DAC", + "caller_pc": "0xBFC38E68", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC39080", + "caller_pc": "0xBFC39094", + "callee_addr": "0xBFC392E8", + "in_rom": true + }, + { + "caller_func": "0xBFC39080", + "caller_pc": "0xBFC390CC", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC39080", + "caller_pc": "0xBFC3913C", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC39080", + "caller_pc": "0xBFC39110", + "callee_addr": "0xBFC38DAC", + "in_rom": true + }, + { + "caller_func": "0xBFC39080", + "caller_pc": "0xBFC391DC", + "callee_addr": "0xBFC39300", + "in_rom": true + }, + { + "caller_func": "0xBFC39300", + "caller_pc": "0xBFC393A0", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC39300", + "caller_pc": "0xBFC393A8", + "callee_addr": "0xBFC38F8C", + "in_rom": true + }, + { + "caller_func": "0xBFC39410", + "caller_pc": "0xBFC394B8", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC39410", + "caller_pc": "0xBFC394D4", + "callee_addr": "0xBFC39630", + "in_rom": true + }, + { + "caller_func": "0xBFC394EC", + "caller_pc": "0xBFC39524", + "callee_addr": "0xBFC370F4", + "in_rom": true + }, + { + "caller_func": "0xBFC394EC", + "caller_pc": "0xBFC39534", + "callee_addr": "0xBFC396D0", + "in_rom": true + }, + { + "caller_func": "0xBFC3954C", + "caller_pc": "0xBFC395C4", + "callee_addr": "0xBFC39630", + "in_rom": true + }, + { + "caller_func": "0xBFC39630", + "caller_pc": "0xBFC39644", + "callee_addr": "0xBFC36FF0", + "in_rom": true + }, + { + "caller_func": "0xBFC396E8", + "caller_pc": "0xBFC396F4", + "callee_addr": "0xBFC36FF0", + "in_rom": true + }, + { + "caller_func": "0xBFC39D38", + "caller_pc": "0xBFC39DE4", + "callee_addr": "0xBFC36FF0", + "in_rom": true + }, + { + "caller_func": "0xBFC39FE4", + "caller_pc": "0xBFC3A078", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC39FE4", + "caller_pc": "0xBFC3A02C", + "callee_addr": "0xBFC37368", + "in_rom": true + }, + { + "caller_func": "0xBFC3A094", + "caller_pc": "0xBFC3A1E4", + "callee_addr": "0xBFC3A228", + "in_rom": true + }, + { + "caller_func": "0xBFC3A094", + "caller_pc": "0xBFC3A1F0", + "callee_addr": "0xBFC39F30", + "in_rom": true + }, + { + "caller_func": "0xBFC3A094", + "caller_pc": "0xBFC3A170", + "callee_addr": "0xBFC3A228", + "in_rom": true + }, + { + "caller_func": "0xBFC3A094", + "caller_pc": "0xBFC3A17C", + "callee_addr": "0xBFC39F30", + "in_rom": true + }, + { + "caller_func": "0xBFC3A228", + "caller_pc": "0xBFC3A23C", + "callee_addr": "0xBFC39F90", + "in_rom": true + }, + { + "caller_func": "0xBFC3A228", + "caller_pc": "0xBFC3A26C", + "callee_addr": "0xBFC39F30", + "in_rom": true + }, + { + "caller_func": "0xBFC3A2C0", + "caller_pc": "0xBFC3A2CC", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3A2C0", + "caller_pc": "0xBFC3A2EC", + "callee_addr": "0xBFC3E324", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AD98", + "callee_addr": "0xBFC3AC9C", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AE6C", + "callee_addr": "0xBFC3AAC4", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AE58", + "callee_addr": "0xBFC3B054", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AF3C", + "callee_addr": "0xBFC3A44C", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AFD0", + "callee_addr": "0xBFC3AB70", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AFD8", + "callee_addr": "0xBFC3A9EC", + "in_rom": true + }, + { + "caller_func": "0xBFC3AD68", + "caller_pc": "0xBFC3AFE4", + "callee_addr": "0xBFC3A638", + "in_rom": true + }, + { + "caller_func": "0xBFC3B054", + "caller_pc": "0xBFC3B108", + "callee_addr": "0xBFC3A95C", + "in_rom": true + }, + { + "caller_func": "0xBFC3B30C", + "caller_pc": "0xBFC3B318", + "callee_addr": "0xBFC3B368", + "in_rom": true + }, + { + "caller_func": "0xBFC3B30C", + "caller_pc": "0xBFC3B348", + "callee_addr": "0xBFC3B85C", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B380", + "callee_addr": "0xBFC3E0E8", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B3AC", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B3C4", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B4A0", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B504", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B584", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B6E4", + "callee_addr": "0xBFC3E390", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B714", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B368", + "caller_pc": "0xBFC3B758", + "callee_addr": "0xBFC3E0C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B85C", + "caller_pc": "0xBFC3B8C8", + "callee_addr": "0xBFC3DF20", + "in_rom": true + }, + { + "caller_func": "0xBFC3B85C", + "caller_pc": "0xBFC3B8D4", + "callee_addr": "0xBFC3DF90", + "in_rom": true + }, + { + "caller_func": "0xBFC3B85C", + "caller_pc": "0xBFC3B8F4", + "callee_addr": "0xBFC3DED0", + "in_rom": true + }, + { + "caller_func": "0xBFC3B93C", + "caller_pc": "0xBFC3B948", + "callee_addr": "0xBFC3E020", + "in_rom": true + }, + { + "caller_func": "0xBFC3BA74", + "caller_pc": "0xBFC3BA90", + "callee_addr": "0xBFC3AC9C", + "in_rom": true + }, + { + "caller_func": "0xBFC3BA74", + "caller_pc": "0xBFC3BBE4", + "callee_addr": "0xBFC3A44C", + "in_rom": true + }, + { + "caller_func": "0xBFC3BA74", + "caller_pc": "0xBFC3BC84", + "callee_addr": "0xBFC3AB70", + "in_rom": true + }, + { + "caller_func": "0xBFC3BA74", + "caller_pc": "0xBFC3BC94", + "callee_addr": "0xBFC3B964", + "in_rom": true + }, + { + "caller_func": "0xBFC3BA74", + "caller_pc": "0xBFC3BCA0", + "callee_addr": "0xBFC3A638", + "in_rom": true + }, + { + "caller_func": "0xBFC3BD78", + "caller_pc": "0xBFC3BD80", + "callee_addr": "0xBFC3D870", + "in_rom": true + }, + { + "caller_func": "0xBFC3BD98", + "caller_pc": "0xBFC3BDA0", + "callee_addr": "0xBFC3D870", + "in_rom": true + }, + { + "caller_func": "0xBFC3BDB8", + "caller_pc": "0xBFC3BDF0", + "callee_addr": "0xBFC3D8C0", + "in_rom": true + }, + { + "caller_func": "0xBFC3BE6C", + "caller_pc": "0xBFC3BE74", + "callee_addr": "0xBFC3B160", + "in_rom": true + }, + { + "caller_func": "0xBFC3BE90", + "caller_pc": "0xBFC3BEEC", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3BF10", + "caller_pc": "0xBFC3BF28", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3BF40", + "caller_pc": "0xBFC3BFD0", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3BFF0", + "caller_pc": "0xBFC3C048", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C068", + "callee_addr": "0xBFC3C19C", + "in_rom": true + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C078", + "callee_addr": "0xBFC3C418", + "in_rom": true + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C0D0", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C0F8", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C110", + "callee_addr": "0xB005A9D0", + "in_rom": false + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C120", + "callee_addr": "0xB005A9E0", + "in_rom": false + }, + { + "caller_func": "0xBFC3C060", + "caller_pc": "0xBFC3C128", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C1E4", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C228", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C2B8", + "callee_addr": "0xBFC3C4E0", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3A0", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3A8", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3B0", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3B8", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3DC", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3E4", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3EC", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C19C", + "caller_pc": "0xBFC3C3F4", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C428", + "caller_pc": "0xBFC3C4C8", + "callee_addr": "0xBFC3C4E0", + "in_rom": true + }, + { + "caller_func": "0xBFC3C428", + "caller_pc": "0xBFC3C498", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C520", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C55C", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C5E8", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C654", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C6C8", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C65C", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C4E0", + "caller_pc": "0xBFC3C624", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C740", + "callee_addr": "0xBFC3C19C", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3CA6C", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3CBB8", + "callee_addr": "0xBFC3CEC8", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3CCF4", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3CC80", + "callee_addr": "0xBFC3D65C", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C820", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3CC70", + "callee_addr": "0xBFC3D304", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C834", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C910", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C924", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C938", + "callee_addr": "0xBFC3C140", + "in_rom": true + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C884", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3C710", + "caller_pc": "0xBFC3C988", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3D810", + "caller_pc": "0xBFC3D848", + "callee_addr": "0xBFC3C428", + "in_rom": true + }, + { + "caller_func": "0xBFC3D870", + "caller_pc": "0xBFC3D89C", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3D930", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3D96C", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3D9D8", + "callee_addr": "0xBFC3ECB8", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DD5C", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DB74", + "callee_addr": "0xB005A950", + "in_rom": false + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DA50", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DE20", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DC9C", + "callee_addr": "0xB005A950", + "in_rom": false + }, + { + "caller_func": "0xBFC3D8C0", + "caller_pc": "0xBFC3DA80", + "callee_addr": "0xB005A950", + "in_rom": false + }, + { + "caller_func": "0xBFC3DED0", + "caller_pc": "0xBFC3DEF0", + "callee_addr": "0xBFC3C428", + "in_rom": true + }, + { + "caller_func": "0xBFC3DF20", + "caller_pc": "0xBFC3DF70", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3DF90", + "caller_pc": "0xBFC3DFF4", + "callee_addr": "0xBFC3C710", + "in_rom": true + }, + { + "caller_func": "0xBFC3E020", + "caller_pc": "0xBFC3E04C", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC3E020", + "caller_pc": "0xBFC3E074", + "callee_addr": "0xB005AA00", + "in_rom": false + }, + { + "caller_func": "0xBFC3E390", + "caller_pc": "0xBFC3E450", + "callee_addr": "0xBFC3E110", + "in_rom": true + }, + { + "caller_func": "0xBFC3E980", + "caller_pc": "0xBFC3EB5C", + "callee_addr": "0xBFC3E110", + "in_rom": true + }, + { + "caller_func": "0xBFC3E980", + "caller_pc": "0xBFC3EC98", + "callee_addr": "0xBFC3E634", + "in_rom": true + }, + { + "caller_func": "0xBFC3E980", + "caller_pc": "0xBFC3EC48", + "callee_addr": "0xBFC3E634", + "in_rom": true + }, + { + "caller_func": "0xBFC3E980", + "caller_pc": "0xBFC3EC10", + "callee_addr": "0xBFC3E634", + "in_rom": true + }, + { + "caller_func": "0xBFC3ED40", + "caller_pc": "0xBFC3ED9C", + "callee_addr": "0xBFC3E110", + "in_rom": true + }, + { + "caller_func": "0xBFC3EDB4", + "caller_pc": "0xBFC3EDBC", + "callee_addr": "0xBFC3E110", + "in_rom": true + }, + { + "caller_func": "0xBFC3EDB4", + "caller_pc": "0xBFC3EE04", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC3EF08", + "caller_pc": "0xBFC3EF3C", + "callee_addr": "0xBFC3EE80", + "in_rom": true + }, + { + "caller_func": "0xBFC3EF7C", + "caller_pc": "0xBFC3EFB0", + "callee_addr": "0xBFC3EE80", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3EFF8", + "callee_addr": "0xBFC3EEE4", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F018", + "callee_addr": "0xBFC3EF08", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F028", + "callee_addr": "0xBFC3EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F038", + "callee_addr": "0xBFC3EF7C", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F048", + "callee_addr": "0xBFC3EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F064", + "callee_addr": "0xBFC3EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC3EFF0", + "caller_pc": "0xBFC3F074", + "callee_addr": "0xBFC3EEC0", + "in_rom": true + }, + { + "caller_func": "0xBFC3F090", + "caller_pc": "0xBFC3F138", + "callee_addr": "0xBFC40744", + "in_rom": true + }, + { + "caller_func": "0xBFC3F090", + "caller_pc": "0xBFC3F148", + "callee_addr": "0xBFC40720", + "in_rom": true + }, + { + "caller_func": "0xBFC3F090", + "caller_pc": "0xBFC3F17C", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC3F1B8", + "caller_pc": "0xBFC3F24C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F2B4", + "caller_pc": "0xBFC3F37C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F484", + "caller_pc": "0xBFC3F4B0", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F4F0", + "caller_pc": "0xBFC3F52C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F570", + "caller_pc": "0xBFC3F594", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F5D8", + "caller_pc": "0xBFC3F698", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F6F0", + "caller_pc": "0xBFC3F790", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F7E8", + "caller_pc": "0xBFC3F864", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F7E8", + "caller_pc": "0xBFC3F8C8", + "callee_addr": "0xBFC41BA8", + "in_rom": true + }, + { + "caller_func": "0xBFC3F8E4", + "caller_pc": "0xBFC3F944", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3F9AC", + "caller_pc": "0xBFC3F9CC", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FA10", + "caller_pc": "0xBFC3FAA8", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FAEC", + "caller_pc": "0xBFC3FB3C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FB74", + "caller_pc": "0xBFC3FC0C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FC50", + "caller_pc": "0xBFC3FCC8", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FD0C", + "caller_pc": "0xBFC3FD84", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FDC8", + "caller_pc": "0xBFC3FDE8", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FE60", + "caller_pc": "0xBFC3FEFC", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC3FF40", + "caller_pc": "0xBFC3FFDC", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC40034", + "caller_pc": "0xBFC40098", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC400DC", + "caller_pc": "0xBFC40140", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC40184", + "caller_pc": "0xBFC401F4", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC40260", + "caller_pc": "0xBFC40298", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC402DC", + "caller_pc": "0xBFC40340", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC40628", + "caller_pc": "0xBFC406BC", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC406E0", + "caller_pc": "0xBFC406E8", + "callee_addr": "0xB005ABA0", + "in_rom": false + }, + { + "caller_func": "0xBFC40700", + "caller_pc": "0xBFC40708", + "callee_addr": "0xB005ABA0", + "in_rom": false + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC407D0", + "callee_addr": "0xBFC41258", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC407EC", + "callee_addr": "0xBFC4130C", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40814", + "callee_addr": "0xBFC41200", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40824", + "callee_addr": "0xBFC41200", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408E4", + "callee_addr": "0xBFC41708", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408C4", + "callee_addr": "0xBFC417CC", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408D4", + "callee_addr": "0xBFC4192C", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408FC", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408B4", + "callee_addr": "0xBFC41A44", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40894", + "callee_addr": "0xBFC41788", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40884", + "callee_addr": "0xBFC41804", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40854", + "callee_addr": "0xBFC413B0", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40874", + "callee_addr": "0xBFC41458", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC408A4", + "callee_addr": "0xBFC418C4", + "in_rom": true + }, + { + "caller_func": "0xBFC407B8", + "caller_pc": "0xBFC40864", + "callee_addr": "0xBFC413F4", + "in_rom": true + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40B90", + "callee_addr": "0xBFC41848", + "in_rom": true + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40D04", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40C18", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40D7C", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40C44", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40BF4", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40B68", + "caller_pc": "0xBFC40CEC", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40DE8", + "caller_pc": "0xBFC40F1C", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40DE8", + "caller_pc": "0xBFC40EB8", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC40F34", + "caller_pc": "0xBFC40F88", + "callee_addr": "0xBFC41520", + "in_rom": true + }, + { + "caller_func": "0xBFC40F34", + "caller_pc": "0xBFC40FC0", + "callee_addr": "0xBFC41648", + "in_rom": true + }, + { + "caller_func": "0xBFC40F34", + "caller_pc": "0xBFC40FFC", + "callee_addr": "0xBFC41670", + "in_rom": true + }, + { + "caller_func": "0xBFC40F34", + "caller_pc": "0xBFC41014", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4102C", + "caller_pc": "0xBFC41088", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4102C", + "caller_pc": "0xBFC41124", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4102C", + "caller_pc": "0xBFC4119C", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4102C", + "caller_pc": "0xBFC411E8", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4102C", + "caller_pc": "0xBFC411D0", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41200", + "caller_pc": "0xBFC4121C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41258", + "caller_pc": "0xBFC412F4", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC4130C", + "caller_pc": "0xBFC41398", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC413B0", + "caller_pc": "0xBFC413DC", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC413F4", + "caller_pc": "0xBFC41440", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41458", + "caller_pc": "0xBFC41460", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41520", + "caller_pc": "0xBFC4154C", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41520", + "caller_pc": "0xBFC415BC", + "callee_addr": "0xBFC41BA8", + "in_rom": true + }, + { + "caller_func": "0xBFC41520", + "caller_pc": "0xBFC415F0", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41648", + "caller_pc": "0xBFC41658", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41670", + "caller_pc": "0xBFC416F0", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41708", + "caller_pc": "0xBFC41770", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41788", + "caller_pc": "0xBFC417B4", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC417CC", + "caller_pc": "0xBFC417EC", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41804", + "caller_pc": "0xBFC41830", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41848", + "caller_pc": "0xBFC4186C", + "callee_addr": "0xBFC41C04", + "in_rom": true + }, + { + "caller_func": "0xBFC41848", + "caller_pc": "0xBFC41884", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC418C4", + "caller_pc": "0xBFC418EC", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC4192C", + "caller_pc": "0xBFC419B8", + "callee_addr": "0xBFC41C04", + "in_rom": true + }, + { + "caller_func": "0xBFC4192C", + "caller_pc": "0xBFC419F4", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41A44", + "caller_pc": "0xBFC41AE0", + "callee_addr": "0xB005AB90", + "in_rom": false + }, + { + "caller_func": "0xBFC41A44", + "caller_pc": "0xBFC41B10", + "callee_addr": "0xBFC41C04", + "in_rom": true + }, + { + "caller_func": "0xBFC41A44", + "caller_pc": "0xBFC41B58", + "callee_addr": "0xBFC41C0C", + "in_rom": true + }, + { + "caller_func": "0xBFC41C80", + "caller_pc": "0xBFC41CEC", + "callee_addr": "0xBFC41DA4", + "in_rom": true + }, + { + "caller_func": "0xBFC41C80", + "caller_pc": "0xBFC41D10", + "callee_addr": "0xBFC41DA4", + "in_rom": true + }, + { + "caller_func": "0xBFC41DA4", + "caller_pc": "0xBFC41DEC", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC42014", + "caller_pc": "0xBFC4201C", + "callee_addr": "0xB005ABC0", + "in_rom": false + }, + { + "caller_func": "0xBFC4203C", + "caller_pc": "0xBFC42044", + "callee_addr": "0xB005ABD0", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42174", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC4217C", + "callee_addr": "0xBFC424A8", + "in_rom": true + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC421D0", + "callee_addr": "0xB005ABE0", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42330", + "callee_addr": "0xB005ABF0", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42340", + "callee_addr": "0xBFC42540", + "in_rom": true + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42350", + "callee_addr": "0xBFC42640", + "in_rom": true + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42360", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC4230C", + "callee_addr": "0xB005ABA0", + "in_rom": false + }, + { + "caller_func": "0xBFC42160", + "caller_pc": "0xBFC42248", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC42424", + "caller_pc": "0xBFC4242C", + "callee_addr": "0xB005AA90", + "in_rom": false + }, + { + "caller_func": "0xBFC42424", + "caller_pc": "0xBFC42490", + "callee_addr": "0xB005AA10", + "in_rom": false + }, + { + "caller_func": "0xBFC424A8", + "caller_pc": "0xBFC42518", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC424A8", + "caller_pc": "0xBFC42528", + "callee_addr": "0xB005A8D0", + "in_rom": false + }, + { + "caller_func": "0xBFC42540", + "caller_pc": "0xBFC42554", + "callee_addr": "0xBFC42090", + "in_rom": true + }, + { + "caller_func": "0xBFC42540", + "caller_pc": "0xBFC4258C", + "callee_addr": "0xB005A980", + "in_rom": false + }, + { + "caller_func": "0xBFC42540", + "caller_pc": "0xBFC42598", + "callee_addr": "0xB005AC00", + "in_rom": false + }, + { + "caller_func": "0xBFC425FC", + "caller_pc": "0xBFC42604", + "callee_addr": "0xBFC42540", + "in_rom": true + }, + { + "caller_func": "0xBFC42640", + "caller_pc": "0xBFC42654", + "callee_addr": "0xBFC42090", + "in_rom": true + }, + { + "caller_func": "0xBFC426DC", + "caller_pc": "0xBFC426F4", + "callee_addr": "0xB005A910", + "in_rom": false + }, + { + "caller_func": "0xBFC4270C", + "caller_pc": "0xBFC4282C", + "callee_addr": "0xB005A910", + "in_rom": false } ] } diff --git a/generated/function_manifest.json b/generated/function_manifest.json index a66d253e..0b919ccc 100644 --- a/generated/function_manifest.json +++ b/generated/function_manifest.json @@ -1,10 +1,10 @@ { "schema": "psxrecomp-v4 phase1c function_manifest v1", "bios_sha256": "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3", - "total_functions": 76, - "total_instructions": 2988, - "total_edges": 199, - "total_indirect_jumps": 27, + "total_functions": 1020, + "total_instructions": 55477, + "total_edges": 2807, + "total_indirect_jumps": 196, "functions": [ { "entry_addr": "0xBFC00000", @@ -30,16 +30,61 @@ "end_addr": "0xBFC00458", "instruction_count": 15, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06834", + "discovered_by": "ghidra_BFC00420", "block_leaders": ["0xBFC00420", "0xBFC00434", "0xBFC0044C"] }, + { + "entry_addr": "0xBFC00678", + "normalized_addr": "0x1FC00678", + "end_addr": "0xBFC006A4", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC00678", + "block_leaders": ["0xBFC00678", "0xBFC00688", "0xBFC00698"] + }, + { + "entry_addr": "0xBFC006A8", + "normalized_addr": "0x1FC006A8", + "end_addr": "0xBFC006D4", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC006A8", + "block_leaders": ["0xBFC006A8", "0xBFC006B8", "0xBFC006C8"] + }, + { + "entry_addr": "0xBFC006D8", + "normalized_addr": "0x1FC006D8", + "end_addr": "0xBFC00774", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC006D8", + "block_leaders": ["0xBFC006D8", "0xBFC006F4", "0xBFC006FC", "0xBFC00708", "0xBFC00714", "0xBFC0071C", "0xBFC00728", "0xBFC00730", "0xBFC0073C", "0xBFC00768"] + }, + { + "entry_addr": "0xBFC00778", + "normalized_addr": "0x1FC00778", + "end_addr": "0xBFC0080C", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC00778", + "block_leaders": ["0xBFC00778", "0xBFC007A0", "0xBFC007C0", "0xBFC007E0", "0xBFC00800"] + }, + { + "entry_addr": "0xBFC00810", + "normalized_addr": "0x1FC00810", + "end_addr": "0xBFC0089C", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC00810", + "block_leaders": ["0xBFC00810", "0xBFC00890"] + }, { "entry_addr": "0xBFC008A0", "normalized_addr": "0x1FC008A0", "end_addr": "0xBFC00940", "instruction_count": 41, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B08", + "discovered_by": "ghidra_BFC008A0", "block_leaders": ["0xBFC008A0", "0xBFC008BC", "0xBFC008CC", "0xBFC008EC", "0xBFC00904", "0xBFC0091C", "0xBFC00934"] }, { @@ -48,7 +93,7 @@ "end_addr": "0xBFC00B78", "instruction_count": 142, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B08 -> jal at 0xBFC008E4", + "discovered_by": "ghidra_BFC00944", "block_leaders": ["0xBFC00944", "0xBFC00970", "0xBFC00978", "0xBFC00980", "0xBFC00990", "0xBFC00998", "0xBFC009A0", "0xBFC009A4", "0xBFC009B4", "0xBFC009BC", "0xBFC009CC", "0xBFC009DC", "0xBFC009E4", "0xBFC009F4", "0xBFC009FC", "0xBFC00A04", "0xBFC00A30", "0xBFC00A38", "0xBFC00A40", "0xBFC00A64", "0xBFC00A6C", "0xBFC00A74", "0xBFC00A7C", "0xBFC00AA4", "0xBFC00AAC", "0xBFC00AB4", "0xBFC00ADC", "0xBFC00AE0", "0xBFC00AE8", "0xBFC00AEC", "0xBFC00AF4", "0xBFC00B04", "0xBFC00B0C", "0xBFC00B20", "0xBFC00B48", "0xBFC00B64", "0xBFC00B68"] }, { @@ -57,7 +102,7 @@ "end_addr": "0xBFC00D9C", "instruction_count": 137, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B08 -> jal at 0xBFC0092C", + "discovered_by": "ghidra_BFC00B7C", "block_leaders": ["0xBFC00B7C", "0xBFC00BAC", "0xBFC00BBC", "0xBFC00BC4", "0xBFC00BD0", "0xBFC00BD8", "0xBFC00C04", "0xBFC00C0C", "0xBFC00C14", "0xBFC00C38", "0xBFC00C40", "0xBFC00C48", "0xBFC00C50", "0xBFC00C74", "0xBFC00C7C", "0xBFC00C84", "0xBFC00CA8", "0xBFC00CB0", "0xBFC00CC0", "0xBFC00CE4", "0xBFC00D04", "0xBFC00D14", "0xBFC00D28", "0xBFC00D38", "0xBFC00D48", "0xBFC00D50", "0xBFC00D60", "0xBFC00D68", "0xBFC00D78", "0xBFC00D88", "0xBFC00D8C"] }, { @@ -66,7 +111,7 @@ "end_addr": "0xBFC018D8", "instruction_count": 719, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068B8 -> jal at 0xBFC01908", + "discovered_by": "ghidra_BFC00DA0", "block_leaders": ["0xBFC00DA0", "0xBFC00DB8", "0xBFC00DC0", "0xBFC00E1C", "0xBFC00E2C", "0xBFC00E58", "0xBFC00E5C", "0xBFC00E64", "0xBFC00E6C", "0xBFC00E90", "0xBFC00E94", "0xBFC00EA8", "0xBFC00EB8", "0xBFC00EC0", "0xBFC00EC8", "0xBFC00ED0", "0xBFC00EE0", "0xBFC00EE4", "0xBFC00EEC", "0xBFC00EF4", "0xBFC00F04", "0xBFC00F10", "0xBFC00F14", "0xBFC00F1C", "0xBFC00F34", "0xBFC00F38", "0xBFC00F58", "0xBFC00F70", "0xBFC00F74", "0xBFC00F7C", "0xBFC00F84", "0xBFC00F8C", "0xBFC00F94", "0xBFC00F98", "0xBFC00F9C", "0xBFC00FBC", "0xBFC00FD4", "0xBFC00FE0", "0xBFC00FE8", "0xBFC00FF0", "0xBFC00FF8", "0xBFC01014", "0xBFC01018", "0xBFC01028", "0xBFC01034", "0xBFC01040", "0xBFC0104C", "0xBFC01054", "0xBFC01058", "0xBFC01060", "0xBFC0106C", "0xBFC01078", "0xBFC0108C", "0xBFC01090", "0xBFC01098", "0xBFC010AC", "0xBFC010B0", "0xBFC010C0", "0xBFC010C8", "0xBFC010D8", "0xBFC010E4", "0xBFC010F0", "0xBFC010FC", "0xBFC01104", "0xBFC0110C", "0xBFC01124", "0xBFC01134", "0xBFC0113C", "0xBFC01144", "0xBFC01154", "0xBFC0117C", "0xBFC0118C", "0xBFC01194", "0xBFC0119C", "0xBFC011A4", "0xBFC011CC", "0xBFC011D0", "0xBFC011E4", "0xBFC011F0", "0xBFC011FC", "0xBFC01208", "0xBFC01210", "0xBFC01218", "0xBFC01228", "0xBFC01238", "0xBFC01244", "0xBFC01250", "0xBFC0125C", "0xBFC01264", "0xBFC01268", "0xBFC01274", "0xBFC0127C", "0xBFC01280", "0xBFC01288", "0xBFC01290", "0xBFC01298", "0xBFC012A0", "0xBFC012A8", "0xBFC012CC", "0xBFC012D0", "0xBFC012D8", "0xBFC012E8", "0xBFC012F4", "0xBFC01304", "0xBFC01310", "0xBFC01314", "0xBFC01318", "0xBFC01328", "0xBFC01338", "0xBFC01344", "0xBFC01354", "0xBFC0136C", "0xBFC01374", "0xBFC01378", "0xBFC01380", "0xBFC0138C", "0xBFC01394", "0xBFC013A8", "0xBFC013B0", "0xBFC013DC", "0xBFC013E4", "0xBFC013EC", "0xBFC01410", "0xBFC0141C", "0xBFC01424", "0xBFC0144C", "0xBFC01470", "0xBFC0147C", "0xBFC01490", "0xBFC01498", "0xBFC014C4", "0xBFC014C8", "0xBFC014DC", "0xBFC014E4", "0xBFC01514", "0xBFC01518", "0xBFC01524", "0xBFC01530", "0xBFC01558", "0xBFC01564", "0xBFC0156C", "0xBFC01594", "0xBFC01598", "0xBFC015A0", "0xBFC015B4", "0xBFC015BC", "0xBFC015E8", "0xBFC015EC", "0xBFC015FC", "0xBFC01604", "0xBFC01608", "0xBFC0160C", "0xBFC01620", "0xBFC01624", "0xBFC0164C", "0xBFC01654", "0xBFC0165C", "0xBFC01664", "0xBFC0166C", "0xBFC01674", "0xBFC0167C", "0xBFC01684", "0xBFC0168C", "0xBFC01694", "0xBFC0169C", "0xBFC016A4", "0xBFC016AC", "0xBFC016B4", "0xBFC016B8", "0xBFC016C0", "0xBFC016F0", "0xBFC016F8", "0xBFC01700", "0xBFC01708", "0xBFC01710", "0xBFC01718", "0xBFC01720", "0xBFC0172C", "0xBFC01734", "0xBFC01738", "0xBFC01740", "0xBFC01748", "0xBFC01750", "0xBFC01758", "0xBFC01760", "0xBFC01768", "0xBFC01774", "0xBFC0177C", "0xBFC01788", "0xBFC01790", "0xBFC01798", "0xBFC017A0", "0xBFC017AC", "0xBFC017B4", "0xBFC017B8", "0xBFC017C0", "0xBFC017C8", "0xBFC017D0", "0xBFC017D8", "0xBFC017E0", "0xBFC017E8", "0xBFC017F0", "0xBFC017F8", "0xBFC01804", "0xBFC0180C", "0xBFC01818", "0xBFC01820", "0xBFC01828", "0xBFC01830", "0xBFC0183C", "0xBFC01844", "0xBFC01850", "0xBFC01858", "0xBFC01860", "0xBFC01868", "0xBFC01870", "0xBFC01878", "0xBFC01884", "0xBFC0188C", "0xBFC01898", "0xBFC018A0", "0xBFC018A8", "0xBFC018B0", "0xBFC018BC", "0xBFC018C4", "0xBFC018CC", "0xBFC018D0"] }, { @@ -75,52 +120,214 @@ "end_addr": "0xBFC0191C", "instruction_count": 16, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068B8", + "discovered_by": "ghidra_BFC018E0", "block_leaders": ["0xBFC018E0", "0xBFC01910"] }, { "entry_addr": "0xBFC01920", "normalized_addr": "0x1FC01920", - "end_addr": "0xBFC0193C", - "instruction_count": 8, + "end_addr": "0xBFC01938", + "instruction_count": 7, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06990 -> jal at 0xBFC07014", + "discovered_by": "ghidra_BFC01920", "block_leaders": ["0xBFC01920"] }, + { + "entry_addr": "0xBFC0193C", + "normalized_addr": "0x1FC0193C", + "end_addr": "0xBFC01A5C", + "instruction_count": 73, + "termination_reason": "jr_ra", + "discovered_by": "cache_flush_continuation", + "block_leaders": ["0xBFC0193C", "0xBFC01960", "0xBFC01988", "0xBFC019B0", "0xBFC01A38"] + }, { "entry_addr": "0xBFC01A60", "normalized_addr": "0x1FC01A60", "end_addr": "0xBFC01A84", "instruction_count": 10, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06ECC", + "discovered_by": "ghidra_BFC01A60", "block_leaders": ["0xBFC01A60", "0xBFC01A78"] }, + { + "entry_addr": "0xBFC01A90", + "normalized_addr": "0x1FC01A90", + "end_addr": "0xBFC01AC8", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC01A90", + "block_leaders": ["0xBFC01A90", "0xBFC01A98", "0xBFC01AA0", "0xBFC01AA8", "0xBFC01AC0"] + }, { "entry_addr": "0xBFC01ACC", "normalized_addr": "0x1FC01ACC", "end_addr": "0xBFC01B04", "instruction_count": 15, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06914 -> jal at 0xBFC04644", + "discovered_by": "ghidra_BFC01ACC", "block_leaders": ["0xBFC01ACC", "0xBFC01AD4", "0xBFC01ADC", "0xBFC01AE4", "0xBFC01AEC", "0xBFC01AFC"] }, + { + "entry_addr": "0xBFC01B80", + "normalized_addr": "0x1FC01B80", + "end_addr": "0xBFC01C88", + "instruction_count": 66, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC01B80", + "block_leaders": ["0xBFC01B80", "0xBFC01B88", "0xBFC01BA0", "0xBFC01BAC", "0xBFC01BB0", "0xBFC01BB4", "0xBFC01BE4", "0xBFC01BEC", "0xBFC01BF0", "0xBFC01BF8", "0xBFC01C00", "0xBFC01C08", "0xBFC01C28", "0xBFC01C34", "0xBFC01C4C", "0xBFC01C50", "0xBFC01C6C", "0xBFC01C70"] + }, + { + "entry_addr": "0xBFC01C8C", + "normalized_addr": "0x1FC01C8C", + "end_addr": "0xBFC01E20", + "instruction_count": 102, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC01C8C", + "block_leaders": ["0xBFC01C8C", "0xBFC01CAC", "0xBFC01CB4", "0xBFC01CD0", "0xBFC01CE8", "0xBFC01D00", "0xBFC01D0C", "0xBFC01D1C", "0xBFC01D24", "0xBFC01D40", "0xBFC01D50", "0xBFC01D54", "0xBFC01D70", "0xBFC01D9C", "0xBFC01DA8", "0xBFC01DAC", "0xBFC01DBC", "0xBFC01DC4", "0xBFC01DC8", "0xBFC01E08", "0xBFC01E0C", "0xBFC01E14", "0xBFC01E18", "0xBFC01E1C"] + }, + { + "entry_addr": "0xBFC01E24", + "normalized_addr": "0x1FC01E24", + "end_addr": "0xBFC01E58", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "SysInitMemory", + "block_leaders": ["0xBFC01E24"] + }, + { + "entry_addr": "0xBFC01E5C", + "normalized_addr": "0x1FC01E5C", + "end_addr": "0xBFC020EC", + "instruction_count": 165, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC01E5C", + "block_leaders": ["0xBFC01E5C", "0xBFC01E98", "0xBFC01EA0", "0xBFC01EC0", "0xBFC01EC8", "0xBFC01ECC", "0xBFC01EEC", "0xBFC01EF4", "0xBFC01EFC", "0xBFC01F18", "0xBFC01F30", "0xBFC01F38", "0xBFC01F44", "0xBFC01F58", "0xBFC01F5C", "0xBFC01F64", "0xBFC01F80", "0xBFC01F84", "0xBFC01FA0", "0xBFC01FA4", "0xBFC01FAC", "0xBFC01FD0", "0xBFC01FDC", "0xBFC01FE4", "0xBFC01FEC", "0xBFC01FF4", "0xBFC02008", "0xBFC0200C", "0xBFC02014", "0xBFC02030", "0xBFC02038", "0xBFC02050", "0xBFC02058", "0xBFC0207C", "0xBFC02088", "0xBFC02090", "0xBFC02098", "0xBFC020A0", "0xBFC020B0", "0xBFC020C8", "0xBFC020D8"] + }, + { + "entry_addr": "0xBFC020F0", + "normalized_addr": "0x1FC020F0", + "end_addr": "0xBFC02100", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC020F0", + "block_leaders": ["0xBFC020F0"] + }, + { + "entry_addr": "0xBFC02104", + "normalized_addr": "0x1FC02104", + "end_addr": "0xBFC0219C", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02104", + "block_leaders": ["0xBFC02104", "0xBFC0211C", "0xBFC02124", "0xBFC0212C", "0xBFC02134", "0xBFC0213C", "0xBFC02144", "0xBFC02148", "0xBFC02154", "0xBFC02160", "0xBFC0216C", "0xBFC02178", "0xBFC02184", "0xBFC0218C", "0xBFC02190"] + }, + { + "entry_addr": "0xBFC02200", + "normalized_addr": "0x1FC02200", + "end_addr": "0xBFC0222C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "jal_BFC02200", + "block_leaders": ["0xBFC02200"] + }, { "entry_addr": "0xBFC02240", "normalized_addr": "0x1FC02240", "end_addr": "0xBFC02278", "instruction_count": 15, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06970", + "discovered_by": "ghidra_BFC02240", "block_leaders": ["0xBFC02240"] }, + { + "entry_addr": "0xBFC0227C", + "normalized_addr": "0x1FC0227C", + "end_addr": "0xBFC022B4", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0227C", + "block_leaders": ["0xBFC0227C"] + }, + { + "entry_addr": "0xBFC022C0", + "normalized_addr": "0x1FC022C0", + "end_addr": "0xBFC02320", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC022C0", + "block_leaders": ["0xBFC022C0", "0xBFC022E8", "0xBFC022F0", "0xBFC022FC", "0xBFC02304", "0xBFC0230C", "0xBFC02310", "0xBFC02314"] + }, + { + "entry_addr": "0xBFC02324", + "normalized_addr": "0x1FC02324", + "end_addr": "0xBFC0233C", + "instruction_count": 7, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC02324", + "block_leaders": ["0xBFC02324"] + }, + { + "entry_addr": "0xBFC02590", + "normalized_addr": "0x1FC02590", + "end_addr": "0xBFC025AC", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02590", + "block_leaders": ["0xBFC02590", "0xBFC025A0"] + }, + { + "entry_addr": "0xBFC025B0", + "normalized_addr": "0x1FC025B0", + "end_addr": "0xBFC02734", + "instruction_count": 98, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC025B0", + "block_leaders": ["0xBFC025B0", "0xBFC025D8", "0xBFC025E0", "0xBFC0260C", "0xBFC02630", "0xBFC02638", "0xBFC02640", "0xBFC02644", "0xBFC0264C", "0xBFC02654", "0xBFC0265C", "0xBFC02670", "0xBFC0267C", "0xBFC02684", "0xBFC0268C", "0xBFC0269C", "0xBFC026AC", "0xBFC026B4", "0xBFC026C0", "0xBFC026C8", "0xBFC026D0", "0xBFC026D8", "0xBFC026E4", "0xBFC02700", "0xBFC0270C", "0xBFC02720"] + }, + { + "entry_addr": "0xBFC02738", + "normalized_addr": "0x1FC02738", + "end_addr": "0xBFC02914", + "instruction_count": 120, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02738", + "block_leaders": ["0xBFC02738", "0xBFC02768", "0xBFC02770", "0xBFC0279C", "0xBFC027C0", "0xBFC027CC", "0xBFC027DC", "0xBFC027E0", "0xBFC027E8", "0xBFC027F0", "0xBFC027F4", "0xBFC027FC", "0xBFC02804", "0xBFC0280C", "0xBFC02820", "0xBFC0282C", "0xBFC02834", "0xBFC0283C", "0xBFC0284C", "0xBFC0285C", "0xBFC02864", "0xBFC02870", "0xBFC02878", "0xBFC02880", "0xBFC02888", "0xBFC02894", "0xBFC028A8", "0xBFC028AC", "0xBFC028CC", "0xBFC028DC", "0xBFC028FC"] + }, + { + "entry_addr": "0xBFC02950", + "normalized_addr": "0x1FC02950", + "end_addr": "0xBFC02AEC", + "instruction_count": 104, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02950", + "block_leaders": ["0xBFC02950", "0xBFC0297C", "0xBFC02984", "0xBFC029B0", "0xBFC029D4", "0xBFC029E0", "0xBFC029F0", "0xBFC029F4", "0xBFC029FC", "0xBFC02A0C", "0xBFC02A1C", "0xBFC02A2C", "0xBFC02A38", "0xBFC02A40", "0xBFC02A48", "0xBFC02A50", "0xBFC02A54", "0xBFC02A5C", "0xBFC02A68", "0xBFC02A88", "0xBFC02A8C", "0xBFC02AA8", "0xBFC02AB4", "0xBFC02AC0", "0xBFC02AD4"] + }, + { + "entry_addr": "0xBFC02AF0", + "normalized_addr": "0x1FC02AF0", + "end_addr": "0xBFC02B0C", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02AF0", + "block_leaders": ["0xBFC02AF0", "0xBFC02B00"] + }, + { + "entry_addr": "0xBFC02B10", + "normalized_addr": "0x1FC02B10", + "end_addr": "0xBFC02B40", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02B10", + "block_leaders": ["0xBFC02B10", "0xBFC02B28"] + }, { "entry_addr": "0xBFC02B50", "normalized_addr": "0x1FC02B50", "end_addr": "0xBFC02B88", "instruction_count": 15, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068F0", + "discovered_by": "ghidra_BFC02B50", "block_leaders": ["0xBFC02B50", "0xBFC02B58", "0xBFC02B60", "0xBFC02B68", "0xBFC02B80"] }, { @@ -129,34 +336,97 @@ "end_addr": "0xBFC02D10", "instruction_count": 19, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068B8 -> jal at 0xBFC01908 -> jal at 0xBFC0114C", + "discovered_by": "ghidra_BFC02CC0", "block_leaders": ["0xBFC02CC0", "0xBFC02CC8", "0xBFC02CD0", "0xBFC02CDC", "0xBFC02CE4", "0xBFC02CF4", "0xBFC02D00", "0xBFC02D08", "0xBFC02D0C"] }, + { + "entry_addr": "0xBFC02D20", + "normalized_addr": "0x1FC02D20", + "end_addr": "0xBFC02DA8", + "instruction_count": 35, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02D20", + "block_leaders": ["0xBFC02D20", "0xBFC02D4C", "0xBFC02D58", "0xBFC02D64", "0xBFC02D6C", "0xBFC02D78", "0xBFC02D7C", "0xBFC02D84", "0xBFC02D8C", "0xBFC02D90"] + }, + { + "entry_addr": "0xBFC02DAC", + "normalized_addr": "0x1FC02DAC", + "end_addr": "0xBFC02E98", + "instruction_count": 60, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02DAC", + "block_leaders": ["0xBFC02DAC", "0xBFC02DE8", "0xBFC02DF4", "0xBFC02DFC", "0xBFC02E0C", "0xBFC02E10", "0xBFC02E28", "0xBFC02E30", "0xBFC02E38", "0xBFC02E3C", "0xBFC02E48", "0xBFC02E60", "0xBFC02E68", "0xBFC02E70", "0xBFC02E74"] + }, { "entry_addr": "0xBFC02EA0", "normalized_addr": "0x1FC02EA0", "end_addr": "0xBFC02ED8", "instruction_count": 15, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B08 -> jal at 0xBFC008E4 -> jal at 0xBFC00B04", + "discovered_by": "ghidra_BFC02EA0", "block_leaders": ["0xBFC02EA0", "0xBFC02EC8", "0xBFC02ED4"] }, + { + "entry_addr": "0xBFC02EDC", + "normalized_addr": "0x1FC02EDC", + "end_addr": "0xBFC02F14", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02EDC", + "block_leaders": ["0xBFC02EDC", "0xBFC02F04", "0xBFC02F10"] + }, + { + "entry_addr": "0xBFC02F20", + "normalized_addr": "0x1FC02F20", + "end_addr": "0xBFC03094", + "instruction_count": 94, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC02F20", + "block_leaders": ["0xBFC02F20", "0xBFC02F58", "0xBFC02F64", "0xBFC02F70", "0xBFC02F74", "0xBFC02F84", "0xBFC02F94", "0xBFC02FB4", "0xBFC02FD0", "0xBFC02FD8", "0xBFC02FE0", "0xBFC02FF0", "0xBFC03014", "0xBFC0301C", "0xBFC03024", "0xBFC03034", "0xBFC03038", "0xBFC03040", "0xBFC03050", "0xBFC03064", "0xBFC0306C", "0xBFC03070"] + }, + { + "entry_addr": "0xBFC03098", + "normalized_addr": "0x1FC03098", + "end_addr": "0xBFC03100", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03098", + "block_leaders": ["0xBFC03098", "0xBFC030C0", "0xBFC030CC", "0xBFC030E4", "0xBFC030F4"] + }, + { + "entry_addr": "0xBFC03104", + "normalized_addr": "0x1FC03104", + "end_addr": "0xBFC03184", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03104", + "block_leaders": ["0xBFC03104", "0xBFC0314C", "0xBFC03160", "0xBFC03178"] + }, { "entry_addr": "0xBFC03190", "normalized_addr": "0x1FC03190", "end_addr": "0xBFC031FC", "instruction_count": 28, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067A4", + "discovered_by": "ghidra_BFC03190", "block_leaders": ["0xBFC03190", "0xBFC03198", "0xBFC031A0", "0xBFC031A8", "0xBFC031B8", "0xBFC031C8", "0xBFC031E0", "0xBFC031F4"] }, + { + "entry_addr": "0xBFC03288", + "normalized_addr": "0x1FC03288", + "end_addr": "0xBFC0330C", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03288", + "block_leaders": ["0xBFC03288", "0xBFC03290", "0xBFC03298", "0xBFC032A0", "0xBFC032A8", "0xBFC032B0", "0xBFC032B8", "0xBFC032C0", "0xBFC032D4", "0xBFC032D8", "0xBFC032E0", "0xBFC032E8", "0xBFC032FC"] + }, { "entry_addr": "0xBFC03310", "normalized_addr": "0x1FC03310", "end_addr": "0xBFC033C4", "instruction_count": 45, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8 -> jal at 0xBFC0745C", + "discovered_by": "ghidra_BFC03310", "block_leaders": ["0xBFC03310", "0xBFC03318", "0xBFC03320", "0xBFC03328", "0xBFC03330", "0xBFC03338", "0xBFC03340", "0xBFC0334C", "0xBFC03354", "0xBFC03368", "0xBFC0336C", "0xBFC03374", "0xBFC0337C", "0xBFC03388", "0xBFC0339C", "0xBFC033A4", "0xBFC033AC", "0xBFC033BC"] }, { @@ -165,7 +435,7 @@ "end_addr": "0xBFC03414", "instruction_count": 20, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC06794", + "discovered_by": "ghidra_BFC033C8", "block_leaders": ["0xBFC033C8", "0xBFC033D0", "0xBFC033D8", "0xBFC033E0", "0xBFC033F8", "0xBFC0340C"] }, { @@ -174,7 +444,7 @@ "end_addr": "0xBFC03490", "instruction_count": 31, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B08 -> jal at 0xBFC0092C -> jal at 0xBFC00D20", + "discovered_by": "ghidra_BFC03418", "block_leaders": ["0xBFC03418", "0xBFC03420", "0xBFC03428", "0xBFC03430", "0xBFC0343C", "0xBFC03450", "0xBFC03460", "0xBFC03474", "0xBFC0347C", "0xBFC03488"] }, { @@ -183,16 +453,34 @@ "end_addr": "0xBFC034CC", "instruction_count": 15, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068B8 -> jal at 0xBFC01908 -> jal at 0xBFC0119C", + "discovered_by": "ghidra_BFC03494", "block_leaders": ["0xBFC03494", "0xBFC0349C", "0xBFC034A4", "0xBFC034B4", "0xBFC034C4", "0xBFC034C8"] }, + { + "entry_addr": "0xBFC03764", + "normalized_addr": "0x1FC03764", + "end_addr": "0xBFC03890", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03764", + "block_leaders": ["0xBFC03764", "0xBFC03778", "0xBFC03788", "0xBFC0379C", "0xBFC037AC", "0xBFC037B8", "0xBFC037C0", "0xBFC037C8", "0xBFC037D0", "0xBFC037D8", "0xBFC037E8", "0xBFC037F8", "0xBFC03800", "0xBFC0380C", "0xBFC03814", "0xBFC03824", "0xBFC0382C", "0xBFC03834", "0xBFC03844", "0xBFC03854", "0xBFC0385C", "0xBFC03864", "0xBFC03870", "0xBFC03884"] + }, + { + "entry_addr": "0xBFC03910", + "normalized_addr": "0x1FC03910", + "end_addr": "0xBFC0394C", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03910", + "block_leaders": ["0xBFC03910", "0xBFC03930", "0xBFC03944", "0xBFC03948"] + }, { "entry_addr": "0xBFC03968", "normalized_addr": "0x1FC03968", "end_addr": "0xBFC03974", "instruction_count": 4, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06800", + "discovered_by": "ghidra_BFC03968", "block_leaders": ["0xBFC03968"] }, { @@ -201,7 +489,7 @@ "end_addr": "0xBFC03984", "instruction_count": 4, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0680C", + "discovered_by": "ghidra_BFC03978", "block_leaders": ["0xBFC03978"] }, { @@ -210,25 +498,43 @@ "end_addr": "0xBFC039A8", "instruction_count": 7, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06ECC -> jal at 0xBFC01A70", + "discovered_by": "ghidra_BFC03990", "block_leaders": ["0xBFC03990"] }, + { + "entry_addr": "0xBFC039B0", + "normalized_addr": "0x1FC039B0", + "end_addr": "0xBFC03A14", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC039B0", + "block_leaders": ["0xBFC039B0", "0xBFC039C4", "0xBFC039CC", "0xBFC039D4", "0xBFC039E0", "0xBFC039EC", "0xBFC039F4", "0xBFC039FC", "0xBFC03A04", "0xBFC03A08"] + }, { "entry_addr": "0xBFC03A18", "normalized_addr": "0x1FC03A18", "end_addr": "0xBFC03AA0", "instruction_count": 35, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06BC8", + "discovered_by": "ghidra_BFC03A18", "block_leaders": ["0xBFC03A18", "0xBFC03A2C", "0xBFC03A34", "0xBFC03A3C", "0xBFC03A48", "0xBFC03A54", "0xBFC03A5C", "0xBFC03A64", "0xBFC03A68", "0xBFC03A7C", "0xBFC03A88", "0xBFC03A90", "0xBFC03A94"] }, + { + "entry_addr": "0xBFC03AA4", + "normalized_addr": "0x1FC03AA4", + "end_addr": "0xBFC03C8C", + "instruction_count": 123, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03AA4", + "block_leaders": ["0xBFC03AA4", "0xBFC03ACC", "0xBFC03AD8", "0xBFC03AE0", "0xBFC03AF4", "0xBFC03AFC", "0xBFC03B08", "0xBFC03B10", "0xBFC03B20", "0xBFC03B28", "0xBFC03B38", "0xBFC03B40", "0xBFC03B48", "0xBFC03B58", "0xBFC03B68", "0xBFC03B78", "0xBFC03B9C", "0xBFC03BB0", "0xBFC03BBC", "0xBFC03BE4", "0xBFC03BEC", "0xBFC03BF8", "0xBFC03C0C", "0xBFC03C14", "0xBFC03C24", "0xBFC03C2C", "0xBFC03C5C", "0xBFC03C74", "0xBFC03C7C"] + }, { "entry_addr": "0xBFC03C90", "normalized_addr": "0x1FC03C90", "end_addr": "0xBFC03CE4", "instruction_count": 22, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06BC8 -> jal at 0xBFC03A40", + "discovered_by": "ghidra_BFC03C90", "block_leaders": ["0xBFC03C90", "0xBFC03CAC", "0xBFC03CB8", "0xBFC03CC0", "0xBFC03CC4", "0xBFC03CD4", "0xBFC03CD8"] }, { @@ -237,16 +543,106 @@ "end_addr": "0xBFC03D78", "instruction_count": 35, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D5E8", + "discovered_by": "ghidra_BFC03CF0", "block_leaders": ["0xBFC03CF0", "0xBFC03D10", "0xBFC03D18", "0xBFC03D28", "0xBFC03D38", "0xBFC03D4C", "0xBFC03D60"] }, + { + "entry_addr": "0xBFC03D80", + "normalized_addr": "0x1FC03D80", + "end_addr": "0xBFC03E9C", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03D80", + "block_leaders": ["0xBFC03D80", "0xBFC03DBC", "0xBFC03DCC", "0xBFC03DD4", "0xBFC03DDC", "0xBFC03DFC", "0xBFC03E04", "0xBFC03E68", "0xBFC03E70", "0xBFC03E88", "0xBFC03E8C"] + }, + { + "entry_addr": "0xBFC03EA0", + "normalized_addr": "0x1FC03EA0", + "end_addr": "0xBFC03F88", + "instruction_count": 59, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03EA0", + "block_leaders": ["0xBFC03EA0", "0xBFC03EBC", "0xBFC03F5C", "0xBFC03F60"] + }, + { + "entry_addr": "0xBFC03F8C", + "normalized_addr": "0x1FC03F8C", + "end_addr": "0xBFC03F98", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03F8C", + "block_leaders": ["0xBFC03F8C"] + }, + { + "entry_addr": "0xBFC03FAC", + "normalized_addr": "0x1FC03FAC", + "end_addr": "0xBFC03FBC", + "instruction_count": 5, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC03FAC", + "block_leaders": ["0xBFC03FAC", "0xBFC03FBC"] + }, + { + "entry_addr": "0xBFC03FC0", + "normalized_addr": "0x1FC03FC0", + "end_addr": "0xBFC03FDC", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "jal_BFC03FC0", + "block_leaders": ["0xBFC03FC0"] + }, + { + "entry_addr": "0xBFC03FE0", + "normalized_addr": "0x1FC03FE0", + "end_addr": "0xBFC04038", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC03FE0", + "block_leaders": ["0xBFC03FE0", "0xBFC03FF4", "0xBFC04008", "0xBFC04014", "0xBFC0402C"] + }, + { + "entry_addr": "0xBFC0403C", + "normalized_addr": "0x1FC0403C", + "end_addr": "0xBFC040E8", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0403C", + "block_leaders": ["0xBFC0403C", "0xBFC04058", "0xBFC04060", "0xBFC040BC", "0xBFC040DC"] + }, + { + "entry_addr": "0xBFC040EC", + "normalized_addr": "0x1FC040EC", + "end_addr": "0xBFC0411C", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC040EC", + "block_leaders": ["0xBFC040EC"] + }, + { + "entry_addr": "0xBFC04138", + "normalized_addr": "0x1FC04138", + "end_addr": "0xBFC0425C", + "instruction_count": 74, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04138", + "block_leaders": ["0xBFC04138", "0xBFC0415C", "0xBFC04170", "0xBFC04174", "0xBFC0417C", "0xBFC04188", "0xBFC04190", "0xBFC041A4", "0xBFC041AC", "0xBFC041CC", "0xBFC041D0", "0xBFC041D8", "0xBFC041E4", "0xBFC041EC", "0xBFC04200", "0xBFC04214", "0xBFC04228", "0xBFC0422C", "0xBFC04234", "0xBFC04240", "0xBFC04248", "0xBFC04250"] + }, + { + "entry_addr": "0xBFC04260", + "normalized_addr": "0x1FC04260", + "end_addr": "0xBFC04298", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04260", + "block_leaders": ["0xBFC04260", "0xBFC04284", "0xBFC0428C"] + }, { "entry_addr": "0xBFC042A0", "normalized_addr": "0x1FC042A0", "end_addr": "0xBFC042CC", "instruction_count": 12, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0684C", + "discovered_by": "ghidra_BFC042A0", "block_leaders": ["0xBFC042A0", "0xBFC042B4", "0xBFC042C8"] }, { @@ -255,7 +651,7 @@ "end_addr": "0xBFC042FC", "instruction_count": 12, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06844", + "discovered_by": "ghidra_BFC042D0", "block_leaders": ["0xBFC042D0", "0xBFC042E4", "0xBFC042F8"] }, { @@ -264,7 +660,7 @@ "end_addr": "0xBFC04674", "instruction_count": 26, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06914", + "discovered_by": "ghidra_BFC04610", "block_leaders": ["0xBFC04610", "0xBFC0462C", "0xBFC04638", "0xBFC04640", "0xBFC0464C", "0xBFC04668"] }, { @@ -273,7 +669,7 @@ "end_addr": "0xBFC04728", "instruction_count": 45, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06934", + "discovered_by": "ghidra_BFC04678", "block_leaders": ["0xBFC04678", "0xBFC04698", "0xBFC046C0", "0xBFC046CC", "0xBFC046D4", "0xBFC046D8", "0xBFC04708", "0xBFC04718", "0xBFC0471C"] }, { @@ -282,16 +678,367 @@ "end_addr": "0xBFC0484C", "instruction_count": 73, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06944", + "discovered_by": "ghidra_BFC0472C", "block_leaders": ["0xBFC0472C", "0xBFC04754", "0xBFC04788", "0xBFC04790", "0xBFC04798", "0xBFC047A4", "0xBFC047B0", "0xBFC047B8", "0xBFC047D4", "0xBFC047E4", "0xBFC047E8", "0xBFC04808", "0xBFC0480C", "0xBFC0481C", "0xBFC0483C"] }, + { + "entry_addr": "0xBFC048D0", + "normalized_addr": "0x1FC048D0", + "end_addr": "0xBFC0490C", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC048D0", + "block_leaders": ["0xBFC048D0", "0xBFC048EC", "0xBFC04900"] + }, + { + "entry_addr": "0xBFC04ABC", + "normalized_addr": "0x1FC04ABC", + "end_addr": "0xBFC04BC0", + "instruction_count": 66, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04ABC", + "block_leaders": ["0xBFC04ABC", "0xBFC04ACC", "0xBFC04AE0", "0xBFC04AE8", "0xBFC04AF0", "0xBFC04B04", "0xBFC04B0C", "0xBFC04B14", "0xBFC04B34", "0xBFC04B3C", "0xBFC04B44", "0xBFC04B5C", "0xBFC04B60", "0xBFC04B64", "0xBFC04B68", "0xBFC04BB4"] + }, + { + "entry_addr": "0xBFC04BC4", + "normalized_addr": "0x1FC04BC4", + "end_addr": "0xBFC04C34", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04BC4", + "block_leaders": ["0xBFC04BC4", "0xBFC04BE0", "0xBFC04BE8", "0xBFC04BF0", "0xBFC04C28"] + }, + { + "entry_addr": "0xBFC04C38", + "normalized_addr": "0x1FC04C38", + "end_addr": "0xBFC04D4C", + "instruction_count": 70, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04C38", + "block_leaders": ["0xBFC04C38", "0xBFC04C54", "0xBFC04C5C", "0xBFC04C64", "0xBFC04C70", "0xBFC04CAC", "0xBFC04CBC", "0xBFC04CC8", "0xBFC04CD8", "0xBFC04CDC", "0xBFC04CE4", "0xBFC04D04", "0xBFC04D0C", "0xBFC04D40"] + }, + { + "entry_addr": "0xBFC04D50", + "normalized_addr": "0x1FC04D50", + "end_addr": "0xBFC04DE8", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04D50", + "block_leaders": ["0xBFC04D50", "0xBFC04D68", "0xBFC04D70", "0xBFC04D78", "0xBFC04DA0", "0xBFC04DA8", "0xBFC04DDC"] + }, + { + "entry_addr": "0xBFC04DEC", + "normalized_addr": "0x1FC04DEC", + "end_addr": "0xBFC04FB8", + "instruction_count": 96, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC04DEC", + "block_leaders": ["0xBFC04DEC", "0xBFC04E10", "0xBFC04E18", "0xBFC04E2C", "0xBFC04E34", "0xBFC04E64", "0xBFC04E88", "0xBFC04EB8", "0xBFC04EBC", "0xBFC04EC8", "0xBFC04EE8", "0xBFC04F18", "0xBFC04F1C", "0xBFC04F2C", "0xBFC04F98", "0xBFC04FA0", "0xBFC04FA8", "0xBFC04FAC"] + }, + { + "entry_addr": "0xBFC04FBC", + "normalized_addr": "0x1FC04FBC", + "end_addr": "0xBFC05068", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC04FBC", + "block_leaders": ["0xBFC04FBC", "0xBFC04FE0", "0xBFC04FE8", "0xBFC04FFC", "0xBFC05004", "0xBFC05040", "0xBFC05050", "0xBFC0505C"] + }, + { + "entry_addr": "0xBFC0506C", + "normalized_addr": "0x1FC0506C", + "end_addr": "0xBFC050A0", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0506C", + "block_leaders": ["0xBFC0506C", "0xBFC05080", "0xBFC05094"] + }, + { + "entry_addr": "0xBFC050A4", + "normalized_addr": "0x1FC050A4", + "end_addr": "0xBFC050D8", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC050A4", + "block_leaders": ["0xBFC050A4", "0xBFC050B8", "0xBFC050CC"] + }, + { + "entry_addr": "0xBFC050FC", + "normalized_addr": "0x1FC050FC", + "end_addr": "0xBFC0511C", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC050FC", + "block_leaders": ["0xBFC050FC"] + }, + { + "entry_addr": "0xBFC05120", + "normalized_addr": "0x1FC05120", + "end_addr": "0xBFC05190", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05120", + "block_leaders": ["0xBFC05120", "0xBFC0515C", "0xBFC05160", "0xBFC0518C"] + }, + { + "entry_addr": "0xBFC05194", + "normalized_addr": "0x1FC05194", + "end_addr": "0xBFC05554", + "instruction_count": 241, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05194", + "block_leaders": ["0xBFC05194", "0xBFC051AC", "0xBFC051B4", "0xBFC051BC", "0xBFC051C8", "0xBFC051D0", "0xBFC051D8", "0xBFC051F0", "0xBFC051F8", "0xBFC05200", "0xBFC05208", "0xBFC05210", "0xBFC05214", "0xBFC05220", "0xBFC05224", "0xBFC0523C", "0xBFC05244", "0xBFC0524C", "0xBFC05254", "0xBFC0525C", "0xBFC05264", "0xBFC0526C", "0xBFC05274", "0xBFC0527C", "0xBFC05284", "0xBFC0528C", "0xBFC05294", "0xBFC0529C", "0xBFC052A4", "0xBFC052AC", "0xBFC052B4", "0xBFC052BC", "0xBFC052C4", "0xBFC052CC", "0xBFC052D4", "0xBFC052DC", "0xBFC052E4", "0xBFC052E8", "0xBFC052F4", "0xBFC052FC", "0xBFC05300", "0xBFC05308", "0xBFC05310", "0xBFC05318", "0xBFC05320", "0xBFC05328", "0xBFC05330", "0xBFC05338", "0xBFC05340", "0xBFC05348", "0xBFC05350", "0xBFC05358", "0xBFC05360", "0xBFC0536C", "0xBFC05374", "0xBFC05380", "0xBFC05388", "0xBFC05394", "0xBFC0539C", "0xBFC053A4", "0xBFC053AC", "0xBFC053B8", "0xBFC053C0", "0xBFC053CC", "0xBFC053D4", "0xBFC053DC", "0xBFC053E4", "0xBFC053EC", "0xBFC053F4", "0xBFC05400", "0xBFC05408", "0xBFC05414", "0xBFC0541C", "0xBFC05424", "0xBFC0542C", "0xBFC05438", "0xBFC05440", "0xBFC0544C", "0xBFC05454", "0xBFC0545C", "0xBFC05464", "0xBFC0546C", "0xBFC05474", "0xBFC0547C", "0xBFC05484", "0xBFC05490", "0xBFC05498", "0xBFC054A4", "0xBFC054AC", "0xBFC054B4", "0xBFC054BC", "0xBFC054C8", "0xBFC054D0", "0xBFC054DC", "0xBFC054E4", "0xBFC054EC", "0xBFC054F4", "0xBFC054FC", "0xBFC05504", "0xBFC05510", "0xBFC05518", "0xBFC05524", "0xBFC0552C", "0xBFC05534", "0xBFC0553C", "0xBFC05548", "0xBFC0554C"] + }, + { + "entry_addr": "0xBFC05558", + "normalized_addr": "0x1FC05558", + "end_addr": "0xBFC057AC", + "instruction_count": 150, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05558", + "block_leaders": ["0xBFC05558", "0xBFC05580", "0xBFC05588", "0xBFC05590", "0xBFC055A4", "0xBFC055AC", "0xBFC055B4", "0xBFC055C0", "0xBFC055C8", "0xBFC055D8", "0xBFC055F0", "0xBFC055F8", "0xBFC05614", "0xBFC0561C", "0xBFC05640", "0xBFC05648", "0xBFC05664", "0xBFC05674", "0xBFC056A4", "0xBFC056C0", "0xBFC056C8", "0xBFC056CC", "0xBFC056D8", "0xBFC056E0", "0xBFC056E4", "0xBFC056EC", "0xBFC056F4", "0xBFC056FC", "0xBFC05704", "0xBFC0570C", "0xBFC05714", "0xBFC0571C", "0xBFC05724", "0xBFC05730", "0xBFC05734", "0xBFC0574C", "0xBFC05754", "0xBFC05760", "0xBFC05768", "0xBFC05774", "0xBFC0577C", "0xBFC05784", "0xBFC0578C", "0xBFC05798", "0xBFC057A0", "0xBFC057A4"] + }, + { + "entry_addr": "0xBFC057B0", + "normalized_addr": "0x1FC057B0", + "end_addr": "0xBFC05938", + "instruction_count": 99, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC057B0", + "block_leaders": ["0xBFC057B0", "0xBFC057EC", "0xBFC05828", "0xBFC05860", "0xBFC05864", "0xBFC05888", "0xBFC05890", "0xBFC05894", "0xBFC0589C", "0xBFC058AC", "0xBFC058C0", "0xBFC058EC", "0xBFC058F4", "0xBFC0592C", "0xBFC05930"] + }, + { + "entry_addr": "0xBFC0593C", + "normalized_addr": "0x1FC0593C", + "end_addr": "0xBFC05A40", + "instruction_count": 66, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0593C", + "block_leaders": ["0xBFC0593C", "0xBFC05964", "0xBFC05970", "0xBFC05984", "0xBFC0598C", "0xBFC05994", "0xBFC0599C", "0xBFC059A8", "0xBFC059B4", "0xBFC059BC", "0xBFC059C4", "0xBFC059CC", "0xBFC059D4", "0xBFC059D8", "0xBFC059E0", "0xBFC059E8", "0xBFC059F0", "0xBFC059F8", "0xBFC05A00", "0xBFC05A04", "0xBFC05A0C", "0xBFC05A1C", "0xBFC05A24", "0xBFC05A28", "0xBFC05A34", "0xBFC05A38"] + }, + { + "entry_addr": "0xBFC05A44", + "normalized_addr": "0x1FC05A44", + "end_addr": "0xBFC05C14", + "instruction_count": 117, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05A44", + "block_leaders": ["0xBFC05A44", "0xBFC05A5C", "0xBFC05A68", "0xBFC05A7C", "0xBFC05A84", "0xBFC05A98", "0xBFC05AA8", "0xBFC05AB4", "0xBFC05ABC", "0xBFC05AC4", "0xBFC05ACC", "0xBFC05AD0", "0xBFC05AD8", "0xBFC05AE4", "0xBFC05AEC", "0xBFC05AF8", "0xBFC05B00", "0xBFC05B14", "0xBFC05B1C", "0xBFC05B30", "0xBFC05B34", "0xBFC05B44", "0xBFC05B58", "0xBFC05B60", "0xBFC05B68", "0xBFC05B6C", "0xBFC05B74", "0xBFC05B80", "0xBFC05B88", "0xBFC05B94", "0xBFC05B9C", "0xBFC05BA8", "0xBFC05BAC", "0xBFC05BBC", "0xBFC05BCC", "0xBFC05BE0", "0xBFC05BF0", "0xBFC05BF8", "0xBFC05BFC", "0xBFC05C08", "0xBFC05C0C"] + }, + { + "entry_addr": "0xBFC05C18", + "normalized_addr": "0x1FC05C18", + "end_addr": "0xBFC05C4C", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05C18", + "block_leaders": ["0xBFC05C18", "0xBFC05C20", "0xBFC05C28", "0xBFC05C2C"] + }, + { + "entry_addr": "0xBFC05C50", + "normalized_addr": "0x1FC05C50", + "end_addr": "0xBFC05D00", + "instruction_count": 45, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05C50", + "block_leaders": ["0xBFC05C50", "0xBFC05C94", "0xBFC05CB0", "0xBFC05CC4", "0xBFC05CD8", "0xBFC05CE4", "0xBFC05CF4"] + }, + { + "entry_addr": "0xBFC05D04", + "normalized_addr": "0x1FC05D04", + "end_addr": "0xBFC05DAC", + "instruction_count": 43, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05D04", + "block_leaders": ["0xBFC05D04", "0xBFC05D20", "0xBFC05D3C", "0xBFC05D6C", "0xBFC05D84", "0xBFC05D90", "0xBFC05DA0"] + }, + { + "entry_addr": "0xBFC05DB0", + "normalized_addr": "0x1FC05DB0", + "end_addr": "0xBFC05DF0", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05DB0", + "block_leaders": ["0xBFC05DB0", "0xBFC05DE4"] + }, + { + "entry_addr": "0xBFC05DF4", + "normalized_addr": "0x1FC05DF4", + "end_addr": "0xBFC05E54", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05DF4", + "block_leaders": ["0xBFC05DF4", "0xBFC05E1C", "0xBFC05E2C", "0xBFC05E48"] + }, + { + "entry_addr": "0xBFC05E58", + "normalized_addr": "0x1FC05E58", + "end_addr": "0xBFC05F04", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05E58", + "block_leaders": ["0xBFC05E58", "0xBFC05E7C", "0xBFC05E90", "0xBFC05EA0", "0xBFC05EA4", "0xBFC05EAC", "0xBFC05EC0", "0xBFC05ED4", "0xBFC05EE4", "0xBFC05EE8", "0xBFC05EF0"] + }, + { + "entry_addr": "0xBFC05F08", + "normalized_addr": "0x1FC05F08", + "end_addr": "0xBFC0600C", + "instruction_count": 66, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC05F08", + "block_leaders": ["0xBFC05F08", "0xBFC05F1C", "0xBFC05F94", "0xBFC05FC8", "0xBFC05FEC", "0xBFC05FF4", "0xBFC06000", "0xBFC06004"] + }, + { + "entry_addr": "0xBFC06010", + "normalized_addr": "0x1FC06010", + "end_addr": "0xBFC06034", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06010", + "block_leaders": ["0xBFC06010", "0xBFC06028"] + }, + { + "entry_addr": "0xBFC06038", + "normalized_addr": "0x1FC06038", + "end_addr": "0xBFC060D8", + "instruction_count": 41, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06038", + "block_leaders": ["0xBFC06038", "0xBFC0608C", "0xBFC060BC", "0xBFC060CC"] + }, + { + "entry_addr": "0xBFC060DC", + "normalized_addr": "0x1FC060DC", + "end_addr": "0xBFC06158", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC060DC", + "block_leaders": ["0xBFC060DC", "0xBFC0610C", "0xBFC06114", "0xBFC06130", "0xBFC06134", "0xBFC0614C"] + }, + { + "entry_addr": "0xBFC0615C", + "normalized_addr": "0x1FC0615C", + "end_addr": "0xBFC0619C", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0615C", + "block_leaders": ["0xBFC0615C", "0xBFC06190"] + }, + { + "entry_addr": "0xBFC061A0", + "normalized_addr": "0x1FC061A0", + "end_addr": "0xBFC061D0", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC061A0", + "block_leaders": ["0xBFC061A0", "0xBFC061C4"] + }, + { + "entry_addr": "0xBFC061D4", + "normalized_addr": "0x1FC061D4", + "end_addr": "0xBFC06214", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC061D4", + "block_leaders": ["0xBFC061D4", "0xBFC06208"] + }, + { + "entry_addr": "0xBFC06218", + "normalized_addr": "0x1FC06218", + "end_addr": "0xBFC06284", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06218", + "block_leaders": ["0xBFC06218", "0xBFC0623C", "0xBFC06244", "0xBFC0624C", "0xBFC06250", "0xBFC0627C"] + }, + { + "entry_addr": "0xBFC06288", + "normalized_addr": "0x1FC06288", + "end_addr": "0xBFC062C8", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06288", + "block_leaders": ["0xBFC06288"] + }, + { + "entry_addr": "0xBFC062CC", + "normalized_addr": "0x1FC062CC", + "end_addr": "0xBFC063C8", + "instruction_count": 64, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC062CC", + "block_leaders": ["0xBFC062CC", "0xBFC06358", "0xBFC06364", "0xBFC0636C", "0xBFC063C0"] + }, + { + "entry_addr": "0xBFC063CC", + "normalized_addr": "0x1FC063CC", + "end_addr": "0xBFC064D4", + "instruction_count": 67, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC063CC", + "block_leaders": ["0xBFC063CC", "0xBFC06420", "0xBFC0643C", "0xBFC06444", "0xBFC06464", "0xBFC0646C", "0xBFC06474", "0xBFC06478", "0xBFC064CC"] + }, + { + "entry_addr": "0xBFC064D8", + "normalized_addr": "0x1FC064D8", + "end_addr": "0xBFC0653C", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC064D8", + "block_leaders": ["0xBFC064D8", "0xBFC064F0", "0xBFC06500", "0xBFC06510", "0xBFC06520", "0xBFC06530"] + }, + { + "entry_addr": "0xBFC06548", + "normalized_addr": "0x1FC06548", + "end_addr": "0xBFC065BC", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06548", + "block_leaders": ["0xBFC06548", "0xBFC06568", "0xBFC06574", "0xBFC06580", "0xBFC0658C", "0xBFC06598", "0xBFC065A4", "0xBFC065B0"] + }, + { + "entry_addr": "0xBFC065C0", + "normalized_addr": "0x1FC065C0", + "end_addr": "0xBFC06618", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC065C0", + "block_leaders": ["0xBFC065C0"] + }, + { + "entry_addr": "0xBFC0661C", + "normalized_addr": "0x1FC0661C", + "end_addr": "0xBFC06674", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0661C", + "block_leaders": ["0xBFC0661C"] + }, + { + "entry_addr": "0xBFC06680", + "normalized_addr": "0x1FC06680", + "end_addr": "0xBFC066FC", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06680", + "block_leaders": ["0xBFC06680", "0xBFC066AC", "0xBFC066B4", "0xBFC066BC", "0xBFC066C4", "0xBFC066C8", "0xBFC066CC", "0xBFC066DC", "0xBFC066E4", "0xBFC066F0", "0xBFC066F4"] + }, + { + "entry_addr": "0xBFC06700", + "normalized_addr": "0x1FC06700", + "end_addr": "0xBFC06724", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06700", + "block_leaders": ["0xBFC06700", "0xBFC06718"] + }, { "entry_addr": "0xBFC06784", "normalized_addr": "0x1FC06784", "end_addr": "0xBFC067E4", "instruction_count": 25, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10", + "discovered_by": "ghidra_BFC06784", "block_leaders": ["0xBFC06784", "0xBFC0679C", "0xBFC067AC", "0xBFC067BC", "0xBFC067CC", "0xBFC067D8"] }, { @@ -300,16 +1047,34 @@ "end_addr": "0xBFC06CA0", "instruction_count": 303, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0", + "discovered_by": "ghidra_BFC067E8", "block_leaders": ["0xBFC067E8", "0xBFC06800", "0xBFC06808", "0xBFC06814", "0xBFC06834", "0xBFC0683C", "0xBFC06844", "0xBFC0684C", "0xBFC06854", "0xBFC0685C", "0xBFC06864", "0xBFC0686C", "0xBFC06874", "0xBFC068AC", "0xBFC068B4", "0xBFC068C0", "0xBFC068C8", "0xBFC068F8", "0xBFC06904", "0xBFC06914", "0xBFC0691C", "0xBFC06924", "0xBFC0692C", "0xBFC0693C", "0xBFC0694C", "0xBFC06954", "0xBFC06978", "0xBFC06980", "0xBFC06988", "0xBFC06990", "0xBFC06998", "0xBFC069A0", "0xBFC069B4", "0xBFC069C0", "0xBFC069C8", "0xBFC069D0", "0xBFC069D8", "0xBFC069E4", "0xBFC069EC", "0xBFC069F8", "0xBFC06A04", "0xBFC06A0C", "0xBFC06A14", "0xBFC06A1C", "0xBFC06A28", "0xBFC06A30", "0xBFC06A38", "0xBFC06A3C", "0xBFC06A44", "0xBFC06A4C", "0xBFC06A5C", "0xBFC06A68", "0xBFC06A70", "0xBFC06A78", "0xBFC06A7C", "0xBFC06A8C", "0xBFC06A94", "0xBFC06AAC", "0xBFC06ABC", "0xBFC06AC4", "0xBFC06AD8", "0xBFC06AE4", "0xBFC06AEC", "0xBFC06AF4", "0xBFC06B10", "0xBFC06B18", "0xBFC06B24", "0xBFC06B2C", "0xBFC06B34", "0xBFC06B50", "0xBFC06B60", "0xBFC06B6C", "0xBFC06B74", "0xBFC06B7C", "0xBFC06B84", "0xBFC06B98", "0xBFC06BA4", "0xBFC06BAC", "0xBFC06BB4", "0xBFC06BBC", "0xBFC06BD0", "0xBFC06BD8", "0xBFC06BE0", "0xBFC06C04", "0xBFC06C20", "0xBFC06C48", "0xBFC06C50", "0xBFC06C5C", "0xBFC06C64", "0xBFC06C6C", "0xBFC06C80", "0xBFC06C8C", "0xBFC06C94"] }, + { + "entry_addr": "0xBFC06CA4", + "normalized_addr": "0x1FC06CA4", + "end_addr": "0xBFC06EC0", + "instruction_count": 136, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06CA4", + "block_leaders": ["0xBFC06CA4", "0xBFC06CC8", "0xBFC06CD4", "0xBFC06CDC", "0xBFC06CE4", "0xBFC06CEC", "0xBFC06CF4", "0xBFC06CFC", "0xBFC06D1C", "0xBFC06D28", "0xBFC06D30", "0xBFC06D40", "0xBFC06D48", "0xBFC06D50", "0xBFC06D58", "0xBFC06D68", "0xBFC06D78", "0xBFC06D80", "0xBFC06D94", "0xBFC06DA0", "0xBFC06DA8", "0xBFC06DB0", "0xBFC06DB8", "0xBFC06DC4", "0xBFC06DCC", "0xBFC06DD4", "0xBFC06DDC", "0xBFC06DF0", "0xBFC06DF8", "0xBFC06E00", "0xBFC06E24", "0xBFC06E40", "0xBFC06E68", "0xBFC06E70", "0xBFC06E7C", "0xBFC06E84", "0xBFC06E8C", "0xBFC06EA0", "0xBFC06EAC", "0xBFC06EB4"] + }, + { + "entry_addr": "0xBFC06EC4", + "normalized_addr": "0x1FC06EC4", + "end_addr": "0xBFC06F24", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC06EC4", + "block_leaders": ["0xBFC06EC4", "0xBFC06ED4", "0xBFC06EF0", "0xBFC06EFC", "0xBFC06F04", "0xBFC06F0C", "0xBFC06F18"] + }, { "entry_addr": "0xBFC06F28", "normalized_addr": "0x1FC06F28", "end_addr": "0xBFC06FA0", "instruction_count": 31, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B7C", + "discovered_by": "ghidra_BFC06F28", "block_leaders": ["0xBFC06F28", "0xBFC06F3C", "0xBFC06F4C", "0xBFC06F54", "0xBFC06F5C", "0xBFC06F64", "0xBFC06F74", "0xBFC06F84", "0xBFC06F8C", "0xBFC06F94"] }, { @@ -318,16 +1083,25 @@ "end_addr": "0xBFC06FD0", "instruction_count": 12, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06980", + "discovered_by": "ghidra_BFC06FA4", "block_leaders": ["0xBFC06FA4", "0xBFC06FB8", "0xBFC06FC4"] }, + { + "entry_addr": "0xBFC06FDC", + "normalized_addr": "0x1FC06FDC", + "end_addr": "0xBFC06FE0", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "indirect_BFC06FDC", + "block_leaders": ["0xBFC06FDC"] + }, { "entry_addr": "0xBFC06FF0", "normalized_addr": "0x1FC06FF0", "end_addr": "0xBFC07038", "instruction_count": 19, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06990", + "discovered_by": "ghidra_BFC06FF0", "block_leaders": ["0xBFC06FF0", "0xBFC07014", "0xBFC0701C", "0xBFC0702C"] }, { @@ -336,7 +1110,7 @@ "end_addr": "0xBFC070A8", "instruction_count": 27, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06EE8", + "discovered_by": "ghidra_BFC0703C", "block_leaders": ["0xBFC0703C", "0xBFC0705C", "0xBFC07064", "0xBFC07078", "0xBFC07088", "0xBFC07098", "0xBFC070A4"] }, { @@ -345,7 +1119,7 @@ "end_addr": "0xBFC07118", "instruction_count": 27, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069D0", + "discovered_by": "ghidra_BFC070AC", "block_leaders": ["0xBFC070AC", "0xBFC070CC", "0xBFC070D4", "0xBFC070E8", "0xBFC070F8", "0xBFC07108", "0xBFC07114"] }, { @@ -354,7 +1128,7 @@ "end_addr": "0xBFC07144", "instruction_count": 11, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06EFC", + "discovered_by": "ghidra_BFC0711C", "block_leaders": ["0xBFC0711C", "0xBFC07138"] }, { @@ -363,7 +1137,7 @@ "end_addr": "0xBFC07190", "instruction_count": 19, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069E4", + "discovered_by": "ghidra_BFC07148", "block_leaders": ["0xBFC07148", "0xBFC0715C", "0xBFC07170", "0xBFC07184"] }, { @@ -372,25 +1146,43 @@ "end_addr": "0xBFC072B4", "instruction_count": 70, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B7C -> jal at 0xBFC06F8C", + "discovered_by": "ghidra_BFC071A0", "block_leaders": ["0xBFC071A0", "0xBFC071B0", "0xBFC071C8", "0xBFC071E8", "0xBFC07208", "0xBFC07228", "0xBFC07248", "0xBFC0725C", "0xBFC0726C", "0xBFC0727C", "0xBFC0728C", "0xBFC0729C", "0xBFC072A4"] }, + { + "entry_addr": "0xBFC072B8", + "normalized_addr": "0x1FC072B8", + "end_addr": "0xBFC0732C", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC072B8", + "block_leaders": ["0xBFC072B8", "0xBFC072C8", "0xBFC072D8", "0xBFC072E8", "0xBFC072F8", "0xBFC07308", "0xBFC07318", "0xBFC07320"] + }, { "entry_addr": "0xBFC07330", "normalized_addr": "0x1FC07330", "end_addr": "0xBFC0736C", "instruction_count": 16, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073A8", + "discovered_by": "ghidra_BFC07330", "block_leaders": ["0xBFC07330", "0xBFC07340", "0xBFC07348", "0xBFC07350", "0xBFC07358", "0xBFC07360", "0xBFC07364"] }, + { + "entry_addr": "0xBFC07370", + "normalized_addr": "0x1FC07370", + "end_addr": "0xBFC0739C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07370", + "block_leaders": ["0xBFC07370", "0xBFC07380", "0xBFC07390"] + }, { "entry_addr": "0xBFC073A0", "normalized_addr": "0x1FC073A0", "end_addr": "0xBFC0740C", "instruction_count": 28, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC", + "discovered_by": "ghidra_BFC073A0", "block_leaders": ["0xBFC073A0", "0xBFC073B0", "0xBFC073C8", "0xBFC073CC", "0xBFC073F8", "0xBFC07400"] }, { @@ -399,25 +1191,718 @@ "end_addr": "0xBFC07660", "instruction_count": 149, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8", + "discovered_by": "ghidra_BFC07410", "block_leaders": ["0xBFC07410", "0xBFC07438", "0xBFC07444", "0xBFC0744C", "0xBFC07464", "0xBFC0746C", "0xBFC07474", "0xBFC074F0", "0xBFC074F8", "0xBFC07500", "0xBFC07518", "0xBFC07540", "0xBFC07560", "0xBFC07570", "0xBFC07580", "0xBFC075DC", "0xBFC075F8", "0xBFC07604", "0xBFC0760C", "0xBFC07618", "0xBFC07620", "0xBFC07630", "0xBFC07650"] }, + { + "entry_addr": "0xBFC07664", + "normalized_addr": "0x1FC07664", + "end_addr": "0xBFC076FC", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07664", + "block_leaders": ["0xBFC07664", "0xBFC0769C", "0xBFC076AC", "0xBFC076B8", "0xBFC076C0", "0xBFC076C8", "0xBFC076E0", "0xBFC076E4"] + }, + { + "entry_addr": "0xBFC07700", + "normalized_addr": "0x1FC07700", + "end_addr": "0xBFC078A0", + "instruction_count": 105, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07700", + "block_leaders": ["0xBFC07700", "0xBFC07718", "0xBFC07720", "0xBFC0775C", "0xBFC07768", "0xBFC07774", "0xBFC077A8", "0xBFC077B8", "0xBFC077C8", "0xBFC07834", "0xBFC07854", "0xBFC07860", "0xBFC07870", "0xBFC07894"] + }, + { + "entry_addr": "0xBFC078A4", + "normalized_addr": "0x1FC078A4", + "end_addr": "0xBFC079F4", + "instruction_count": 85, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC078A4", + "block_leaders": ["0xBFC078A4", "0xBFC078C8", "0xBFC078D4", "0xBFC078DC", "0xBFC078E4", "0xBFC078F4", "0xBFC078F8", "0xBFC07908", "0xBFC07910", "0xBFC07920", "0xBFC07928", "0xBFC07938", "0xBFC07940", "0xBFC07948", "0xBFC07958", "0xBFC07968", "0xBFC07978", "0xBFC0797C", "0xBFC07984", "0xBFC07990", "0xBFC079A0", "0xBFC079E0"] + }, + { + "entry_addr": "0xBFC07A04", + "normalized_addr": "0x1FC07A04", + "end_addr": "0xBFC07B84", + "instruction_count": 97, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07A04", + "block_leaders": ["0xBFC07A04", "0xBFC07A28", "0xBFC07A30", "0xBFC07A34", "0xBFC07A3C", "0xBFC07A50", "0xBFC07A54", "0xBFC07A60", "0xBFC07A74", "0xBFC07A84", "0xBFC07A8C", "0xBFC07A9C", "0xBFC07AA4", "0xBFC07AB0", "0xBFC07AC0", "0xBFC07AD8", "0xBFC07AE8", "0xBFC07AEC", "0xBFC07B04", "0xBFC07B08", "0xBFC07B20", "0xBFC07B30", "0xBFC07B40", "0xBFC07B5C", "0xBFC07B64", "0xBFC07B68", "0xBFC07B6C", "0xBFC07B78"] + }, + { + "entry_addr": "0xBFC07B88", + "normalized_addr": "0x1FC07B88", + "end_addr": "0xBFC07C18", + "instruction_count": 37, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07B88", + "block_leaders": ["0xBFC07B88", "0xBFC07B98", "0xBFC07BA4", "0xBFC07BAC", "0xBFC07BB4", "0xBFC07BC8", "0xBFC07BCC", "0xBFC07BD4", "0xBFC07BDC", "0xBFC07BF0", "0xBFC07C0C"] + }, { "entry_addr": "0xBFC07C1C", "normalized_addr": "0x1FC07C1C", "end_addr": "0xBFC07F24", "instruction_count": 195, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8 -> jal at 0xBFC07430", + "discovered_by": "ghidra_BFC07C1C", "block_leaders": ["0xBFC07C1C", "0xBFC07C5C", "0xBFC07C64", "0xBFC07C70", "0xBFC07C78", "0xBFC07D8C", "0xBFC07D94", "0xBFC07DA0", "0xBFC07DA8", "0xBFC07DB0", "0xBFC07DB8", "0xBFC07DC4", "0xBFC07DCC", "0xBFC07DDC", "0xBFC07DE4", "0xBFC07DF0", "0xBFC07E00", "0xBFC07E08", "0xBFC07E14", "0xBFC07E1C", "0xBFC07E2C", "0xBFC07E34", "0xBFC07E40", "0xBFC07E50", "0xBFC07E58", "0xBFC07E60", "0xBFC07E6C", "0xBFC07E74", "0xBFC07E7C", "0xBFC07E8C", "0xBFC07E94", "0xBFC07E9C", "0xBFC07EAC", "0xBFC07EB4", "0xBFC07EC0", "0xBFC07EC8", "0xBFC07ED8", "0xBFC07EE0", "0xBFC07EEC", "0xBFC07EF4", "0xBFC07EFC", "0xBFC07F00"] }, + { + "entry_addr": "0xBFC07F28", + "normalized_addr": "0x1FC07F28", + "end_addr": "0xBFC0801C", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC07F28", + "block_leaders": ["0xBFC07F28", "0xBFC07F44", "0xBFC07F50", "0xBFC07F5C", "0xBFC07F64", "0xBFC07F70", "0xBFC07F78", "0xBFC07F84", "0xBFC07F8C", "0xBFC07F94", "0xBFC07F9C", "0xBFC07FAC", "0xBFC07FB8", "0xBFC07FC4", "0xBFC07FD4", "0xBFC07FE0", "0xBFC07FEC", "0xBFC07FF8", "0xBFC08000", "0xBFC0800C", "0xBFC08010"] + }, + { + "entry_addr": "0xBFC08020", + "normalized_addr": "0x1FC08020", + "end_addr": "0xBFC08094", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08020", + "block_leaders": ["0xBFC08020", "0xBFC08030", "0xBFC08038", "0xBFC0803C", "0xBFC0804C", "0xBFC08054", "0xBFC0805C", "0xBFC0806C", "0xBFC0807C", "0xBFC08084", "0xBFC08090"] + }, + { + "entry_addr": "0xBFC08098", + "normalized_addr": "0x1FC08098", + "end_addr": "0xBFC081F8", + "instruction_count": 89, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08098", + "block_leaders": ["0xBFC08098", "0xBFC080B0", "0xBFC080BC", "0xBFC080CC", "0xBFC080D8", "0xBFC080EC", "0xBFC08100", "0xBFC0811C", "0xBFC08130", "0xBFC0814C", "0xBFC08154", "0xBFC08174", "0xBFC08180", "0xBFC08194", "0xBFC081E8", "0xBFC081EC"] + }, + { + "entry_addr": "0xBFC081FC", + "normalized_addr": "0x1FC081FC", + "end_addr": "0xBFC08350", + "instruction_count": 86, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC081FC", + "block_leaders": ["0xBFC081FC", "0xBFC08218", "0xBFC08220", "0xBFC08234", "0xBFC08250", "0xBFC08258", "0xBFC08264", "0xBFC08274", "0xBFC0827C", "0xBFC08290", "0xBFC08298", "0xBFC082A0", "0xBFC082A8", "0xBFC082B4", "0xBFC082C8", "0xBFC082D8", "0xBFC082EC", "0xBFC082F0", "0xBFC08300", "0xBFC08304", "0xBFC0830C", "0xBFC0832C", "0xBFC08344"] + }, + { + "entry_addr": "0xBFC08354", + "normalized_addr": "0x1FC08354", + "end_addr": "0xBFC083C8", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08354", + "block_leaders": ["0xBFC08354", "0xBFC0837C", "0xBFC08388", "0xBFC08394", "0xBFC083A8", "0xBFC083B0", "0xBFC083B8"] + }, + { + "entry_addr": "0xBFC083CC", + "normalized_addr": "0x1FC083CC", + "end_addr": "0xBFC085AC", + "instruction_count": 121, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC083CC", + "block_leaders": ["0xBFC083CC", "0xBFC08404", "0xBFC0841C", "0xBFC0842C", "0xBFC08438", "0xBFC08440", "0xBFC08454", "0xBFC0846C", "0xBFC0847C", "0xBFC08484", "0xBFC08498", "0xBFC084A0", "0xBFC084A8", "0xBFC084BC", "0xBFC084C4", "0xBFC084CC", "0xBFC084D8", "0xBFC084DC", "0xBFC084E4", "0xBFC084EC", "0xBFC084F0", "0xBFC084FC", "0xBFC08504", "0xBFC08510", "0xBFC08518", "0xBFC08520", "0xBFC08538", "0xBFC08554", "0xBFC08560", "0xBFC08568", "0xBFC08574", "0xBFC08584", "0xBFC08588"] + }, + { + "entry_addr": "0xBFC085B0", + "normalized_addr": "0x1FC085B0", + "end_addr": "0xBFC085D0", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC085B0", + "block_leaders": ["0xBFC085B0", "0xBFC085C4"] + }, + { + "entry_addr": "0xBFC085D4", + "normalized_addr": "0x1FC085D4", + "end_addr": "0xBFC086AC", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC085D4", + "block_leaders": ["0xBFC085D4", "0xBFC085E4", "0xBFC085EC", "0xBFC085F4", "0xBFC08600", "0xBFC08608", "0xBFC08610", "0xBFC08618", "0xBFC08624", "0xBFC0862C", "0xBFC08634", "0xBFC0863C", "0xBFC0864C", "0xBFC08654", "0xBFC08660", "0xBFC08670", "0xBFC08678", "0xBFC08684", "0xBFC08690", "0xBFC08698", "0xBFC086A0", "0xBFC086A4"] + }, + { + "entry_addr": "0xBFC086B0", + "normalized_addr": "0x1FC086B0", + "end_addr": "0xBFC086D0", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC086B0", + "block_leaders": ["0xBFC086B0", "0xBFC086C4"] + }, + { + "entry_addr": "0xBFC086EC", + "normalized_addr": "0x1FC086EC", + "end_addr": "0xBFC08714", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC086EC", + "block_leaders": ["0xBFC086EC", "0xBFC08708"] + }, + { + "entry_addr": "0xBFC08720", + "normalized_addr": "0x1FC08720", + "end_addr": "0xBFC087C0", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08720", + "block_leaders": ["0xBFC08720", "0xBFC08758", "0xBFC087A0", "0xBFC087B0", "0xBFC087BC"] + }, + { + "entry_addr": "0xBFC087C4", + "normalized_addr": "0x1FC087C4", + "end_addr": "0xBFC08848", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC087C4", + "block_leaders": ["0xBFC087C4", "0xBFC087FC", "0xBFC08844"] + }, + { + "entry_addr": "0xBFC0884C", + "normalized_addr": "0x1FC0884C", + "end_addr": "0xBFC0889C", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0884C", + "block_leaders": ["0xBFC0884C", "0xBFC08870", "0xBFC08888", "0xBFC08890"] + }, + { + "entry_addr": "0xBFC088A0", + "normalized_addr": "0x1FC088A0", + "end_addr": "0xBFC08950", + "instruction_count": 45, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC088A0", + "block_leaders": ["0xBFC088A0", "0xBFC088D4", "0xBFC088F8", "0xBFC08904", "0xBFC08910", "0xBFC08934"] + }, + { + "entry_addr": "0xBFC0895C", + "normalized_addr": "0x1FC0895C", + "end_addr": "0xBFC089BC", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0895C", + "block_leaders": ["0xBFC0895C", "0xBFC0896C", "0xBFC08978", "0xBFC08988", "0xBFC08990", "0xBFC0899C", "0xBFC089A8", "0xBFC089B0"] + }, + { + "entry_addr": "0xBFC089C0", + "normalized_addr": "0x1FC089C0", + "end_addr": "0xBFC08B38", + "instruction_count": 95, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC089C0", + "block_leaders": ["0xBFC089C0", "0xBFC089F0", "0xBFC089F4", "0xBFC08A0C", "0xBFC08A18", "0xBFC08A20", "0xBFC08A28", "0xBFC08A38", "0xBFC08A48", "0xBFC08A5C", "0xBFC08A64", "0xBFC08A6C", "0xBFC08A74", "0xBFC08A78", "0xBFC08A80", "0xBFC08A88", "0xBFC08A90", "0xBFC08A98", "0xBFC08A9C", "0xBFC08AC0", "0xBFC08ACC", "0xBFC08AD8", "0xBFC08B00", "0xBFC08B20", "0xBFC08B24", "0xBFC08B28"] + }, + { + "entry_addr": "0xBFC08B3C", + "normalized_addr": "0x1FC08B3C", + "end_addr": "0xBFC08FF8", + "instruction_count": 304, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08B3C", + "block_leaders": ["0xBFC08B3C", "0xBFC08B64", "0xBFC08B7C", "0xBFC08B80", "0xBFC08B98", "0xBFC08BA4", "0xBFC08BAC", "0xBFC08BB4", "0xBFC08BB8", "0xBFC08BF4", "0xBFC08C04", "0xBFC08C14", "0xBFC08C28", "0xBFC08C34", "0xBFC08C3C", "0xBFC08C40", "0xBFC08C7C", "0xBFC08C84", "0xBFC08C94", "0xBFC08C9C", "0xBFC08CC0", "0xBFC08CD8", "0xBFC08CF0", "0xBFC08CF8", "0xBFC08D08", "0xBFC08D10", "0xBFC08D18", "0xBFC08D20", "0xBFC08D24", "0xBFC08D44", "0xBFC08D4C", "0xBFC08D54", "0xBFC08D78", "0xBFC08D7C", "0xBFC08D8C", "0xBFC08D98", "0xBFC08DA4", "0xBFC08DB8", "0xBFC08DC4", "0xBFC08DC8", "0xBFC08DD4", "0xBFC08DEC", "0xBFC08E04", "0xBFC08E18", "0xBFC08E2C", "0xBFC08E34", "0xBFC08E38", "0xBFC08E54", "0xBFC08E58", "0xBFC08E68", "0xBFC08E70", "0xBFC08E74", "0xBFC08EA0", "0xBFC08EA8", "0xBFC08EB8", "0xBFC08EC4", "0xBFC08ED4", "0xBFC08EEC", "0xBFC08EF8", "0xBFC08F1C", "0xBFC08F28", "0xBFC08F30", "0xBFC08F38", "0xBFC08F40", "0xBFC08F48", "0xBFC08F50", "0xBFC08F58", "0xBFC08F60", "0xBFC08F64", "0xBFC08F74", "0xBFC08F84", "0xBFC08F8C", "0xBFC08F90", "0xBFC08F9C", "0xBFC08FA8", "0xBFC08FB4", "0xBFC08FD4", "0xBFC08FD8", "0xBFC08FDC"] + }, + { + "entry_addr": "0xBFC08FFC", + "normalized_addr": "0x1FC08FFC", + "end_addr": "0xBFC09140", + "instruction_count": 81, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC08FFC", + "block_leaders": ["0xBFC08FFC", "0xBFC0902C", "0xBFC09034", "0xBFC09038", "0xBFC09040", "0xBFC09048", "0xBFC09050", "0xBFC09068", "0xBFC0906C", "0xBFC09080", "0xBFC09088", "0xBFC09094", "0xBFC09098", "0xBFC090B0", "0xBFC090B8", "0xBFC090C8", "0xBFC090D0", "0xBFC090D8", "0xBFC090FC", "0xBFC09104", "0xBFC09108", "0xBFC09128", "0xBFC09130", "0xBFC0913C"] + }, + { + "entry_addr": "0xBFC09144", + "normalized_addr": "0x1FC09144", + "end_addr": "0xBFC091C8", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09144", + "block_leaders": ["0xBFC09144", "0xBFC09158", "0xBFC0916C", "0xBFC09174", "0xBFC0917C", "0xBFC09188", "0xBFC09198", "0xBFC091A0", "0xBFC091A8", "0xBFC091AC", "0xBFC091B4", "0xBFC091BC"] + }, + { + "entry_addr": "0xBFC091CC", + "normalized_addr": "0x1FC091CC", + "end_addr": "0xBFC092E8", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC091CC", + "block_leaders": ["0xBFC091CC", "0xBFC09208", "0xBFC09224", "0xBFC09228", "0xBFC0922C", "0xBFC09238", "0xBFC09240", "0xBFC09244", "0xBFC09250", "0xBFC09258", "0xBFC0926C", "0xBFC09274", "0xBFC0927C", "0xBFC092A0", "0xBFC092B4", "0xBFC092C4", "0xBFC092C8"] + }, + { + "entry_addr": "0xBFC092EC", + "normalized_addr": "0x1FC092EC", + "end_addr": "0xBFC0953C", + "instruction_count": 149, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC092EC", + "block_leaders": ["0xBFC092EC", "0xBFC0932C", "0xBFC09334", "0xBFC09348", "0xBFC0934C", "0xBFC09350", "0xBFC0935C", "0xBFC09364", "0xBFC09368", "0xBFC09374", "0xBFC09380", "0xBFC09390", "0xBFC09398", "0xBFC093A4", "0xBFC093B4", "0xBFC093BC", "0xBFC093C0", "0xBFC093CC", "0xBFC093D4", "0xBFC093F8", "0xBFC09400", "0xBFC09420", "0xBFC09424", "0xBFC09434", "0xBFC09440", "0xBFC09448", "0xBFC09454", "0xBFC0945C", "0xBFC09464", "0xBFC09470", "0xBFC0947C", "0xBFC09480", "0xBFC09490", "0xBFC09498", "0xBFC0949C", "0xBFC094A8", "0xBFC094B0", "0xBFC094D4", "0xBFC094DC", "0xBFC094E4", "0xBFC094EC", "0xBFC094F0", "0xBFC09510", "0xBFC09518"] + }, + { + "entry_addr": "0xBFC09540", + "normalized_addr": "0x1FC09540", + "end_addr": "0xBFC09594", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09540", + "block_leaders": ["0xBFC09540", "0xBFC09568", "0xBFC09578", "0xBFC09580", "0xBFC0958C"] + }, + { + "entry_addr": "0xBFC09598", + "normalized_addr": "0x1FC09598", + "end_addr": "0xBFC0971C", + "instruction_count": 98, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09598", + "block_leaders": ["0xBFC09598", "0xBFC095F4", "0xBFC095F8", "0xBFC09618", "0xBFC09630", "0xBFC0963C", "0xBFC09644", "0xBFC0964C", "0xBFC09650", "0xBFC09668", "0xBFC09670", "0xBFC09678", "0xBFC09680", "0xBFC09688", "0xBFC0968C", "0xBFC096B0", "0xBFC096C0", "0xBFC096C8", "0xBFC096D8", "0xBFC096E0", "0xBFC096E8", "0xBFC096F0"] + }, + { + "entry_addr": "0xBFC09720", + "normalized_addr": "0x1FC09720", + "end_addr": "0xBFC0988C", + "instruction_count": 92, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09720", + "block_leaders": ["0xBFC09720", "0xBFC09774", "0xBFC0977C", "0xBFC09790", "0xBFC09798", "0xBFC097A0", "0xBFC097A8", "0xBFC097AC", "0xBFC097DC", "0xBFC097E4", "0xBFC097F8", "0xBFC09804", "0xBFC0980C", "0xBFC09814", "0xBFC09820", "0xBFC09824", "0xBFC0982C", "0xBFC09834", "0xBFC09840", "0xBFC09848", "0xBFC09850", "0xBFC0985C", "0xBFC09860"] + }, + { + "entry_addr": "0xBFC098A8", + "normalized_addr": "0x1FC098A8", + "end_addr": "0xBFC09910", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC098A8", + "block_leaders": ["0xBFC098A8", "0xBFC098C0", "0xBFC098C8", "0xBFC098E0", "0xBFC098F8", "0xBFC09900", "0xBFC09904"] + }, + { + "entry_addr": "0xBFC09914", + "normalized_addr": "0x1FC09914", + "end_addr": "0xBFC09948", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09914", + "block_leaders": ["0xBFC09914", "0xBFC0992C", "0xBFC09934", "0xBFC0993C"] + }, + { + "entry_addr": "0xBFC0994C", + "normalized_addr": "0x1FC0994C", + "end_addr": "0xBFC09968", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0994C", + "block_leaders": ["0xBFC0994C", "0xBFC0995C"] + }, + { + "entry_addr": "0xBFC0996C", + "normalized_addr": "0x1FC0996C", + "end_addr": "0xBFC09CD8", + "instruction_count": 220, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0996C", + "block_leaders": ["0xBFC0996C", "0xBFC099A8", "0xBFC099AC", "0xBFC099C8", "0xBFC099D0", "0xBFC099D8", "0xBFC099E8", "0xBFC099F4", "0xBFC099FC", "0xBFC09A04", "0xBFC09A08", "0xBFC09A14", "0xBFC09A1C", "0xBFC09A2C", "0xBFC09A38", "0xBFC09A48", "0xBFC09A80", "0xBFC09A94", "0xBFC09A98", "0xBFC09AA4", "0xBFC09AC0", "0xBFC09AD4", "0xBFC09AD8", "0xBFC09AF0", "0xBFC09B04", "0xBFC09B14", "0xBFC09B4C", "0xBFC09B70", "0xBFC09B90", "0xBFC09B98", "0xBFC09BA8", "0xBFC09BB8", "0xBFC09BC0", "0xBFC09BD4", "0xBFC09BE4", "0xBFC09C00", "0xBFC09C18", "0xBFC09C1C", "0xBFC09C28", "0xBFC09C30", "0xBFC09C40", "0xBFC09C58", "0xBFC09C60", "0xBFC09C70", "0xBFC09C7C", "0xBFC09C8C", "0xBFC09CA8", "0xBFC09CC4"] + }, + { + "entry_addr": "0xBFC09CDC", + "normalized_addr": "0x1FC09CDC", + "end_addr": "0xBFC09D38", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09CDC", + "block_leaders": ["0xBFC09CDC", "0xBFC09CF8", "0xBFC09CFC", "0xBFC09D18", "0xBFC09D20", "0xBFC09D28", "0xBFC09D2C"] + }, + { + "entry_addr": "0xBFC09D3C", + "normalized_addr": "0x1FC09D3C", + "end_addr": "0xBFC0A07C", + "instruction_count": 209, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC09D3C", + "block_leaders": ["0xBFC09D3C", "0xBFC09D84", "0xBFC09D88", "0xBFC09DA4", "0xBFC09DAC", "0xBFC09DB4", "0xBFC09DC8", "0xBFC09DD8", "0xBFC09DEC", "0xBFC09DFC", "0xBFC09E20", "0xBFC09E24", "0xBFC09E34", "0xBFC09E4C", "0xBFC09E5C", "0xBFC09EB4", "0xBFC09EBC", "0xBFC09ED8", "0xBFC09EEC", "0xBFC09F00", "0xBFC09F10", "0xBFC09F1C", "0xBFC09F20", "0xBFC09F30", "0xBFC09F3C", "0xBFC09F50", "0xBFC09F68", "0xBFC09F70", "0xBFC09F78", "0xBFC09F80", "0xBFC09F88", "0xBFC09F8C", "0xBFC09F9C", "0xBFC09FA4", "0xBFC09FA8", "0xBFC09FB8", "0xBFC09FCC", "0xBFC09FD8", "0xBFC09FE8", "0xBFC09FEC", "0xBFC09FFC", "0xBFC0A00C", "0xBFC0A034", "0xBFC0A044", "0xBFC0A048", "0xBFC0A060"] + }, + { + "entry_addr": "0xBFC0A080", + "normalized_addr": "0x1FC0A080", + "end_addr": "0xBFC0A3D0", + "instruction_count": 213, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A080", + "block_leaders": ["0xBFC0A080", "0xBFC0A0C8", "0xBFC0A0CC", "0xBFC0A0E8", "0xBFC0A0F0", "0xBFC0A0F8", "0xBFC0A10C", "0xBFC0A11C", "0xBFC0A130", "0xBFC0A140", "0xBFC0A164", "0xBFC0A168", "0xBFC0A178", "0xBFC0A190", "0xBFC0A1A0", "0xBFC0A1F8", "0xBFC0A200", "0xBFC0A21C", "0xBFC0A230", "0xBFC0A244", "0xBFC0A254", "0xBFC0A260", "0xBFC0A264", "0xBFC0A284", "0xBFC0A290", "0xBFC0A2A4", "0xBFC0A2BC", "0xBFC0A2C4", "0xBFC0A2CC", "0xBFC0A2D4", "0xBFC0A2DC", "0xBFC0A2E0", "0xBFC0A2F0", "0xBFC0A2F8", "0xBFC0A2FC", "0xBFC0A30C", "0xBFC0A320", "0xBFC0A32C", "0xBFC0A33C", "0xBFC0A340", "0xBFC0A350", "0xBFC0A360", "0xBFC0A388", "0xBFC0A398", "0xBFC0A39C", "0xBFC0A3B4"] + }, + { + "entry_addr": "0xBFC0A3D4", + "normalized_addr": "0x1FC0A3D4", + "end_addr": "0xBFC0A438", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A3D4", + "block_leaders": ["0xBFC0A3D4", "0xBFC0A3E0", "0xBFC0A400", "0xBFC0A414", "0xBFC0A420", "0xBFC0A428", "0xBFC0A42C"] + }, + { + "entry_addr": "0xBFC0A43C", + "normalized_addr": "0x1FC0A43C", + "end_addr": "0xBFC0A4B0", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A43C", + "block_leaders": ["0xBFC0A43C", "0xBFC0A44C", "0xBFC0A454", "0xBFC0A458", "0xBFC0A468", "0xBFC0A470", "0xBFC0A478", "0xBFC0A488", "0xBFC0A498", "0xBFC0A4A0", "0xBFC0A4AC"] + }, + { + "entry_addr": "0xBFC0A4B4", + "normalized_addr": "0x1FC0A4B4", + "end_addr": "0xBFC0A5E0", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A4B4", + "block_leaders": ["0xBFC0A4B4", "0xBFC0A4D8", "0xBFC0A4DC", "0xBFC0A4F8", "0xBFC0A508", "0xBFC0A51C", "0xBFC0A548", "0xBFC0A560", "0xBFC0A570", "0xBFC0A5C4", "0xBFC0A5D4"] + }, + { + "entry_addr": "0xBFC0A5E4", + "normalized_addr": "0x1FC0A5E4", + "end_addr": "0xBFC0A750", + "instruction_count": 92, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A5E4", + "block_leaders": ["0xBFC0A5E4", "0xBFC0A60C", "0xBFC0A610", "0xBFC0A62C", "0xBFC0A634", "0xBFC0A640", "0xBFC0A64C", "0xBFC0A654", "0xBFC0A65C", "0xBFC0A660", "0xBFC0A678", "0xBFC0A688", "0xBFC0A694", "0xBFC0A6A4", "0xBFC0A6AC", "0xBFC0A6B0", "0xBFC0A6C4", "0xBFC0A6CC", "0xBFC0A6D4", "0xBFC0A6DC", "0xBFC0A6F0", "0xBFC0A700", "0xBFC0A714", "0xBFC0A718", "0xBFC0A728", "0xBFC0A72C", "0xBFC0A744"] + }, + { + "entry_addr": "0xBFC0A754", + "normalized_addr": "0x1FC0A754", + "end_addr": "0xBFC0A8B8", + "instruction_count": 90, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A754", + "block_leaders": ["0xBFC0A754", "0xBFC0A774", "0xBFC0A7A0", "0xBFC0A7A4", "0xBFC0A7BC", "0xBFC0A7C4", "0xBFC0A7CC", "0xBFC0A7DC", "0xBFC0A7E8", "0xBFC0A7F0", "0xBFC0A7FC", "0xBFC0A804", "0xBFC0A824", "0xBFC0A834", "0xBFC0A840", "0xBFC0A848", "0xBFC0A854", "0xBFC0A85C", "0xBFC0A87C", "0xBFC0A88C", "0xBFC0A8A4", "0xBFC0A8A8"] + }, + { + "entry_addr": "0xBFC0A8BC", + "normalized_addr": "0x1FC0A8BC", + "end_addr": "0xBFC0AB5C", + "instruction_count": 169, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0A8BC", + "block_leaders": ["0xBFC0A8BC", "0xBFC0A8E0", "0xBFC0A8E4", "0xBFC0A900", "0xBFC0A908", "0xBFC0A918", "0xBFC0A924", "0xBFC0A92C", "0xBFC0A934", "0xBFC0A93C", "0xBFC0A94C", "0xBFC0A958", "0xBFC0A96C", "0xBFC0A984", "0xBFC0A99C", "0xBFC0A9EC", "0xBFC0A9F0", "0xBFC0AA00", "0xBFC0AA0C", "0xBFC0AA10", "0xBFC0AA24", "0xBFC0AA2C", "0xBFC0AA3C", "0xBFC0AA44", "0xBFC0AA48", "0xBFC0AA50", "0xBFC0AA68", "0xBFC0AA80", "0xBFC0AA90", "0xBFC0AA98", "0xBFC0AAB0", "0xBFC0AAC0", "0xBFC0AAD8", "0xBFC0AAE4", "0xBFC0AAF0", "0xBFC0AB00", "0xBFC0AB10", "0xBFC0AB24", "0xBFC0AB30", "0xBFC0AB44", "0xBFC0AB50"] + }, + { + "entry_addr": "0xBFC0AB60", + "normalized_addr": "0x1FC0AB60", + "end_addr": "0xBFC0AD04", + "instruction_count": 106, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0AB60", + "block_leaders": ["0xBFC0AB60", "0xBFC0AB94", "0xBFC0AB98", "0xBFC0ABB4", "0xBFC0ABBC", "0xBFC0ABC8", "0xBFC0ABD4", "0xBFC0ABDC", "0xBFC0ABE4", "0xBFC0ABEC", "0xBFC0ABFC", "0xBFC0AC08", "0xBFC0AC18", "0xBFC0AC1C", "0xBFC0AC28", "0xBFC0AC34", "0xBFC0AC44", "0xBFC0AC5C", "0xBFC0AC74", "0xBFC0ACA8", "0xBFC0ACC8", "0xBFC0ACD0", "0xBFC0ACE0", "0xBFC0ACF0", "0xBFC0ACF8"] + }, + { + "entry_addr": "0xBFC0AD08", + "normalized_addr": "0x1FC0AD08", + "end_addr": "0xBFC0B0C0", + "instruction_count": 239, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0AD08", + "block_leaders": ["0xBFC0AD08", "0xBFC0AD2C", "0xBFC0AD30", "0xBFC0AD4C", "0xBFC0AD54", "0xBFC0AD64", "0xBFC0AD70", "0xBFC0AD78", "0xBFC0AD80", "0xBFC0AD88", "0xBFC0AD98", "0xBFC0ADA4", "0xBFC0ADB8", "0xBFC0ADC0", "0xBFC0ADD0", "0xBFC0ADE0", "0xBFC0ADF0", "0xBFC0AE24", "0xBFC0AE34", "0xBFC0AE3C", "0xBFC0AE50", "0xBFC0AE54", "0xBFC0AE64", "0xBFC0AE6C", "0xBFC0AE70", "0xBFC0AE84", "0xBFC0AE8C", "0xBFC0AE9C", "0xBFC0AEA0", "0xBFC0AEA8", "0xBFC0AEC0", "0xBFC0AED0", "0xBFC0AED4", "0xBFC0AEE8", "0xBFC0AEF0", "0xBFC0AF04", "0xBFC0AF08", "0xBFC0AF28", "0xBFC0AF40", "0xBFC0AF60", "0xBFC0AF6C", "0xBFC0AF78", "0xBFC0AF80", "0xBFC0AF84", "0xBFC0AF98", "0xBFC0AFA0", "0xBFC0AFA4", "0xBFC0AFAC", "0xBFC0AFC8", "0xBFC0AFD0", "0xBFC0AFE8", "0xBFC0AFF0", "0xBFC0AFF8", "0xBFC0B010", "0xBFC0B024", "0xBFC0B028", "0xBFC0B034", "0xBFC0B040", "0xBFC0B050", "0xBFC0B060", "0xBFC0B074", "0xBFC0B080", "0xBFC0B094", "0xBFC0B0A4", "0xBFC0B0A8", "0xBFC0B0B4"] + }, + { + "entry_addr": "0xBFC0B0D0", + "normalized_addr": "0x1FC0B0D0", + "end_addr": "0xBFC0B16C", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B0D0", + "block_leaders": ["0xBFC0B0D0", "0xBFC0B0F0", "0xBFC0B0F4", "0xBFC0B110", "0xBFC0B120", "0xBFC0B128", "0xBFC0B13C", "0xBFC0B148", "0xBFC0B158", "0xBFC0B160"] + }, + { + "entry_addr": "0xBFC0B170", + "normalized_addr": "0x1FC0B170", + "end_addr": "0xBFC0B390", + "instruction_count": 137, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B170", + "block_leaders": ["0xBFC0B170", "0xBFC0B19C", "0xBFC0B1A0", "0xBFC0B1B8", "0xBFC0B1D0", "0xBFC0B1D8", "0xBFC0B1E8", "0xBFC0B1F4", "0xBFC0B1FC", "0xBFC0B218", "0xBFC0B248", "0xBFC0B258", "0xBFC0B274", "0xBFC0B27C", "0xBFC0B290", "0xBFC0B298", "0xBFC0B2B8", "0xBFC0B2C0", "0xBFC0B2CC", "0xBFC0B2F8", "0xBFC0B30C", "0xBFC0B314", "0xBFC0B324", "0xBFC0B32C", "0xBFC0B34C", "0xBFC0B354", "0xBFC0B360", "0xBFC0B37C"] + }, + { + "entry_addr": "0xBFC0B394", + "normalized_addr": "0x1FC0B394", + "end_addr": "0xBFC0B548", + "instruction_count": 110, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B394", + "block_leaders": ["0xBFC0B394", "0xBFC0B3A4", "0xBFC0B3B8", "0xBFC0B3BC", "0xBFC0B3D8", "0xBFC0B3E4", "0xBFC0B3EC", "0xBFC0B3F4", "0xBFC0B438", "0xBFC0B450", "0xBFC0B464", "0xBFC0B468", "0xBFC0B488", "0xBFC0B498", "0xBFC0B4A4", "0xBFC0B4A8", "0xBFC0B4B0", "0xBFC0B4E0", "0xBFC0B4FC", "0xBFC0B530", "0xBFC0B534", "0xBFC0B53C"] + }, + { + "entry_addr": "0xBFC0B54C", + "normalized_addr": "0x1FC0B54C", + "end_addr": "0xBFC0B59C", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B54C", + "block_leaders": ["0xBFC0B54C", "0xBFC0B55C", "0xBFC0B564", "0xBFC0B568", "0xBFC0B588", "0xBFC0B590", "0xBFC0B594"] + }, + { + "entry_addr": "0xBFC0B5A0", + "normalized_addr": "0x1FC0B5A0", + "end_addr": "0xBFC0B5F0", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B5A0", + "block_leaders": ["0xBFC0B5A0", "0xBFC0B5B0", "0xBFC0B5B8", "0xBFC0B5BC", "0xBFC0B5DC", "0xBFC0B5E4", "0xBFC0B5E8"] + }, + { + "entry_addr": "0xBFC0B5F4", + "normalized_addr": "0x1FC0B5F4", + "end_addr": "0xBFC0B644", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0B5F4", + "block_leaders": ["0xBFC0B5F4", "0xBFC0B604", "0xBFC0B60C", "0xBFC0B610", "0xBFC0B630", "0xBFC0B638", "0xBFC0B63C"] + }, + { + "entry_addr": "0xBFC0B648", + "normalized_addr": "0x1FC0B648", + "end_addr": "0xBFC0BFEC", + "instruction_count": 43, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC0B648", + "block_leaders": ["0xBFC0B648", "0xBFC0B658", "0xBFC0B66C", "0xBFC0B670", "0xBFC0B68C", "0xBFC0B6A0", "0xBFC0BFB8", "0xBFC0BFD8", "0xBFC0BFE0", "0xBFC0BFE4"] + }, + { + "entry_addr": "0xBFC0BFF0", + "normalized_addr": "0x1FC0BFF0", + "end_addr": "0xBFC0C044", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0BFF0", + "block_leaders": ["0xBFC0BFF0", "0xBFC0C038"] + }, + { + "entry_addr": "0xBFC0C048", + "normalized_addr": "0x1FC0C048", + "end_addr": "0xBFC0C0D8", + "instruction_count": 37, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C048", + "block_leaders": ["0xBFC0C048", "0xBFC0C070", "0xBFC0C074", "0xBFC0C090", "0xBFC0C0B0", "0xBFC0C0B8", "0xBFC0C0C8", "0xBFC0C0CC"] + }, + { + "entry_addr": "0xBFC0C0DC", + "normalized_addr": "0x1FC0C0DC", + "end_addr": "0xBFC0C13C", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C0DC", + "block_leaders": ["0xBFC0C0DC", "0xBFC0C0F8", "0xBFC0C0FC", "0xBFC0C114", "0xBFC0C120", "0xBFC0C12C", "0xBFC0C130"] + }, + { + "entry_addr": "0xBFC0C140", + "normalized_addr": "0x1FC0C140", + "end_addr": "0xBFC0C1D8", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C140", + "block_leaders": ["0xBFC0C140", "0xBFC0C168", "0xBFC0C16C", "0xBFC0C190", "0xBFC0C1A0", "0xBFC0C1AC", "0xBFC0C1B0", "0xBFC0C1CC"] + }, + { + "entry_addr": "0xBFC0C1FC", + "normalized_addr": "0x1FC0C1FC", + "end_addr": "0xBFC0C21C", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C1FC", + "block_leaders": ["0xBFC0C1FC", "0xBFC0C210"] + }, + { + "entry_addr": "0xBFC0C220", + "normalized_addr": "0x1FC0C220", + "end_addr": "0xBFC0C244", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C220", + "block_leaders": ["0xBFC0C220", "0xBFC0C238"] + }, + { + "entry_addr": "0xBFC0C248", + "normalized_addr": "0x1FC0C248", + "end_addr": "0xBFC0C26C", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C248", + "block_leaders": ["0xBFC0C248", "0xBFC0C260"] + }, + { + "entry_addr": "0xBFC0C270", + "normalized_addr": "0x1FC0C270", + "end_addr": "0xBFC0C294", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C270", + "block_leaders": ["0xBFC0C270", "0xBFC0C288"] + }, + { + "entry_addr": "0xBFC0C298", + "normalized_addr": "0x1FC0C298", + "end_addr": "0xBFC0C2BC", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C298", + "block_leaders": ["0xBFC0C298", "0xBFC0C2B0"] + }, + { + "entry_addr": "0xBFC0C2C0", + "normalized_addr": "0x1FC0C2C0", + "end_addr": "0xBFC0C2E4", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C2C0", + "block_leaders": ["0xBFC0C2C0", "0xBFC0C2D8"] + }, + { + "entry_addr": "0xBFC0C2E8", + "normalized_addr": "0x1FC0C2E8", + "end_addr": "0xBFC0C314", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C2E8", + "block_leaders": ["0xBFC0C2E8", "0xBFC0C2F8", "0xBFC0C300", "0xBFC0C308"] + }, + { + "entry_addr": "0xBFC0C318", + "normalized_addr": "0x1FC0C318", + "end_addr": "0xBFC0C350", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C318", + "block_leaders": ["0xBFC0C318", "0xBFC0C32C", "0xBFC0C33C", "0xBFC0C344"] + }, + { + "entry_addr": "0xBFC0C354", + "normalized_addr": "0x1FC0C354", + "end_addr": "0xBFC0C3A8", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C354", + "block_leaders": ["0xBFC0C354", "0xBFC0C36C", "0xBFC0C37C", "0xBFC0C38C", "0xBFC0C39C"] + }, + { + "entry_addr": "0xBFC0C580", + "normalized_addr": "0x1FC0C580", + "end_addr": "0xBFC0C71C", + "instruction_count": 104, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C580", + "block_leaders": ["0xBFC0C580", "0xBFC0C598", "0xBFC0C5AC", "0xBFC0C5B4", "0xBFC0C5F4", "0xBFC0C608", "0xBFC0C60C", "0xBFC0C638", "0xBFC0C640", "0xBFC0C648", "0xBFC0C660", "0xBFC0C664", "0xBFC0C678", "0xBFC0C69C", "0xBFC0C6A4", "0xBFC0C6BC", "0xBFC0C6C0", "0xBFC0C6D4", "0xBFC0C6F8", "0xBFC0C700", "0xBFC0C708", "0xBFC0C710"] + }, + { + "entry_addr": "0xBFC0C720", + "normalized_addr": "0x1FC0C720", + "end_addr": "0xBFC0C820", + "instruction_count": 65, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C720", + "block_leaders": ["0xBFC0C720", "0xBFC0C738", "0xBFC0C750", "0xBFC0C758", "0xBFC0C790", "0xBFC0C7A4", "0xBFC0C7A8", "0xBFC0C7D4", "0xBFC0C7DC", "0xBFC0C7E4", "0xBFC0C7F0", "0xBFC0C7FC", "0xBFC0C804", "0xBFC0C80C", "0xBFC0C814", "0xBFC0C818"] + }, + { + "entry_addr": "0xBFC0C830", + "normalized_addr": "0x1FC0C830", + "end_addr": "0xBFC0C884", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C830", + "block_leaders": ["0xBFC0C830", "0xBFC0C84C", "0xBFC0C854", "0xBFC0C860", "0xBFC0C868", "0xBFC0C874"] + }, + { + "entry_addr": "0xBFC0C890", + "normalized_addr": "0x1FC0C890", + "end_addr": "0xBFC0C9C8", + "instruction_count": 79, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C890", + "block_leaders": ["0xBFC0C890", "0xBFC0C8B0", "0xBFC0C8C0", "0xBFC0C8D0", "0xBFC0C8F0", "0xBFC0C8FC", "0xBFC0C908", "0xBFC0C914", "0xBFC0C920", "0xBFC0C944", "0xBFC0C950", "0xBFC0C95C", "0xBFC0C968", "0xBFC0C974", "0xBFC0C994", "0xBFC0C9B4"] + }, + { + "entry_addr": "0xBFC0C9CC", + "normalized_addr": "0x1FC0C9CC", + "end_addr": "0xBFC0CAB0", + "instruction_count": 58, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0C9CC", + "block_leaders": ["0xBFC0C9CC", "0xBFC0C9EC", "0xBFC0C9FC", "0xBFC0CA0C", "0xBFC0CA38", "0xBFC0CA44", "0xBFC0CA50", "0xBFC0CA5C", "0xBFC0CA68", "0xBFC0CA74", "0xBFC0CA90", "0xBFC0CAA4"] + }, + { + "entry_addr": "0xBFC0CAB4", + "normalized_addr": "0x1FC0CAB4", + "end_addr": "0xBFC0CC64", + "instruction_count": 109, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0CAB4", + "block_leaders": ["0xBFC0CAB4", "0xBFC0CAD4", "0xBFC0CB00", "0xBFC0CB0C", "0xBFC0CB14", "0xBFC0CB1C", "0xBFC0CB28", "0xBFC0CB30", "0xBFC0CB44", "0xBFC0CB58", "0xBFC0CB60", "0xBFC0CB74", "0xBFC0CB88", "0xBFC0CB9C", "0xBFC0CBA4", "0xBFC0CBD0", "0xBFC0CBE0", "0xBFC0CBEC", "0xBFC0CC00", "0xBFC0CC10", "0xBFC0CC28", "0xBFC0CC40", "0xBFC0CC4C", "0xBFC0CC58", "0xBFC0CC5C"] + }, + { + "entry_addr": "0xBFC0CC68", + "normalized_addr": "0x1FC0CC68", + "end_addr": "0xBFC0CD7C", + "instruction_count": 70, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0CC68", + "block_leaders": ["0xBFC0CC68", "0xBFC0CCAC", "0xBFC0CCB8", "0xBFC0CCC0", "0xBFC0CCC8", "0xBFC0CCD0", "0xBFC0CCD8", "0xBFC0CCE0", "0xBFC0CCE8", "0xBFC0CCF4", "0xBFC0CCFC", "0xBFC0CD04", "0xBFC0CD0C", "0xBFC0CD20", "0xBFC0CD34", "0xBFC0CD44", "0xBFC0CD4C", "0xBFC0CD54", "0xBFC0CD58", "0xBFC0CD64", "0xBFC0CD68", "0xBFC0CD6C"] + }, + { + "entry_addr": "0xBFC0CD80", + "normalized_addr": "0x1FC0CD80", + "end_addr": "0xBFC0CF80", + "instruction_count": 129, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0CD80", + "block_leaders": ["0xBFC0CD80", "0xBFC0CDAC", "0xBFC0CDB8", "0xBFC0CDE4", "0xBFC0CDF0", "0xBFC0CDF8", "0xBFC0CE08", "0xBFC0CE14", "0xBFC0CE20", "0xBFC0CE2C", "0xBFC0CE40", "0xBFC0CE4C", "0xBFC0CE74", "0xBFC0CE78", "0xBFC0CE94", "0xBFC0CEA8", "0xBFC0CEAC", "0xBFC0CED0", "0xBFC0CED4", "0xBFC0CEF0", "0xBFC0CF00", "0xBFC0CF14", "0xBFC0CF18", "0xBFC0CF20", "0xBFC0CF2C", "0xBFC0CF6C", "0xBFC0CF78"] + }, + { + "entry_addr": "0xBFC0CF84", + "normalized_addr": "0x1FC0CF84", + "end_addr": "0xBFC0D0C8", + "instruction_count": 82, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0CF84", + "block_leaders": ["0xBFC0CF84", "0xBFC0CF8C", "0xBFC0CF94", "0xBFC0CF9C", "0xBFC0CFA4", "0xBFC0CFAC", "0xBFC0CFB4", "0xBFC0CFBC", "0xBFC0CFC4", "0xBFC0CFCC", "0xBFC0CFD4", "0xBFC0CFDC", "0xBFC0CFE4", "0xBFC0CFEC", "0xBFC0CFF0", "0xBFC0CFF8", "0xBFC0D000", "0xBFC0D008", "0xBFC0D010", "0xBFC0D018", "0xBFC0D020", "0xBFC0D028", "0xBFC0D030", "0xBFC0D03C", "0xBFC0D044", "0xBFC0D050", "0xBFC0D058", "0xBFC0D060", "0xBFC0D068", "0xBFC0D074", "0xBFC0D07C", "0xBFC0D088", "0xBFC0D090", "0xBFC0D098", "0xBFC0D0A0", "0xBFC0D0A8", "0xBFC0D0B0", "0xBFC0D0BC", "0xBFC0D0C4"] + }, + { + "entry_addr": "0xBFC0D0CC", + "normalized_addr": "0x1FC0D0CC", + "end_addr": "0xBFC0D118", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0D0CC", + "block_leaders": ["0xBFC0D0CC", "0xBFC0D0E0", "0xBFC0D0F0", "0xBFC0D0FC", "0xBFC0D108"] + }, + { + "entry_addr": "0xBFC0D11C", + "normalized_addr": "0x1FC0D11C", + "end_addr": "0xBFC0D348", + "instruction_count": 140, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0D11C", + "block_leaders": ["0xBFC0D11C", "0xBFC0D150", "0xBFC0D158", "0xBFC0D15C", "0xBFC0D164", "0xBFC0D178", "0xBFC0D17C", "0xBFC0D1A0", "0xBFC0D1A4", "0xBFC0D1C0", "0xBFC0D1EC", "0xBFC0D1F0", "0xBFC0D20C", "0xBFC0D218", "0xBFC0D22C", "0xBFC0D230", "0xBFC0D238", "0xBFC0D240", "0xBFC0D244", "0xBFC0D24C", "0xBFC0D25C", "0xBFC0D26C", "0xBFC0D28C", "0xBFC0D298", "0xBFC0D2AC", "0xBFC0D2C0", "0xBFC0D2CC", "0xBFC0D2D4", "0xBFC0D2E4", "0xBFC0D2EC", "0xBFC0D318", "0xBFC0D31C", "0xBFC0D338", "0xBFC0D33C"] + }, + { + "entry_addr": "0xBFC0D34C", + "normalized_addr": "0x1FC0D34C", + "end_addr": "0xBFC0D4C8", + "instruction_count": 96, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0D34C", + "block_leaders": ["0xBFC0D34C", "0xBFC0D39C", "0xBFC0D3A4", "0xBFC0D3B8", "0xBFC0D3BC", "0xBFC0D3D8", "0xBFC0D3EC", "0xBFC0D3F4", "0xBFC0D400", "0xBFC0D414", "0xBFC0D41C", "0xBFC0D444", "0xBFC0D448", "0xBFC0D464", "0xBFC0D468", "0xBFC0D470", "0xBFC0D498", "0xBFC0D49C", "0xBFC0D4B8", "0xBFC0D4BC"] + }, + { + "entry_addr": "0xBFC0D4CC", + "normalized_addr": "0x1FC0D4CC", + "end_addr": "0xBFC0D4EC", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC0D4CC", + "block_leaders": ["0xBFC0D4CC", "0xBFC0D4E0"] + }, { "entry_addr": "0xBFC0D570", "normalized_addr": "0x1FC0D570", "end_addr": "0xBFC0D5FC", "instruction_count": 36, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78", + "discovered_by": "ghidra_BFC0D570", "block_leaders": ["0xBFC0D570", "0xBFC0D588", "0xBFC0D59C", "0xBFC0D5A4", "0xBFC0D5AC", "0xBFC0D5B8", "0xBFC0D5C0", "0xBFC0D5C8", "0xBFC0D5D4", "0xBFC0D5DC", "0xBFC0D5F0"] }, { @@ -426,7 +1911,7 @@ "end_addr": "0xBFC0D63C", "instruction_count": 16, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D59C -> jal at 0xBFC0D734", + "discovered_by": "ghidra_BFC0D600", "block_leaders": ["0xBFC0D600", "0xBFC0D628", "0xBFC0D638"] }, { @@ -435,7 +1920,7 @@ "end_addr": "0xBFC0D660", "instruction_count": 9, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D59C -> jal at 0xBFC0D76C", + "discovered_by": "ghidra_BFC0D640", "block_leaders": ["0xBFC0D640"] }, { @@ -444,7 +1929,7 @@ "end_addr": "0xBFC0D684", "instruction_count": 9, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D59C -> jal at 0xBFC0D73C", + "discovered_by": "ghidra_BFC0D664", "block_leaders": ["0xBFC0D664"] }, { @@ -453,7 +1938,7 @@ "end_addr": "0xBFC0D728", "instruction_count": 41, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D59C -> jal at 0xBFC0D75C", + "discovered_by": "ghidra_BFC0D688", "block_leaders": ["0xBFC0D688", "0xBFC0D6B4", "0xBFC0D6E0", "0xBFC0D6E8", "0xBFC0D6F4", "0xBFC0D6FC", "0xBFC0D704", "0xBFC0D70C", "0xBFC0D710"] }, { @@ -462,7 +1947,7 @@ "end_addr": "0xBFC0D7B8", "instruction_count": 36, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D59C", + "discovered_by": "ghidra_BFC0D72C", "block_leaders": ["0xBFC0D72C", "0xBFC0D73C", "0xBFC0D744", "0xBFC0D764", "0xBFC0D76C", "0xBFC0D774", "0xBFC0D77C", "0xBFC0D780", "0xBFC0D788", "0xBFC0D790", "0xBFC0D798", "0xBFC0D7A0", "0xBFC0D7A8", "0xBFC0D7AC"] }, { @@ -471,7 +1956,7 @@ "end_addr": "0xBFC0D848", "instruction_count": 36, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D5B8", + "discovered_by": "ghidra_BFC0D7BC", "block_leaders": ["0xBFC0D7BC", "0xBFC0D7CC", "0xBFC0D7D4", "0xBFC0D7F4", "0xBFC0D7FC", "0xBFC0D804", "0xBFC0D80C", "0xBFC0D810", "0xBFC0D818", "0xBFC0D820", "0xBFC0D828", "0xBFC0D830", "0xBFC0D838", "0xBFC0D83C"] }, { @@ -480,7 +1965,7 @@ "end_addr": "0xBFC0D878", "instruction_count": 11, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06BB4", + "discovered_by": "ghidra_BFC0D850", "block_leaders": ["0xBFC0D850", "0xBFC0D864", "0xBFC0D874"] }, { @@ -489,7 +1974,7 @@ "end_addr": "0xBFC0D888", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068B8 -> jal at 0xBFC01908 -> jal at 0xBFC00E64", + "discovered_by": "ghidra_BFC0D880", "block_leaders": ["0xBFC0D880"] }, { @@ -498,7 +1983,7 @@ "end_addr": "0xBFC0D898", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06A3C", + "discovered_by": "ghidra_BFC0D890", "block_leaders": ["0xBFC0D890"] }, { @@ -507,7 +1992,7 @@ "end_addr": "0xBFC0D8A8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06AD0", + "discovered_by": "ghidra_BFC0D8A0", "block_leaders": ["0xBFC0D8A0"] }, { @@ -516,7 +2001,7 @@ "end_addr": "0xBFC0D8B8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06A84", + "discovered_by": "ghidra_BFC0D8B0", "block_leaders": ["0xBFC0D8B0"] }, { @@ -525,16 +2010,25 @@ "end_addr": "0xBFC0D8CC", "instruction_count": 4, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C78 -> jal at 0xBFC0D580", + "discovered_by": "ghidra_BFC0D8C0", "block_leaders": ["0xBFC0D8C0"] }, + { + "entry_addr": "0xBFC0D8D0", + "normalized_addr": "0x1FC0D8D0", + "end_addr": "0xBFC0D8D8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D8D0", + "block_leaders": ["0xBFC0D8D0"] + }, { "entry_addr": "0xBFC0D950", "normalized_addr": "0x1FC0D950", "end_addr": "0xBFC0D958", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06980 -> jal at 0xBFC06FBC", + "discovered_by": "ghidra_BFC0D950", "block_leaders": ["0xBFC0D950"] }, { @@ -543,16 +2037,43 @@ "end_addr": "0xBFC0D96C", "instruction_count": 4, "termination_reason": "jr_ra", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06C48", + "discovered_by": "ghidra_BFC0D960", "block_leaders": ["0xBFC0D960"] }, + { + "entry_addr": "0xBFC0D970", + "normalized_addr": "0x1FC0D970", + "end_addr": "0xBFC0D978", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D970", + "block_leaders": ["0xBFC0D970"] + }, + { + "entry_addr": "0xBFC0D980", + "normalized_addr": "0x1FC0D980", + "end_addr": "0xBFC0D988", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D980", + "block_leaders": ["0xBFC0D980"] + }, + { + "entry_addr": "0xBFC0D990", + "normalized_addr": "0x1FC0D990", + "end_addr": "0xBFC0D998", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D990", + "block_leaders": ["0xBFC0D990"] + }, { "entry_addr": "0xBFC0D9A0", "normalized_addr": "0x1FC0D9A0", "end_addr": "0xBFC0D9A8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06864", + "discovered_by": "ghidra_BFC0D9A0", "block_leaders": ["0xBFC0D9A0"] }, { @@ -561,7 +2082,7 @@ "end_addr": "0xBFC0D9B8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B7C -> jal at 0xBFC06F8C -> jal at 0xBFC071C0", + "discovered_by": "ghidra_BFC0D9B0", "block_leaders": ["0xBFC0D9B0"] }, { @@ -570,34 +2091,196 @@ "end_addr": "0xBFC0D9C8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B7C -> jal at 0xBFC06F8C -> jal at 0xBFC07254", + "discovered_by": "ghidra_BFC0D9C0", "block_leaders": ["0xBFC0D9C0"] }, + { + "entry_addr": "0xBFC0D9D0", + "normalized_addr": "0x1FC0D9D0", + "end_addr": "0xBFC0D9D8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D9D0", + "block_leaders": ["0xBFC0D9D0"] + }, { "entry_addr": "0xBFC0D9E0", "normalized_addr": "0x1FC0D9E0", "end_addr": "0xBFC0D9E8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8 -> jal at 0xBFC07430 -> jal at 0xBFC07DD4", + "discovered_by": "ghidra_BFC0D9E0", "block_leaders": ["0xBFC0D9E0"] }, + { + "entry_addr": "0xBFC0D9F0", + "normalized_addr": "0x1FC0D9F0", + "end_addr": "0xBFC0D9F8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0D9F0", + "block_leaders": ["0xBFC0D9F0"] + }, + { + "entry_addr": "0xBFC0DA00", + "normalized_addr": "0x1FC0DA00", + "end_addr": "0xBFC0DA08", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA00", + "block_leaders": ["0xBFC0DA00"] + }, + { + "entry_addr": "0xBFC0DA10", + "normalized_addr": "0x1FC0DA10", + "end_addr": "0xBFC0DA18", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA10", + "block_leaders": ["0xBFC0DA10"] + }, + { + "entry_addr": "0xBFC0DA20", + "normalized_addr": "0x1FC0DA20", + "end_addr": "0xBFC0DA28", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA20", + "block_leaders": ["0xBFC0DA20"] + }, + { + "entry_addr": "0xBFC0DA30", + "normalized_addr": "0x1FC0DA30", + "end_addr": "0xBFC0DA38", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA30", + "block_leaders": ["0xBFC0DA30"] + }, + { + "entry_addr": "0xBFC0DA40", + "normalized_addr": "0x1FC0DA40", + "end_addr": "0xBFC0DA48", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA40", + "block_leaders": ["0xBFC0DA40"] + }, + { + "entry_addr": "0xBFC0DA50", + "normalized_addr": "0x1FC0DA50", + "end_addr": "0xBFC0DA58", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA50", + "block_leaders": ["0xBFC0DA50"] + }, + { + "entry_addr": "0xBFC0DA60", + "normalized_addr": "0x1FC0DA60", + "end_addr": "0xBFC0DA68", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DA60", + "block_leaders": ["0xBFC0DA60"] + }, + { + "entry_addr": "0xBFC0DA70", + "normalized_addr": "0x1FC0DA70", + "end_addr": "0xBFC0DA78", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "jal_BFC0DA70", + "block_leaders": ["0xBFC0DA70"] + }, + { + "entry_addr": "0xBFC0DA80", + "normalized_addr": "0x1FC0DA80", + "end_addr": "0xBFC0DA88", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "jal_BFC0DA80", + "block_leaders": ["0xBFC0DA80"] + }, + { + "entry_addr": "0xBFC0DA90", + "normalized_addr": "0x1FC0DA90", + "end_addr": "0xBFC0DA98", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "jal_BFC0DA90", + "block_leaders": ["0xBFC0DA90"] + }, + { + "entry_addr": "0xBFC0DAA0", + "normalized_addr": "0x1FC0DAA0", + "end_addr": "0xBFC0DAA8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DAA0", + "block_leaders": ["0xBFC0DAA0"] + }, + { + "entry_addr": "0xBFC0DAB0", + "normalized_addr": "0x1FC0DAB0", + "end_addr": "0xBFC0DAB8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DAB0", + "block_leaders": ["0xBFC0DAB0"] + }, + { + "entry_addr": "0xBFC0DAC0", + "normalized_addr": "0x1FC0DAC0", + "end_addr": "0xBFC0DAC8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DAC0", + "block_leaders": ["0xBFC0DAC0"] + }, + { + "entry_addr": "0xBFC0DAD0", + "normalized_addr": "0x1FC0DAD0", + "end_addr": "0xBFC0DAD8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DAD0", + "block_leaders": ["0xBFC0DAD0"] + }, { "entry_addr": "0xBFC0DAE0", "normalized_addr": "0x1FC0DAE0", "end_addr": "0xBFC0DAE8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06914 -> jal at 0xBFC04624", + "discovered_by": "ghidra_BFC0DAE0", "block_leaders": ["0xBFC0DAE0"] }, + { + "entry_addr": "0xBFC0DAF0", + "normalized_addr": "0x1FC0DAF0", + "end_addr": "0xBFC0DAF8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DAF0", + "block_leaders": ["0xBFC0DAF0"] + }, + { + "entry_addr": "0xBFC0DB00", + "normalized_addr": "0x1FC0DB00", + "end_addr": "0xBFC0DB08", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DB00", + "block_leaders": ["0xBFC0DB00"] + }, { "entry_addr": "0xBFC0DB10", "normalized_addr": "0x1FC0DB10", "end_addr": "0xBFC0DB18", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06854", + "discovered_by": "ghidra_BFC0DB10", "block_leaders": ["0xBFC0DB10"] }, { @@ -606,7 +2289,7 @@ "end_addr": "0xBFC0DB28", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0685C", + "discovered_by": "ghidra_BFC0DB20", "block_leaders": ["0xBFC0DB20"] }, { @@ -615,7 +2298,7 @@ "end_addr": "0xBFC0DB38", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC068A4", + "discovered_by": "ghidra_BFC0DB30", "block_leaders": ["0xBFC0DB30"] }, { @@ -624,7 +2307,7 @@ "end_addr": "0xBFC0DB48", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0690C", + "discovered_by": "ghidra_BFC0DB40", "block_leaders": ["0xBFC0DB40"] }, { @@ -633,7 +2316,7 @@ "end_addr": "0xBFC0DB58", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0691C", + "discovered_by": "ghidra_BFC0DB50", "block_leaders": ["0xBFC0DB50"] }, { @@ -642,7 +2325,7 @@ "end_addr": "0xBFC0DB68", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06924", + "discovered_by": "ghidra_BFC0DB60", "block_leaders": ["0xBFC0DB60"] }, { @@ -651,25 +2334,97 @@ "end_addr": "0xBFC0DB78", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC0694C", + "discovered_by": "ghidra_BFC0DB70", "block_leaders": ["0xBFC0DB70"] }, + { + "entry_addr": "0xBFC0DB80", + "normalized_addr": "0x1FC0DB80", + "end_addr": "0xBFC0DB88", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DB80", + "block_leaders": ["0xBFC0DB80"] + }, + { + "entry_addr": "0xBFC0DB90", + "normalized_addr": "0x1FC0DB90", + "end_addr": "0xBFC0DB98", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DB90", + "block_leaders": ["0xBFC0DB90"] + }, + { + "entry_addr": "0xBFC0DBA0", + "normalized_addr": "0x1FC0DBA0", + "end_addr": "0xBFC0DBA8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DBA0", + "block_leaders": ["0xBFC0DBA0"] + }, + { + "entry_addr": "0xBFC0DBB0", + "normalized_addr": "0x1FC0DBB0", + "end_addr": "0xBFC0DBB8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DBB0", + "block_leaders": ["0xBFC0DBB0"] + }, + { + "entry_addr": "0xBFC0DBC0", + "normalized_addr": "0x1FC0DBC0", + "end_addr": "0xBFC0DBC8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DBC0", + "block_leaders": ["0xBFC0DBC0"] + }, + { + "entry_addr": "0xBFC0DBD0", + "normalized_addr": "0x1FC0DBD0", + "end_addr": "0xBFC0DBD8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DBD0", + "block_leaders": ["0xBFC0DBD0"] + }, + { + "entry_addr": "0xBFC0DBE0", + "normalized_addr": "0x1FC0DBE0", + "end_addr": "0xBFC0DBE8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DBE0", + "block_leaders": ["0xBFC0DBE0"] + }, { "entry_addr": "0xBFC0DBF0", "normalized_addr": "0x1FC0DBF0", "end_addr": "0xBFC0DBF8", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC06B7C -> jal at 0xBFC06F8C -> jal at 0xBFC071A8", + "discovered_by": "ghidra_BFC0DBF0", "block_leaders": ["0xBFC0DBF0"] }, + { + "entry_addr": "0xBFC0DC00", + "normalized_addr": "0x1FC0DC00", + "end_addr": "0xBFC0DC08", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DC00", + "block_leaders": ["0xBFC0DC00"] + }, { "entry_addr": "0xBFC0DC10", "normalized_addr": "0x1FC0DC10", "end_addr": "0xBFC0DC18", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073A8 -> jal at 0xBFC07340", + "discovered_by": "ghidra_BFC0DC10", "block_leaders": ["0xBFC0DC10"] }, { @@ -678,7 +2433,7 @@ "end_addr": "0xBFC0DC28", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8 -> jal at 0xBFC07430 -> jal at 0xBFC07D84", + "discovered_by": "ghidra_BFC0DC20", "block_leaders": ["0xBFC0DC20"] }, { @@ -687,8 +2442,6749 @@ "end_addr": "0xBFC0DC38", "instruction_count": 3, "termination_reason": "indirect_jump_recorded_for_1d", - "discovered_by": "general_exception_bev1 -> jal at 0xBFC06F10 -> jal at 0xBFC067D0 -> jal at 0xBFC069AC -> jal at 0xBFC073F8 -> jal at 0xBFC07430 -> jal at 0xBFC07E24", + "discovered_by": "ghidra_BFC0DC30", "block_leaders": ["0xBFC0DC30"] + }, + { + "entry_addr": "0xBFC0DC40", + "normalized_addr": "0x1FC0DC40", + "end_addr": "0xBFC0DC48", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DC40", + "block_leaders": ["0xBFC0DC40"] + }, + { + "entry_addr": "0xBFC0DC50", + "normalized_addr": "0x1FC0DC50", + "end_addr": "0xBFC0DC58", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC0DC50", + "block_leaders": ["0xBFC0DC50"] + }, + { + "entry_addr": "0xBFC10000", + "normalized_addr": "0x00000500", + "end_addr": "0xBFC1000C", + "instruction_count": 4, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_trampoline_0", + "block_leaders": ["0xBFC10000"] + }, + { + "entry_addr": "0xBFC10010", + "normalized_addr": "0x00000510", + "end_addr": "0xBFC1001C", + "instruction_count": 4, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_trampoline_1", + "block_leaders": ["0xBFC10010"] + }, + { + "entry_addr": "0xBFC10020", + "normalized_addr": "0x00000520", + "end_addr": "0xBFC1002C", + "instruction_count": 4, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_trampoline_2", + "block_leaders": ["0xBFC10020"] + }, + { + "entry_addr": "0xBFC10030", + "normalized_addr": "0x00000530", + "end_addr": "0xBFC1003C", + "instruction_count": 4, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_trampoline_3", + "block_leaders": ["0xBFC10030"] + }, + { + "entry_addr": "0xBFC10040", + "normalized_addr": "0x00000540", + "end_addr": "0xBFC10094", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "kernel_memcpy", + "block_leaders": ["0xBFC10040", "0xBFC10054", "0xBFC10068", "0xBFC1007C", "0xBFC10090"] + }, + { + "entry_addr": "0xBFC10098", + "normalized_addr": "0x00000598", + "end_addr": "0xBFC100C0", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "kernel_bzero", + "block_leaders": ["0xBFC10098", "0xBFC100A8", "0xBFC100BC"] + }, + { + "entry_addr": "0xBFC100C4", + "normalized_addr": "0x000005C4", + "end_addr": "0xBFC100DC", + "instruction_count": 7, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "a0_vector_dispatch", + "block_leaders": ["0xBFC100C4"] + }, + { + "entry_addr": "0xBFC100E0", + "normalized_addr": "0x000005E0", + "end_addr": "0xBFC100FC", + "instruction_count": 8, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "b0_vector_dispatch", + "block_leaders": ["0xBFC100E0"] + }, + { + "entry_addr": "0xBFC10100", + "normalized_addr": "0x00000600", + "end_addr": "0xBFC1011C", + "instruction_count": 8, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "c0_vector_dispatch", + "block_leaders": ["0xBFC10100"] + }, + { + "entry_addr": "0xBFC10120", + "normalized_addr": "0x00000620", + "end_addr": "0xBFC1012C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_get_cause", + "block_leaders": ["0xBFC10120"] + }, + { + "entry_addr": "0xBFC10130", + "normalized_addr": "0x00000630", + "end_addr": "0xBFC1013C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_get_sr", + "block_leaders": ["0xBFC10130"] + }, + { + "entry_addr": "0xBFC10140", + "normalized_addr": "0x00000640", + "end_addr": "0xBFC1014C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_set_sr", + "block_leaders": ["0xBFC10140"] + }, + { + "entry_addr": "0xBFC10150", + "normalized_addr": "0x00000650", + "end_addr": "0xBFC10158", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_syscall", + "block_leaders": ["0xBFC10150"] + }, + { + "entry_addr": "0xBFC1015C", + "normalized_addr": "0x0000065C", + "end_addr": "0xBFC10164", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_get_c0_table", + "block_leaders": ["0xBFC1015C"] + }, + { + "entry_addr": "0xBFC10168", + "normalized_addr": "0x00000668", + "end_addr": "0xBFC10170", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_get_b0_table", + "block_leaders": ["0xBFC10168"] + }, + { + "entry_addr": "0xBFC10174", + "normalized_addr": "0x00000674", + "end_addr": "0xBFC10178", + "instruction_count": 2, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC10174", + "block_leaders": ["0xBFC10174"] + }, + { + "entry_addr": "0xBFC10780", + "normalized_addr": "0x00000C80", + "end_addr": "0xBFC1099C", + "instruction_count": 136, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC10780", + "block_leaders": ["0xBFC10780", "0xBFC107C0", "0xBFC107CC", "0xBFC107E8", "0xBFC107EC", "0xBFC108E8", "0xBFC108F8", "0xBFC10908", "0xBFC10910", "0xBFC10918", "0xBFC10920", "0xBFC10928", "0xBFC10938", "0xBFC10944"] + }, + { + "entry_addr": "0xBFC109A0", + "normalized_addr": "0x00000EA0", + "end_addr": "0xBFC109AC", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC109A0", + "block_leaders": ["0xBFC109A0"] + }, + { + "entry_addr": "0xBFC109B0", + "normalized_addr": "0x00000EB0", + "end_addr": "0xBFC10A08", + "instruction_count": 23, + "termination_reason": "j_out_of_function", + "discovered_by": "kernel_BFC109B0", + "block_leaders": ["0xBFC109B0", "0xBFC109C8", "0xBFC109DC", "0xBFC109F0", "0xBFC10A04"] + }, + { + "entry_addr": "0xBFC10A20", + "normalized_addr": "0x00000F20", + "end_addr": "0xBFC10A28", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10A20", + "block_leaders": ["0xBFC10A20"] + }, + { + "entry_addr": "0xBFC10A2C", + "normalized_addr": "0x00000F2C", + "end_addr": "0xBFC10A3C", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10A2C", + "block_leaders": ["0xBFC10A2C"] + }, + { + "entry_addr": "0xBFC10A40", + "normalized_addr": "0x00000F40", + "end_addr": "0xBFC10B14", + "instruction_count": 54, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC10A40", + "block_leaders": ["0xBFC10A40"] + }, + { + "entry_addr": "0xBFC10B30", + "normalized_addr": "0x00001030", + "end_addr": "0xBFC10BB4", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC10B30", + "block_leaders": ["0xBFC10B30", "0xBFC10B38", "0xBFC10B50", "0xBFC10B5C", "0xBFC10B60", "0xBFC10B64", "0xBFC10B94", "0xBFC10B9C", "0xBFC10BA0", "0xBFC10BA8", "0xBFC10BB0"] + }, + { + "entry_addr": "0xBFC10BB8", + "normalized_addr": "0x000010B8", + "end_addr": "0xBFC10BDC", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10BB8", + "block_leaders": ["0xBFC10BB8", "0xBFC10BD8"] + }, + { + "entry_addr": "0xBFC10BE0", + "normalized_addr": "0x000010E0", + "end_addr": "0xBFC10BE0", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "kernel_BFC10BE0", + "block_leaders": ["0xBFC10BE0"] + }, + { + "entry_addr": "0xBFC10BE4", + "normalized_addr": "0x000010E4", + "end_addr": "0xBFC10C38", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC10BE4", + "block_leaders": ["0xBFC10BE4", "0xBFC10BFC", "0xBFC10C00", "0xBFC10C1C", "0xBFC10C20"] + }, + { + "entry_addr": "0xBFC10C3C", + "normalized_addr": "0x0000113C", + "end_addr": "0xBFC10C70", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10C3C", + "block_leaders": ["0xBFC10C3C"] + }, + { + "entry_addr": "0xBFC10C74", + "normalized_addr": "0x00001174", + "end_addr": "0xBFC10F04", + "instruction_count": 165, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC10C74", + "block_leaders": ["0xBFC10C74", "0xBFC10CB0", "0xBFC10CB8", "0xBFC10CD8", "0xBFC10CE0", "0xBFC10CE4", "0xBFC10D04", "0xBFC10D0C", "0xBFC10D14", "0xBFC10D30", "0xBFC10D48", "0xBFC10D50", "0xBFC10D5C", "0xBFC10D70", "0xBFC10D74", "0xBFC10D7C", "0xBFC10D98", "0xBFC10D9C", "0xBFC10DB8", "0xBFC10DBC", "0xBFC10DC4", "0xBFC10DE8", "0xBFC10DF4", "0xBFC10DFC", "0xBFC10E04", "0xBFC10E0C", "0xBFC10E20", "0xBFC10E24", "0xBFC10E2C", "0xBFC10E48", "0xBFC10E50", "0xBFC10E68", "0xBFC10E70", "0xBFC10E94", "0xBFC10EA0", "0xBFC10EA8", "0xBFC10EB0", "0xBFC10EB8", "0xBFC10EC8", "0xBFC10EE0", "0xBFC10EF0"] + }, + { + "entry_addr": "0xBFC10F08", + "normalized_addr": "0x00001408", + "end_addr": "0xBFC10F18", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10F08", + "block_leaders": ["0xBFC10F08"] + }, + { + "entry_addr": "0xBFC10F20", + "normalized_addr": "0x00001420", + "end_addr": "0xBFC10F40", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10F20", + "block_leaders": ["0xBFC10F20"] + }, + { + "entry_addr": "0xBFC10F44", + "normalized_addr": "0x00001444", + "end_addr": "0xBFC11004", + "instruction_count": 49, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC10F44", + "block_leaders": ["0xBFC10F44", "0xBFC10F64", "0xBFC10F6C", "0xBFC10F74", "0xBFC10F84", "0xBFC10F94", "0xBFC10F9C", "0xBFC10FA4", "0xBFC10FB0", "0xBFC10FB8", "0xBFC10FC4", "0xBFC10FC8", "0xBFC10FD4", "0xBFC10FE4", "0xBFC10FEC", "0xBFC10FFC", "0xBFC11000"] + }, + { + "entry_addr": "0xBFC11008", + "normalized_addr": "0x00001508", + "end_addr": "0xBFC110D4", + "instruction_count": 52, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11008", + "block_leaders": ["0xBFC11008", "0xBFC11050", "0xBFC11070", "0xBFC11080", "0xBFC1108C", "0xBFC11094", "0xBFC1109C", "0xBFC110A8", "0xBFC110B4"] + }, + { + "entry_addr": "0xBFC110D8", + "normalized_addr": "0x000015D8", + "end_addr": "0xBFC110F4", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC110D8", + "block_leaders": ["0xBFC110D8"] + }, + { + "entry_addr": "0xBFC110F8", + "normalized_addr": "0x000015F8", + "end_addr": "0xBFC11110", + "instruction_count": 7, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC110F8", + "block_leaders": ["0xBFC110F8", "0xBFC1110C"] + }, + { + "entry_addr": "0xBFC11114", + "normalized_addr": "0x00001614", + "end_addr": "0xBFC111A8", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11114", + "block_leaders": ["0xBFC11114", "0xBFC11140", "0xBFC1114C", "0xBFC11158", "0xBFC11160", "0xBFC11168", "0xBFC11170", "0xBFC11174", "0xBFC1117C", "0xBFC11188", "0xBFC1118C", "0xBFC11190", "0xBFC11198", "0xBFC1119C"] + }, + { + "entry_addr": "0xBFC111AC", + "normalized_addr": "0x000016AC", + "end_addr": "0xBFC111C0", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC111AC", + "block_leaders": ["0xBFC111AC", "0xBFC111BC"] + }, + { + "entry_addr": "0xBFC111C4", + "normalized_addr": "0x000016C4", + "end_addr": "0xBFC111E0", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC111C4", + "block_leaders": ["0xBFC111C4"] + }, + { + "entry_addr": "0xBFC111E4", + "normalized_addr": "0x000016E4", + "end_addr": "0xBFC11218", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC111E4", + "block_leaders": ["0xBFC111E4", "0xBFC11214"] + }, + { + "entry_addr": "0xBFC1121C", + "normalized_addr": "0x0000171C", + "end_addr": "0xBFC11224", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1121C", + "block_leaders": ["0xBFC1121C"] + }, + { + "entry_addr": "0xBFC11228", + "normalized_addr": "0x00001728", + "end_addr": "0xBFC11258", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11228", + "block_leaders": ["0xBFC11228"] + }, + { + "entry_addr": "0xBFC1125C", + "normalized_addr": "0x0000175C", + "end_addr": "0xBFC11270", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1125C", + "block_leaders": ["0xBFC1125C", "0xBFC1126C"] + }, + { + "entry_addr": "0xBFC11274", + "normalized_addr": "0x00001774", + "end_addr": "0xBFC11290", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11274", + "block_leaders": ["0xBFC11274"] + }, + { + "entry_addr": "0xBFC11294", + "normalized_addr": "0x00001794", + "end_addr": "0xBFC112F0", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11294", + "block_leaders": ["0xBFC11294", "0xBFC112B8", "0xBFC112CC", "0xBFC112D4", "0xBFC112D8", "0xBFC112E0", "0xBFC112E4"] + }, + { + "entry_addr": "0xBFC112F4", + "normalized_addr": "0x000017F4", + "end_addr": "0xBFC11354", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC112F4", + "block_leaders": ["0xBFC112F4", "0xBFC11318", "0xBFC1132C", "0xBFC11334", "0xBFC11338", "0xBFC11344", "0xBFC11348"] + }, + { + "entry_addr": "0xBFC11358", + "normalized_addr": "0x00001858", + "end_addr": "0xBFC113B8", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11358", + "block_leaders": ["0xBFC11358", "0xBFC1137C", "0xBFC11390", "0xBFC11398", "0xBFC1139C", "0xBFC113A8", "0xBFC113AC"] + }, + { + "entry_addr": "0xBFC113BC", + "normalized_addr": "0x000018BC", + "end_addr": "0xBFC1141C", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC113BC", + "block_leaders": ["0xBFC113BC", "0xBFC113E0", "0xBFC113F4", "0xBFC113FC", "0xBFC11400", "0xBFC1140C", "0xBFC11410"] + }, + { + "entry_addr": "0xBFC11420", + "normalized_addr": "0x00001920", + "end_addr": "0xBFC11454", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11420", + "block_leaders": ["0xBFC11420", "0xBFC11434", "0xBFC11448"] + }, + { + "entry_addr": "0xBFC11458", + "normalized_addr": "0x00001958", + "end_addr": "0xBFC1148C", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11458", + "block_leaders": ["0xBFC11458", "0xBFC1146C", "0xBFC11480"] + }, + { + "entry_addr": "0xBFC11490", + "normalized_addr": "0x00001990", + "end_addr": "0xBFC114C4", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11490", + "block_leaders": ["0xBFC11490", "0xBFC114A4", "0xBFC114B8"] + }, + { + "entry_addr": "0xBFC114C8", + "normalized_addr": "0x000019C8", + "end_addr": "0xBFC114FC", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC114C8", + "block_leaders": ["0xBFC114C8", "0xBFC114DC", "0xBFC114F0"] + }, + { + "entry_addr": "0xBFC11500", + "normalized_addr": "0x00001A00", + "end_addr": "0xBFC11528", + "instruction_count": 11, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC11500", + "block_leaders": ["0xBFC11500", "0xBFC11524"] + }, + { + "entry_addr": "0xBFC1152C", + "normalized_addr": "0x00001A2C", + "end_addr": "0xBFC1155C", + "instruction_count": 13, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "rmiss_BFC1152C", + "block_leaders": ["0xBFC1152C", "0xBFC11544"] + }, + { + "entry_addr": "0xBFC11560", + "normalized_addr": "0x00001A60", + "end_addr": "0xBFC115E4", + "instruction_count": 34, + "termination_reason": "no_exit_found", + "discovered_by": "rmiss_BFC11560", + "block_leaders": ["0xBFC11560", "0xBFC11574", "0xBFC11580", "0xBFC11584", "0xBFC11598", "0xBFC115AC", "0xBFC115C0", "0xBFC115D0", "0xBFC115D8", "0xBFC115E0"] + }, + { + "entry_addr": "0xBFC115E8", + "normalized_addr": "0x00001AE8", + "end_addr": "0xBFC115F8", + "instruction_count": 5, + "termination_reason": "no_exit_found", + "discovered_by": "rmiss_BFC115E8", + "block_leaders": ["0xBFC115E8", "0xBFC115F0", "0xBFC115F8"] + }, + { + "entry_addr": "0xBFC115FC", + "normalized_addr": "0x00001AFC", + "end_addr": "0xBFC1161C", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC115FC", + "block_leaders": ["0xBFC115FC", "0xBFC11608", "0xBFC11610"] + }, + { + "entry_addr": "0xBFC11620", + "normalized_addr": "0x00001B20", + "end_addr": "0xBFC11640", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11620", + "block_leaders": ["0xBFC11620", "0xBFC11634"] + }, + { + "entry_addr": "0xBFC11644", + "normalized_addr": "0x00001B44", + "end_addr": "0xBFC11758", + "instruction_count": 70, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11644", + "block_leaders": ["0xBFC11644", "0xBFC116A0", "0xBFC116B8", "0xBFC116C8", "0xBFC116D8", "0xBFC116E8", "0xBFC116F8", "0xBFC11700", "0xBFC11708", "0xBFC11718", "0xBFC11720", "0xBFC11730", "0xBFC11740"] + }, + { + "entry_addr": "0xBFC1175C", + "normalized_addr": "0x00001C5C", + "end_addr": "0xBFC117FC", + "instruction_count": 41, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1175C", + "block_leaders": ["0xBFC1175C", "0xBFC1179C", "0xBFC117A4", "0xBFC117B4", "0xBFC117C4", "0xBFC117D4", "0xBFC117E4", "0xBFC117E8", "0xBFC117F8"] + }, + { + "entry_addr": "0xBFC11800", + "normalized_addr": "0x00001D00", + "end_addr": "0xBFC1186C", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11800", + "block_leaders": ["0xBFC11800", "0xBFC11840", "0xBFC11850"] + }, + { + "entry_addr": "0xBFC11870", + "normalized_addr": "0x00001D70", + "end_addr": "0xBFC11888", + "instruction_count": 7, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11870", + "block_leaders": ["0xBFC11870", "0xBFC11880"] + }, + { + "entry_addr": "0xBFC1188C", + "normalized_addr": "0x00001D8C", + "end_addr": "0xBFC11918", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1188C", + "block_leaders": ["0xBFC1188C", "0xBFC118B4", "0xBFC118C4", "0xBFC118CC", "0xBFC1190C"] + }, + { + "entry_addr": "0xBFC1191C", + "normalized_addr": "0x00001E1C", + "end_addr": "0xBFC11940", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1191C", + "block_leaders": ["0xBFC1191C"] + }, + { + "entry_addr": "0xBFC11944", + "normalized_addr": "0x00001E44", + "end_addr": "0xBFC1197C", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11944", + "block_leaders": ["0xBFC11944", "0xBFC11970"] + }, + { + "entry_addr": "0xBFC11980", + "normalized_addr": "0x00001E80", + "end_addr": "0xBFC11994", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11980", + "block_leaders": ["0xBFC11980", "0xBFC11990"] + }, + { + "entry_addr": "0xBFC11998", + "normalized_addr": "0x00001E98", + "end_addr": "0xBFC119C4", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11998", + "block_leaders": ["0xBFC11998", "0xBFC119A8", "0xBFC119B8"] + }, + { + "entry_addr": "0xBFC119C8", + "normalized_addr": "0x00001EC8", + "end_addr": "0xBFC11A00", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC119C8", + "block_leaders": ["0xBFC119C8", "0xBFC119F4"] + }, + { + "entry_addr": "0xBFC11A04", + "normalized_addr": "0x00001F04", + "end_addr": "0xBFC11A0C", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11A04", + "block_leaders": ["0xBFC11A04"] + }, + { + "entry_addr": "0xBFC11A10", + "normalized_addr": "0x00001F10", + "end_addr": "0xBFC11A48", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11A10", + "block_leaders": ["0xBFC11A10", "0xBFC11A3C", "0xBFC11A44"] + }, + { + "entry_addr": "0xBFC11A4C", + "normalized_addr": "0x00001F4C", + "end_addr": "0xBFC11A84", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11A4C", + "block_leaders": ["0xBFC11A4C", "0xBFC11A78", "0xBFC11A80"] + }, + { + "entry_addr": "0xBFC11A88", + "normalized_addr": "0x00001F88", + "end_addr": "0xBFC11AF8", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11A88", + "block_leaders": ["0xBFC11A88", "0xBFC11AC8", "0xBFC11ADC"] + }, + { + "entry_addr": "0xBFC11AFC", + "normalized_addr": "0x00001FFC", + "end_addr": "0xBFC11B14", + "instruction_count": 7, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11AFC", + "block_leaders": ["0xBFC11AFC", "0xBFC11B0C"] + }, + { + "entry_addr": "0xBFC11B18", + "normalized_addr": "0x00002018", + "end_addr": "0xBFC11BA4", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11B18", + "block_leaders": ["0xBFC11B18", "0xBFC11B3C", "0xBFC11B50", "0xBFC11B58", "0xBFC11B98"] + }, + { + "entry_addr": "0xBFC11BA8", + "normalized_addr": "0x000020A8", + "end_addr": "0xBFC11BD0", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11BA8", + "block_leaders": ["0xBFC11BA8"] + }, + { + "entry_addr": "0xBFC11BD4", + "normalized_addr": "0x000020D4", + "end_addr": "0xBFC11C10", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11BD4", + "block_leaders": ["0xBFC11BD4", "0xBFC11C04"] + }, + { + "entry_addr": "0xBFC11C14", + "normalized_addr": "0x00002114", + "end_addr": "0xBFC11C20", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11C14", + "block_leaders": ["0xBFC11C14", "0xBFC11C1C"] + }, + { + "entry_addr": "0xBFC11C24", + "normalized_addr": "0x00002124", + "end_addr": "0xBFC11C4C", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11C24", + "block_leaders": ["0xBFC11C24", "0xBFC11C2C", "0xBFC11C44"] + }, + { + "entry_addr": "0xBFC11C50", + "normalized_addr": "0x00002150", + "end_addr": "0xBFC11C64", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11C50", + "block_leaders": ["0xBFC11C50", "0xBFC11C58", "0xBFC11C60"] + }, + { + "entry_addr": "0xBFC11C68", + "normalized_addr": "0x00002168", + "end_addr": "0xBFC11C88", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC11C68", + "block_leaders": ["0xBFC11C68", "0xBFC11C70", "0xBFC11C80"] + }, + { + "entry_addr": "0xBFC11C8C", + "normalized_addr": "0x0000218C", + "end_addr": "0xBFC11F54", + "instruction_count": 179, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11C8C", + "block_leaders": ["0xBFC11C8C", "0xBFC11CB8", "0xBFC11CC8", "0xBFC11CD4", "0xBFC11CF0", "0xBFC11D00", "0xBFC11D0C", "0xBFC11D28", "0xBFC11D38", "0xBFC11D44", "0xBFC11D60", "0xBFC11D70", "0xBFC11D7C", "0xBFC11D98", "0xBFC11DA8", "0xBFC11DB4", "0xBFC11DD0", "0xBFC11DE0", "0xBFC11DEC", "0xBFC11E08", "0xBFC11E18", "0xBFC11E24", "0xBFC11E40", "0xBFC11E50", "0xBFC11E5C", "0xBFC11E78", "0xBFC11E88", "0xBFC11E94", "0xBFC11EB0", "0xBFC11EC0", "0xBFC11ECC", "0xBFC11EE8", "0xBFC11EF8", "0xBFC11F04", "0xBFC11F18", "0xBFC11F28", "0xBFC11F34", "0xBFC11F40"] + }, + { + "entry_addr": "0xBFC11F58", + "normalized_addr": "0x00002458", + "end_addr": "0xBFC12220", + "instruction_count": 179, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC11F58", + "block_leaders": ["0xBFC11F58", "0xBFC11F84", "0xBFC11F94", "0xBFC11FA0", "0xBFC11FBC", "0xBFC11FCC", "0xBFC11FD8", "0xBFC11FF4", "0xBFC12004", "0xBFC12010", "0xBFC1202C", "0xBFC1203C", "0xBFC12048", "0xBFC12064", "0xBFC12074", "0xBFC12080", "0xBFC1209C", "0xBFC120AC", "0xBFC120B8", "0xBFC120D4", "0xBFC120E4", "0xBFC120F0", "0xBFC1210C", "0xBFC1211C", "0xBFC12128", "0xBFC12144", "0xBFC12154", "0xBFC12160", "0xBFC1217C", "0xBFC1218C", "0xBFC12198", "0xBFC121B4", "0xBFC121C4", "0xBFC121D0", "0xBFC121E4", "0xBFC121F4", "0xBFC12200", "0xBFC1220C"] + }, + { + "entry_addr": "0xBFC12224", + "normalized_addr": "0x00002724", + "end_addr": "0xBFC12288", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC12224", + "block_leaders": ["0xBFC12224", "0xBFC12258", "0xBFC12270", "0xBFC1227C"] + }, + { + "entry_addr": "0xBFC1228C", + "normalized_addr": "0x0000278C", + "end_addr": "0xBFC1229C", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1228C", + "block_leaders": ["0xBFC1228C"] + }, + { + "entry_addr": "0xBFC122A0", + "normalized_addr": "0x000027A0", + "end_addr": "0xBFC122B8", + "instruction_count": 7, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC122A0", + "block_leaders": ["0xBFC122A0"] + }, + { + "entry_addr": "0xBFC122C0", + "normalized_addr": "0x000027C0", + "end_addr": "0xBFC1236C", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC122C0", + "block_leaders": ["0xBFC122C0", "0xBFC12328", "0xBFC12330", "0xBFC1233C", "0xBFC12344", "0xBFC12358", "0xBFC12360"] + }, + { + "entry_addr": "0xBFC12370", + "normalized_addr": "0x00002870", + "end_addr": "0xBFC12404", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12370", + "block_leaders": ["0xBFC12370", "0xBFC12384", "0xBFC123A0", "0xBFC123A8", "0xBFC123B8", "0xBFC123C0", "0xBFC123C8", "0xBFC123D0", "0xBFC123D8", "0xBFC123E0", "0xBFC123E8", "0xBFC123F0", "0xBFC123F8", "0xBFC123FC"] + }, + { + "entry_addr": "0xBFC12408", + "normalized_addr": "0x00002908", + "end_addr": "0xBFC12454", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12408", + "block_leaders": ["0xBFC12408", "0xBFC12418", "0xBFC12420", "0xBFC12430", "0xBFC12438", "0xBFC12448", "0xBFC1244C"] + }, + { + "entry_addr": "0xBFC12458", + "normalized_addr": "0x00002958", + "end_addr": "0xBFC12560", + "instruction_count": 67, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12458", + "block_leaders": ["0xBFC12458", "0xBFC1246C", "0xBFC12474", "0xBFC12488", "0xBFC1249C", "0xBFC124AC", "0xBFC124C4", "0xBFC1250C", "0xBFC12518", "0xBFC12530", "0xBFC12554"] + }, + { + "entry_addr": "0xBFC12564", + "normalized_addr": "0x00002A64", + "end_addr": "0xBFC12624", + "instruction_count": 49, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12564", + "block_leaders": ["0xBFC12564", "0xBFC12578", "0xBFC12588", "0xBFC12598", "0xBFC125AC", "0xBFC125B4", "0xBFC125C8", "0xBFC125D8", "0xBFC125F8", "0xBFC12600", "0xBFC12608", "0xBFC12610", "0xBFC12618"] + }, + { + "entry_addr": "0xBFC12628", + "normalized_addr": "0x00002B28", + "end_addr": "0xBFC12790", + "instruction_count": 91, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12628", + "block_leaders": ["0xBFC12628", "0xBFC1263C", "0xBFC12644", "0xBFC12654", "0xBFC12668", "0xBFC12670", "0xBFC1268C", "0xBFC126A8", "0xBFC126B4", "0xBFC126B8", "0xBFC126E0", "0xBFC126FC", "0xBFC12700", "0xBFC12708", "0xBFC12714", "0xBFC1271C", "0xBFC12738", "0xBFC1273C", "0xBFC12750", "0xBFC1275C", "0xBFC1276C", "0xBFC12774", "0xBFC12784"] + }, + { + "entry_addr": "0xBFC12794", + "normalized_addr": "0x00002C94", + "end_addr": "0xBFC128FC", + "instruction_count": 91, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12794", + "block_leaders": ["0xBFC12794", "0xBFC127A8", "0xBFC127B0", "0xBFC127C0", "0xBFC127D4", "0xBFC127DC", "0xBFC127F8", "0xBFC12814", "0xBFC12820", "0xBFC12824", "0xBFC1284C", "0xBFC12868", "0xBFC1286C", "0xBFC12874", "0xBFC12880", "0xBFC12888", "0xBFC128A4", "0xBFC128A8", "0xBFC128BC", "0xBFC128C8", "0xBFC128D8", "0xBFC128E0", "0xBFC128F0"] + }, + { + "entry_addr": "0xBFC12900", + "normalized_addr": "0x00002E00", + "end_addr": "0xBFC12994", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12900", + "block_leaders": ["0xBFC12900", "0xBFC12918", "0xBFC12920", "0xBFC12930", "0xBFC12944", "0xBFC12960", "0xBFC1296C", "0xBFC12980", "0xBFC12988"] + }, + { + "entry_addr": "0xBFC12998", + "normalized_addr": "0x00002E98", + "end_addr": "0xBFC129E8", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12998", + "block_leaders": ["0xBFC12998", "0xBFC129A8", "0xBFC129B0", "0xBFC129C0", "0xBFC129D4", "0xBFC129DC"] + }, + { + "entry_addr": "0xBFC129EC", + "normalized_addr": "0x00002EEC", + "end_addr": "0xBFC129F8", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC129EC", + "block_leaders": ["0xBFC129EC"] + }, + { + "entry_addr": "0xBFC129FC", + "normalized_addr": "0x00002EFC", + "end_addr": "0xBFC12AC4", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC129FC", + "block_leaders": ["0xBFC129FC", "0xBFC12A10", "0xBFC12A20", "0xBFC12A30", "0xBFC12A44", "0xBFC12A4C", "0xBFC12A58", "0xBFC12A5C", "0xBFC12A64", "0xBFC12A6C", "0xBFC12A70", "0xBFC12A78", "0xBFC12A94", "0xBFC12AA0", "0xBFC12AB4", "0xBFC12AB8"] + }, + { + "entry_addr": "0xBFC12AC8", + "normalized_addr": "0x00002FC8", + "end_addr": "0xBFC12AFC", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12AC8", + "block_leaders": ["0xBFC12AC8", "0xBFC12AE8", "0xBFC12AF0"] + }, + { + "entry_addr": "0xBFC12B00", + "normalized_addr": "0x00003000", + "end_addr": "0xBFC12B5C", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12B00", + "block_leaders": ["0xBFC12B00", "0xBFC12B1C", "0xBFC12B24", "0xBFC12B30", "0xBFC12B40", "0xBFC12B4C"] + }, + { + "entry_addr": "0xBFC12B60", + "normalized_addr": "0x00003060", + "end_addr": "0xBFC12BC4", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12B60", + "block_leaders": ["0xBFC12B60", "0xBFC12B78", "0xBFC12B88", "0xBFC12B90", "0xBFC12BA0", "0xBFC12BB4", "0xBFC12BB8"] + }, + { + "entry_addr": "0xBFC12BC8", + "normalized_addr": "0x000030C8", + "end_addr": "0xBFC12BDC", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC12BC8", + "block_leaders": ["0xBFC12BC8", "0xBFC12BD0", "0xBFC12BD8"] + }, + { + "entry_addr": "0xBFC12BE0", + "normalized_addr": "0x000030E0", + "end_addr": "0xBFC12BE0", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "kernel_BFC12BE0", + "block_leaders": ["0xBFC12BE0"] + }, + { + "entry_addr": "0xBFC12BE4", + "normalized_addr": "0x000030E4", + "end_addr": "0xBFC12C04", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC12BE4", + "block_leaders": ["0xBFC12BE4"] + }, + { + "entry_addr": "0xBFC12C08", + "normalized_addr": "0x00003108", + "end_addr": "0xBFC12CE4", + "instruction_count": 56, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12C08", + "block_leaders": ["0xBFC12C08", "0xBFC12C54", "0xBFC12C64", "0xBFC12C6C", "0xBFC12C74", "0xBFC12C7C", "0xBFC12CA0", "0xBFC12CA4", "0xBFC12CB8", "0xBFC12CC4", "0xBFC12CCC", "0xBFC12CD0"] + }, + { + "entry_addr": "0xBFC12CE8", + "normalized_addr": "0x000031E8", + "end_addr": "0xBFC12EA0", + "instruction_count": 111, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12CE8", + "block_leaders": ["0xBFC12CE8", "0xBFC12D10", "0xBFC12D20", "0xBFC12D3C", "0xBFC12D44", "0xBFC12D50", "0xBFC12D68", "0xBFC12D70", "0xBFC12D74", "0xBFC12D8C", "0xBFC12DBC", "0xBFC12DDC", "0xBFC12DFC", "0xBFC12E04", "0xBFC12E24", "0xBFC12E2C", "0xBFC12E30", "0xBFC12E58", "0xBFC12E5C", "0xBFC12E6C", "0xBFC12E74", "0xBFC12E80", "0xBFC12E88", "0xBFC12E8C"] + }, + { + "entry_addr": "0xBFC12EA4", + "normalized_addr": "0x000033A4", + "end_addr": "0xBFC12F68", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC12EA4", + "block_leaders": ["0xBFC12EA4", "0xBFC12EBC", "0xBFC12EC8", "0xBFC12EE4", "0xBFC12EF4", "0xBFC12F3C", "0xBFC12F50", "0xBFC12F58", "0xBFC12F5C"] + }, + { + "entry_addr": "0xBFC12F6C", + "normalized_addr": "0x0000346C", + "end_addr": "0xBFC12FB0", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12F6C", + "block_leaders": ["0xBFC12F6C", "0xBFC12F7C", "0xBFC12F8C", "0xBFC12FA8"] + }, + { + "entry_addr": "0xBFC12FB4", + "normalized_addr": "0x000034B4", + "end_addr": "0xBFC13028", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC12FB4", + "block_leaders": ["0xBFC12FB4", "0xBFC12FD4", "0xBFC12FE4", "0xBFC12FF4", "0xBFC13014", "0xBFC1301C"] + }, + { + "entry_addr": "0xBFC1302C", + "normalized_addr": "0x0000352C", + "end_addr": "0xBFC1306C", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1302C", + "block_leaders": ["0xBFC1302C", "0xBFC13044", "0xBFC1304C", "0xBFC13050", "0xBFC13060", "0xBFC13068"] + }, + { + "entry_addr": "0xBFC13070", + "normalized_addr": "0x00003570", + "end_addr": "0xBFC130A0", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13070", + "block_leaders": ["0xBFC13070", "0xBFC13088"] + }, + { + "entry_addr": "0xBFC130A4", + "normalized_addr": "0x000035A4", + "end_addr": "0xBFC130A8", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC130A4", + "block_leaders": ["0xBFC130A4"] + }, + { + "entry_addr": "0xBFC130AC", + "normalized_addr": "0x000035AC", + "end_addr": "0xBFC13174", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC130AC", + "block_leaders": ["0xBFC130AC", "0xBFC130BC", "0xBFC130C4", "0xBFC130D8", "0xBFC130EC", "0xBFC130FC", "0xBFC13114", "0xBFC13144", "0xBFC13150", "0xBFC13164", "0xBFC13168"] + }, + { + "entry_addr": "0xBFC13178", + "normalized_addr": "0x00003678", + "end_addr": "0xBFC13240", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13178", + "block_leaders": ["0xBFC13178", "0xBFC13188", "0xBFC13190", "0xBFC131A4", "0xBFC131B8", "0xBFC131C8", "0xBFC131E0", "0xBFC13210", "0xBFC1321C", "0xBFC13230", "0xBFC13234"] + }, + { + "entry_addr": "0xBFC13244", + "normalized_addr": "0x00003744", + "end_addr": "0xBFC1330C", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13244", + "block_leaders": ["0xBFC13244", "0xBFC13254", "0xBFC1325C", "0xBFC13270", "0xBFC13284", "0xBFC13294", "0xBFC132AC", "0xBFC132DC", "0xBFC132E8", "0xBFC132FC", "0xBFC13300"] + }, + { + "entry_addr": "0xBFC13310", + "normalized_addr": "0x00003810", + "end_addr": "0xBFC133D4", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13310", + "block_leaders": ["0xBFC13310", "0xBFC13320", "0xBFC13328", "0xBFC1333C", "0xBFC13350", "0xBFC13360", "0xBFC13374", "0xBFC133A4", "0xBFC133B0", "0xBFC133C4", "0xBFC133C8"] + }, + { + "entry_addr": "0xBFC133D8", + "normalized_addr": "0x000038D8", + "end_addr": "0xBFC134A0", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC133D8", + "block_leaders": ["0xBFC133D8", "0xBFC133E8", "0xBFC133F0", "0xBFC13404", "0xBFC13418", "0xBFC13428", "0xBFC13440", "0xBFC13444", "0xBFC13470", "0xBFC1347C", "0xBFC13490", "0xBFC13494"] + }, + { + "entry_addr": "0xBFC134A4", + "normalized_addr": "0x000039A4", + "end_addr": "0xBFC1356C", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC134A4", + "block_leaders": ["0xBFC134A4", "0xBFC134C0", "0xBFC134C8", "0xBFC134D8", "0xBFC134EC", "0xBFC134FC", "0xBFC13508", "0xBFC13528", "0xBFC13560"] + }, + { + "entry_addr": "0xBFC13570", + "normalized_addr": "0x00003A70", + "end_addr": "0xBFC135A8", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC13570", + "block_leaders": ["0xBFC13570", "0xBFC1359C"] + }, + { + "entry_addr": "0xBFC135AC", + "normalized_addr": "0x00003AAC", + "end_addr": "0xBFC13728", + "instruction_count": 96, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC135AC", + "block_leaders": ["0xBFC135AC", "0xBFC135C4", "0xBFC135CC", "0xBFC135E0", "0xBFC135E8", "0xBFC135F0", "0xBFC13608", "0xBFC1361C", "0xBFC1362C", "0xBFC1363C", "0xBFC13654", "0xBFC1366C", "0xBFC1367C", "0xBFC13688", "0xBFC13698", "0xBFC1369C", "0xBFC136E0", "0xBFC136F4", "0xBFC13708", "0xBFC13710", "0xBFC1371C"] + }, + { + "entry_addr": "0xBFC1372C", + "normalized_addr": "0x00003C2C", + "end_addr": "0xBFC13768", + "instruction_count": 16, + "termination_reason": "no_exit_found", + "discovered_by": "kernel_BFC1372C", + "block_leaders": ["0xBFC1372C"] + }, + { + "entry_addr": "0xBFC1376C", + "normalized_addr": "0x00003C6C", + "end_addr": "0xBFC137B0", + "instruction_count": 18, + "termination_reason": "no_exit_found", + "discovered_by": "rmiss_BFC1376C", + "block_leaders": ["0xBFC1376C", "0xBFC1377C", "0xBFC13790", "0xBFC1379C"] + }, + { + "entry_addr": "0xBFC137B4", + "normalized_addr": "0x00003CB4", + "end_addr": "0xBFC137B8", + "instruction_count": 2, + "termination_reason": "no_exit_found", + "discovered_by": "indirect_BFC137B4", + "block_leaders": ["0xBFC137B4"] + }, + { + "entry_addr": "0xBFC137BC", + "normalized_addr": "0x00003CBC", + "end_addr": "0xBFC137DC", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC137BC", + "block_leaders": ["0xBFC137BC", "0xBFC137CC"] + }, + { + "entry_addr": "0xBFC137E0", + "normalized_addr": "0x00003CE0", + "end_addr": "0xBFC138A8", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC137E0", + "block_leaders": ["0xBFC137E0", "0xBFC1382C", "0xBFC1383C", "0xBFC13844", "0xBFC1384C", "0xBFC1385C", "0xBFC13868", "0xBFC13890", "0xBFC13894"] + }, + { + "entry_addr": "0xBFC138AC", + "normalized_addr": "0x00003DAC", + "end_addr": "0xBFC13958", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC138AC", + "block_leaders": ["0xBFC138AC", "0xBFC138EC", "0xBFC138F8", "0xBFC13908", "0xBFC13914", "0xBFC13934", "0xBFC13944", "0xBFC1394C"] + }, + { + "entry_addr": "0xBFC1395C", + "normalized_addr": "0x00003E5C", + "end_addr": "0xBFC13964", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1395C", + "block_leaders": ["0xBFC1395C"] + }, + { + "entry_addr": "0xBFC13968", + "normalized_addr": "0x00003E68", + "end_addr": "0xBFC13974", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC13968", + "block_leaders": ["0xBFC13968"] + }, + { + "entry_addr": "0xBFC13980", + "normalized_addr": "0x00003E80", + "end_addr": "0xBFC13A00", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13980", + "block_leaders": ["0xBFC13980", "0xBFC139A8", "0xBFC139BC", "0xBFC139DC", "0xBFC139EC"] + }, + { + "entry_addr": "0xBFC13A04", + "normalized_addr": "0x00003F04", + "end_addr": "0xBFC13AEC", + "instruction_count": 59, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC13A04", + "block_leaders": ["0xBFC13A04", "0xBFC13A1C", "0xBFC13A30", "0xBFC13A40", "0xBFC13A4C", "0xBFC13A5C", "0xBFC13A68", "0xBFC13A6C", "0xBFC13A78", "0xBFC13A8C", "0xBFC13AA0", "0xBFC13AA4", "0xBFC13AAC", "0xBFC13AC0", "0xBFC13AD4", "0xBFC13AE0", "0xBFC13AE4"] + }, + { + "entry_addr": "0xBFC13AF0", + "normalized_addr": "0x00003FF0", + "end_addr": "0xBFC13B20", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13AF0", + "block_leaders": ["0xBFC13AF0", "0xBFC13B08"] + }, + { + "entry_addr": "0xBFC13B24", + "normalized_addr": "0x00004024", + "end_addr": "0xBFC13B68", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13B24", + "block_leaders": ["0xBFC13B24", "0xBFC13B38", "0xBFC13B40", "0xBFC13B48", "0xBFC13B4C", "0xBFC13B5C"] + }, + { + "entry_addr": "0xBFC13B6C", + "normalized_addr": "0x0000406C", + "end_addr": "0xBFC13C30", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13B6C", + "block_leaders": ["0xBFC13B6C", "0xBFC13B84", "0xBFC13B90", "0xBFC13B98", "0xBFC13BA4", "0xBFC13BAC", "0xBFC13BC4", "0xBFC13BCC", "0xBFC13BD0", "0xBFC13BD8", "0xBFC13BE0", "0xBFC13BE4", "0xBFC13C00", "0xBFC13C14", "0xBFC13C18", "0xBFC13C24", "0xBFC13C28"] + }, + { + "entry_addr": "0xBFC13C34", + "normalized_addr": "0x00004134", + "end_addr": "0xBFC13C60", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13C34", + "block_leaders": ["0xBFC13C34", "0xBFC13C54"] + }, + { + "entry_addr": "0xBFC13C64", + "normalized_addr": "0x00004164", + "end_addr": "0xBFC13E00", + "instruction_count": 104, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13C64", + "block_leaders": ["0xBFC13C64", "0xBFC13CB0", "0xBFC13CB8", "0xBFC13CCC", "0xBFC13CD4", "0xBFC13CDC", "0xBFC13CE4", "0xBFC13CEC", "0xBFC13CF4", "0xBFC13CFC", "0xBFC13D04", "0xBFC13D14", "0xBFC13D20", "0xBFC13D28", "0xBFC13D30", "0xBFC13D38", "0xBFC13D40", "0xBFC13D4C", "0xBFC13D50", "0xBFC13D58", "0xBFC13D64", "0xBFC13D6C", "0xBFC13D74", "0xBFC13D7C", "0xBFC13D84", "0xBFC13DA0", "0xBFC13DB0", "0xBFC13DBC", "0xBFC13DC4", "0xBFC13DCC", "0xBFC13DD4"] + }, + { + "entry_addr": "0xBFC13E04", + "normalized_addr": "0x00004304", + "end_addr": "0xBFC13E5C", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13E04", + "block_leaders": ["0xBFC13E04", "0xBFC13E1C", "0xBFC13E24", "0xBFC13E34", "0xBFC13E3C", "0xBFC13E4C", "0xBFC13E50"] + }, + { + "entry_addr": "0xBFC13E60", + "normalized_addr": "0x00004360", + "end_addr": "0xBFC13E84", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13E60", + "block_leaders": ["0xBFC13E60", "0xBFC13E78"] + }, + { + "entry_addr": "0xBFC13ED0", + "normalized_addr": "0x000043D0", + "end_addr": "0xBFC13EE4", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC13ED0", + "block_leaders": ["0xBFC13ED0"] + }, + { + "entry_addr": "0xBFC13EE8", + "normalized_addr": "0x000043E8", + "end_addr": "0xBFC13F58", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13EE8", + "block_leaders": ["0xBFC13EE8", "0xBFC13F20", "0xBFC13F30", "0xBFC13F40"] + }, + { + "entry_addr": "0xBFC13F5C", + "normalized_addr": "0x0000445C", + "end_addr": "0xBFC13F94", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC13F5C", + "block_leaders": ["0xBFC13F5C", "0xBFC13F78", "0xBFC13F90"] + }, + { + "entry_addr": "0xBFC13F98", + "normalized_addr": "0x00004498", + "end_addr": "0xBFC144B8", + "instruction_count": 329, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC13F98", + "block_leaders": ["0xBFC13F98", "0xBFC13FE0", "0xBFC13FE8", "0xBFC13FEC", "0xBFC14024", "0xBFC1402C", "0xBFC14030", "0xBFC14048", "0xBFC1406C", "0xBFC14080", "0xBFC14084", "0xBFC14090", "0xBFC140C4", "0xBFC140D8", "0xBFC140E4", "0xBFC140F8", "0xBFC140FC", "0xBFC14114", "0xBFC14128", "0xBFC1412C", "0xBFC14138", "0xBFC14164", "0xBFC14178", "0xBFC141A4", "0xBFC141A8", "0xBFC141BC", "0xBFC141C0", "0xBFC141D8", "0xBFC141EC", "0xBFC141FC", "0xBFC14228", "0xBFC1423C", "0xBFC14254", "0xBFC1425C", "0xBFC14270", "0xBFC14274", "0xBFC1428C", "0xBFC142A0", "0xBFC142B4", "0xBFC142B8", "0xBFC142C8", "0xBFC142F4", "0xBFC14308", "0xBFC1431C", "0xBFC14330", "0xBFC1433C", "0xBFC14350", "0xBFC14378", "0xBFC1437C", "0xBFC14394", "0xBFC143A8", "0xBFC143BC", "0xBFC143C0", "0xBFC143D0", "0xBFC143FC", "0xBFC14410", "0xBFC14434", "0xBFC14438", "0xBFC14450", "0xBFC14454", "0xBFC14474", "0xBFC14480", "0xBFC14484", "0xBFC14488", "0xBFC14490", "0xBFC14498"] + }, + { + "entry_addr": "0xBFC144BC", + "normalized_addr": "0x000049BC", + "end_addr": "0xBFC14548", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC144BC", + "block_leaders": ["0xBFC144BC", "0xBFC144D0", "0xBFC144D8", "0xBFC144E0", "0xBFC144F4", "0xBFC144FC", "0xBFC14510", "0xBFC14520", "0xBFC14534", "0xBFC1453C", "0xBFC14540"] + }, + { + "entry_addr": "0xBFC1454C", + "normalized_addr": "0x00004A4C", + "end_addr": "0xBFC14584", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1454C", + "block_leaders": ["0xBFC1454C", "0xBFC1456C", "0xBFC14580"] + }, + { + "entry_addr": "0xBFC14588", + "normalized_addr": "0x00004A88", + "end_addr": "0xBFC14590", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14588", + "block_leaders": ["0xBFC14588"] + }, + { + "entry_addr": "0xBFC14594", + "normalized_addr": "0x00004A94", + "end_addr": "0xBFC145C4", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14594", + "block_leaders": ["0xBFC14594"] + }, + { + "entry_addr": "0xBFC145C8", + "normalized_addr": "0x00004AC8", + "end_addr": "0xBFC1466C", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC145C8", + "block_leaders": ["0xBFC145C8", "0xBFC145F4", "0xBFC14600", "0xBFC14614", "0xBFC14640", "0xBFC14650", "0xBFC14658", "0xBFC14660"] + }, + { + "entry_addr": "0xBFC14670", + "normalized_addr": "0x00004B70", + "end_addr": "0xBFC1468C", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14670", + "block_leaders": ["0xBFC14670"] + }, + { + "entry_addr": "0xBFC14690", + "normalized_addr": "0x00004B90", + "end_addr": "0xBFC1470C", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14690", + "block_leaders": ["0xBFC14690", "0xBFC146A0", "0xBFC146A8", "0xBFC146B8", "0xBFC146C8", "0xBFC146EC", "0xBFC146F8", "0xBFC14700"] + }, + { + "entry_addr": "0xBFC14710", + "normalized_addr": "0x00004C10", + "end_addr": "0xBFC14750", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14710", + "block_leaders": ["0xBFC14710", "0xBFC14720", "0xBFC1472C", "0xBFC1473C", "0xBFC14744"] + }, + { + "entry_addr": "0xBFC14754", + "normalized_addr": "0x00004C54", + "end_addr": "0xBFC14760", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14754", + "block_leaders": ["0xBFC14754"] + }, + { + "entry_addr": "0xBFC14764", + "normalized_addr": "0x00004C64", + "end_addr": "0xBFC1476C", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14764", + "block_leaders": ["0xBFC14764"] + }, + { + "entry_addr": "0xBFC14770", + "normalized_addr": "0x00004C70", + "end_addr": "0xBFC147F0", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14770", + "block_leaders": ["0xBFC14770", "0xBFC14780", "0xBFC14788", "0xBFC14798", "0xBFC147A8", "0xBFC147C8", "0xBFC147D4", "0xBFC147E4"] + }, + { + "entry_addr": "0xBFC147F4", + "normalized_addr": "0x00004CF4", + "end_addr": "0xBFC14838", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC147F4", + "block_leaders": ["0xBFC147F4", "0xBFC14804", "0xBFC14810", "0xBFC14820", "0xBFC1482C"] + }, + { + "entry_addr": "0xBFC1483C", + "normalized_addr": "0x00004D3C", + "end_addr": "0xBFC14848", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1483C", + "block_leaders": ["0xBFC1483C"] + }, + { + "entry_addr": "0xBFC1484C", + "normalized_addr": "0x00004D4C", + "end_addr": "0xBFC14860", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1484C", + "block_leaders": ["0xBFC1484C"] + }, + { + "entry_addr": "0xBFC14864", + "normalized_addr": "0x00004D64", + "end_addr": "0xBFC14868", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC14864", + "block_leaders": ["0xBFC14864"] + }, + { + "entry_addr": "0xBFC1486C", + "normalized_addr": "0x00004D6C", + "end_addr": "0xBFC14A8C", + "instruction_count": 137, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC1486C", + "block_leaders": ["0xBFC1486C", "0xBFC14880", "0xBFC14888", "0xBFC1488C", "0xBFC148DC", "0xBFC148E4", "0xBFC148F0", "0xBFC148F8", "0xBFC14900", "0xBFC14908", "0xBFC14910", "0xBFC14934", "0xBFC1495C", "0xBFC1498C", "0xBFC1499C", "0xBFC149BC", "0xBFC149E0", "0xBFC14A0C", "0xBFC14A3C", "0xBFC14A6C", "0xBFC14A7C", "0xBFC14A80"] + }, + { + "entry_addr": "0xBFC14A90", + "normalized_addr": "0x00004F90", + "end_addr": "0xBFC14AFC", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14A90", + "block_leaders": ["0xBFC14A90", "0xBFC14AB4", "0xBFC14AC8", "0xBFC14AD0", "0xBFC14AD8", "0xBFC14AE4", "0xBFC14AEC", "0xBFC14AF0"] + }, + { + "entry_addr": "0xBFC14B00", + "normalized_addr": "0x00005000", + "end_addr": "0xBFC14CF0", + "instruction_count": 125, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14B00", + "block_leaders": ["0xBFC14B00", "0xBFC14B18", "0xBFC14B28", "0xBFC14B38", "0xBFC14B48", "0xBFC14B58", "0xBFC14B6C", "0xBFC14BE0", "0xBFC14BF0", "0xBFC14C00", "0xBFC14C28", "0xBFC14C68", "0xBFC14C70", "0xBFC14CB0", "0xBFC14CC0", "0xBFC14CD0", "0xBFC14CE4"] + }, + { + "entry_addr": "0xBFC14CF4", + "normalized_addr": "0x000051F4", + "end_addr": "0xBFC15184", + "instruction_count": 27, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC14CF4", + "block_leaders": ["0xBFC14CF4", "0xBFC14D28", "0xBFC1516C", "0xBFC15174", "0xBFC15178"] + }, + { + "entry_addr": "0xBFC15188", + "normalized_addr": "0x00005688", + "end_addr": "0xBFC15660", + "instruction_count": 31, + "termination_reason": "mixed", + "discovered_by": "kernel_BFC15188", + "block_leaders": ["0xBFC15188", "0xBFC151CC", "0xBFC15648", "0xBFC15650", "0xBFC15654"] + }, + { + "entry_addr": "0xBFC15664", + "normalized_addr": "0x00005B64", + "end_addr": "0xBFC158A4", + "instruction_count": 23, + "termination_reason": "mixed", + "discovered_by": "kernel_BFC15664", + "block_leaders": ["0xBFC15664", "0xBFC15688", "0xBFC1588C", "0xBFC15894", "0xBFC15898"] + }, + { + "entry_addr": "0xBFC158A8", + "normalized_addr": "0x00005DA8", + "end_addr": "0xBFC1592C", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC158A8", + "block_leaders": ["0xBFC158A8", "0xBFC158B8", "0xBFC15910", "0xBFC15918"] + }, + { + "entry_addr": "0xBFC15930", + "normalized_addr": "0x00005E30", + "end_addr": "0xBFC1594C", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15930", + "block_leaders": ["0xBFC15930"] + }, + { + "entry_addr": "0xBFC15950", + "normalized_addr": "0x00005E50", + "end_addr": "0xBFC15994", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15950", + "block_leaders": ["0xBFC15950", "0xBFC15960", "0xBFC15964", "0xBFC15980", "0xBFC15988", "0xBFC15990"] + }, + { + "entry_addr": "0xBFC15998", + "normalized_addr": "0x00005E98", + "end_addr": "0xBFC15A00", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15998", + "block_leaders": ["0xBFC15998"] + }, + { + "entry_addr": "0xBFC15A04", + "normalized_addr": "0x00005F04", + "end_addr": "0xBFC15A48", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15A04", + "block_leaders": ["0xBFC15A04", "0xBFC15A14", "0xBFC15A18", "0xBFC15A34", "0xBFC15A3C", "0xBFC15A44"] + }, + { + "entry_addr": "0xBFC15A4C", + "normalized_addr": "0x00005F4C", + "end_addr": "0xBFC15AB4", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15A4C", + "block_leaders": ["0xBFC15A4C"] + }, + { + "entry_addr": "0xBFC15AB8", + "normalized_addr": "0x00005FB8", + "end_addr": "0xBFC15AEC", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15AB8", + "block_leaders": ["0xBFC15AB8", "0xBFC15AC8", "0xBFC15ACC", "0xBFC15AE8"] + }, + { + "entry_addr": "0xBFC15AF0", + "normalized_addr": "0x00005FF0", + "end_addr": "0xBFC15B58", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15AF0", + "block_leaders": ["0xBFC15AF0"] + }, + { + "entry_addr": "0xBFC15B5C", + "normalized_addr": "0x0000605C", + "end_addr": "0xBFC15B6C", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15B5C", + "block_leaders": ["0xBFC15B5C"] + }, + { + "entry_addr": "0xBFC15B70", + "normalized_addr": "0x00006070", + "end_addr": "0xBFC15B98", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15B70", + "block_leaders": ["0xBFC15B70", "0xBFC15B7C", "0xBFC15B90"] + }, + { + "entry_addr": "0xBFC15B9C", + "normalized_addr": "0x0000609C", + "end_addr": "0xBFC15CC0", + "instruction_count": 74, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC15B9C", + "block_leaders": ["0xBFC15B9C", "0xBFC15BBC", "0xBFC15BC8", "0xBFC15BD0", "0xBFC15BDC", "0xBFC15BE8", "0xBFC15BF4", "0xBFC15C44", "0xBFC15C70", "0xBFC15C8C", "0xBFC15C9C", "0xBFC15CA4", "0xBFC15CB0", "0xBFC15CB4"] + }, + { + "entry_addr": "0xBFC15CC4", + "normalized_addr": "0x000061C4", + "end_addr": "0xBFC15E70", + "instruction_count": 108, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15CC4", + "block_leaders": ["0xBFC15CC4", "0xBFC15CE8", "0xBFC15CF0", "0xBFC15D04", "0xBFC15D0C", "0xBFC15D10", "0xBFC15D18", "0xBFC15D4C", "0xBFC15D70", "0xBFC15D80", "0xBFC15D98", "0xBFC15DA8", "0xBFC15DBC", "0xBFC15DD0", "0xBFC15DD8", "0xBFC15E0C", "0xBFC15E30", "0xBFC15E40", "0xBFC15E58", "0xBFC15E68"] + }, + { + "entry_addr": "0xBFC15E90", + "normalized_addr": "0x00006390", + "end_addr": "0xBFC15EB8", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC15E90", + "block_leaders": ["0xBFC15E90"] + }, + { + "entry_addr": "0xBFC15EBC", + "normalized_addr": "0x000063BC", + "end_addr": "0xBFC15EF4", + "instruction_count": 15, + "termination_reason": "j_out_of_function", + "discovered_by": "kernel_BFC15EBC", + "block_leaders": ["0xBFC15EBC", "0xBFC15EDC", "0xBFC15EF0"] + }, + { + "entry_addr": "0xBFC15EF8", + "normalized_addr": "0x000063F8", + "end_addr": "0xBFC15F04", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14A90 -> jal at 0xBFC14AD0", + "block_leaders": ["0xBFC15EF8"] + }, + { + "entry_addr": "0xBFC15F08", + "normalized_addr": "0x00006408", + "end_addr": "0xBFC16098", + "instruction_count": 95, + "termination_reason": "mixed", + "discovered_by": "kernel_BFC15F08", + "block_leaders": ["0xBFC15F08", "0xBFC15F18", "0xBFC15F30", "0xBFC15F44", "0xBFC15F58", "0xBFC15F74", "0xBFC15FE8", "0xBFC15FEC", "0xBFC1600C", "0xBFC16014", "0xBFC16088", "0xBFC1608C", "0xBFC16094"] + }, + { + "entry_addr": "0xBFC1609C", + "normalized_addr": "0x0000659C", + "end_addr": "0xBFC160D0", + "instruction_count": 14, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC1609C", + "block_leaders": ["0xBFC1609C"] + }, + { + "entry_addr": "0xBFC16170", + "normalized_addr": "0x00006670", + "end_addr": "0xBFC16544", + "instruction_count": 47, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC16170", + "block_leaders": ["0xBFC16170", "0xBFC1618C", "0xBFC161A8", "0xBFC164E0", "0xBFC164F4", "0xBFC164FC", "0xBFC16500", "0xBFC16538"] + }, + { + "entry_addr": "0xBFC16570", + "normalized_addr": "0x00006A70", + "end_addr": "0xBFC16578", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "rmiss_BFC1376C -> jal at 0xBFC13794", + "block_leaders": ["0xBFC16570"] + }, + { + "entry_addr": "0xBFC16580", + "normalized_addr": "0x00006A80", + "end_addr": "0xBFC16588", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "rmiss_BFC115FC -> jal at 0xBFC11608", + "block_leaders": ["0xBFC16580"] + }, + { + "entry_addr": "0xBFC16590", + "normalized_addr": "0x00006A90", + "end_addr": "0xBFC16598", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12CE8 -> jal at 0xBFC12DFC", + "block_leaders": ["0xBFC16590"] + }, + { + "entry_addr": "0xBFC165A0", + "normalized_addr": "0x00006AA0", + "end_addr": "0xBFC165A8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC122C0 -> jal at 0xBFC12350", + "block_leaders": ["0xBFC165A0"] + }, + { + "entry_addr": "0xBFC165B0", + "normalized_addr": "0x00006AB0", + "end_addr": "0xBFC165B8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC122C0 -> jal at 0xBFC12358", + "block_leaders": ["0xBFC165B0"] + }, + { + "entry_addr": "0xBFC165C0", + "normalized_addr": "0x00006AC0", + "end_addr": "0xBFC165C8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12370 -> jal at 0xBFC123C8", + "block_leaders": ["0xBFC165C0"] + }, + { + "entry_addr": "0xBFC165D0", + "normalized_addr": "0x00006AD0", + "end_addr": "0xBFC165D8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12370 -> jal at 0xBFC123D8", + "block_leaders": ["0xBFC165D0"] + }, + { + "entry_addr": "0xBFC165E0", + "normalized_addr": "0x00006AE0", + "end_addr": "0xBFC165E8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12564 -> jal at 0xBFC125D0", + "block_leaders": ["0xBFC165E0"] + }, + { + "entry_addr": "0xBFC165F0", + "normalized_addr": "0x00006AF0", + "end_addr": "0xBFC165F8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12AC8 -> jal at 0xBFC12AE8", + "block_leaders": ["0xBFC165F0"] + }, + { + "entry_addr": "0xBFC16600", + "normalized_addr": "0x00006B00", + "end_addr": "0xBFC16608", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12B00 -> jal at 0xBFC12B44", + "block_leaders": ["0xBFC16600"] + }, + { + "entry_addr": "0xBFC16610", + "normalized_addr": "0x00006B10", + "end_addr": "0xBFC16618", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC12C08 -> jal at 0xBFC12C64", + "block_leaders": ["0xBFC16610"] + }, + { + "entry_addr": "0xBFC16620", + "normalized_addr": "0x00006B20", + "end_addr": "0xBFC16628", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "rmiss_BFC1376C -> jal at 0xBFC13788", + "block_leaders": ["0xBFC16620"] + }, + { + "entry_addr": "0xBFC16630", + "normalized_addr": "0x00006B30", + "end_addr": "0xBFC16638", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC1486C -> jal at 0xBFC14A64", + "block_leaders": ["0xBFC16630"] + }, + { + "entry_addr": "0xBFC16640", + "normalized_addr": "0x00006B40", + "end_addr": "0xBFC16648", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC1486C -> jal at 0xBFC14984", + "block_leaders": ["0xBFC16640"] + }, + { + "entry_addr": "0xBFC16650", + "normalized_addr": "0x00006B50", + "end_addr": "0xBFC16658", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC14B00 -> jal at 0xBFC14BD8", + "block_leaders": ["0xBFC16650"] + }, + { + "entry_addr": "0xBFC16680", + "normalized_addr": "0x00006B80", + "end_addr": "0xBFC1668C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC14690 -> jal at 0xBFC146A0", + "block_leaders": ["0xBFC16680"] + }, + { + "entry_addr": "0xBFC16690", + "normalized_addr": "0x00006B90", + "end_addr": "0xBFC1669C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC16690", + "block_leaders": ["0xBFC16690"] + }, + { + "entry_addr": "0xBFC166A0", + "normalized_addr": "0x00006BA0", + "end_addr": "0xBFC166A8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166A0", + "block_leaders": ["0xBFC166A0"] + }, + { + "entry_addr": "0xBFC166B0", + "normalized_addr": "0x00006BB0", + "end_addr": "0xBFC166B8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166B0", + "block_leaders": ["0xBFC166B0"] + }, + { + "entry_addr": "0xBFC166C0", + "normalized_addr": "0x00006BC0", + "end_addr": "0xBFC166C8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166C0", + "block_leaders": ["0xBFC166C0"] + }, + { + "entry_addr": "0xBFC166D0", + "normalized_addr": "0x00006BD0", + "end_addr": "0xBFC166D8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166D0", + "block_leaders": ["0xBFC166D0"] + }, + { + "entry_addr": "0xBFC166E0", + "normalized_addr": "0x00006BE0", + "end_addr": "0xBFC166E8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166E0", + "block_leaders": ["0xBFC166E0"] + }, + { + "entry_addr": "0xBFC166F0", + "normalized_addr": "0x00006BF0", + "end_addr": "0xBFC166F8", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC166F0", + "block_leaders": ["0xBFC166F0"] + }, + { + "entry_addr": "0xBFC16700", + "normalized_addr": "0x00006C00", + "end_addr": "0xBFC16708", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC16700", + "block_leaders": ["0xBFC16700"] + }, + { + "entry_addr": "0xBFC16710", + "normalized_addr": "0x00006C10", + "end_addr": "0xBFC16718", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC16710", + "block_leaders": ["0xBFC16710"] + }, + { + "entry_addr": "0xBFC16720", + "normalized_addr": "0x00006C20", + "end_addr": "0xBFC16728", + "instruction_count": 3, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "kernel_BFC16720", + "block_leaders": ["0xBFC16720"] + }, + { + "entry_addr": "0xBFC18000", + "normalized_addr": "0x1FC18000", + "end_addr": "0xBFC18250", + "instruction_count": 149, + "termination_reason": "jr_ra", + "discovered_by": "shell_entry", + "block_leaders": ["0xBFC18000", "0xBFC18010", "0xBFC1802C", "0xBFC18034", "0xBFC18060", "0xBFC18068", "0xBFC18070", "0xBFC18078", "0xBFC18088", "0xBFC18090", "0xBFC18098", "0xBFC180A0", "0xBFC180A8", "0xBFC180B0", "0xBFC180B8", "0xBFC180C0", "0xBFC180FC", "0xBFC18104", "0xBFC1810C", "0xBFC18118", "0xBFC18120", "0xBFC18128", "0xBFC18130", "0xBFC18144", "0xBFC18158", "0xBFC18160", "0xBFC18168", "0xBFC18170", "0xBFC18184", "0xBFC1818C", "0xBFC18194", "0xBFC1819C", "0xBFC181C4", "0xBFC181CC", "0xBFC181D4", "0xBFC181DC", "0xBFC181E4", "0xBFC181E8", "0xBFC18208", "0xBFC1821C", "0xBFC18228", "0xBFC18230", "0xBFC18244", "0xBFC18248"] + }, + { + "entry_addr": "0xBFC18254", + "normalized_addr": "0x1FC18254", + "end_addr": "0xBFC18680", + "instruction_count": 268, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254", + "block_leaders": ["0xBFC18254", "0xBFC1826C", "0xBFC1827C", "0xBFC18284", "0xBFC1828C", "0xBFC18298", "0xBFC182A8", "0xBFC182B0", "0xBFC182C0", "0xBFC182D4", "0xBFC182E8", "0xBFC182FC", "0xBFC18300", "0xBFC1831C", "0xBFC18330", "0xBFC18344", "0xBFC18360", "0xBFC18374", "0xBFC1837C", "0xBFC18384", "0xBFC183A0", "0xBFC183BC", "0xBFC183D4", "0xBFC183DC", "0xBFC183E4", "0xBFC183EC", "0xBFC183F4", "0xBFC183FC", "0xBFC18404", "0xBFC18418", "0xBFC18440", "0xBFC18454", "0xBFC1845C", "0xBFC18464", "0xBFC18474", "0xBFC18484", "0xBFC18494", "0xBFC184A4", "0xBFC184B4", "0xBFC184C8", "0xBFC184D0", "0xBFC184E4", "0xBFC184EC", "0xBFC184F4", "0xBFC184FC", "0xBFC1850C", "0xBFC1851C", "0xBFC1852C", "0xBFC18534", "0xBFC18548", "0xBFC18560", "0xBFC18568", "0xBFC18578", "0xBFC1858C", "0xBFC1859C", "0xBFC185C8", "0xBFC185F4", "0xBFC18600", "0xBFC18618", "0xBFC18628", "0xBFC18638", "0xBFC18640", "0xBFC18648", "0xBFC1865C", "0xBFC18670"] + }, + { + "entry_addr": "0xBFC18684", + "normalized_addr": "0x1FC18684", + "end_addr": "0xBFC18784", + "instruction_count": 65, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18684", + "block_leaders": ["0xBFC18684", "0xBFC186A0", "0xBFC186A8", "0xBFC186B0", "0xBFC186C4", "0xBFC186D8", "0xBFC186E0", "0xBFC186E8", "0xBFC186F0", "0xBFC186F8", "0xBFC18700", "0xBFC18708", "0xBFC18710", "0xBFC18718", "0xBFC18720", "0xBFC18728", "0xBFC18730", "0xBFC18738", "0xBFC18740", "0xBFC1874C", "0xBFC18754", "0xBFC1875C", "0xBFC18764", "0xBFC1876C", "0xBFC18774", "0xBFC18778"] + }, + { + "entry_addr": "0xBFC18788", + "normalized_addr": "0x1FC18788", + "end_addr": "0xBFC18794", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC18788", + "block_leaders": ["0xBFC18788"] + }, + { + "entry_addr": "0xBFC18798", + "normalized_addr": "0x1FC18798", + "end_addr": "0xBFC188B0", + "instruction_count": 71, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18798", + "block_leaders": ["0xBFC18798", "0xBFC187B8", "0xBFC187C8", "0xBFC187D4", "0xBFC187E4", "0xBFC187F8", "0xBFC18808", "0xBFC18818", "0xBFC18828", "0xBFC1883C", "0xBFC18848", "0xBFC18854", "0xBFC1885C", "0xBFC1886C", "0xBFC1887C", "0xBFC18884", "0xBFC18898", "0xBFC188A0", "0xBFC188A4"] + }, + { + "entry_addr": "0xBFC188B4", + "normalized_addr": "0x1FC188B4", + "end_addr": "0xBFC188E0", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "kernel_BFC188B4", + "block_leaders": ["0xBFC188B4", "0xBFC188C0", "0xBFC188DC"] + }, + { + "entry_addr": "0xBFC188F0", + "normalized_addr": "0x1FC188F0", + "end_addr": "0xBFC1898C", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC188F0", + "block_leaders": ["0xBFC188F0", "0xBFC18900", "0xBFC1891C", "0xBFC18930", "0xBFC18940", "0xBFC18948", "0xBFC18958", "0xBFC18960", "0xBFC18968", "0xBFC18974", "0xBFC18978"] + }, + { + "entry_addr": "0xBFC18990", + "normalized_addr": "0x1FC18990", + "end_addr": "0xBFC18D0C", + "instruction_count": 224, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18990", + "block_leaders": ["0xBFC18990", "0xBFC189A4", "0xBFC189B0", "0xBFC189D0", "0xBFC189E4", "0xBFC189F8", "0xBFC18A00", "0xBFC18A14", "0xBFC18A28", "0xBFC18A3C", "0xBFC18A44", "0xBFC18A5C", "0xBFC18A70", "0xBFC18A7C", "0xBFC18A90", "0xBFC18AA4", "0xBFC18AB8", "0xBFC18AC0", "0xBFC18AC8", "0xBFC18ADC", "0xBFC18AF0", "0xBFC18B04", "0xBFC18B0C", "0xBFC18B14", "0xBFC18B1C", "0xBFC18B30", "0xBFC18B38", "0xBFC18B40", "0xBFC18B48", "0xBFC18B50", "0xBFC18B58", "0xBFC18B7C", "0xBFC18B84", "0xBFC18B8C", "0xBFC18B94", "0xBFC18BA4", "0xBFC18BB8", "0xBFC18BCC", "0xBFC18BDC", "0xBFC18BF0", "0xBFC18C04", "0xBFC18C0C", "0xBFC18C14", "0xBFC18C2C", "0xBFC18C3C", "0xBFC18C50", "0xBFC18C58", "0xBFC18C60", "0xBFC18C6C", "0xBFC18C7C", "0xBFC18C90", "0xBFC18CA4", "0xBFC18CB8", "0xBFC18CCC", "0xBFC18CE0", "0xBFC18CF4", "0xBFC18D00", "0xBFC18D04"] + }, + { + "entry_addr": "0xBFC18D10", + "normalized_addr": "0x1FC18D10", + "end_addr": "0xBFC192E0", + "instruction_count": 373, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18D10", + "block_leaders": ["0xBFC18D10", "0xBFC18D2C", "0xBFC18D34", "0xBFC18D44", "0xBFC18D54", "0xBFC18D5C", "0xBFC18D78", "0xBFC18D98", "0xBFC18DB8", "0xBFC18DD8", "0xBFC18DEC", "0xBFC18DF4", "0xBFC18E20", "0xBFC18E3C", "0xBFC18E48", "0xBFC18E54", "0xBFC18E60", "0xBFC18E78", "0xBFC18E90", "0xBFC18EA8", "0xBFC18EC0", "0xBFC18ED8", "0xBFC18EF0", "0xBFC18F48", "0xBFC18FC8", "0xBFC19050", "0xBFC190D0", "0xBFC19150", "0xBFC191D0", "0xBFC19250", "0xBFC19280", "0xBFC19288", "0xBFC19294", "0xBFC1929C", "0xBFC192A4", "0xBFC192B0", "0xBFC192B8", "0xBFC192C8", "0xBFC192D4"] + }, + { + "entry_addr": "0xBFC192E4", + "normalized_addr": "0x1FC192E4", + "end_addr": "0xBFC193B0", + "instruction_count": 52, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC192E4", + "block_leaders": ["0xBFC192E4", "0xBFC192FC", "0xBFC193A4"] + }, + { + "entry_addr": "0xBFC193C0", + "normalized_addr": "0x1FC193C0", + "end_addr": "0xBFC19528", + "instruction_count": 91, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC193C0", + "block_leaders": ["0xBFC193C0", "0xBFC193E8", "0xBFC193FC", "0xBFC19408", "0xBFC19418", "0xBFC1942C", "0xBFC19440", "0xBFC19454", "0xBFC19468", "0xBFC19488", "0xBFC194C0", "0xBFC194F0", "0xBFC19508", "0xBFC1951C"] + }, + { + "entry_addr": "0xBFC1952C", + "normalized_addr": "0x1FC1952C", + "end_addr": "0xBFC19620", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1952C", + "block_leaders": ["0xBFC1952C", "0xBFC19544", "0xBFC19558", "0xBFC1957C", "0xBFC19598", "0xBFC195D8", "0xBFC19614"] + }, + { + "entry_addr": "0xBFC19630", + "normalized_addr": "0x1FC19630", + "end_addr": "0xBFC196C4", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19630", + "block_leaders": ["0xBFC19630", "0xBFC19650", "0xBFC19658", "0xBFC19660", "0xBFC19684", "0xBFC19688", "0xBFC19698", "0xBFC1969C", "0xBFC196A8", "0xBFC196B8"] + }, + { + "entry_addr": "0xBFC196C8", + "normalized_addr": "0x1FC196C8", + "end_addr": "0xBFC196D0", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DDD8 -> jal at 0xBFC1DDEC", + "block_leaders": ["0xBFC196C8"] + }, + { + "entry_addr": "0xBFC196D4", + "normalized_addr": "0x1FC196D4", + "end_addr": "0xBFC19A54", + "instruction_count": 225, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC196D4", + "block_leaders": ["0xBFC196D4", "0xBFC196F4", "0xBFC19704", "0xBFC1970C", "0xBFC1972C", "0xBFC1973C", "0xBFC19754", "0xBFC19760", "0xBFC19770", "0xBFC19780", "0xBFC1979C", "0xBFC197AC", "0xBFC197BC", "0xBFC197C8", "0xBFC197CC", "0xBFC197D8", "0xBFC197E4", "0xBFC197F0", "0xBFC19834", "0xBFC1983C", "0xBFC19840", "0xBFC19848", "0xBFC1993C", "0xBFC19944", "0xBFC19958", "0xBFC19960", "0xBFC19968", "0xBFC19970", "0xBFC19984", "0xBFC19998", "0xBFC1999C", "0xBFC199C4", "0xBFC199D8", "0xBFC199DC", "0xBFC199E4", "0xBFC199E8", "0xBFC199FC", "0xBFC19A18", "0xBFC19A2C", "0xBFC19A38", "0xBFC19A44", "0xBFC19A48"] + }, + { + "entry_addr": "0xBFC19A58", + "normalized_addr": "0x1FC19A58", + "end_addr": "0xBFC19DF0", + "instruction_count": 231, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19A58", + "block_leaders": ["0xBFC19A58", "0xBFC19A74", "0xBFC19AAC", "0xBFC19AB4", "0xBFC19AC4", "0xBFC19AD8", "0xBFC19AE0", "0xBFC19AE4", "0xBFC19AF0", "0xBFC19B04", "0xBFC19B0C", "0xBFC19B10", "0xBFC19B1C", "0xBFC19B30", "0xBFC19B38", "0xBFC19B3C", "0xBFC19B48", "0xBFC19B5C", "0xBFC19B60", "0xBFC19B90", "0xBFC19B94", "0xBFC19BEC", "0xBFC19BF0", "0xBFC19C30", "0xBFC19C54", "0xBFC19C74", "0xBFC19C80", "0xBFC19CB4", "0xBFC19CC0", "0xBFC19CD4", "0xBFC19CE4", "0xBFC19CE8", "0xBFC19CF4", "0xBFC19CFC", "0xBFC19D04", "0xBFC19D0C", "0xBFC19D18", "0xBFC19D20", "0xBFC19D28", "0xBFC19D3C", "0xBFC19D54", "0xBFC19D5C", "0xBFC19D74", "0xBFC19D94", "0xBFC19DBC", "0xBFC19DC8", "0xBFC19DD4", "0xBFC19DDC"] + }, + { + "entry_addr": "0xBFC19DF4", + "normalized_addr": "0x1FC19DF4", + "end_addr": "0xBFC19FCC", + "instruction_count": 119, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19DF4", + "block_leaders": ["0xBFC19DF4", "0xBFC19E24", "0xBFC19E4C", "0xBFC19E5C", "0xBFC19E6C", "0xBFC19E74", "0xBFC19E78", "0xBFC19E90", "0xBFC19E94", "0xBFC19EA0", "0xBFC19EAC", "0xBFC19EB8", "0xBFC19EC8", "0xBFC19ED4", "0xBFC19EDC", "0xBFC19EE4", "0xBFC19EF4", "0xBFC19F04", "0xBFC19F10", "0xBFC19F20", "0xBFC19F28", "0xBFC19F30", "0xBFC19F4C", "0xBFC19F50", "0xBFC19F5C", "0xBFC19F74", "0xBFC19F8C", "0xBFC19FA4", "0xBFC19FAC", "0xBFC19FB0"] + }, + { + "entry_addr": "0xBFC1A11C", + "normalized_addr": "0x1FC1A11C", + "end_addr": "0xBFC1A158", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC218CC -> jal at 0xBFC21900", + "block_leaders": ["0xBFC1A11C", "0xBFC1A134", "0xBFC1A14C"] + }, + { + "entry_addr": "0xBFC1A15C", + "normalized_addr": "0x1FC1A15C", + "end_addr": "0xBFC1A178", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A15C", + "block_leaders": ["0xBFC1A15C", "0xBFC1A16C"] + }, + { + "entry_addr": "0xBFC1A17C", + "normalized_addr": "0x1FC1A17C", + "end_addr": "0xBFC1A198", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A17C", + "block_leaders": ["0xBFC1A17C", "0xBFC1A18C"] + }, + { + "entry_addr": "0xBFC1A19C", + "normalized_addr": "0x1FC1A19C", + "end_addr": "0xBFC1A1B8", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A19C", + "block_leaders": ["0xBFC1A19C", "0xBFC1A1AC"] + }, + { + "entry_addr": "0xBFC1A3B8", + "normalized_addr": "0x1FC1A3B8", + "end_addr": "0xBFC1A410", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1CAF0 -> jal at 0xBFC1CB80", + "block_leaders": ["0xBFC1A3B8", "0xBFC1A400", "0xBFC1A40C"] + }, + { + "entry_addr": "0xBFC1A414", + "normalized_addr": "0x1FC1A414", + "end_addr": "0xBFC1A41C", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1E8A4", + "block_leaders": ["0xBFC1A414"] + }, + { + "entry_addr": "0xBFC1A420", + "normalized_addr": "0x1FC1A420", + "end_addr": "0xBFC1A42C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1F640", + "block_leaders": ["0xBFC1A420"] + }, + { + "entry_addr": "0xBFC1A430", + "normalized_addr": "0x1FC1A430", + "end_addr": "0xBFC1A5AC", + "instruction_count": 96, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A430", + "block_leaders": ["0xBFC1A430", "0xBFC1A450", "0xBFC1A45C", "0xBFC1A460", "0xBFC1A468", "0xBFC1A470", "0xBFC1A484", "0xBFC1A48C", "0xBFC1A49C", "0xBFC1A4AC", "0xBFC1A4B4", "0xBFC1A4C8", "0xBFC1A4D4", "0xBFC1A4E4", "0xBFC1A4FC", "0xBFC1A504", "0xBFC1A50C", "0xBFC1A520", "0xBFC1A528", "0xBFC1A538", "0xBFC1A548", "0xBFC1A550", "0xBFC1A564", "0xBFC1A570", "0xBFC1A580", "0xBFC1A5A0"] + }, + { + "entry_addr": "0xBFC1A5B0", + "normalized_addr": "0x1FC1A5B0", + "end_addr": "0xBFC1A6E8", + "instruction_count": 51, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1A5B0", + "block_leaders": ["0xBFC1A5B0", "0xBFC1A5C8", "0xBFC1A5E0", "0xBFC1A5F4", "0xBFC1A608", "0xBFC1A61C", "0xBFC1A624", "0xBFC1A630", "0xBFC1A650", "0xBFC1A6DC", "0xBFC1A6E0"] + }, + { + "entry_addr": "0xBFC1A6EC", + "normalized_addr": "0x1FC1A6EC", + "end_addr": "0xBFC1AA8C", + "instruction_count": 233, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A6EC", + "block_leaders": ["0xBFC1A6EC", "0xBFC1A71C", "0xBFC1A728", "0xBFC1A750", "0xBFC1A760", "0xBFC1A774", "0xBFC1A780", "0xBFC1A794", "0xBFC1A7A8", "0xBFC1A7BC", "0xBFC1A7C0", "0xBFC1A7C8", "0xBFC1A7D4", "0xBFC1A7DC", "0xBFC1A7E0", "0xBFC1A7EC", "0xBFC1A7F4", "0xBFC1A80C", "0xBFC1A814", "0xBFC1A818", "0xBFC1A820", "0xBFC1A82C", "0xBFC1A838", "0xBFC1A840", "0xBFC1A854", "0xBFC1A85C", "0xBFC1A864", "0xBFC1A870", "0xBFC1A87C", "0xBFC1A884", "0xBFC1A898", "0xBFC1A8AC", "0xBFC1A8B4", "0xBFC1A8C0", "0xBFC1A8CC", "0xBFC1A8D4", "0xBFC1A8D8", "0xBFC1A8E0", "0xBFC1A8F8", "0xBFC1A908", "0xBFC1A92C", "0xBFC1A940", "0xBFC1A964", "0xBFC1A970", "0xBFC1A974", "0xBFC1A980", "0xBFC1A9A4", "0xBFC1A9C4", "0xBFC1A9E8", "0xBFC1AA00", "0xBFC1AA18", "0xBFC1AA30", "0xBFC1AA44", "0xBFC1AA5C", "0xBFC1AA74", "0xBFC1AA80", "0xBFC1AA84"] + }, + { + "entry_addr": "0xBFC1AA90", + "normalized_addr": "0x1FC1AA90", + "end_addr": "0xBFC1AC64", + "instruction_count": 118, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1AA90", + "block_leaders": ["0xBFC1AA90", "0xBFC1AAA8", "0xBFC1AAB8", "0xBFC1AAD0", "0xBFC1AADC", "0xBFC1AAE8", "0xBFC1AAF4", "0xBFC1AB00", "0xBFC1AB10", "0xBFC1AB20", "0xBFC1AB30", "0xBFC1AB40", "0xBFC1AB50", "0xBFC1AB64", "0xBFC1AB70", "0xBFC1AB74", "0xBFC1AB78", "0xBFC1AB84", "0xBFC1ABC0", "0xBFC1ABC8", "0xBFC1ABCC", "0xBFC1ABD8", "0xBFC1AC14", "0xBFC1AC1C", "0xBFC1AC58", "0xBFC1AC5C"] + }, + { + "entry_addr": "0xBFC1AC68", + "normalized_addr": "0x1FC1AC68", + "end_addr": "0xBFC1AE20", + "instruction_count": 92, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1AC68", + "block_leaders": ["0xBFC1AC68", "0xBFC1AC80", "0xBFC1ACA0", "0xBFC1AD08", "0xBFC1AD10", "0xBFC1AD1C", "0xBFC1AD34", "0xBFC1AD50", "0xBFC1AD5C", "0xBFC1AD60", "0xBFC1AD74", "0xBFC1AD84", "0xBFC1AD88", "0xBFC1AD8C", "0xBFC1AD94", "0xBFC1ADA4", "0xBFC1ADB4", "0xBFC1ADB8", "0xBFC1ADC0", "0xBFC1ADD4", "0xBFC1ADF0", "0xBFC1ADFC", "0xBFC1AE04", "0xBFC1AE0C", "0xBFC1AE14", "0xBFC1AE18"] + }, + { + "entry_addr": "0xBFC1AE24", + "normalized_addr": "0x1FC1AE24", + "end_addr": "0xBFC1AE30", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1E8E8", + "block_leaders": ["0xBFC1AE24"] + }, + { + "entry_addr": "0xBFC1AE34", + "normalized_addr": "0x1FC1AE34", + "end_addr": "0xBFC1AE64", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C8EC -> jal at 0xBFC1C92C -> jal at 0xBFC1FF7C", + "block_leaders": ["0xBFC1AE34", "0xBFC1AE48", "0xBFC1AE60"] + }, + { + "entry_addr": "0xBFC1AE68", + "normalized_addr": "0x1FC1AE68", + "end_addr": "0xBFC1B6E8", + "instruction_count": 545, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1AE68", + "block_leaders": ["0xBFC1AE68", "0xBFC1AE80", "0xBFC1AE94", "0xBFC1AEA8", "0xBFC1AEBC", "0xBFC1AEC4", "0xBFC1AED0", "0xBFC1AEE4", "0xBFC1AF04", "0xBFC1AF18", "0xBFC1AF28", "0xBFC1AF3C", "0xBFC1AF44", "0xBFC1AF4C", "0xBFC1AF50", "0xBFC1AF64", "0xBFC1AF90", "0xBFC1AFA0", "0xBFC1AFB8", "0xBFC1AFCC", "0xBFC1AFDC", "0xBFC1AFE0", "0xBFC1AFE8", "0xBFC1B010", "0xBFC1B01C", "0xBFC1B054", "0xBFC1B06C", "0xBFC1B078", "0xBFC1B08C", "0xBFC1B0A0", "0xBFC1B0A8", "0xBFC1B0B0", "0xBFC1B0B8", "0xBFC1B0C8", "0xBFC1B0CC", "0xBFC1B0D4", "0xBFC1B0E4", "0xBFC1B100", "0xBFC1B110", "0xBFC1B11C", "0xBFC1B120", "0xBFC1B128", "0xBFC1B130", "0xBFC1B140", "0xBFC1B150", "0xBFC1B174", "0xBFC1B17C", "0xBFC1B190", "0xBFC1B1A4", "0xBFC1B1AC", "0xBFC1B1B4", "0xBFC1B1DC", "0xBFC1B1F4", "0xBFC1B200", "0xBFC1B220", "0xBFC1B228", "0xBFC1B23C", "0xBFC1B244", "0xBFC1B24C", "0xBFC1B260", "0xBFC1B270", "0xBFC1B274", "0xBFC1B280", "0xBFC1B294", "0xBFC1B2A0", "0xBFC1B2AC", "0xBFC1B2B0", "0xBFC1B2B8", "0xBFC1B2C8", "0xBFC1B2E4", "0xBFC1B2E8", "0xBFC1B2F0", "0xBFC1B308", "0xBFC1B31C", "0xBFC1B324", "0xBFC1B328", "0xBFC1B33C", "0xBFC1B344", "0xBFC1B358", "0xBFC1B36C", "0xBFC1B378", "0xBFC1B3B4", "0xBFC1B3C8", "0xBFC1B3D0", "0xBFC1B3D4", "0xBFC1B3E8", "0xBFC1B3F0", "0xBFC1B3FC", "0xBFC1B410", "0xBFC1B428", "0xBFC1B43C", "0xBFC1B460", "0xBFC1B468", "0xBFC1B474", "0xBFC1B47C", "0xBFC1B488", "0xBFC1B494", "0xBFC1B4A4", "0xBFC1B4BC", "0xBFC1B4C4", "0xBFC1B4D0", "0xBFC1B4E8", "0xBFC1B4F4", "0xBFC1B508", "0xBFC1B528", "0xBFC1B538", "0xBFC1B54C", "0xBFC1B560", "0xBFC1B56C", "0xBFC1B58C", "0xBFC1B59C", "0xBFC1B5A4", "0xBFC1B5BC", "0xBFC1B5C0", "0xBFC1B5C8", "0xBFC1B5E0", "0xBFC1B5EC", "0xBFC1B5FC", "0xBFC1B604", "0xBFC1B610", "0xBFC1B618", "0xBFC1B624", "0xBFC1B62C", "0xBFC1B654", "0xBFC1B65C", "0xBFC1B664", "0xBFC1B670", "0xBFC1B680", "0xBFC1B688", "0xBFC1B690", "0xBFC1B698", "0xBFC1B6A4", "0xBFC1B6B4", "0xBFC1B6BC", "0xBFC1B6C8", "0xBFC1B6D0", "0xBFC1B6DC", "0xBFC1B6E0"] + }, + { + "entry_addr": "0xBFC1B6EC", + "normalized_addr": "0x1FC1B6EC", + "end_addr": "0xBFC1B780", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1AE68 -> jal at 0xBFC1B654", + "block_leaders": ["0xBFC1B6EC", "0xBFC1B704", "0xBFC1B718", "0xBFC1B738", "0xBFC1B748", "0xBFC1B764", "0xBFC1B774", "0xBFC1B778"] + }, + { + "entry_addr": "0xBFC1B784", + "normalized_addr": "0x1FC1B784", + "end_addr": "0xBFC1B7DC", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1AE68 -> jal at 0xBFC1B2E8", + "block_leaders": ["0xBFC1B784"] + }, + { + "entry_addr": "0xBFC1B7E0", + "normalized_addr": "0x1FC1B7E0", + "end_addr": "0xBFC1BD28", + "instruction_count": 339, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1B7E0", + "block_leaders": ["0xBFC1B7E0", "0xBFC1B7F8", "0xBFC1B80C", "0xBFC1B820", "0xBFC1B82C", "0xBFC1B834", "0xBFC1B848", "0xBFC1B85C", "0xBFC1B868", "0xBFC1B870", "0xBFC1B88C", "0xBFC1B8A8", "0xBFC1B8AC", "0xBFC1B8B4", "0xBFC1B8D0", "0xBFC1B8D8", "0xBFC1B8E4", "0xBFC1B8F0", "0xBFC1B900", "0xBFC1B90C", "0xBFC1B918", "0xBFC1B928", "0xBFC1B934", "0xBFC1B940", "0xBFC1B950", "0xBFC1B958", "0xBFC1B960", "0xBFC1B968", "0xBFC1B9B4", "0xBFC1B9C8", "0xBFC1B9D8", "0xBFC1B9EC", "0xBFC1BA04", "0xBFC1BA0C", "0xBFC1BA18", "0xBFC1BA20", "0xBFC1BA28", "0xBFC1BA34", "0xBFC1BA48", "0xBFC1BA4C", "0xBFC1BA58", "0xBFC1BA60", "0xBFC1BA68", "0xBFC1BA7C", "0xBFC1BA90", "0xBFC1BAE8", "0xBFC1BAF4", "0xBFC1BB0C", "0xBFC1BB10", "0xBFC1BB18", "0xBFC1BB20", "0xBFC1BB2C", "0xBFC1BB44", "0xBFC1BB5C", "0xBFC1BB60", "0xBFC1BB68", "0xBFC1BB74", "0xBFC1BB7C", "0xBFC1BB88", "0xBFC1BBA0", "0xBFC1BBB8", "0xBFC1BBC4", "0xBFC1BBD0", "0xBFC1BBE8", "0xBFC1BBF0", "0xBFC1BC0C", "0xBFC1BC10", "0xBFC1BC18", "0xBFC1BC20", "0xBFC1BC2C", "0xBFC1BC3C", "0xBFC1BC50", "0xBFC1BC60", "0xBFC1BC68", "0xBFC1BC74", "0xBFC1BC90", "0xBFC1BC98", "0xBFC1BCA4", "0xBFC1BCC0", "0xBFC1BCD8", "0xBFC1BCE8", "0xBFC1BCF4", "0xBFC1BD0C", "0xBFC1BD18", "0xBFC1BD1C", "0xBFC1BD20"] + }, + { + "entry_addr": "0xBFC1BD3C", + "normalized_addr": "0x1FC1BD3C", + "end_addr": "0xBFC1BD44", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18990 -> jal at 0xBFC18C64", + "block_leaders": ["0xBFC1BD3C"] + }, + { + "entry_addr": "0xBFC1BD58", + "normalized_addr": "0x1FC1BD58", + "end_addr": "0xBFC1BD64", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1ED90", + "block_leaders": ["0xBFC1BD58"] + }, + { + "entry_addr": "0xBFC1BD68", + "normalized_addr": "0x1FC1BD68", + "end_addr": "0xBFC1BEDC", + "instruction_count": 47, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1BD68", + "block_leaders": ["0xBFC1BD68", "0xBFC1BD80", "0xBFC1BD98", "0xBFC1BDAC", "0xBFC1BDC0", "0xBFC1BDD4", "0xBFC1BDDC", "0xBFC1BDF8", "0xBFC1BED0", "0xBFC1BED4"] + }, + { + "entry_addr": "0xBFC1BEE0", + "normalized_addr": "0x1FC1BEE0", + "end_addr": "0xBFC1BF40", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1BEE0", + "block_leaders": ["0xBFC1BEE0", "0xBFC1BEF4", "0xBFC1BF08", "0xBFC1BF1C", "0xBFC1BF2C", "0xBFC1BF34", "0xBFC1BF38"] + }, + { + "entry_addr": "0xBFC1BF44", + "normalized_addr": "0x1FC1BF44", + "end_addr": "0xBFC1C12C", + "instruction_count": 123, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1BF44", + "block_leaders": ["0xBFC1BF44", "0xBFC1BF64", "0xBFC1BF80", "0xBFC1BF90", "0xBFC1BFC8", "0xBFC1BFD4", "0xBFC1BFE4", "0xBFC1BFEC", "0xBFC1BFF8", "0xBFC1C010", "0xBFC1C018", "0xBFC1C030", "0xBFC1C03C", "0xBFC1C048", "0xBFC1C054", "0xBFC1C05C", "0xBFC1C068", "0xBFC1C070", "0xBFC1C07C", "0xBFC1C094", "0xBFC1C09C", "0xBFC1C0B0", "0xBFC1C0B8", "0xBFC1C0D0", "0xBFC1C0D8", "0xBFC1C0EC", "0xBFC1C104", "0xBFC1C10C", "0xBFC1C114", "0xBFC1C11C"] + }, + { + "entry_addr": "0xBFC1C130", + "normalized_addr": "0x1FC1C130", + "end_addr": "0xBFC1C1A0", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C130", + "block_leaders": ["0xBFC1C130", "0xBFC1C154", "0xBFC1C15C", "0xBFC1C170", "0xBFC1C174", "0xBFC1C188", "0xBFC1C18C", "0xBFC1C194"] + }, + { + "entry_addr": "0xBFC1C1A4", + "normalized_addr": "0x1FC1C1A4", + "end_addr": "0xBFC1C4BC", + "instruction_count": 199, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C130 -> jal at 0xBFC1C18C", + "block_leaders": ["0xBFC1C1A4", "0xBFC1C1C8", "0xBFC1C1D4", "0xBFC1C1E4", "0xBFC1C1EC", "0xBFC1C1F8", "0xBFC1C210", "0xBFC1C218", "0xBFC1C230", "0xBFC1C244", "0xBFC1C250", "0xBFC1C25C", "0xBFC1C264", "0xBFC1C270", "0xBFC1C27C", "0xBFC1C28C", "0xBFC1C294", "0xBFC1C29C", "0xBFC1C2A8", "0xBFC1C2CC", "0xBFC1C2D0", "0xBFC1C2D8", "0xBFC1C308", "0xBFC1C30C", "0xBFC1C31C", "0xBFC1C338", "0xBFC1C348", "0xBFC1C34C", "0xBFC1C36C", "0xBFC1C370", "0xBFC1C380", "0xBFC1C3B0", "0xBFC1C3C0", "0xBFC1C3D4", "0xBFC1C3D8", "0xBFC1C3DC", "0xBFC1C3E4", "0xBFC1C3F8", "0xBFC1C408", "0xBFC1C428", "0xBFC1C42C", "0xBFC1C438", "0xBFC1C43C", "0xBFC1C448", "0xBFC1C454", "0xBFC1C460", "0xBFC1C488", "0xBFC1C4A0", "0xBFC1C4A8", "0xBFC1C4B0"] + }, + { + "entry_addr": "0xBFC1C4C0", + "normalized_addr": "0x1FC1C4C0", + "end_addr": "0xBFC1C5B4", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C4C0", + "block_leaders": ["0xBFC1C4C0", "0xBFC1C4D8", "0xBFC1C4EC", "0xBFC1C500", "0xBFC1C508", "0xBFC1C518", "0xBFC1C520", "0xBFC1C538", "0xBFC1C540", "0xBFC1C550", "0xBFC1C558", "0xBFC1C564", "0xBFC1C578", "0xBFC1C588", "0xBFC1C58C", "0xBFC1C594", "0xBFC1C598", "0xBFC1C5A0", "0xBFC1C5A8", "0xBFC1C5AC"] + }, + { + "entry_addr": "0xBFC1C78C", + "normalized_addr": "0x1FC1C78C", + "end_addr": "0xBFC1C8E8", + "instruction_count": 88, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C78C", + "block_leaders": ["0xBFC1C78C", "0xBFC1C7A4", "0xBFC1C7B0", "0xBFC1C7C0", "0xBFC1C7C8", "0xBFC1C7DC", "0xBFC1C7F0", "0xBFC1C7FC", "0xBFC1C808", "0xBFC1C818", "0xBFC1C81C", "0xBFC1C824", "0xBFC1C830", "0xBFC1C838", "0xBFC1C840", "0xBFC1C854", "0xBFC1C868", "0xBFC1C870", "0xBFC1C874", "0xBFC1C87C", "0xBFC1C888", "0xBFC1C890", "0xBFC1C8A8", "0xBFC1C8BC", "0xBFC1C8C4", "0xBFC1C8C8", "0xBFC1C8D0", "0xBFC1C8DC", "0xBFC1C8E0"] + }, + { + "entry_addr": "0xBFC1C8EC", + "normalized_addr": "0x1FC1C8EC", + "end_addr": "0xBFC1C974", + "instruction_count": 35, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C8EC", + "block_leaders": ["0xBFC1C8EC", "0xBFC1C904", "0xBFC1C91C", "0xBFC1C934", "0xBFC1C93C", "0xBFC1C96C"] + }, + { + "entry_addr": "0xBFC1C978", + "normalized_addr": "0x1FC1C978", + "end_addr": "0xBFC1C984", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1EE14", + "block_leaders": ["0xBFC1C978"] + }, + { + "entry_addr": "0xBFC1C988", + "normalized_addr": "0x1FC1C988", + "end_addr": "0xBFC1C994", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1E95C", + "block_leaders": ["0xBFC1C988"] + }, + { + "entry_addr": "0xBFC1C998", + "normalized_addr": "0x1FC1C998", + "end_addr": "0xBFC1C9A4", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1E96C", + "block_leaders": ["0xBFC1C998"] + }, + { + "entry_addr": "0xBFC1C9A8", + "normalized_addr": "0x1FC1C9A8", + "end_addr": "0xBFC1C9B0", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DDD8 -> jal at 0xBFC1DE3C", + "block_leaders": ["0xBFC1C9A8"] + }, + { + "entry_addr": "0xBFC1C9B4", + "normalized_addr": "0x1FC1C9B4", + "end_addr": "0xBFC1CAEC", + "instruction_count": 79, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C9B4", + "block_leaders": ["0xBFC1C9B4", "0xBFC1C9C8", "0xBFC1C9DC", "0xBFC1C9F0", "0xBFC1CA00", "0xBFC1CA14", "0xBFC1CA1C", "0xBFC1CA24", "0xBFC1CA2C", "0xBFC1CA34", "0xBFC1CA38", "0xBFC1CA48", "0xBFC1CA50", "0xBFC1CA58", "0xBFC1CA5C", "0xBFC1CA6C", "0xBFC1CA74", "0xBFC1CA7C", "0xBFC1CA80", "0xBFC1CA90", "0xBFC1CA98", "0xBFC1CAA0", "0xBFC1CAA4", "0xBFC1CAB4", "0xBFC1CABC", "0xBFC1CAC4", "0xBFC1CAC8", "0xBFC1CAD8", "0xBFC1CAE0", "0xBFC1CAE4"] + }, + { + "entry_addr": "0xBFC1CAF0", + "normalized_addr": "0x1FC1CAF0", + "end_addr": "0xBFC1CBA8", + "instruction_count": 47, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1CAF0", + "block_leaders": ["0xBFC1CAF0", "0xBFC1CB08", "0xBFC1CB2C", "0xBFC1CB34", "0xBFC1CB3C", "0xBFC1CB48", "0xBFC1CB54", "0xBFC1CB5C", "0xBFC1CB68", "0xBFC1CB70", "0xBFC1CB7C", "0xBFC1CB88", "0xBFC1CB90", "0xBFC1CB9C"] + }, + { + "entry_addr": "0xBFC1CBAC", + "normalized_addr": "0x1FC1CBAC", + "end_addr": "0xBFC1CD3C", + "instruction_count": 101, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1CBAC", + "block_leaders": ["0xBFC1CBAC", "0xBFC1CBCC", "0xBFC1CBD8", "0xBFC1CBE0", "0xBFC1CBE4", "0xBFC1CBF0", "0xBFC1CBF4", "0xBFC1CC3C", "0xBFC1CC88", "0xBFC1CC90", "0xBFC1CCB0", "0xBFC1CCB8", "0xBFC1CCCC", "0xBFC1CCDC", "0xBFC1CCF0", "0xBFC1CD00", "0xBFC1CD30"] + }, + { + "entry_addr": "0xBFC1CD40", + "normalized_addr": "0x1FC1CD40", + "end_addr": "0xBFC1CD6C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1BF44 -> jal at 0xBFC1BF78", + "block_leaders": ["0xBFC1CD40", "0xBFC1CD64", "0xBFC1CD68"] + }, + { + "entry_addr": "0xBFC1CD90", + "normalized_addr": "0x1FC1CD90", + "end_addr": "0xBFC1CDD4", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1CBAC -> jal at 0xBFC1CBD0", + "block_leaders": ["0xBFC1CD90"] + }, + { + "entry_addr": "0xBFC1CDD8", + "normalized_addr": "0x1FC1CDD8", + "end_addr": "0xBFC1D97C", + "instruction_count": 108, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1CDD8", + "block_leaders": ["0xBFC1CDD8", "0xBFC1CDF0", "0xBFC1CE04", "0xBFC1CE24", "0xBFC1CE3C", "0xBFC1D850", "0xBFC1D86C", "0xBFC1D874", "0xBFC1D87C", "0xBFC1D8A8", "0xBFC1D8B0", "0xBFC1D8C4", "0xBFC1D8CC", "0xBFC1D8D4", "0xBFC1D8DC", "0xBFC1D8EC", "0xBFC1D970"] + }, + { + "entry_addr": "0xBFC1D980", + "normalized_addr": "0x1FC1D980", + "end_addr": "0xBFC1D9C0", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1F178", + "block_leaders": ["0xBFC1D980"] + }, + { + "entry_addr": "0xBFC1D9C4", + "normalized_addr": "0x1FC1D9C4", + "end_addr": "0xBFC1DBF0", + "instruction_count": 140, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18990 -> jal at 0xBFC18A0C", + "block_leaders": ["0xBFC1D9C4", "0xBFC1D9F8", "0xBFC1DA00", "0xBFC1DA08", "0xBFC1DA10", "0xBFC1DA18", "0xBFC1DA30", "0xBFC1DA38", "0xBFC1DA40", "0xBFC1DA60", "0xBFC1DA68", "0xBFC1DA70", "0xBFC1DA78", "0xBFC1DA90", "0xBFC1DA98", "0xBFC1DAA0", "0xBFC1DAAC", "0xBFC1DAB4", "0xBFC1DAB8", "0xBFC1DAC4", "0xBFC1DAD8", "0xBFC1DAF4", "0xBFC1DAFC", "0xBFC1DB04", "0xBFC1DB0C", "0xBFC1DB20", "0xBFC1DB30", "0xBFC1DB48", "0xBFC1DB60", "0xBFC1DB74", "0xBFC1DB78", "0xBFC1DB90", "0xBFC1DB9C", "0xBFC1DBAC", "0xBFC1DBB0", "0xBFC1DBB8", "0xBFC1DBC4", "0xBFC1DBD0", "0xBFC1DBE0", "0xBFC1DBE4"] + }, + { + "entry_addr": "0xBFC1DBF4", + "normalized_addr": "0x1FC1DBF4", + "end_addr": "0xBFC1DDD4", + "instruction_count": 121, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DBF4", + "block_leaders": ["0xBFC1DBF4", "0xBFC1DC04", "0xBFC1DC10", "0xBFC1DC54", "0xBFC1DCA4", "0xBFC1DCBC", "0xBFC1DCDC", "0xBFC1DCFC", "0xBFC1DD1C", "0xBFC1DD3C", "0xBFC1DD5C", "0xBFC1DD70", "0xBFC1DD80", "0xBFC1DD90", "0xBFC1DDA0", "0xBFC1DDB0", "0xBFC1DDC0", "0xBFC1DDC8"] + }, + { + "entry_addr": "0xBFC1DDD8", + "normalized_addr": "0x1FC1DDD8", + "end_addr": "0xBFC1DF4C", + "instruction_count": 94, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DDD8", + "block_leaders": ["0xBFC1DDD8", "0xBFC1DDF4", "0xBFC1DE44", "0xBFC1DE78", "0xBFC1DE90", "0xBFC1DEAC", "0xBFC1DEC4", "0xBFC1DED8", "0xBFC1DEF0"] + }, + { + "entry_addr": "0xBFC1DF50", + "normalized_addr": "0x1FC1DF50", + "end_addr": "0xBFC1E0C0", + "instruction_count": 93, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DF50", + "block_leaders": ["0xBFC1DF50", "0xBFC1DF94", "0xBFC1DFB0", "0xBFC1DFD0", "0xBFC1DFD8", "0xBFC1DFEC", "0xBFC1DFF4", "0xBFC1E024", "0xBFC1E03C", "0xBFC1E044", "0xBFC1E058", "0xBFC1E070", "0xBFC1E078", "0xBFC1E07C", "0xBFC1E084", "0xBFC1E09C", "0xBFC1E0A4", "0xBFC1E0A8", "0xBFC1E0B4"] + }, + { + "entry_addr": "0xBFC1E0C4", + "normalized_addr": "0x1FC1E0C4", + "end_addr": "0xBFC1E108", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E0C4", + "block_leaders": ["0xBFC1E0C4", "0xBFC1E0DC", "0xBFC1E0FC"] + }, + { + "entry_addr": "0xBFC1E10C", + "normalized_addr": "0x1FC1E10C", + "end_addr": "0xBFC1E1C8", + "instruction_count": 48, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E10C", + "block_leaders": ["0xBFC1E10C", "0xBFC1E118", "0xBFC1E130", "0xBFC1E13C", "0xBFC1E160", "0xBFC1E18C", "0xBFC1E194", "0xBFC1E19C", "0xBFC1E1B0", "0xBFC1E1B4"] + }, + { + "entry_addr": "0xBFC1E1CC", + "normalized_addr": "0x1FC1E1CC", + "end_addr": "0xBFC1E3C8", + "instruction_count": 19, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1E59C", + "block_leaders": ["0xBFC1E1CC", "0xBFC1E1EC", "0xBFC1E3BC"] + }, + { + "entry_addr": "0xBFC1E3CC", + "normalized_addr": "0x1FC1E3CC", + "end_addr": "0xBFC1F6A8", + "instruction_count": 1125, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC1E3CC", + "block_leaders": ["0xBFC1E3CC", "0xBFC1E3E4", "0xBFC1E3F0", "0xBFC1E410", "0xBFC1E578", "0xBFC1E58C", "0xBFC1E5A4", "0xBFC1E5B8", "0xBFC1E5C4", "0xBFC1E5D0", "0xBFC1E5E4", "0xBFC1E5EC", "0xBFC1E5FC", "0xBFC1E624", "0xBFC1E630", "0xBFC1E640", "0xBFC1E64C", "0xBFC1E654", "0xBFC1E668", "0xBFC1E67C", "0xBFC1E688", "0xBFC1E694", "0xBFC1E6A4", "0xBFC1E6BC", "0xBFC1E6D4", "0xBFC1E6E4", "0xBFC1E6FC", "0xBFC1E708", "0xBFC1E718", "0xBFC1E730", "0xBFC1E738", "0xBFC1E74C", "0xBFC1E77C", "0xBFC1E790", "0xBFC1E798", "0xBFC1E7A0", "0xBFC1E7A8", "0xBFC1E7B0", "0xBFC1E7B8", "0xBFC1E7C4", "0xBFC1E7D8", "0xBFC1E7E0", "0xBFC1E800", "0xBFC1E80C", "0xBFC1E824", "0xBFC1E840", "0xBFC1E84C", "0xBFC1E864", "0xBFC1E86C", "0xBFC1E874", "0xBFC1E880", "0xBFC1E89C", "0xBFC1E8AC", "0xBFC1E8CC", "0xBFC1E8DC", "0xBFC1E8E8", "0xBFC1E8F0", "0xBFC1E8FC", "0xBFC1E910", "0xBFC1E918", "0xBFC1E92C", "0xBFC1E934", "0xBFC1E954", "0xBFC1E95C", "0xBFC1E964", "0xBFC1E96C", "0xBFC1E974", "0xBFC1E98C", "0xBFC1E9A0", "0xBFC1E9B4", "0xBFC1E9C8", "0xBFC1E9D0", "0xBFC1E9D8", "0xBFC1E9F8", "0xBFC1EA00", "0xBFC1EA08", "0xBFC1EA10", "0xBFC1EA18", "0xBFC1EA20", "0xBFC1EA2C", "0xBFC1EA34", "0xBFC1EA4C", "0xBFC1EA60", "0xBFC1EA78", "0xBFC1EA84", "0xBFC1EAA0", "0xBFC1EAA8", "0xBFC1EAB0", "0xBFC1EAC0", "0xBFC1EAC8", "0xBFC1EAD0", "0xBFC1EAE4", "0xBFC1EAEC", "0xBFC1EAF4", "0xBFC1EAFC", "0xBFC1EB10", "0xBFC1EB1C", "0xBFC1EB24", "0xBFC1EB3C", "0xBFC1EB50", "0xBFC1EB68", "0xBFC1EB74", "0xBFC1EB94", "0xBFC1EB9C", "0xBFC1EBA4", "0xBFC1EBAC", "0xBFC1EBB8", "0xBFC1EBC0", "0xBFC1EBC8", "0xBFC1EBDC", "0xBFC1EBF0", "0xBFC1EC00", "0xBFC1EC1C", "0xBFC1EC24", "0xBFC1EC2C", "0xBFC1EC4C", "0xBFC1EC54", "0xBFC1EC74", "0xBFC1EC7C", "0xBFC1ECA0", "0xBFC1ECA8", "0xBFC1ECB0", "0xBFC1ECD0", "0xBFC1ECD8", "0xBFC1ECE0", "0xBFC1ED00", "0xBFC1ED10", "0xBFC1ED1C", "0xBFC1ED34", "0xBFC1ED40", "0xBFC1ED48", "0xBFC1ED50", "0xBFC1ED64", "0xBFC1ED78", "0xBFC1ED80", "0xBFC1ED88", "0xBFC1ED90", "0xBFC1ED98", "0xBFC1EDA0", "0xBFC1EDB4", "0xBFC1EDD4", "0xBFC1EDE4", "0xBFC1EDF0", "0xBFC1EE08", "0xBFC1EE14", "0xBFC1EE1C", "0xBFC1EE24", "0xBFC1EE2C", "0xBFC1EE34", "0xBFC1EE48", "0xBFC1EE5C", "0xBFC1EE70", "0xBFC1EE78", "0xBFC1EE80", "0xBFC1EEA0", "0xBFC1EEA8", "0xBFC1EEB0", "0xBFC1EEB8", "0xBFC1EEC0", "0xBFC1EED4", "0xBFC1EEE0", "0xBFC1EEEC", "0xBFC1EF00", "0xBFC1EF28", "0xBFC1EF34", "0xBFC1EF38", "0xBFC1EF40", "0xBFC1EF4C", "0xBFC1EF50", "0xBFC1EF5C", "0xBFC1EF84", "0xBFC1EF8C", "0xBFC1EF90", "0xBFC1EF94", "0xBFC1EF9C", "0xBFC1EFA4", "0xBFC1EFC4", "0xBFC1EFEC", "0xBFC1EFF4", "0xBFC1EFFC", "0xBFC1F01C", "0xBFC1F024", "0xBFC1F038", "0xBFC1F050", "0xBFC1F058", "0xBFC1F05C", "0xBFC1F064", "0xBFC1F078", "0xBFC1F08C", "0xBFC1F0A0", "0xBFC1F0A8", "0xBFC1F0B8", "0xBFC1F0C0", "0xBFC1F0C8", "0xBFC1F0E0", "0xBFC1F0E8", "0xBFC1F108", "0xBFC1F124", "0xBFC1F128", "0xBFC1F130", "0xBFC1F138", "0xBFC1F148", "0xBFC1F154", "0xBFC1F160", "0xBFC1F178", "0xBFC1F180", "0xBFC1F1A8", "0xBFC1F1B4", "0xBFC1F1C8", "0xBFC1F1D4", "0xBFC1F1E8", "0xBFC1F1F4", "0xBFC1F208", "0xBFC1F214", "0xBFC1F21C", "0xBFC1F224", "0xBFC1F230", "0xBFC1F23C", "0xBFC1F250", "0xBFC1F268", "0xBFC1F278", "0xBFC1F284", "0xBFC1F290", "0xBFC1F2A0", "0xBFC1F2A8", "0xBFC1F2B8", "0xBFC1F2BC", "0xBFC1F2C4", "0xBFC1F2D0", "0xBFC1F2D8", "0xBFC1F2F8", "0xBFC1F308", "0xBFC1F31C", "0xBFC1F32C", "0xBFC1F340", "0xBFC1F348", "0xBFC1F360", "0xBFC1F364", "0xBFC1F370", "0xBFC1F37C", "0xBFC1F388", "0xBFC1F394", "0xBFC1F39C", "0xBFC1F3A8", "0xBFC1F3AC", "0xBFC1F3B4", "0xBFC1F3C0", "0xBFC1F3D4", "0xBFC1F3E4", "0xBFC1F3F8", "0xBFC1F408", "0xBFC1F41C", "0xBFC1F430", "0xBFC1F440", "0xBFC1F454", "0xBFC1F468", "0xBFC1F478", "0xBFC1F48C", "0xBFC1F498", "0xBFC1F4A8", "0xBFC1F4B4", "0xBFC1F4B8", "0xBFC1F4CC", "0xBFC1F4E0", "0xBFC1F4F8", "0xBFC1F50C", "0xBFC1F518", "0xBFC1F524", "0xBFC1F538", "0xBFC1F540", "0xBFC1F550", "0xBFC1F578", "0xBFC1F584", "0xBFC1F59C", "0xBFC1F5B0", "0xBFC1F5CC", "0xBFC1F5EC", "0xBFC1F5F8", "0xBFC1F600", "0xBFC1F608", "0xBFC1F61C", "0xBFC1F624", "0xBFC1F638", "0xBFC1F640", "0xBFC1F648", "0xBFC1F654", "0xBFC1F668", "0xBFC1F670", "0xBFC1F678", "0xBFC1F680", "0xBFC1F694", "0xBFC1F69C", "0xBFC1F6A0"] + }, + { + "entry_addr": "0xBFC1F6AC", + "normalized_addr": "0x1FC1F6AC", + "end_addr": "0xBFC1F774", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1F6AC", + "block_leaders": ["0xBFC1F6AC", "0xBFC1F6C8", "0xBFC1F704", "0xBFC1F73C", "0xBFC1F754"] + }, + { + "entry_addr": "0xBFC1F778", + "normalized_addr": "0x1FC1F778", + "end_addr": "0xBFC1F97C", + "instruction_count": 130, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254 -> jal at 0xBFC18374", + "block_leaders": ["0xBFC1F778", "0xBFC1F7B4", "0xBFC1F7D4", "0xBFC1F7DC", "0xBFC1F7E4", "0xBFC1F7F8", "0xBFC1F804", "0xBFC1F824", "0xBFC1F84C", "0xBFC1F858", "0xBFC1F860", "0xBFC1F868", "0xBFC1F86C", "0xBFC1F878", "0xBFC1F8A8", "0xBFC1F8D4", "0xBFC1F8DC", "0xBFC1F8E4", "0xBFC1F8F8", "0xBFC1F904", "0xBFC1F924", "0xBFC1F92C", "0xBFC1F934", "0xBFC1F948", "0xBFC1F954", "0xBFC1F970"] + }, + { + "entry_addr": "0xBFC1F980", + "normalized_addr": "0x1FC1F980", + "end_addr": "0xBFC1FCC4", + "instruction_count": 210, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1F980", + "block_leaders": ["0xBFC1F980", "0xBFC1F998", "0xBFC1F9BC", "0xBFC1F9C4", "0xBFC1F9D0", "0xBFC1F9D8", "0xBFC1F9E0", "0xBFC1F9F4", "0xBFC1F9F8", "0xBFC1FA0C", "0xBFC1FA14", "0xBFC1FA1C", "0xBFC1FA24", "0xBFC1FA2C", "0xBFC1FA34", "0xBFC1FA44", "0xBFC1FA50", "0xBFC1FA54", "0xBFC1FA78", "0xBFC1FA80", "0xBFC1FA88", "0xBFC1FA94", "0xBFC1FAA8", "0xBFC1FABC", "0xBFC1FADC", "0xBFC1FAE8", "0xBFC1FAFC", "0xBFC1FB10", "0xBFC1FB18", "0xBFC1FB20", "0xBFC1FB40", "0xBFC1FB48", "0xBFC1FB4C", "0xBFC1FB54", "0xBFC1FB5C", "0xBFC1FB80", "0xBFC1FB84", "0xBFC1FB8C", "0xBFC1FB94", "0xBFC1FB9C", "0xBFC1FBA4", "0xBFC1FBAC", "0xBFC1FBB4", "0xBFC1FBB8", "0xBFC1FBD8", "0xBFC1FBE0", "0xBFC1FBE8", "0xBFC1FBFC", "0xBFC1FC04", "0xBFC1FC18", "0xBFC1FC20", "0xBFC1FC28", "0xBFC1FC30", "0xBFC1FC38", "0xBFC1FC40", "0xBFC1FC50", "0xBFC1FC5C", "0xBFC1FC60", "0xBFC1FC84", "0xBFC1FC8C", "0xBFC1FC94", "0xBFC1FCB8", "0xBFC1FCBC"] + }, + { + "entry_addr": "0xBFC1FCC8", + "normalized_addr": "0x1FC1FCC8", + "end_addr": "0xBFC1FFA4", + "instruction_count": 184, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C8EC -> jal at 0xBFC1C92C", + "block_leaders": ["0xBFC1FCC8", "0xBFC1FD04", "0xBFC1FD0C", "0xBFC1FD14", "0xBFC1FD1C", "0xBFC1FD24", "0xBFC1FD2C", "0xBFC1FD34", "0xBFC1FD3C", "0xBFC1FD44", "0xBFC1FD4C", "0xBFC1FD54", "0xBFC1FD60", "0xBFC1FD68", "0xBFC1FD7C", "0xBFC1FD88", "0xBFC1FD94", "0xBFC1FDA0", "0xBFC1FDA8", "0xBFC1FDB0", "0xBFC1FDC4", "0xBFC1FDCC", "0xBFC1FDD4", "0xBFC1FDE4", "0xBFC1FDFC", "0xBFC1FE08", "0xBFC1FE14", "0xBFC1FE20", "0xBFC1FE28", "0xBFC1FE30", "0xBFC1FE38", "0xBFC1FE40", "0xBFC1FE48", "0xBFC1FE5C", "0xBFC1FE7C", "0xBFC1FE80", "0xBFC1FE88", "0xBFC1FE94", "0xBFC1FEAC", "0xBFC1FEB4", "0xBFC1FEBC", "0xBFC1FED0", "0xBFC1FED8", "0xBFC1FEE0", "0xBFC1FF00", "0xBFC1FF10", "0xBFC1FF18", "0xBFC1FF24", "0xBFC1FF28", "0xBFC1FF38", "0xBFC1FF50", "0xBFC1FF58", "0xBFC1FF5C", "0xBFC1FF60", "0xBFC1FF84"] + }, + { + "entry_addr": "0xBFC1FFA8", + "normalized_addr": "0x1FC1FFA8", + "end_addr": "0xBFC20334", + "instruction_count": 228, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1FFA8", + "block_leaders": ["0xBFC1FFA8", "0xBFC1FFC4", "0xBFC1FFD0", "0xBFC1FFE4", "0xBFC1FFF0", "0xBFC20014", "0xBFC2001C", "0xBFC20028", "0xBFC20034", "0xBFC2003C", "0xBFC20048", "0xBFC2005C", "0xBFC20064", "0xBFC20084", "0xBFC2008C", "0xBFC20094", "0xBFC200B0", "0xBFC200C0", "0xBFC200C8", "0xBFC200DC", "0xBFC200FC", "0xBFC20104", "0xBFC20110", "0xBFC20124", "0xBFC2012C", "0xBFC20140", "0xBFC20150", "0xBFC2016C", "0xBFC20174", "0xBFC20188", "0xBFC201A8", "0xBFC201BC", "0xBFC201C4", "0xBFC201D8", "0xBFC201E8", "0xBFC20204", "0xBFC2020C", "0xBFC2022C", "0xBFC20230", "0xBFC20238", "0xBFC20250", "0xBFC20260", "0xBFC20268", "0xBFC2027C", "0xBFC2029C", "0xBFC202B0", "0xBFC202BC", "0xBFC202C0", "0xBFC202C8", "0xBFC202D0"] + }, + { + "entry_addr": "0xBFC20338", + "normalized_addr": "0x1FC20338", + "end_addr": "0xBFC20698", + "instruction_count": 217, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20338", + "block_leaders": ["0xBFC20338", "0xBFC20348", "0xBFC20350", "0xBFC20364", "0xBFC20378", "0xBFC20380", "0xBFC20394", "0xBFC2039C", "0xBFC203A8", "0xBFC203BC", "0xBFC203C4", "0xBFC203D0", "0xBFC203D8", "0xBFC203E4", "0xBFC203F0", "0xBFC20404", "0xBFC20410", "0xBFC2041C", "0xBFC20428", "0xBFC20430", "0xBFC2043C", "0xBFC20450", "0xBFC2045C", "0xBFC20464", "0xBFC2046C", "0xBFC2048C", "0xBFC20490", "0xBFC2049C", "0xBFC204A4", "0xBFC204AC", "0xBFC204C0", "0xBFC204D4", "0xBFC204DC", "0xBFC204FC", "0xBFC20510", "0xBFC20528", "0xBFC2053C", "0xBFC20550", "0xBFC20558", "0xBFC20560", "0xBFC20580", "0xBFC20584", "0xBFC20590", "0xBFC205A4", "0xBFC205B8", "0xBFC205C0", "0xBFC205CC", "0xBFC205E0", "0xBFC205E8", "0xBFC205F0", "0xBFC205F8", "0xBFC20600", "0xBFC20608", "0xBFC20610", "0xBFC20618", "0xBFC2062C", "0xBFC20634", "0xBFC2063C", "0xBFC20650", "0xBFC20670"] + }, + { + "entry_addr": "0xBFC2069C", + "normalized_addr": "0x1FC2069C", + "end_addr": "0xBFC20B5C", + "instruction_count": 305, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2069C", + "block_leaders": ["0xBFC2069C", "0xBFC206AC", "0xBFC206B4", "0xBFC206C8", "0xBFC206D0", "0xBFC206E8", "0xBFC206F0", "0xBFC206FC", "0xBFC20704", "0xBFC20718", "0xBFC20728", "0xBFC20730", "0xBFC2073C", "0xBFC20744", "0xBFC20758", "0xBFC20764", "0xBFC20770", "0xBFC2077C", "0xBFC20784", "0xBFC20790", "0xBFC20798", "0xBFC207AC", "0xBFC207C0", "0xBFC207C8", "0xBFC207D0", "0xBFC207D8", "0xBFC207EC", "0xBFC207F8", "0xBFC20804", "0xBFC2081C", "0xBFC20844", "0xBFC20854", "0xBFC20858", "0xBFC20860", "0xBFC2086C", "0xBFC20874", "0xBFC20878", "0xBFC20884", "0xBFC208AC", "0xBFC208B4", "0xBFC208B8", "0xBFC208BC", "0xBFC208DC", "0xBFC20908", "0xBFC20918", "0xBFC20920", "0xBFC20928", "0xBFC20930", "0xBFC20934", "0xBFC2093C", "0xBFC20944", "0xBFC2094C", "0xBFC2096C", "0xBFC20974", "0xBFC2097C", "0xBFC20990", "0xBFC209B0", "0xBFC209D0", "0xBFC20A04", "0xBFC20A1C", "0xBFC20A24", "0xBFC20A28", "0xBFC20A30", "0xBFC20A38", "0xBFC20A40", "0xBFC20A60", "0xBFC20A68", "0xBFC20A70", "0xBFC20A84", "0xBFC20A9C", "0xBFC20AD0", "0xBFC20AE8", "0xBFC20AF0", "0xBFC20AF4", "0xBFC20AFC", "0xBFC20B04", "0xBFC20B0C", "0xBFC20B14", "0xBFC20B18", "0xBFC20B20", "0xBFC20B28", "0xBFC20B30", "0xBFC20B50"] + }, + { + "entry_addr": "0xBFC20B60", + "normalized_addr": "0x1FC20B60", + "end_addr": "0xBFC20B98", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C9B4 -> jal at 0xBFC1CAB4", + "block_leaders": ["0xBFC20B60", "0xBFC20B74", "0xBFC20B7C", "0xBFC20B94"] + }, + { + "entry_addr": "0xBFC20B9C", + "normalized_addr": "0x1FC20B9C", + "end_addr": "0xBFC20BE0", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1C9B4 -> jal at 0xBFC1CAD8", + "block_leaders": ["0xBFC20B9C", "0xBFC20BB0", "0xBFC20BB8", "0xBFC20BDC"] + }, + { + "entry_addr": "0xBFC20BE4", + "normalized_addr": "0x1FC20BE4", + "end_addr": "0xBFC20C60", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20BE4", + "block_leaders": ["0xBFC20BE4", "0xBFC20BFC", "0xBFC20C08", "0xBFC20C18", "0xBFC20C20", "0xBFC20C2C", "0xBFC20C34", "0xBFC20C3C", "0xBFC20C44", "0xBFC20C50", "0xBFC20C54"] + }, + { + "entry_addr": "0xBFC20C64", + "normalized_addr": "0x1FC20C64", + "end_addr": "0xBFC20CE0", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20C64", + "block_leaders": ["0xBFC20C64", "0xBFC20C80", "0xBFC20C8C", "0xBFC20CAC", "0xBFC20CB4", "0xBFC20CB8", "0xBFC20CC0", "0xBFC20CC8", "0xBFC20CD0", "0xBFC20CD4"] + }, + { + "entry_addr": "0xBFC20CE4", + "normalized_addr": "0x1FC20CE4", + "end_addr": "0xBFC20D48", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20CE4", + "block_leaders": ["0xBFC20CE4", "0xBFC20D00", "0xBFC20D0C", "0xBFC20D14", "0xBFC20D1C", "0xBFC20D20", "0xBFC20D28", "0xBFC20D30", "0xBFC20D38", "0xBFC20D3C"] + }, + { + "entry_addr": "0xBFC20D4C", + "normalized_addr": "0x1FC20D4C", + "end_addr": "0xBFC20DB0", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20D4C", + "block_leaders": ["0xBFC20D4C", "0xBFC20D68", "0xBFC20D74", "0xBFC20D7C", "0xBFC20D84", "0xBFC20D88", "0xBFC20D90", "0xBFC20D98", "0xBFC20DA0", "0xBFC20DA4"] + }, + { + "entry_addr": "0xBFC20DB4", + "normalized_addr": "0x1FC20DB4", + "end_addr": "0xBFC20E0C", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20DB4", + "block_leaders": ["0xBFC20DB4", "0xBFC20DC8", "0xBFC20DD4", "0xBFC20DDC", "0xBFC20DE4", "0xBFC20DE8", "0xBFC20DF0", "0xBFC20DF8", "0xBFC20E00", "0xBFC20E04"] + }, + { + "entry_addr": "0xBFC20E10", + "normalized_addr": "0x1FC20E10", + "end_addr": "0xBFC20E68", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20E10", + "block_leaders": ["0xBFC20E10", "0xBFC20E24", "0xBFC20E30", "0xBFC20E38", "0xBFC20E40", "0xBFC20E44", "0xBFC20E4C", "0xBFC20E54", "0xBFC20E5C", "0xBFC20E60"] + }, + { + "entry_addr": "0xBFC20E6C", + "normalized_addr": "0x1FC20E6C", + "end_addr": "0xBFC20EC4", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20E6C", + "block_leaders": ["0xBFC20E6C", "0xBFC20E80", "0xBFC20E8C", "0xBFC20E94", "0xBFC20E9C", "0xBFC20EA0", "0xBFC20EA8", "0xBFC20EB0", "0xBFC20EB8", "0xBFC20EBC"] + }, + { + "entry_addr": "0xBFC20EC8", + "normalized_addr": "0x1FC20EC8", + "end_addr": "0xBFC20F20", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20EC8", + "block_leaders": ["0xBFC20EC8", "0xBFC20EDC", "0xBFC20EE8", "0xBFC20EF0", "0xBFC20EF8", "0xBFC20EFC", "0xBFC20F04", "0xBFC20F0C", "0xBFC20F14", "0xBFC20F18"] + }, + { + "entry_addr": "0xBFC20F24", + "normalized_addr": "0x1FC20F24", + "end_addr": "0xBFC20F88", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20F24", + "block_leaders": ["0xBFC20F24", "0xBFC20F40", "0xBFC20F4C", "0xBFC20F54", "0xBFC20F5C", "0xBFC20F60", "0xBFC20F68", "0xBFC20F70", "0xBFC20F78", "0xBFC20F7C"] + }, + { + "entry_addr": "0xBFC20F8C", + "normalized_addr": "0x1FC20F8C", + "end_addr": "0xBFC20FE4", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20F8C", + "block_leaders": ["0xBFC20F8C", "0xBFC20FA0", "0xBFC20FAC", "0xBFC20FB4", "0xBFC20FBC", "0xBFC20FC0", "0xBFC20FC8", "0xBFC20FD0", "0xBFC20FD8", "0xBFC20FDC"] + }, + { + "entry_addr": "0xBFC20FE8", + "normalized_addr": "0x1FC20FE8", + "end_addr": "0xBFC21040", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC20FE8", + "block_leaders": ["0xBFC20FE8", "0xBFC20FFC", "0xBFC21008", "0xBFC21010", "0xBFC21018", "0xBFC2101C", "0xBFC21024", "0xBFC2102C", "0xBFC21034", "0xBFC21038"] + }, + { + "entry_addr": "0xBFC21044", + "normalized_addr": "0x1FC21044", + "end_addr": "0xBFC210BC", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21044", + "block_leaders": ["0xBFC21044", "0xBFC21060", "0xBFC2106C", "0xBFC21074", "0xBFC2107C", "0xBFC21088", "0xBFC21090", "0xBFC21098", "0xBFC210A0", "0xBFC210AC", "0xBFC210B0"] + }, + { + "entry_addr": "0xBFC210C0", + "normalized_addr": "0x1FC210C0", + "end_addr": "0xBFC21124", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC210C0", + "block_leaders": ["0xBFC210C0", "0xBFC210DC", "0xBFC210E8", "0xBFC210F0", "0xBFC210F8", "0xBFC210FC", "0xBFC21104", "0xBFC2110C", "0xBFC21114", "0xBFC21118"] + }, + { + "entry_addr": "0xBFC21128", + "normalized_addr": "0x1FC21128", + "end_addr": "0xBFC21180", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21128", + "block_leaders": ["0xBFC21128", "0xBFC2113C", "0xBFC21148", "0xBFC21150", "0xBFC21158", "0xBFC2115C", "0xBFC21164", "0xBFC2116C", "0xBFC21174", "0xBFC21178"] + }, + { + "entry_addr": "0xBFC21184", + "normalized_addr": "0x1FC21184", + "end_addr": "0xBFC211FC", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21184", + "block_leaders": ["0xBFC21184", "0xBFC211A8", "0xBFC211B4", "0xBFC211C0", "0xBFC211C8", "0xBFC211CC", "0xBFC211D4", "0xBFC211E0", "0xBFC211E8", "0xBFC211EC"] + }, + { + "entry_addr": "0xBFC21200", + "normalized_addr": "0x1FC21200", + "end_addr": "0xBFC21258", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21200", + "block_leaders": ["0xBFC21200", "0xBFC21224", "0xBFC21228", "0xBFC21230", "0xBFC2123C", "0xBFC21244", "0xBFC21248"] + }, + { + "entry_addr": "0xBFC2125C", + "normalized_addr": "0x1FC2125C", + "end_addr": "0xBFC212C0", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2125C", + "block_leaders": ["0xBFC2125C", "0xBFC21278", "0xBFC21284", "0xBFC2128C", "0xBFC21294", "0xBFC21298", "0xBFC212A0", "0xBFC212A8", "0xBFC212B0", "0xBFC212B4"] + }, + { + "entry_addr": "0xBFC212C4", + "normalized_addr": "0x1FC212C4", + "end_addr": "0xBFC2131C", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC212C4", + "block_leaders": ["0xBFC212C4", "0xBFC212D8", "0xBFC212E4", "0xBFC212EC", "0xBFC212F4", "0xBFC212F8", "0xBFC21300", "0xBFC21308", "0xBFC21310", "0xBFC21314"] + }, + { + "entry_addr": "0xBFC21320", + "normalized_addr": "0x1FC21320", + "end_addr": "0xBFC213A0", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21320", + "block_leaders": ["0xBFC21320", "0xBFC2133C", "0xBFC21348", "0xBFC21364", "0xBFC2136C", "0xBFC21370", "0xBFC21378", "0xBFC21384", "0xBFC2138C", "0xBFC21390"] + }, + { + "entry_addr": "0xBFC213A4", + "normalized_addr": "0x1FC213A4", + "end_addr": "0xBFC213E4", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC213A4", + "block_leaders": ["0xBFC213A4", "0xBFC213BC", "0xBFC213C8"] + }, + { + "entry_addr": "0xBFC213E8", + "normalized_addr": "0x1FC213E8", + "end_addr": "0xBFC213F0", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC213A4 -> jal at 0xBFC213B4", + "block_leaders": ["0xBFC213E8"] + }, + { + "entry_addr": "0xBFC213F4", + "normalized_addr": "0x1FC213F4", + "end_addr": "0xBFC213F8", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC228D8 -> jal at 0xBFC229D0", + "block_leaders": ["0xBFC213F4"] + }, + { + "entry_addr": "0xBFC213FC", + "normalized_addr": "0x1FC213FC", + "end_addr": "0xBFC214A0", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC213FC", + "block_leaders": ["0xBFC213FC", "0xBFC21428", "0xBFC21430", "0xBFC21438", "0xBFC2144C", "0xBFC21460", "0xBFC21468", "0xBFC2146C", "0xBFC21474", "0xBFC21488", "0xBFC2148C"] + }, + { + "entry_addr": "0xBFC214B0", + "normalized_addr": "0x1FC214B0", + "end_addr": "0xBFC218C8", + "instruction_count": 263, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC214B0", + "block_leaders": ["0xBFC214B0", "0xBFC214CC", "0xBFC214E8", "0xBFC214F0", "0xBFC21504", "0xBFC2150C", "0xBFC21520", "0xBFC21534", "0xBFC2153C", "0xBFC21544", "0xBFC21554", "0xBFC21564", "0xBFC21578", "0xBFC21584", "0xBFC21598", "0xBFC215F8", "0xBFC21608", "0xBFC21610", "0xBFC21628", "0xBFC2163C", "0xBFC21648", "0xBFC21658", "0xBFC21660", "0xBFC21668", "0xBFC21674", "0xBFC2167C", "0xBFC21684", "0xBFC2168C", "0xBFC216A0", "0xBFC216B4", "0xBFC216BC", "0xBFC216C4", "0xBFC216D0", "0xBFC216D8", "0xBFC216E4", "0xBFC216EC", "0xBFC216F8", "0xBFC21700", "0xBFC2170C", "0xBFC21714", "0xBFC21720", "0xBFC21748", "0xBFC21750", "0xBFC2175C", "0xBFC21764", "0xBFC21770", "0xBFC21778", "0xBFC21780", "0xBFC21788", "0xBFC21794", "0xBFC2179C", "0xBFC217A8", "0xBFC217B0", "0xBFC217C0", "0xBFC217C8", "0xBFC217D4", "0xBFC217DC", "0xBFC217E8", "0xBFC217F0", "0xBFC21800", "0xBFC21808", "0xBFC21814", "0xBFC2181C", "0xBFC21828", "0xBFC21830", "0xBFC21840", "0xBFC21854", "0xBFC2185C", "0xBFC21860", "0xBFC21864", "0xBFC21880", "0xBFC21888", "0xBFC21898", "0xBFC218BC", "0xBFC218C0"] + }, + { + "entry_addr": "0xBFC218CC", + "normalized_addr": "0x1FC218CC", + "end_addr": "0xBFC21938", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC218CC", + "block_leaders": ["0xBFC218CC", "0xBFC218E0", "0xBFC218F4", "0xBFC218FC", "0xBFC21908", "0xBFC21910", "0xBFC21914", "0xBFC21924", "0xBFC2192C", "0xBFC21930"] + }, + { + "entry_addr": "0xBFC2193C", + "normalized_addr": "0x1FC2193C", + "end_addr": "0xBFC21A98", + "instruction_count": 88, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2193C", + "block_leaders": ["0xBFC2193C", "0xBFC2195C", "0xBFC2196C", "0xBFC21974", "0xBFC21984", "0xBFC21988", "0xBFC21990", "0xBFC2199C", "0xBFC21A1C", "0xBFC21A24", "0xBFC21A38", "0xBFC21A3C", "0xBFC21A54", "0xBFC21A5C", "0xBFC21A68", "0xBFC21A78"] + }, + { + "entry_addr": "0xBFC21A9C", + "normalized_addr": "0x1FC21A9C", + "end_addr": "0xBFC22160", + "instruction_count": 434, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21A9C", + "block_leaders": ["0xBFC21A9C", "0xBFC21AB0", "0xBFC21ADC", "0xBFC21AF0", "0xBFC21AF8", "0xBFC21B04", "0xBFC21B10", "0xBFC21B28", "0xBFC21B3C", "0xBFC21B44", "0xBFC21B4C", "0xBFC21B5C", "0xBFC21B6C", "0xBFC21B78", "0xBFC21B7C", "0xBFC21BA4", "0xBFC21BAC", "0xBFC21BBC", "0xBFC21BC8", "0xBFC21BD8", "0xBFC21BE0", "0xBFC21C38", "0xBFC21C6C", "0xBFC21C78", "0xBFC21C90", "0xBFC21D0C", "0xBFC21D18", "0xBFC21D30", "0xBFC21D40", "0xBFC21D64", "0xBFC21D88", "0xBFC21D9C", "0xBFC21DA4", "0xBFC21DBC", "0xBFC21E38", "0xBFC21E44", "0xBFC21E5C", "0xBFC21E6C", "0xBFC21E90", "0xBFC21EB4", "0xBFC21EB8", "0xBFC21F10", "0xBFC21F18", "0xBFC21F2C", "0xBFC21F6C", "0xBFC21F78", "0xBFC21F90", "0xBFC21FA0", "0xBFC21FC4", "0xBFC21FE8", "0xBFC22028", "0xBFC2207C", "0xBFC2209C", "0xBFC220AC", "0xBFC220BC", "0xBFC220C8", "0xBFC220DC", "0xBFC220E8", "0xBFC220FC", "0xBFC22130", "0xBFC2214C", "0xBFC22154", "0xBFC22158"] + }, + { + "entry_addr": "0xBFC22164", + "normalized_addr": "0x1FC22164", + "end_addr": "0xBFC226CC", + "instruction_count": 347, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC22164", + "block_leaders": ["0xBFC22164", "0xBFC22194", "0xBFC221A0", "0xBFC221A8", "0xBFC221B8", "0xBFC221C8", "0xBFC221D0", "0xBFC221E0", "0xBFC221F0", "0xBFC221F4", "0xBFC2221C", "0xBFC22234", "0xBFC2223C", "0xBFC22248", "0xBFC22258", "0xBFC22268", "0xBFC22278", "0xBFC22280", "0xBFC222B0", "0xBFC222BC", "0xBFC222C4", "0xBFC222C8", "0xBFC222D4", "0xBFC222E0", "0xBFC222F0", "0xBFC222F4", "0xBFC22308", "0xBFC2230C", "0xBFC22314", "0xBFC22328", "0xBFC22330", "0xBFC2233C", "0xBFC2234C", "0xBFC22350", "0xBFC22370", "0xBFC2238C", "0xBFC22434", "0xBFC224B8", "0xBFC224C8", "0xBFC22530", "0xBFC225A8", "0xBFC226A8"] + }, + { + "entry_addr": "0xBFC226D0", + "normalized_addr": "0x1FC226D0", + "end_addr": "0xBFC228D4", + "instruction_count": 130, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC226D0", + "block_leaders": ["0xBFC226D0", "0xBFC226E4", "0xBFC226F8", "0xBFC22700", "0xBFC2271C", "0xBFC22724", "0xBFC2272C", "0xBFC22734", "0xBFC22740", "0xBFC22748", "0xBFC22750", "0xBFC22758", "0xBFC22760", "0xBFC22768", "0xBFC22770", "0xBFC22778", "0xBFC22780", "0xBFC22788", "0xBFC22790", "0xBFC22798", "0xBFC227A0", "0xBFC227A8", "0xBFC227B0", "0xBFC227B8", "0xBFC227C0", "0xBFC227CC", "0xBFC227D4", "0xBFC227DC", "0xBFC227E0", "0xBFC227E8", "0xBFC227EC", "0xBFC227FC", "0xBFC22804", "0xBFC2280C", "0xBFC22810", "0xBFC22820", "0xBFC22830", "0xBFC22840", "0xBFC22850", "0xBFC22870", "0xBFC22878", "0xBFC2288C", "0xBFC22894", "0xBFC2289C", "0xBFC228A4", "0xBFC228B0", "0xBFC228B8", "0xBFC228C0", "0xBFC228C8", "0xBFC228CC"] + }, + { + "entry_addr": "0xBFC228D8", + "normalized_addr": "0x1FC228D8", + "end_addr": "0xBFC22B7C", + "instruction_count": 170, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC228D8", + "block_leaders": ["0xBFC228D8", "0xBFC228F0", "0xBFC2296C", "0xBFC2297C", "0xBFC229A4", "0xBFC229D0", "0xBFC229D8", "0xBFC229E0", "0xBFC229F8", "0xBFC22A18", "0xBFC22A38", "0xBFC22A58", "0xBFC22A6C", "0xBFC22A7C", "0xBFC22A8C", "0xBFC22A9C", "0xBFC22AA4", "0xBFC22AAC", "0xBFC22AB4", "0xBFC22AC4", "0xBFC22ACC", "0xBFC22B1C", "0xBFC22B28", "0xBFC22B30", "0xBFC22B3C", "0xBFC22B40", "0xBFC22B50", "0xBFC22B5C", "0xBFC22B64", "0xBFC22B70", "0xBFC22B74"] + }, + { + "entry_addr": "0xBFC22B80", + "normalized_addr": "0x1FC22B80", + "end_addr": "0xBFC22E18", + "instruction_count": 167, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC22B80", + "block_leaders": ["0xBFC22B80", "0xBFC22B94", "0xBFC22BAC", "0xBFC22BBC", "0xBFC22BC4", "0xBFC22BC8", "0xBFC22BD0", "0xBFC22BD8", "0xBFC22BE0", "0xBFC22BE8", "0xBFC22BF0", "0xBFC22BF8", "0xBFC22C00", "0xBFC22C14", "0xBFC22C20", "0xBFC22C28", "0xBFC22C2C", "0xBFC22C34", "0xBFC22C3C", "0xBFC22C44", "0xBFC22C48", "0xBFC22C58", "0xBFC22C60", "0xBFC22C68", "0xBFC22C6C", "0xBFC22C80", "0xBFC22C88", "0xBFC22C94", "0xBFC22C9C", "0xBFC22CA0", "0xBFC22CA4", "0xBFC22CB0", "0xBFC22CB8", "0xBFC22CC0", "0xBFC22CC4", "0xBFC22CD4", "0xBFC22CDC", "0xBFC22CE8", "0xBFC22CF0", "0xBFC22CF8", "0xBFC22D08", "0xBFC22D10", "0xBFC22D14", "0xBFC22D1C", "0xBFC22D20", "0xBFC22D38", "0xBFC22D40", "0xBFC22D44", "0xBFC22D4C", "0xBFC22D54", "0xBFC22D64", "0xBFC22D68", "0xBFC22D74", "0xBFC22D7C", "0xBFC22D80", "0xBFC22D90", "0xBFC22D98", "0xBFC22DA0", "0xBFC22DA8", "0xBFC22DB0", "0xBFC22DB8", "0xBFC22DC0", "0xBFC22DC8", "0xBFC22DDC", "0xBFC22DE4", "0xBFC22DEC", "0xBFC22DF4", "0xBFC22DFC", "0xBFC22E04", "0xBFC22E0C", "0xBFC22E10"] + }, + { + "entry_addr": "0xBFC22E1C", + "normalized_addr": "0x1FC22E1C", + "end_addr": "0xBFC22E8C", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC22E1C", + "block_leaders": ["0xBFC22E1C", "0xBFC22E30", "0xBFC22E3C", "0xBFC22E44", "0xBFC22E54", "0xBFC22E64", "0xBFC22E6C", "0xBFC22E74", "0xBFC22E7C", "0xBFC22E80"] + }, + { + "entry_addr": "0xBFC22E90", + "normalized_addr": "0x1FC22E90", + "end_addr": "0xBFC2306C", + "instruction_count": 120, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC22E90", + "block_leaders": ["0xBFC22E90", "0xBFC22F60", "0xBFC22FC4", "0xBFC22FEC", "0xBFC22FF8", "0xBFC23004", "0xBFC23008", "0xBFC23014", "0xBFC23020", "0xBFC2303C", "0xBFC23054"] + }, + { + "entry_addr": "0xBFC23078", + "normalized_addr": "0x1FC23078", + "end_addr": "0xBFC230C0", + "instruction_count": 19, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC23078", + "block_leaders": ["0xBFC23078", "0xBFC23098", "0xBFC230A0", "0xBFC230AC"] + }, + { + "entry_addr": "0xBFC230C4", + "normalized_addr": "0x1FC230C4", + "end_addr": "0xBFC23118", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC230C4", + "block_leaders": ["0xBFC230C4", "0xBFC230D8", "0xBFC230E0", "0xBFC230E4", "0xBFC230F0", "0xBFC230F8", "0xBFC23108"] + }, + { + "entry_addr": "0xBFC2311C", + "normalized_addr": "0x1FC2311C", + "end_addr": "0xBFC23248", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2311C", + "block_leaders": ["0xBFC2311C", "0xBFC23170", "0xBFC2317C", "0xBFC23184", "0xBFC2318C", "0xBFC231CC", "0xBFC231DC", "0xBFC231F0", "0xBFC2321C", "0xBFC23224", "0xBFC23230", "0xBFC23234"] + }, + { + "entry_addr": "0xBFC2324C", + "normalized_addr": "0x1FC2324C", + "end_addr": "0xBFC232D8", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24640 -> jal at 0xBFC2472C", + "block_leaders": ["0xBFC2324C", "0xBFC23294", "0xBFC232A0", "0xBFC232A8", "0xBFC232B0", "0xBFC232B4", "0xBFC232BC", "0xBFC232C0"] + }, + { + "entry_addr": "0xBFC232DC", + "normalized_addr": "0x1FC232DC", + "end_addr": "0xBFC234FC", + "instruction_count": 137, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC232DC", + "block_leaders": ["0xBFC232DC", "0xBFC232FC", "0xBFC2332C", "0xBFC23344", "0xBFC23360", "0xBFC2337C", "0xBFC233C0", "0xBFC2340C", "0xBFC23450", "0xBFC23490", "0xBFC234D0", "0xBFC234E0"] + }, + { + "entry_addr": "0xBFC23500", + "normalized_addr": "0x1FC23500", + "end_addr": "0xBFC23520", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC23500", + "block_leaders": ["0xBFC23500", "0xBFC2350C", "0xBFC23514"] + }, + { + "entry_addr": "0xBFC23524", + "normalized_addr": "0x1FC23524", + "end_addr": "0xBFC23D38", + "instruction_count": 518, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC23524", + "block_leaders": ["0xBFC23524", "0xBFC23544", "0xBFC23570", "0xBFC2357C", "0xBFC235A4", "0xBFC235A8", "0xBFC235B0", "0xBFC235C4", "0xBFC235C8", "0xBFC235D0", "0xBFC23620", "0xBFC23628", "0xBFC23630", "0xBFC23634", "0xBFC2364C", "0xBFC23660", "0xBFC236E8", "0xBFC23770", "0xBFC237C0", "0xBFC237F4", "0xBFC23828", "0xBFC23858", "0xBFC238E0", "0xBFC23968", "0xBFC239B0", "0xBFC239E4", "0xBFC23A18", "0xBFC23A48", "0xBFC23A64", "0xBFC23A74", "0xBFC23A78", "0xBFC23AA4", "0xBFC23AB8", "0xBFC23AC8", "0xBFC23B3C", "0xBFC23B48", "0xBFC23B54", "0xBFC23BCC", "0xBFC23C4C"] + }, + { + "entry_addr": "0xBFC23D3C", + "normalized_addr": "0x1FC23D3C", + "end_addr": "0xBFC24284", + "instruction_count": 339, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC23D3C", + "block_leaders": ["0xBFC23D3C", "0xBFC23D5C", "0xBFC23D64", "0xBFC23D74", "0xBFC23D88", "0xBFC23D90", "0xBFC23DA0", "0xBFC23DB4", "0xBFC23DB8", "0xBFC23DC0", "0xBFC23DD4", "0xBFC23DE4", "0xBFC23DF0", "0xBFC23E00", "0xBFC23E10", "0xBFC23E20", "0xBFC23E2C", "0xBFC23E38", "0xBFC23E4C", "0xBFC23E54", "0xBFC23E70", "0xBFC23E7C", "0xBFC23E8C", "0xBFC23E9C", "0xBFC23EB0", "0xBFC23EB4", "0xBFC23EC8", "0xBFC23EE0", "0xBFC23EEC", "0xBFC23F04", "0xBFC23F18", "0xBFC23F28", "0xBFC23F34", "0xBFC23F40", "0xBFC23F58", "0xBFC23F6C", "0xBFC23F74", "0xBFC23F7C", "0xBFC23F98", "0xBFC23FA4", "0xBFC23FB4", "0xBFC23FC4", "0xBFC23FD4", "0xBFC23FF4", "0xBFC23FFC", "0xBFC24014", "0xBFC24028", "0xBFC2403C", "0xBFC24058", "0xBFC24064", "0xBFC24074", "0xBFC24084", "0xBFC24094", "0xBFC240BC", "0xBFC240CC", "0xBFC240D4", "0xBFC240DC", "0xBFC240E0", "0xBFC240EC", "0xBFC24108", "0xBFC24114", "0xBFC24124", "0xBFC24134", "0xBFC24144", "0xBFC2416C", "0xBFC2417C", "0xBFC24184", "0xBFC2418C", "0xBFC241B8", "0xBFC241D0", "0xBFC241E0", "0xBFC24208", "0xBFC24218", "0xBFC24228", "0xBFC24238", "0xBFC24248", "0xBFC24250", "0xBFC24254", "0xBFC2425C", "0xBFC2426C", "0xBFC24274", "0xBFC24278", "0xBFC2427C"] + }, + { + "entry_addr": "0xBFC24288", + "normalized_addr": "0x1FC24288", + "end_addr": "0xBFC24414", + "instruction_count": 100, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24288", + "block_leaders": ["0xBFC24288", "0xBFC242A0", "0xBFC242B4", "0xBFC242C8", "0xBFC242DC", "0xBFC242E4", "0xBFC242F8", "0xBFC242FC", "0xBFC24304", "0xBFC24308", "0xBFC24314", "0xBFC2432C", "0xBFC24334", "0xBFC24338", "0xBFC24340", "0xBFC24350", "0xBFC2435C", "0xBFC24390", "0xBFC24398", "0xBFC243A0", "0xBFC243F8", "0xBFC24408", "0xBFC2440C"] + }, + { + "entry_addr": "0xBFC24418", + "normalized_addr": "0x1FC24418", + "end_addr": "0xBFC2463C", + "instruction_count": 138, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24418", + "block_leaders": ["0xBFC24418", "0xBFC2443C", "0xBFC24454", "0xBFC2447C", "0xBFC24484", "0xBFC2449C", "0xBFC244C4", "0xBFC244CC", "0xBFC244D8", "0xBFC244EC", "0xBFC24550", "0xBFC24588", "0xBFC24598", "0xBFC245AC", "0xBFC245D4", "0xBFC245E8", "0xBFC245FC", "0xBFC2462C"] + }, + { + "entry_addr": "0xBFC24640", + "normalized_addr": "0x1FC24640", + "end_addr": "0xBFC24A44", + "instruction_count": 258, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24640", + "block_leaders": ["0xBFC24640", "0xBFC24664", "0xBFC2467C", "0xBFC246B8", "0xBFC246C4", "0xBFC246F0", "0xBFC246F8", "0xBFC246FC", "0xBFC24734", "0xBFC24740", "0xBFC2476C", "0xBFC24770", "0xBFC247CC", "0xBFC247D8", "0xBFC247F0", "0xBFC247F8", "0xBFC24800", "0xBFC2480C", "0xBFC24814", "0xBFC2482C", "0xBFC24830", "0xBFC2489C", "0xBFC248B0", "0xBFC248C0", "0xBFC248C8", "0xBFC248FC", "0xBFC24904", "0xBFC2493C", "0xBFC24960", "0xBFC24978", "0xBFC24984", "0xBFC24988", "0xBFC24998", "0xBFC2499C", "0xBFC249A4", "0xBFC249A8", "0xBFC249B8", "0xBFC249D0", "0xBFC249D8", "0xBFC249DC", "0xBFC249E0", "0xBFC249F0", "0xBFC249FC", "0xBFC24A00", "0xBFC24A08", "0xBFC24A34"] + }, + { + "entry_addr": "0xBFC24A48", + "normalized_addr": "0x1FC24A48", + "end_addr": "0xBFC24EFC", + "instruction_count": 302, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24A48", + "block_leaders": ["0xBFC24A48", "0xBFC24A7C", "0xBFC24A94", "0xBFC24AB0", "0xBFC24AC8", "0xBFC24AE0", "0xBFC24AF0", "0xBFC24AFC", "0xBFC24B44", "0xBFC24B50", "0xBFC24B58", "0xBFC24B60", "0xBFC24B68", "0xBFC24B74", "0xBFC24B7C", "0xBFC24BC4", "0xBFC24BD8", "0xBFC24BDC", "0xBFC24C00", "0xBFC24C1C", "0xBFC24C34", "0xBFC24C40", "0xBFC24C88", "0xBFC24C94", "0xBFC24C9C", "0xBFC24CA4", "0xBFC24CAC", "0xBFC24CB8", "0xBFC24CC0", "0xBFC24D3C", "0xBFC24D48", "0xBFC24D54", "0xBFC24D60", "0xBFC24D68", "0xBFC24D98", "0xBFC24DA0", "0xBFC24DD8", "0xBFC24DFC", "0xBFC24E14", "0xBFC24E20", "0xBFC24E24", "0xBFC24E34", "0xBFC24E38", "0xBFC24E40", "0xBFC24E44", "0xBFC24E54", "0xBFC24E6C", "0xBFC24E74", "0xBFC24E78", "0xBFC24E7C", "0xBFC24E8C", "0xBFC24E98", "0xBFC24E9C", "0xBFC24EA4", "0xBFC24EB0", "0xBFC24EB4", "0xBFC24EC8", "0xBFC24EE0"] + }, + { + "entry_addr": "0xBFC24F00", + "normalized_addr": "0x1FC24F00", + "end_addr": "0xBFC251A4", + "instruction_count": 170, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24F00", + "block_leaders": ["0xBFC24F00", "0xBFC24F18", "0xBFC24F28", "0xBFC24F2C", "0xBFC24F34", "0xBFC24F3C", "0xBFC24F44", "0xBFC24F50", "0xBFC24F74", "0xBFC24F80", "0xBFC24F84", "0xBFC24F90", "0xBFC24F9C", "0xBFC24FBC", "0xBFC24FC8", "0xBFC24FD4", "0xBFC24FDC", "0xBFC24FE8", "0xBFC24FF0", "0xBFC24FFC", "0xBFC25004", "0xBFC25010", "0xBFC25018", "0xBFC25024", "0xBFC2502C", "0xBFC25038", "0xBFC25040", "0xBFC2504C", "0xBFC25054", "0xBFC25060", "0xBFC25068", "0xBFC25074", "0xBFC2509C", "0xBFC250A4", "0xBFC250B0", "0xBFC250B8", "0xBFC250C4", "0xBFC250D0", "0xBFC250D8", "0xBFC250E4", "0xBFC250EC", "0xBFC250F8", "0xBFC25108", "0xBFC25110", "0xBFC25120", "0xBFC25148", "0xBFC25150", "0xBFC25154", "0xBFC2515C", "0xBFC25164", "0xBFC25178", "0xBFC25180", "0xBFC25194", "0xBFC25198"] + }, + { + "entry_addr": "0xBFC251A8", + "normalized_addr": "0x1FC251A8", + "end_addr": "0xBFC251FC", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC251A8", + "block_leaders": ["0xBFC251A8", "0xBFC251B8", "0xBFC251C4", "0xBFC251CC", "0xBFC251D4", "0xBFC251DC", "0xBFC251F0"] + }, + { + "entry_addr": "0xBFC25200", + "normalized_addr": "0x1FC25200", + "end_addr": "0xBFC252B8", + "instruction_count": 47, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25200", + "block_leaders": ["0xBFC25200", "0xBFC25210", "0xBFC25220", "0xBFC25228", "0xBFC25230", "0xBFC25238", "0xBFC25248", "0xBFC25250", "0xBFC25258", "0xBFC25260", "0xBFC25270", "0xBFC25278", "0xBFC25280", "0xBFC25288", "0xBFC25298", "0xBFC252A0", "0xBFC252A8", "0xBFC252AC"] + }, + { + "entry_addr": "0xBFC252BC", + "normalized_addr": "0x1FC252BC", + "end_addr": "0xBFC25310", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC252BC", + "block_leaders": ["0xBFC252BC", "0xBFC252D4", "0xBFC252E4", "0xBFC252F4", "0xBFC25304"] + }, + { + "entry_addr": "0xBFC25314", + "normalized_addr": "0x1FC25314", + "end_addr": "0xBFC25318", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC218CC -> jal at 0xBFC21900 -> jal at 0xBFC1A144", + "block_leaders": ["0xBFC25314"] + }, + { + "entry_addr": "0xBFC2531C", + "normalized_addr": "0x1FC2531C", + "end_addr": "0xBFC25380", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2531C", + "block_leaders": ["0xBFC2531C", "0xBFC2532C", "0xBFC2533C", "0xBFC2534C", "0xBFC2535C", "0xBFC2536C", "0xBFC25374"] + }, + { + "entry_addr": "0xBFC25390", + "normalized_addr": "0x1FC25390", + "end_addr": "0xBFC254AC", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25390", + "block_leaders": ["0xBFC25390", "0xBFC253A4", "0xBFC253B8", "0xBFC253C0", "0xBFC253C4", "0xBFC253D8", "0xBFC253E4", "0xBFC25404", "0xBFC2540C", "0xBFC25418", "0xBFC25444", "0xBFC25468", "0xBFC25484", "0xBFC254A0"] + }, + { + "entry_addr": "0xBFC254B0", + "normalized_addr": "0x1FC254B0", + "end_addr": "0xBFC25554", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC254B0", + "block_leaders": ["0xBFC254B0", "0xBFC254C0", "0xBFC254DC", "0xBFC254EC", "0xBFC25500", "0xBFC2550C", "0xBFC25520", "0xBFC2552C", "0xBFC25534"] + }, + { + "entry_addr": "0xBFC25558", + "normalized_addr": "0x1FC25558", + "end_addr": "0xBFC2559C", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25558", + "block_leaders": ["0xBFC25558", "0xBFC25570", "0xBFC25584", "0xBFC25590"] + }, + { + "entry_addr": "0xBFC255A0", + "normalized_addr": "0x1FC255A0", + "end_addr": "0xBFC256D4", + "instruction_count": 78, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1952C -> jal at 0xBFC1960C", + "block_leaders": ["0xBFC255A0", "0xBFC255D8", "0xBFC25604", "0xBFC25628", "0xBFC25658", "0xBFC25698"] + }, + { + "entry_addr": "0xBFC256D8", + "normalized_addr": "0x1FC256D8", + "end_addr": "0xBFC25750", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1952C -> jal at 0xBFC1953C", + "block_leaders": ["0xBFC256D8", "0xBFC256E4", "0xBFC256FC", "0xBFC25714", "0xBFC2571C", "0xBFC25730", "0xBFC25744"] + }, + { + "entry_addr": "0xBFC25754", + "normalized_addr": "0x1FC25754", + "end_addr": "0xBFC25880", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25754", + "block_leaders": ["0xBFC25754", "0xBFC25788", "0xBFC257A4", "0xBFC257E0", "0xBFC257EC", "0xBFC25800", "0xBFC2580C", "0xBFC25840"] + }, + { + "entry_addr": "0xBFC25884", + "normalized_addr": "0x1FC25884", + "end_addr": "0xBFC258B0", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25754 -> jal at 0xBFC257E4", + "block_leaders": ["0xBFC25884", "0xBFC25890", "0xBFC258AC"] + }, + { + "entry_addr": "0xBFC2592C", + "normalized_addr": "0x1FC2592C", + "end_addr": "0xBFC259B4", + "instruction_count": 35, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19A58 -> jal at 0xBFC19D34", + "block_leaders": ["0xBFC2592C", "0xBFC25944", "0xBFC2594C", "0xBFC25964", "0xBFC25968", "0xBFC25980", "0xBFC25988", "0xBFC259A0", "0xBFC259A4"] + }, + { + "entry_addr": "0xBFC259D8", + "normalized_addr": "0x1FC259D8", + "end_addr": "0xBFC25B70", + "instruction_count": 103, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25B74 -> jal at 0xBFC25B94", + "block_leaders": ["0xBFC259D8", "0xBFC25A04", "0xBFC25A0C", "0xBFC25A18", "0xBFC25A24", "0xBFC25A2C", "0xBFC25A60", "0xBFC25A74", "0xBFC25A88", "0xBFC25AA0", "0xBFC25AB4", "0xBFC25AC8", "0xBFC25AD4", "0xBFC25AEC", "0xBFC25AFC", "0xBFC25B04", "0xBFC25B14", "0xBFC25B48", "0xBFC25B54", "0xBFC25B5C", "0xBFC25B64", "0xBFC25B68", "0xBFC25B6C"] + }, + { + "entry_addr": "0xBFC25B74", + "normalized_addr": "0x1FC25B74", + "end_addr": "0xBFC25C40", + "instruction_count": 52, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25B74", + "block_leaders": ["0xBFC25B74", "0xBFC25B9C", "0xBFC25BA8", "0xBFC25BBC", "0xBFC25BC0", "0xBFC25BD4", "0xBFC25BFC", "0xBFC25C38"] + }, + { + "entry_addr": "0xBFC25C74", + "normalized_addr": "0x1FC25C74", + "end_addr": "0xBFC25C78", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25D8C -> jal at 0xBFC25DB8", + "block_leaders": ["0xBFC25C74"] + }, + { + "entry_addr": "0xBFC25C7C", + "normalized_addr": "0x1FC25C7C", + "end_addr": "0xBFC25C80", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25D8C -> jal at 0xBFC25DA8", + "block_leaders": ["0xBFC25C7C"] + }, + { + "entry_addr": "0xBFC25C84", + "normalized_addr": "0x1FC25C84", + "end_addr": "0xBFC25C88", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25D8C -> jal at 0xBFC25DA0", + "block_leaders": ["0xBFC25C84"] + }, + { + "entry_addr": "0xBFC25C8C", + "normalized_addr": "0x1FC25C8C", + "end_addr": "0xBFC25C90", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC268EC -> jal at 0xBFC26A80", + "block_leaders": ["0xBFC25C8C"] + }, + { + "entry_addr": "0xBFC25C94", + "normalized_addr": "0x1FC25C94", + "end_addr": "0xBFC25C98", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25D8C -> jal at 0xBFC25DB0", + "block_leaders": ["0xBFC25C94"] + }, + { + "entry_addr": "0xBFC25CB0", + "normalized_addr": "0x1FC25CB0", + "end_addr": "0xBFC25CB4", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25EF8 -> jal at 0xBFC25F2C", + "block_leaders": ["0xBFC25CB0"] + }, + { + "entry_addr": "0xBFC25CB8", + "normalized_addr": "0x1FC25CB8", + "end_addr": "0xBFC25CBC", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC264A0 -> jal at 0xBFC264EC", + "block_leaders": ["0xBFC25CB8"] + }, + { + "entry_addr": "0xBFC25CC0", + "normalized_addr": "0x1FC25CC0", + "end_addr": "0xBFC25D88", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25CC0", + "block_leaders": ["0xBFC25CC0", "0xBFC25CE8", "0xBFC25D04", "0xBFC25D18", "0xBFC25D20", "0xBFC25D54", "0xBFC25D7C", "0xBFC25D80"] + }, + { + "entry_addr": "0xBFC25D8C", + "normalized_addr": "0x1FC25D8C", + "end_addr": "0xBFC25E5C", + "instruction_count": 53, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25D8C", + "block_leaders": ["0xBFC25D8C", "0xBFC25DA8", "0xBFC25DB0", "0xBFC25DB8", "0xBFC25DC0", "0xBFC25DE0", "0xBFC25DF0", "0xBFC25E00", "0xBFC25E0C", "0xBFC25E18", "0xBFC25E28", "0xBFC25E3C", "0xBFC25E40"] + }, + { + "entry_addr": "0xBFC25E60", + "normalized_addr": "0x1FC25E60", + "end_addr": "0xBFC25E88", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25E8C -> jal at 0xBFC25EC4", + "block_leaders": ["0xBFC25E60"] + }, + { + "entry_addr": "0xBFC25E8C", + "normalized_addr": "0x1FC25E8C", + "end_addr": "0xBFC25EF4", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25E8C", + "block_leaders": ["0xBFC25E8C", "0xBFC25E9C", "0xBFC25EB8", "0xBFC25ECC", "0xBFC25ED8", "0xBFC25EE0", "0xBFC25EE8"] + }, + { + "entry_addr": "0xBFC25EF8", + "normalized_addr": "0x1FC25EF8", + "end_addr": "0xBFC26328", + "instruction_count": 269, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25EF8", + "block_leaders": ["0xBFC25EF8", "0xBFC25F24", "0xBFC25F34", "0xBFC25F3C", "0xBFC25F48", "0xBFC25F58", "0xBFC25F60", "0xBFC25F6C", "0xBFC25F74", "0xBFC25F88", "0xBFC25F9C", "0xBFC25FA4", "0xBFC25FAC", "0xBFC25FC4", "0xBFC25FC8", "0xBFC25FD0", "0xBFC25FD8", "0xBFC25FF0", "0xBFC26048", "0xBFC2604C", "0xBFC26060", "0xBFC26064", "0xBFC2606C", "0xBFC2607C", "0xBFC2608C", "0xBFC260AC", "0xBFC260F8", "0xBFC260FC", "0xBFC2610C", "0xBFC26110", "0xBFC26120", "0xBFC26130", "0xBFC26138", "0xBFC26148", "0xBFC26150", "0xBFC26164", "0xBFC26178", "0xBFC26180", "0xBFC2618C", "0xBFC26198", "0xBFC2619C", "0xBFC261A4", "0xBFC261B0", "0xBFC261CC", "0xBFC261E0", "0xBFC261EC", "0xBFC26200", "0xBFC26208", "0xBFC2621C", "0xBFC2622C", "0xBFC26244", "0xBFC2624C", "0xBFC26254", "0xBFC26264", "0xBFC2627C", "0xBFC26284", "0xBFC2628C", "0xBFC26294", "0xBFC26298", "0xBFC262A0", "0xBFC262B4", "0xBFC262C8", "0xBFC262D0", "0xBFC262D8", "0xBFC262E0", "0xBFC262E8", "0xBFC262F0", "0xBFC262F8", "0xBFC262FC", "0xBFC26304", "0xBFC2630C", "0xBFC26314", "0xBFC26318"] + }, + { + "entry_addr": "0xBFC2632C", + "normalized_addr": "0x1FC2632C", + "end_addr": "0xBFC26448", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2632C", + "block_leaders": ["0xBFC2632C", "0xBFC26344", "0xBFC26358", "0xBFC26360", "0xBFC26368", "0xBFC26378", "0xBFC26388", "0xBFC26390", "0xBFC26398", "0xBFC263A0", "0xBFC263A8", "0xBFC263C8", "0xBFC263D8", "0xBFC263E0", "0xBFC263F0", "0xBFC263FC", "0xBFC26404", "0xBFC2640C", "0xBFC26414", "0xBFC26420", "0xBFC26428", "0xBFC26430", "0xBFC26438", "0xBFC2643C"] + }, + { + "entry_addr": "0xBFC2644C", + "normalized_addr": "0x1FC2644C", + "end_addr": "0xBFC2649C", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2644C", + "block_leaders": ["0xBFC2644C", "0xBFC26468", "0xBFC26474"] + }, + { + "entry_addr": "0xBFC264A0", + "normalized_addr": "0x1FC264A0", + "end_addr": "0xBFC2654C", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC264A0", + "block_leaders": ["0xBFC264A0", "0xBFC264B8", "0xBFC264D0", "0xBFC264EC", "0xBFC264F4", "0xBFC26508", "0xBFC26510", "0xBFC26518", "0xBFC2652C"] + }, + { + "entry_addr": "0xBFC26550", + "normalized_addr": "0x1FC26550", + "end_addr": "0xBFC265BC", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26550", + "block_leaders": ["0xBFC26550", "0xBFC2656C", "0xBFC26580", "0xBFC2658C", "0xBFC26594", "0xBFC26598", "0xBFC265A0", "0xBFC265A4"] + }, + { + "entry_addr": "0xBFC265C0", + "normalized_addr": "0x1FC265C0", + "end_addr": "0xBFC2660C", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC265C0", + "block_leaders": ["0xBFC265C0", "0xBFC265D0", "0xBFC265E4", "0xBFC265F0"] + }, + { + "entry_addr": "0xBFC26610", + "normalized_addr": "0x1FC26610", + "end_addr": "0xBFC2665C", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26610", + "block_leaders": ["0xBFC26610", "0xBFC26620", "0xBFC26634", "0xBFC26640"] + }, + { + "entry_addr": "0xBFC26660", + "normalized_addr": "0x1FC26660", + "end_addr": "0xBFC2666C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254 -> jal at 0xBFC18454", + "block_leaders": ["0xBFC26660"] + }, + { + "entry_addr": "0xBFC26670", + "normalized_addr": "0x1FC26670", + "end_addr": "0xBFC266A4", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26670", + "block_leaders": ["0xBFC26670", "0xBFC26680"] + }, + { + "entry_addr": "0xBFC266B0", + "normalized_addr": "0x1FC266B0", + "end_addr": "0xBFC268E8", + "instruction_count": 143, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC266B0", + "block_leaders": ["0xBFC266B0", "0xBFC266C8", "0xBFC266DC", "0xBFC266EC", "0xBFC26704", "0xBFC26728", "0xBFC2673C", "0xBFC26748", "0xBFC26750", "0xBFC26760", "0xBFC26768", "0xBFC2676C", "0xBFC26774", "0xBFC26780", "0xBFC26798", "0xBFC267A4", "0xBFC267AC", "0xBFC267B4", "0xBFC267C8", "0xBFC267CC", "0xBFC267E0", "0xBFC267E8", "0xBFC267FC", "0xBFC26804", "0xBFC26820", "0xBFC26824", "0xBFC2682C", "0xBFC26834", "0xBFC26844", "0xBFC26850", "0xBFC26870", "0xBFC26878", "0xBFC26880", "0xBFC26894", "0xBFC268B0", "0xBFC268CC", "0xBFC268D4", "0xBFC268DC", "0xBFC268E0"] + }, + { + "entry_addr": "0xBFC268EC", + "normalized_addr": "0x1FC268EC", + "end_addr": "0xBFC26AF4", + "instruction_count": 131, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC268EC", + "block_leaders": ["0xBFC268EC", "0xBFC26908", "0xBFC2691C", "0xBFC26928", "0xBFC26940", "0xBFC2695C", "0xBFC269E0", "0xBFC269E8", "0xBFC269F0", "0xBFC269F8", "0xBFC26A0C", "0xBFC26A38", "0xBFC26A4C", "0xBFC26A74", "0xBFC26A7C", "0xBFC26A80", "0xBFC26A88", "0xBFC26AA0", "0xBFC26AAC", "0xBFC26AB4", "0xBFC26AB8", "0xBFC26AC0", "0xBFC26AE8", "0xBFC26AEC"] + }, + { + "entry_addr": "0xBFC26AF8", + "normalized_addr": "0x1FC26AF8", + "end_addr": "0xBFC26C04", + "instruction_count": 68, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25E8C -> jal at 0xBFC25E94", + "block_leaders": ["0xBFC26AF8"] + }, + { + "entry_addr": "0xBFC26C10", + "normalized_addr": "0x1FC26C10", + "end_addr": "0xBFC26E60", + "instruction_count": 149, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26C10", + "block_leaders": ["0xBFC26C10", "0xBFC26C24", "0xBFC26C40", "0xBFC26C48", "0xBFC26C50", "0xBFC26C74", "0xBFC26C84", "0xBFC26C8C", "0xBFC26C9C", "0xBFC26CB4", "0xBFC26CBC", "0xBFC26CC8", "0xBFC26CDC", "0xBFC26CF0", "0xBFC26D04", "0xBFC26D0C", "0xBFC26D18", "0xBFC26D28", "0xBFC26D30", "0xBFC26D38", "0xBFC26D50", "0xBFC26D5C", "0xBFC26D64", "0xBFC26D78", "0xBFC26D8C", "0xBFC26D98", "0xBFC26DA0", "0xBFC26DA8", "0xBFC26DBC", "0xBFC26DC8", "0xBFC26DCC", "0xBFC26DDC", "0xBFC26DE8", "0xBFC26DEC", "0xBFC26DFC", "0xBFC26E30", "0xBFC26E3C", "0xBFC26E48", "0xBFC26E54", "0xBFC26E58"] + }, + { + "entry_addr": "0xBFC26E64", + "normalized_addr": "0x1FC26E64", + "end_addr": "0xBFC26EF4", + "instruction_count": 37, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26E64", + "block_leaders": ["0xBFC26E64", "0xBFC26E88", "0xBFC26E90", "0xBFC26E98", "0xBFC26E9C", "0xBFC26EA4", "0xBFC26EAC", "0xBFC26EB0", "0xBFC26EC0", "0xBFC26EC8", "0xBFC26ED8", "0xBFC26EE0", "0xBFC26EE8"] + }, + { + "entry_addr": "0xBFC26EF8", + "normalized_addr": "0x1FC26EF8", + "end_addr": "0xBFC27180", + "instruction_count": 163, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC26C10 -> jal at 0xBFC26C38", + "block_leaders": ["0xBFC26EF8", "0xBFC27024", "0xBFC2702C", "0xBFC27034", "0xBFC2703C", "0xBFC27044", "0xBFC27048", "0xBFC27058", "0xBFC27060", "0xBFC2706C", "0xBFC2707C", "0xBFC27084", "0xBFC2708C", "0xBFC270A4", "0xBFC270AC", "0xBFC270B8", "0xBFC270C8", "0xBFC270D0", "0xBFC270D8", "0xBFC270E8", "0xBFC270F0", "0xBFC270FC", "0xBFC27104", "0xBFC27114", "0xBFC2711C", "0xBFC2712C", "0xBFC2713C", "0xBFC27144", "0xBFC27154", "0xBFC2715C", "0xBFC2716C"] + }, + { + "entry_addr": "0xBFC27190", + "normalized_addr": "0x1FC27190", + "end_addr": "0xBFC273E0", + "instruction_count": 149, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27190", + "block_leaders": ["0xBFC27190", "0xBFC271C0", "0xBFC271C8", "0xBFC271E8", "0xBFC27208", "0xBFC27228", "0xBFC27248", "0xBFC2725C", "0xBFC272B8", "0xBFC272EC", "0xBFC272F4", "0xBFC27324", "0xBFC27328", "0xBFC27330", "0xBFC27338", "0xBFC2734C", "0xBFC2738C", "0xBFC27398", "0xBFC273A0", "0xBFC273A8", "0xBFC273B8"] + }, + { + "entry_addr": "0xBFC273E4", + "normalized_addr": "0x1FC273E4", + "end_addr": "0xBFC27864", + "instruction_count": 289, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC273E4", + "block_leaders": ["0xBFC273E4", "0xBFC27434", "0xBFC27448", "0xBFC27454", "0xBFC2745C", "0xBFC2746C", "0xBFC27480", "0xBFC27494", "0xBFC274A8", "0xBFC274C4", "0xBFC274C8", "0xBFC274D4", "0xBFC274DC", "0xBFC274E0", "0xBFC274EC", "0xBFC27508", "0xBFC2750C", "0xBFC27518", "0xBFC27520", "0xBFC27524", "0xBFC27530", "0xBFC2754C", "0xBFC27550", "0xBFC2755C", "0xBFC27564", "0xBFC27568", "0xBFC27574", "0xBFC27590", "0xBFC27594", "0xBFC275A0", "0xBFC275A8", "0xBFC275AC", "0xBFC275B8", "0xBFC275C0", "0xBFC275C8", "0xBFC275D4", "0xBFC275F0", "0xBFC275FC", "0xBFC27600", "0xBFC27614", "0xBFC276CC", "0xBFC276D8", "0xBFC276F8", "0xBFC27700", "0xBFC27708", "0xBFC27714", "0xBFC27734", "0xBFC2773C", "0xBFC2775C", "0xBFC27760", "0xBFC2777C", "0xBFC2779C", "0xBFC277BC", "0xBFC277DC", "0xBFC277FC", "0xBFC27804", "0xBFC27824", "0xBFC27828", "0xBFC2783C"] + }, + { + "entry_addr": "0xBFC27868", + "normalized_addr": "0x1FC27868", + "end_addr": "0xBFC27900", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27868", + "block_leaders": ["0xBFC27868", "0xBFC27890", "0xBFC278C8", "0xBFC278D8", "0xBFC278EC", "0xBFC278F4", "0xBFC278F8"] + }, + { + "entry_addr": "0xBFC27910", + "normalized_addr": "0x1FC27910", + "end_addr": "0xBFC27A28", + "instruction_count": 71, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27910", + "block_leaders": ["0xBFC27910", "0xBFC2792C", "0xBFC27954", "0xBFC27974", "0xBFC2799C", "0xBFC279D8", "0xBFC279E0", "0xBFC279F0", "0xBFC27A00", "0xBFC27A04", "0xBFC27A0C", "0xBFC27A14", "0xBFC27A18"] + }, + { + "entry_addr": "0xBFC27A2C", + "normalized_addr": "0x1FC27A2C", + "end_addr": "0xBFC27B20", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27A2C", + "block_leaders": ["0xBFC27A2C", "0xBFC27A64", "0xBFC27A84", "0xBFC27AAC", "0xBFC27AE8", "0xBFC27AF0", "0xBFC27B0C", "0xBFC27B10"] + }, + { + "entry_addr": "0xBFC27B24", + "normalized_addr": "0x1FC27B24", + "end_addr": "0xBFC27BD8", + "instruction_count": 46, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27B24", + "block_leaders": ["0xBFC27B24", "0xBFC27B34", "0xBFC27B58", "0xBFC27B7C", "0xBFC27BA0", "0xBFC27BC4", "0xBFC27BCC"] + }, + { + "entry_addr": "0xBFC27BDC", + "normalized_addr": "0x1FC27BDC", + "end_addr": "0xBFC27CC4", + "instruction_count": 59, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27BDC", + "block_leaders": ["0xBFC27BDC", "0xBFC27C14", "0xBFC27C30", "0xBFC27C58", "0xBFC27C8C", "0xBFC27C94", "0xBFC27CB0", "0xBFC27CB4"] + }, + { + "entry_addr": "0xBFC27CC8", + "normalized_addr": "0x1FC27CC8", + "end_addr": "0xBFC27D28", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27CC8", + "block_leaders": ["0xBFC27CC8", "0xBFC27CD8", "0xBFC27CE0"] + }, + { + "entry_addr": "0xBFC27D2C", + "normalized_addr": "0x1FC27D2C", + "end_addr": "0xBFC27DAC", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27E68 -> jal at 0xBFC27E70", + "block_leaders": ["0xBFC27D2C", "0xBFC27D48", "0xBFC27D70", "0xBFC27D7C", "0xBFC27D8C"] + }, + { + "entry_addr": "0xBFC27DB0", + "normalized_addr": "0x1FC27DB0", + "end_addr": "0xBFC27E64", + "instruction_count": 46, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27DB0", + "block_leaders": ["0xBFC27DB0", "0xBFC27DBC", "0xBFC27DC4", "0xBFC27DCC", "0xBFC27DD8", "0xBFC27DE8", "0xBFC27DF8", "0xBFC27E08", "0xBFC27E18", "0xBFC27E28", "0xBFC27E58"] + }, + { + "entry_addr": "0xBFC27E68", + "normalized_addr": "0x1FC27E68", + "end_addr": "0xBFC27E84", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27E68", + "block_leaders": ["0xBFC27E68", "0xBFC27E78"] + }, + { + "entry_addr": "0xBFC27E88", + "normalized_addr": "0x1FC27E88", + "end_addr": "0xBFC27EB0", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27E88", + "block_leaders": ["0xBFC27E88", "0xBFC27EA0"] + }, + { + "entry_addr": "0xBFC27EB4", + "normalized_addr": "0x1FC27EB4", + "end_addr": "0xBFC27EEC", + "instruction_count": 15, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC27EB4", + "block_leaders": ["0xBFC27EB4", "0xBFC27ED4"] + }, + { + "entry_addr": "0xBFC27FB0", + "normalized_addr": "0x1FC27FB0", + "end_addr": "0xBFC28060", + "instruction_count": 45, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC27FB0", + "block_leaders": ["0xBFC27FB0", "0xBFC27FC4", "0xBFC27FDC", "0xBFC27FEC", "0xBFC27FF8", "0xBFC2800C", "0xBFC28018", "0xBFC28024", "0xBFC2802C", "0xBFC2803C", "0xBFC2804C", "0xBFC28054"] + }, + { + "entry_addr": "0xBFC28064", + "normalized_addr": "0x1FC28064", + "end_addr": "0xBFC28088", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC28064", + "block_leaders": ["0xBFC28064", "0xBFC2807C"] + }, + { + "entry_addr": "0xBFC282E8", + "normalized_addr": "0x1FC282E8", + "end_addr": "0xBFC2836C", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29CD8", + "block_leaders": ["0xBFC282E8", "0xBFC282FC", "0xBFC28324", "0xBFC2834C", "0xBFC28354", "0xBFC28360"] + }, + { + "entry_addr": "0xBFC28370", + "normalized_addr": "0x1FC28370", + "end_addr": "0xBFC283EC", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29FB0", + "block_leaders": ["0xBFC28370", "0xBFC28388", "0xBFC283AC", "0xBFC283D0", "0xBFC283D8", "0xBFC283E0"] + }, + { + "entry_addr": "0xBFC283F0", + "normalized_addr": "0x1FC283F0", + "end_addr": "0xBFC28484", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC283F0", + "block_leaders": ["0xBFC283F0", "0xBFC283F8", "0xBFC2840C", "0xBFC28418", "0xBFC28420", "0xBFC28424", "0xBFC28444", "0xBFC28450", "0xBFC2845C", "0xBFC28480"] + }, + { + "entry_addr": "0xBFC28490", + "normalized_addr": "0x1FC28490", + "end_addr": "0xBFC284EC", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC28490", + "block_leaders": ["0xBFC28490", "0xBFC284AC", "0xBFC284B4", "0xBFC284C0", "0xBFC284C8", "0xBFC284D0", "0xBFC284D8", "0xBFC284DC"] + }, + { + "entry_addr": "0xBFC284F0", + "normalized_addr": "0x1FC284F0", + "end_addr": "0xBFC28868", + "instruction_count": 223, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC284F0", + "block_leaders": ["0xBFC284F0", "0xBFC28504", "0xBFC28514", "0xBFC2851C", "0xBFC2852C", "0xBFC2853C", "0xBFC28544", "0xBFC28568", "0xBFC28578", "0xBFC28580", "0xBFC28594", "0xBFC285A4", "0xBFC285B8", "0xBFC285C0", "0xBFC285C4", "0xBFC285CC", "0xBFC285D0", "0xBFC285DC", "0xBFC285F0", "0xBFC285F8", "0xBFC285FC", "0xBFC28610", "0xBFC28614", "0xBFC28620", "0xBFC28628", "0xBFC2863C", "0xBFC28644", "0xBFC28648", "0xBFC28650", "0xBFC28654", "0xBFC28660", "0xBFC28674", "0xBFC2867C", "0xBFC28688", "0xBFC2868C", "0xBFC286C4", "0xBFC286FC", "0xBFC28734", "0xBFC2873C", "0xBFC28750", "0xBFC28788", "0xBFC287C0", "0xBFC287F8", "0xBFC287FC", "0xBFC28808", "0xBFC28810", "0xBFC28818", "0xBFC28820", "0xBFC28834", "0xBFC2883C", "0xBFC28840", "0xBFC28848", "0xBFC2884C", "0xBFC2885C", "0xBFC28860"] + }, + { + "entry_addr": "0xBFC2886C", + "normalized_addr": "0x1FC2886C", + "end_addr": "0xBFC28B80", + "instruction_count": 198, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2886C", + "block_leaders": ["0xBFC2886C", "0xBFC288A0", "0xBFC288D4", "0xBFC28900", "0xBFC2892C", "0xBFC28958", "0xBFC28988", "0xBFC289B8", "0xBFC289E8", "0xBFC289F0", "0xBFC289F8", "0xBFC289FC", "0xBFC28A34", "0xBFC28A38", "0xBFC28A44", "0xBFC28A4C", "0xBFC28A50", "0xBFC28A58", "0xBFC28A60", "0xBFC28A68", "0xBFC28A6C", "0xBFC28AA4", "0xBFC28AA8", "0xBFC28AB4", "0xBFC28ABC", "0xBFC28AC0", "0xBFC28AC8", "0xBFC28AD0", "0xBFC28AD8", "0xBFC28ADC", "0xBFC28B14", "0xBFC28B18", "0xBFC28B24", "0xBFC28B2C", "0xBFC28B30", "0xBFC28B38", "0xBFC28B54"] + }, + { + "entry_addr": "0xBFC28B84", + "normalized_addr": "0x1FC28B84", + "end_addr": "0xBFC291C0", + "instruction_count": 400, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC28B84", + "block_leaders": ["0xBFC28B84", "0xBFC28BCC", "0xBFC28BD0", "0xBFC28BDC", "0xBFC28BE4", "0xBFC28BE8", "0xBFC28C40", "0xBFC28C44", "0xBFC28C50", "0xBFC28C58", "0xBFC28C5C", "0xBFC28C90", "0xBFC28CB8", "0xBFC28CEC", "0xBFC28D20", "0xBFC28D54", "0xBFC28D88", "0xBFC28DB8", "0xBFC28DE8", "0xBFC28E18", "0xBFC28E48", "0xBFC28E74", "0xBFC28E9C", "0xBFC28ED0", "0xBFC28F04", "0xBFC28F38", "0xBFC28F68", "0xBFC28F98", "0xBFC28FC8", "0xBFC28FF4", "0xBFC2901C", "0xBFC29050", "0xBFC29084", "0xBFC290B8", "0xBFC290E8", "0xBFC29118", "0xBFC29148", "0xBFC29174", "0xBFC29194"] + }, + { + "entry_addr": "0xBFC291C4", + "normalized_addr": "0x1FC291C4", + "end_addr": "0xBFC2976C", + "instruction_count": 363, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC284F0 -> jal at 0xBFC28618", + "block_leaders": ["0xBFC291C4", "0xBFC291E8", "0xBFC29210", "0xBFC29214", "0xBFC29220", "0xBFC29224", "0xBFC2924C", "0xBFC29254", "0xBFC29258", "0xBFC2928C", "0xBFC29290", "0xBFC2929C", "0xBFC292A4", "0xBFC292A8", "0xBFC292B8", "0xBFC292BC", "0xBFC292E4", "0xBFC292E8", "0xBFC2932C", "0xBFC29344", "0xBFC29350", "0xBFC29368", "0xBFC293E4", "0xBFC29458", "0xBFC29460", "0xBFC294BC", "0xBFC294C0", "0xBFC294CC", "0xBFC294D4", "0xBFC294D8", "0xBFC294E4", "0xBFC29558", "0xBFC2955C", "0xBFC29568", "0xBFC29570", "0xBFC29574", "0xBFC295AC", "0xBFC295B0", "0xBFC295BC", "0xBFC295C4", "0xBFC295C8", "0xBFC295DC", "0xBFC29640", "0xBFC29644", "0xBFC29650", "0xBFC29658", "0xBFC2965C", "0xBFC29664", "0xBFC296D8", "0xBFC296DC", "0xBFC296E8", "0xBFC296F0", "0xBFC296F4", "0xBFC2972C", "0xBFC29730", "0xBFC2973C", "0xBFC29744", "0xBFC29748", "0xBFC2975C", "0xBFC29760"] + }, + { + "entry_addr": "0xBFC29770", + "normalized_addr": "0x1FC29770", + "end_addr": "0xBFC29AD4", + "instruction_count": 218, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29770", + "block_leaders": ["0xBFC29770", "0xBFC29788", "0xBFC297A0", "0xBFC297E0", "0xBFC29834", "0xBFC2983C", "0xBFC2984C", "0xBFC2986C", "0xBFC29878", "0xBFC29880", "0xBFC29888", "0xBFC2989C", "0xBFC298D4", "0xBFC298DC", "0xBFC298EC", "0xBFC29958", "0xBFC2995C", "0xBFC29968", "0xBFC29970", "0xBFC29974", "0xBFC29994", "0xBFC29998", "0xBFC299A4", "0xBFC299AC", "0xBFC299B0", "0xBFC299D8", "0xBFC299DC", "0xBFC299E8", "0xBFC299F0", "0xBFC299F4", "0xBFC29A3C", "0xBFC29A40", "0xBFC29A4C", "0xBFC29A54", "0xBFC29A58", "0xBFC29A6C", "0xBFC29A88", "0xBFC29A9C", "0xBFC29AB4", "0xBFC29AC8"] + }, + { + "entry_addr": "0xBFC29AE0", + "normalized_addr": "0x1FC29AE0", + "end_addr": "0xBFC29FE4", + "instruction_count": 322, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0", + "block_leaders": ["0xBFC29AE0", "0xBFC29B20", "0xBFC29B30", "0xBFC29B38", "0xBFC29B40", "0xBFC29B60", "0xBFC29B80", "0xBFC29BA0", "0xBFC29BC0", "0xBFC29BDC", "0xBFC29C34", "0xBFC29C58", "0xBFC29C60", "0xBFC29C70", "0xBFC29C80", "0xBFC29C8C", "0xBFC29C98", "0xBFC29CA4", "0xBFC29CB0", "0xBFC29CBC", "0xBFC29CD0", "0xBFC29CE0", "0xBFC29CF4", "0xBFC29D08", "0xBFC29D20", "0xBFC29D2C", "0xBFC29D30", "0xBFC29D38", "0xBFC29D40", "0xBFC29D44", "0xBFC29D48", "0xBFC29D5C", "0xBFC29D74", "0xBFC29D7C", "0xBFC29D84", "0xBFC29D9C", "0xBFC29DAC", "0xBFC29DB8", "0xBFC29DDC", "0xBFC29DEC", "0xBFC29E7C", "0xBFC29EB4", "0xBFC29ECC", "0xBFC29EE0", "0xBFC29EEC", "0xBFC29EF4", "0xBFC29F10", "0xBFC29F14", "0xBFC29F5C", "0xBFC29F6C", "0xBFC29F7C", "0xBFC29F8C", "0xBFC29F9C", "0xBFC29FB0", "0xBFC29FB8"] + }, + { + "entry_addr": "0xBFC29FE8", + "normalized_addr": "0x1FC29FE8", + "end_addr": "0xBFC2A318", + "instruction_count": 205, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29FE8", + "block_leaders": ["0xBFC29FE8", "0xBFC2A024", "0xBFC2A05C", "0xBFC2A068", "0xBFC2A158", "0xBFC2A2C8", "0xBFC2A2D0", "0xBFC2A2D8", "0xBFC2A2E4", "0xBFC2A30C"] + }, + { + "entry_addr": "0xBFC2A31C", + "normalized_addr": "0x1FC2A31C", + "end_addr": "0xBFC2A428", + "instruction_count": 68, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2A31C", + "block_leaders": ["0xBFC2A31C", "0xBFC2A344", "0xBFC2A3B8", "0xBFC2A3C0", "0xBFC2A3C8", "0xBFC2A3CC", "0xBFC2A400", "0xBFC2A40C"] + }, + { + "entry_addr": "0xBFC2A4E0", + "normalized_addr": "0x1FC2A4E0", + "end_addr": "0xBFC2AC2C", + "instruction_count": 468, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC232DC -> jal at 0xBFC23324", + "block_leaders": ["0xBFC2A4E0", "0xBFC2A550", "0xBFC2A55C", "0xBFC2A56C", "0xBFC2A578", "0xBFC2A580", "0xBFC2A588", "0xBFC2A58C", "0xBFC2A5A0", "0xBFC2A5A4", "0xBFC2A5AC", "0xBFC2A5B4", "0xBFC2A5CC", "0xBFC2A5D4", "0xBFC2A5E0", "0xBFC2A5E8", "0xBFC2A5EC", "0xBFC2A5F8", "0xBFC2A600", "0xBFC2A61C", "0xBFC2A62C", "0xBFC2A638", "0xBFC2A654", "0xBFC2A660", "0xBFC2A668", "0xBFC2A670", "0xBFC2A68C", "0xBFC2A690", "0xBFC2A6A0", "0xBFC2A6A8", "0xBFC2A6AC", "0xBFC2A6C0", "0xBFC2A6C4", "0xBFC2A6CC", "0xBFC2A6D8", "0xBFC2A700", "0xBFC2A884", "0xBFC2A994", "0xBFC2A9A4", "0xBFC2A9B4", "0xBFC2A9BC", "0xBFC2A9CC", "0xBFC2A9D4", "0xBFC2A9E4", "0xBFC2A9E8", "0xBFC2A9F4", "0xBFC2A9F8", "0xBFC2AA00", "0xBFC2AA04", "0xBFC2AA14", "0xBFC2AA20", "0xBFC2AAC0", "0xBFC2AAC8", "0xBFC2AAD0", "0xBFC2AAD8", "0xBFC2AADC", "0xBFC2AAE4", "0xBFC2AB00", "0xBFC2AB10", "0xBFC2AB18", "0xBFC2AB20", "0xBFC2AB28", "0xBFC2AB2C", "0xBFC2AB38", "0xBFC2AB44", "0xBFC2AB88", "0xBFC2AB90", "0xBFC2AB9C", "0xBFC2ABA8", "0xBFC2ABD4", "0xBFC2ABD8", "0xBFC2ABF4", "0xBFC2ABF8"] + }, + { + "entry_addr": "0xBFC2ACD0", + "normalized_addr": "0x1FC2ACD0", + "end_addr": "0xBFC2B0A4", + "instruction_count": 47, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC2ACD0", + "block_leaders": ["0xBFC2ACD0", "0xBFC2ACEC", "0xBFC2AD08", "0xBFC2B040", "0xBFC2B054", "0xBFC2B05C", "0xBFC2B060", "0xBFC2B098"] + }, + { + "entry_addr": "0xBFC2B0A8", + "normalized_addr": "0x1FC2B0A8", + "end_addr": "0xBFC2B1F8", + "instruction_count": 85, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC232DC -> jal at 0xBFC23324 -> jal at 0xBFC2A5CC", + "block_leaders": ["0xBFC2B0A8", "0xBFC2B0C0", "0xBFC2B0CC", "0xBFC2B0D4", "0xBFC2B0D8", "0xBFC2B0E0", "0xBFC2B0E8", "0xBFC2B0F0", "0xBFC2B0F4", "0xBFC2B0FC", "0xBFC2B104", "0xBFC2B10C", "0xBFC2B110", "0xBFC2B118", "0xBFC2B120", "0xBFC2B12C", "0xBFC2B130", "0xBFC2B138", "0xBFC2B140", "0xBFC2B148", "0xBFC2B14C", "0xBFC2B154", "0xBFC2B15C", "0xBFC2B168", "0xBFC2B16C", "0xBFC2B174", "0xBFC2B17C", "0xBFC2B184", "0xBFC2B190", "0xBFC2B198", "0xBFC2B1A0", "0xBFC2B1C4", "0xBFC2B1C8", "0xBFC2B1EC"] + }, + { + "entry_addr": "0xBFC2B1FC", + "normalized_addr": "0x1FC2B1FC", + "end_addr": "0xBFC2B228", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC196D4 -> jal at 0xBFC199F4", + "block_leaders": ["0xBFC2B1FC", "0xBFC2B208", "0xBFC2B224"] + }, + { + "entry_addr": "0xBFC2B22C", + "normalized_addr": "0x1FC2B22C", + "end_addr": "0xBFC2B250", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2B22C", + "block_leaders": ["0xBFC2B22C", "0xBFC2B238", "0xBFC2B24C"] + }, + { + "entry_addr": "0xBFC2B260", + "normalized_addr": "0x1FC2B260", + "end_addr": "0xBFC2BEFC", + "instruction_count": 808, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC27868 -> jal at 0xBFC278C0", + "block_leaders": ["0xBFC2B260", "0xBFC2B2D8", "0xBFC2B2E4", "0xBFC2B2F4", "0xBFC2B304", "0xBFC2B30C", "0xBFC2B320", "0xBFC2B324", "0xBFC2B338", "0xBFC2B33C", "0xBFC2B344", "0xBFC2B34C", "0xBFC2B364", "0xBFC2B36C", "0xBFC2B378", "0xBFC2B380", "0xBFC2B384", "0xBFC2B394", "0xBFC2B3A0", "0xBFC2B3CC", "0xBFC2B3DC", "0xBFC2B3E8", "0xBFC2B418", "0xBFC2B424", "0xBFC2B42C", "0xBFC2B434", "0xBFC2B44C", "0xBFC2B458", "0xBFC2B460", "0xBFC2B4A4", "0xBFC2B574", "0xBFC2B680", "0xBFC2B688", "0xBFC2B690", "0xBFC2B698", "0xBFC2B6D0", "0xBFC2B7A4", "0xBFC2B8B0", "0xBFC2B8B8", "0xBFC2B8BC", "0xBFC2B8D4", "0xBFC2B8D8", "0xBFC2B8E4", "0xBFC2B8F4", "0xBFC2B908", "0xBFC2B924", "0xBFC2B92C", "0xBFC2B938", "0xBFC2B944", "0xBFC2B94C", "0xBFC2B970", "0xBFC2BB04", "0xBFC2BC2C", "0xBFC2BC48", "0xBFC2BC54", "0xBFC2BC64", "0xBFC2BC70", "0xBFC2BC88", "0xBFC2BC8C", "0xBFC2BC94", "0xBFC2BCA4", "0xBFC2BCA8", "0xBFC2BCB4", "0xBFC2BCB8", "0xBFC2BCC0", "0xBFC2BCC4", "0xBFC2BCD4", "0xBFC2BCEC", "0xBFC2BD90", "0xBFC2BD98", "0xBFC2BDA0", "0xBFC2BDA8", "0xBFC2BDAC", "0xBFC2BDB4", "0xBFC2BDD0", "0xBFC2BDE0", "0xBFC2BDE8", "0xBFC2BDF0", "0xBFC2BDF8", "0xBFC2BDFC", "0xBFC2BE08", "0xBFC2BE14", "0xBFC2BE58", "0xBFC2BE60", "0xBFC2BE6C", "0xBFC2BE78", "0xBFC2BEA4", "0xBFC2BEA8", "0xBFC2BEC4", "0xBFC2BEC8"] + }, + { + "entry_addr": "0xBFC2BF00", + "normalized_addr": "0x1FC2BF00", + "end_addr": "0xBFC2BF0C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2BF00", + "block_leaders": ["0xBFC2BF00"] + }, + { + "entry_addr": "0xBFC2BF10", + "normalized_addr": "0x1FC2BF10", + "end_addr": "0xBFC2BF18", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2BF10", + "block_leaders": ["0xBFC2BF10"] + }, + { + "entry_addr": "0xBFC2BF1C", + "normalized_addr": "0x1FC2BF1C", + "end_addr": "0xBFC2BF70", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2BF1C", + "block_leaders": ["0xBFC2BF1C", "0xBFC2BF64"] + }, + { + "entry_addr": "0xBFC2BF74", + "normalized_addr": "0x1FC2BF74", + "end_addr": "0xBFC2C1C0", + "instruction_count": 148, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2BF74", + "block_leaders": ["0xBFC2BF74", "0xBFC2BF98", "0xBFC2BFA0", "0xBFC2BFAC", "0xBFC2BFC0", "0xBFC2BFD0", "0xBFC2BFF8", "0xBFC2C000", "0xBFC2C020", "0xBFC2C030", "0xBFC2C040", "0xBFC2C060", "0xBFC2C068", "0xBFC2C070", "0xBFC2C074", "0xBFC2C090", "0xBFC2C0B0", "0xBFC2C0B8", "0xBFC2C0BC", "0xBFC2C0D4", "0xBFC2C0DC", "0xBFC2C0E0", "0xBFC2C0F8", "0xBFC2C108", "0xBFC2C158", "0xBFC2C16C", "0xBFC2C1B0", "0xBFC2C1B4"] + }, + { + "entry_addr": "0xBFC2C1C4", + "normalized_addr": "0x1FC2C1C4", + "end_addr": "0xBFC2C2E0", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2BF74 -> jal at 0xBFC2BFA4", + "block_leaders": ["0xBFC2C1C4", "0xBFC2C1E8", "0xBFC2C290"] + }, + { + "entry_addr": "0xBFC2C2F0", + "normalized_addr": "0x1FC2C2F0", + "end_addr": "0xBFC2C3DC", + "instruction_count": 60, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2C2F0", + "block_leaders": ["0xBFC2C2F0", "0xBFC2C314", "0xBFC2C320", "0xBFC2C328", "0xBFC2C348", "0xBFC2C364", "0xBFC2C370", "0xBFC2C39C", "0xBFC2C3AC", "0xBFC2C3BC", "0xBFC2C3C0", "0xBFC2C3D0"] + }, + { + "entry_addr": "0xBFC2C3E0", + "normalized_addr": "0x1FC2C3E0", + "end_addr": "0xBFC2C7F0", + "instruction_count": 261, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2C3E0", + "block_leaders": ["0xBFC2C3E0", "0xBFC2C3FC", "0xBFC2C420", "0xBFC2C45C", "0xBFC2C468", "0xBFC2C46C", "0xBFC2C470", "0xBFC2C47C", "0xBFC2C484", "0xBFC2C48C", "0xBFC2C494", "0xBFC2C4B0", "0xBFC2C4BC", "0xBFC2C4C4", "0xBFC2C4C8", "0xBFC2C4D8", "0xBFC2C4E4", "0xBFC2C614", "0xBFC2C618", "0xBFC2C620", "0xBFC2C624", "0xBFC2C62C", "0xBFC2C630", "0xBFC2C638", "0xBFC2C69C", "0xBFC2C6B0", "0xBFC2C6B4", "0xBFC2C6C8", "0xBFC2C6CC", "0xBFC2C6D8", "0xBFC2C6E4", "0xBFC2C760", "0xBFC2C764", "0xBFC2C76C", "0xBFC2C794", "0xBFC2C7A8", "0xBFC2C7AC", "0xBFC2C7C0", "0xBFC2C7C4", "0xBFC2C7E4"] + }, + { + "entry_addr": "0xBFC2C7F4", + "normalized_addr": "0x1FC2C7F4", + "end_addr": "0xBFC2C8A4", + "instruction_count": 45, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19630 -> jal at 0xBFC196A0", + "block_leaders": ["0xBFC2C7F4", "0xBFC2C814", "0xBFC2C880"] + }, + { + "entry_addr": "0xBFC2C8A8", + "normalized_addr": "0x1FC2C8A8", + "end_addr": "0xBFC2C984", + "instruction_count": 56, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2D0E0 -> jal at 0xBFC2E12C", + "block_leaders": ["0xBFC2C8A8", "0xBFC2C8B8", "0xBFC2C8E8", "0xBFC2C8EC", "0xBFC2C8F8", "0xBFC2C8FC", "0xBFC2C908", "0xBFC2C90C", "0xBFC2C920", "0xBFC2C924", "0xBFC2C980"] + }, + { + "entry_addr": "0xBFC2C988", + "normalized_addr": "0x1FC2C988", + "end_addr": "0xBFC2CA4C", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19DF4 -> jal at 0xBFC19EFC", + "block_leaders": ["0xBFC2C988", "0xBFC2C998", "0xBFC2C9B8", "0xBFC2C9BC", "0xBFC2C9D0", "0xBFC2C9D4", "0xBFC2CA48"] + }, + { + "entry_addr": "0xBFC2CA50", + "normalized_addr": "0x1FC2CA50", + "end_addr": "0xBFC2CA54", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19A58 -> jal at 0xBFC19C78", + "block_leaders": ["0xBFC2CA50"] + }, + { + "entry_addr": "0xBFC2CA58", + "normalized_addr": "0x1FC2CA58", + "end_addr": "0xBFC2CA98", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A430 -> jal at 0xBFC1A47C", + "block_leaders": ["0xBFC2CA58", "0xBFC2CA78", "0xBFC2CA88"] + }, + { + "entry_addr": "0xBFC2CA9C", + "normalized_addr": "0x1FC2CA9C", + "end_addr": "0xBFC2CADC", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CA9C", + "block_leaders": ["0xBFC2CA9C", "0xBFC2CAB8", "0xBFC2CAC0", "0xBFC2CAC8", "0xBFC2CAD0", "0xBFC2CAD4"] + }, + { + "entry_addr": "0xBFC2CAE0", + "normalized_addr": "0x1FC2CAE0", + "end_addr": "0xBFC2CB20", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CAE0", + "block_leaders": ["0xBFC2CAE0", "0xBFC2CAFC", "0xBFC2CB04", "0xBFC2CB0C", "0xBFC2CB14", "0xBFC2CB18"] + }, + { + "entry_addr": "0xBFC2CB24", + "normalized_addr": "0x1FC2CB24", + "end_addr": "0xBFC2CB7C", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CB24", + "block_leaders": ["0xBFC2CB24", "0xBFC2CB40", "0xBFC2CB48", "0xBFC2CB50", "0xBFC2CB60", "0xBFC2CB70", "0xBFC2CB74"] + }, + { + "entry_addr": "0xBFC2CB80", + "normalized_addr": "0x1FC2CB80", + "end_addr": "0xBFC2CC08", + "instruction_count": 35, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CB80", + "block_leaders": ["0xBFC2CB80", "0xBFC2CB9C", "0xBFC2CBB4", "0xBFC2CBBC", "0xBFC2CBDC", "0xBFC2CBFC", "0xBFC2CC00"] + }, + { + "entry_addr": "0xBFC2CC10", + "normalized_addr": "0x1FC2CC10", + "end_addr": "0xBFC2CCB8", + "instruction_count": 43, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CC10", + "block_leaders": ["0xBFC2CC10", "0xBFC2CC40", "0xBFC2CC4C", "0xBFC2CC5C", "0xBFC2CC70", "0xBFC2CC88"] + }, + { + "entry_addr": "0xBFC2CCC4", + "normalized_addr": "0x1FC2CCC4", + "end_addr": "0xBFC2CE04", + "instruction_count": 81, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CCC4", + "block_leaders": ["0xBFC2CCC4", "0xBFC2CCDC", "0xBFC2CCE8", "0xBFC2CCF0", "0xBFC2CD28", "0xBFC2CD4C", "0xBFC2CD88", "0xBFC2CDA0", "0xBFC2CDAC", "0xBFC2CDE0", "0xBFC2CDF8"] + }, + { + "entry_addr": "0xBFC2CE08", + "normalized_addr": "0x1FC2CE08", + "end_addr": "0xBFC2CF50", + "instruction_count": 83, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CE08", + "block_leaders": ["0xBFC2CE08", "0xBFC2CE28", "0xBFC2CE30", "0xBFC2CE38", "0xBFC2CE70", "0xBFC2CE94", "0xBFC2CED4", "0xBFC2CEEC", "0xBFC2CEF8", "0xBFC2CF2C", "0xBFC2CF44"] + }, + { + "entry_addr": "0xBFC2CF54", + "normalized_addr": "0x1FC2CF54", + "end_addr": "0xBFC2D0A0", + "instruction_count": 84, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CF54", + "block_leaders": ["0xBFC2CF54", "0xBFC2CF6C", "0xBFC2CF74", "0xBFC2CF7C", "0xBFC2CFB0", "0xBFC2CFD4", "0xBFC2CFE0", "0xBFC2D004", "0xBFC2D06C", "0xBFC2D094"] + }, + { + "entry_addr": "0xBFC2D0A4", + "normalized_addr": "0x1FC2D0A4", + "end_addr": "0xBFC2D0DC", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC23078 -> jal at 0xBFC23098", + "block_leaders": ["0xBFC2D0A4", "0xBFC2D0B8", "0xBFC2D0C8", "0xBFC2D0CC", "0xBFC2D0D8"] + }, + { + "entry_addr": "0xBFC2D0E0", + "normalized_addr": "0x1FC2D0E0", + "end_addr": "0xBFC2E448", + "instruction_count": 1243, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2D0E0", + "block_leaders": ["0xBFC2D0E0", "0xBFC2D134", "0xBFC2D144", "0xBFC2D154", "0xBFC2D1A4", "0xBFC2D1B8", "0xBFC2D1CC", "0xBFC2D1E0", "0xBFC2D1EC", "0xBFC2D214", "0xBFC2D218", "0xBFC2D224", "0xBFC2D22C", "0xBFC2D230", "0xBFC2D240", "0xBFC2D2B0", "0xBFC2D2BC", "0xBFC2D2D4", "0xBFC2D2F8", "0xBFC2D308", "0xBFC2D310", "0xBFC2D31C", "0xBFC2D370", "0xBFC2D384", "0xBFC2D38C", "0xBFC2D3D8", "0xBFC2D400", "0xBFC2D414", "0xBFC2D41C", "0xBFC2D450", "0xBFC2D458", "0xBFC2D45C", "0xBFC2D464", "0xBFC2D46C", "0xBFC2D470", "0xBFC2D488", "0xBFC2D494", "0xBFC2D4CC", "0xBFC2D4E0", "0xBFC2D530", "0xBFC2D534", "0xBFC2D540", "0xBFC2D548", "0xBFC2D54C", "0xBFC2D55C", "0xBFC2D5CC", "0xBFC2D5D8", "0xBFC2D5F0", "0xBFC2D614", "0xBFC2D624", "0xBFC2D644", "0xBFC2D648", "0xBFC2D658", "0xBFC2D66C", "0xBFC2D674", "0xBFC2D684", "0xBFC2D68C", "0xBFC2D6AC", "0xBFC2D6B0", "0xBFC2D6BC", "0xBFC2D6C4", "0xBFC2D6C8", "0xBFC2D6D0", "0xBFC2D6E4", "0xBFC2D734", "0xBFC2D748", "0xBFC2D758", "0xBFC2D764", "0xBFC2D76C", "0xBFC2D77C", "0xBFC2D784", "0xBFC2D78C", "0xBFC2D7A4", "0xBFC2D7A8", "0xBFC2D7B0", "0xBFC2D7B8", "0xBFC2D7C0", "0xBFC2D7CC", "0xBFC2D870", "0xBFC2D878", "0xBFC2D87C", "0xBFC2D894", "0xBFC2D89C", "0xBFC2D8A0", "0xBFC2D8B8", "0xBFC2D8BC", "0xBFC2D8CC", "0xBFC2D8D4", "0xBFC2D8D8", "0xBFC2D8F0", "0xBFC2D8F8", "0xBFC2D90C", "0xBFC2D910", "0xBFC2D964", "0xBFC2D990", "0xBFC2D998", "0xBFC2D99C", "0xBFC2D9CC", "0xBFC2D9EC", "0xBFC2D9F0", "0xBFC2DA00", "0xBFC2DA18", "0xBFC2DA2C", "0xBFC2DA34", "0xBFC2DA38", "0xBFC2DA54", "0xBFC2DA5C", "0xBFC2DA6C", "0xBFC2DA70", "0xBFC2DA78", "0xBFC2DABC", "0xBFC2DAC8", "0xBFC2DADC", "0xBFC2DAE4", "0xBFC2DAEC", "0xBFC2DB00", "0xBFC2DB14", "0xBFC2DB18", "0xBFC2DB24", "0xBFC2DB2C", "0xBFC2DB44", "0xBFC2DB50", "0xBFC2DB60", "0xBFC2DB6C", "0xBFC2DB74", "0xBFC2DB94", "0xBFC2DB98", "0xBFC2DBA0", "0xBFC2DBB4", "0xBFC2DBF4", "0xBFC2DC08", "0xBFC2DC20", "0xBFC2DC34", "0xBFC2DC38", "0xBFC2DC60", "0xBFC2DC90", "0xBFC2DCA8", "0xBFC2DCC0", "0xBFC2DCC8", "0xBFC2DCE0", "0xBFC2DCF0", "0xBFC2DD08", "0xBFC2DD20", "0xBFC2DD28", "0xBFC2DD40", "0xBFC2DD6C", "0xBFC2DDD4", "0xBFC2DDE0", "0xBFC2DDEC", "0xBFC2DE0C", "0xBFC2DE30", "0xBFC2DE40", "0xBFC2DE6C", "0xBFC2DEA8", "0xBFC2DEBC", "0xBFC2DED0", "0xBFC2DEE0", "0xBFC2DEE8", "0xBFC2DEF4", "0xBFC2DF38", "0xBFC2DF48", "0xBFC2DF60", "0xBFC2DF78", "0xBFC2DF80", "0xBFC2DF98", "0xBFC2DFA8", "0xBFC2DFC0", "0xBFC2DFD8", "0xBFC2DFE0", "0xBFC2DFF8", "0xBFC2E02C", "0xBFC2E038", "0xBFC2E060", "0xBFC2E084", "0xBFC2E094", "0xBFC2E0C0", "0xBFC2E0FC", "0xBFC2E110", "0xBFC2E118", "0xBFC2E134", "0xBFC2E15C", "0xBFC2E19C", "0xBFC2E1A8", "0xBFC2E1B0", "0xBFC2E1B8", "0xBFC2E204", "0xBFC2E208", "0xBFC2E218", "0xBFC2E224", "0xBFC2E238", "0xBFC2E240", "0xBFC2E254", "0xBFC2E2A4", "0xBFC2E2B0", "0xBFC2E2C8", "0xBFC2E2D0", "0xBFC2E2D4", "0xBFC2E2E8", "0xBFC2E2EC", "0xBFC2E2FC", "0xBFC2E30C", "0xBFC2E32C", "0xBFC2E370", "0xBFC2E380", "0xBFC2E390", "0xBFC2E3A4", "0xBFC2E3B4", "0xBFC2E3C4", "0xBFC2E3EC", "0xBFC2E3F4", "0xBFC2E410", "0xBFC2E420"] + }, + { + "entry_addr": "0xBFC2E44C", + "normalized_addr": "0x1FC2E44C", + "end_addr": "0xBFC2E4CC", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2E44C", + "block_leaders": ["0xBFC2E44C", "0xBFC2E458", "0xBFC2E460", "0xBFC2E468", "0xBFC2E474", "0xBFC2E47C", "0xBFC2E4C0"] + }, + { + "entry_addr": "0xBFC2E4D0", + "normalized_addr": "0x1FC2E4D0", + "end_addr": "0xBFC2E504", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC19630 -> jal at 0xBFC19650", + "block_leaders": ["0xBFC2E4D0"] + }, + { + "entry_addr": "0xBFC2E544", + "normalized_addr": "0x1FC2E544", + "end_addr": "0xBFC2E570", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC214B0 -> jal at 0xBFC21770", + "block_leaders": ["0xBFC2E544"] + }, + { + "entry_addr": "0xBFC2E574", + "normalized_addr": "0x1FC2E574", + "end_addr": "0xBFC2E5B0", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC226D0 -> jal at 0xBFC22714", + "block_leaders": ["0xBFC2E574", "0xBFC2E588", "0xBFC2E590"] + }, + { + "entry_addr": "0xBFC2E5B4", + "normalized_addr": "0x1FC2E5B4", + "end_addr": "0xBFC2E5BC", + "instruction_count": 3, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC214B0 -> jal at 0xBFC21880", + "block_leaders": ["0xBFC2E5B4"] + }, + { + "entry_addr": "0xBFC2E5C0", + "normalized_addr": "0x1FC2E5C0", + "end_addr": "0xBFC2E5FC", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A6EC -> jal at 0xBFC1A714", + "block_leaders": ["0xBFC2E5C0", "0xBFC2E5D0", "0xBFC2E5E0", "0xBFC2E5E8", "0xBFC2E5F4"] + }, + { + "entry_addr": "0xBFC2E600", + "normalized_addr": "0x1FC2E600", + "end_addr": "0xBFC2E658", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2E600", + "block_leaders": ["0xBFC2E600", "0xBFC2E610"] + }, + { + "entry_addr": "0xBFC2E65C", + "normalized_addr": "0x1FC2E65C", + "end_addr": "0xBFC2E6B4", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2E65C", + "block_leaders": ["0xBFC2E65C", "0xBFC2E66C"] + }, + { + "entry_addr": "0xBFC2E6B8", + "normalized_addr": "0x1FC2E6B8", + "end_addr": "0xBFC2E8C8", + "instruction_count": 133, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC188F0 -> jal at 0xBFC18960", + "block_leaders": ["0xBFC2E6B8", "0xBFC2E704", "0xBFC2E714", "0xBFC2E744", "0xBFC2E74C", "0xBFC2E750", "0xBFC2E760", "0xBFC2E770", "0xBFC2E7A0", "0xBFC2E7B4", "0xBFC2E7C4", "0xBFC2E7F4", "0xBFC2E800", "0xBFC2E814", "0xBFC2E824", "0xBFC2E854", "0xBFC2E860", "0xBFC2E874", "0xBFC2E884", "0xBFC2E8B4", "0xBFC2E8BC", "0xBFC2E8C0"] + }, + { + "entry_addr": "0xBFC2E8CC", + "normalized_addr": "0x1FC2E8CC", + "end_addr": "0xBFC2EA90", + "instruction_count": 114, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC218CC -> jal at 0xBFC21924", + "block_leaders": ["0xBFC2E8CC", "0xBFC2E8F4", "0xBFC2E900", "0xBFC2E938", "0xBFC2E968", "0xBFC2E978", "0xBFC2E97C", "0xBFC2E98C", "0xBFC2E9BC", "0xBFC2E9C8", "0xBFC2E9DC", "0xBFC2E9EC", "0xBFC2EA1C", "0xBFC2EA28", "0xBFC2EA3C", "0xBFC2EA4C", "0xBFC2EA7C", "0xBFC2EA84", "0xBFC2EA88"] + }, + { + "entry_addr": "0xBFC2EA94", + "normalized_addr": "0x1FC2EA94", + "end_addr": "0xBFC2EC8C", + "instruction_count": 127, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC22E90 -> jal at 0xBFC2300C", + "block_leaders": ["0xBFC2EA94", "0xBFC2EAD8", "0xBFC2EB34", "0xBFC2EB58", "0xBFC2EB88", "0xBFC2EBC0", "0xBFC2EBE4", "0xBFC2EC68"] + }, + { + "entry_addr": "0xBFC2EC90", + "normalized_addr": "0x1FC2EC90", + "end_addr": "0xBFC2ECD4", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24418 -> jal at 0xBFC245E0", + "block_leaders": ["0xBFC2EC90", "0xBFC2ECA4", "0xBFC2ECB4", "0xBFC2ECC4", "0xBFC2ECD0"] + }, + { + "entry_addr": "0xBFC2ECD8", + "normalized_addr": "0x1FC2ECD8", + "end_addr": "0xBFC2ED18", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1A6EC -> jal at 0xBFC1A720", + "block_leaders": ["0xBFC2ECD8"] + }, + { + "entry_addr": "0xBFC2ED1C", + "normalized_addr": "0x1FC2ED1C", + "end_addr": "0xBFC2EDB0", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2ED1C", + "block_leaders": ["0xBFC2ED1C", "0xBFC2ED2C", "0xBFC2ED74", "0xBFC2ED98"] + }, + { + "entry_addr": "0xBFC2EE6C", + "normalized_addr": "0x1FC2EE6C", + "end_addr": "0xBFC2EEBC", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2EE6C", + "block_leaders": ["0xBFC2EE6C", "0xBFC2EE80", "0xBFC2EE90", "0xBFC2EEA0", "0xBFC2EEA8", "0xBFC2EEB4"] + }, + { + "entry_addr": "0xBFC2EEC0", + "normalized_addr": "0x1FC2EEC0", + "end_addr": "0xBFC2EEFC", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24640 -> jal at 0xBFC247F0", + "block_leaders": ["0xBFC2EEC0", "0xBFC2EED8", "0xBFC2EEE8", "0xBFC2EEEC", "0xBFC2EEF8"] + }, + { + "entry_addr": "0xBFC2EF00", + "normalized_addr": "0x1FC2EF00", + "end_addr": "0xBFC2EF3C", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC24640 -> jal at 0xBFC248B8", + "block_leaders": ["0xBFC2EF00", "0xBFC2EF18", "0xBFC2EF28", "0xBFC2EF2C", "0xBFC2EF38"] + }, + { + "entry_addr": "0xBFC2EF40", + "normalized_addr": "0x1FC2EF40", + "end_addr": "0xBFC2F0C4", + "instruction_count": 98, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2EF40", + "block_leaders": ["0xBFC2EF40", "0xBFC2EF6C", "0xBFC2EF78", "0xBFC2EF88", "0xBFC2EFB0", "0xBFC2EFB8", "0xBFC2EFC8", "0xBFC2F014", "0xBFC2F020", "0xBFC2F030", "0xBFC2F034", "0xBFC2F03C", "0xBFC2F070", "0xBFC2F084"] + }, + { + "entry_addr": "0xBFC2F1D4", + "normalized_addr": "0x1FC2F1D4", + "end_addr": "0xBFC2F200", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CCC4 -> jal at 0xBFC2CDD8", + "block_leaders": ["0xBFC2F1D4", "0xBFC2F1E0", "0xBFC2F1FC"] + }, + { + "entry_addr": "0xBFC2F210", + "normalized_addr": "0x1FC2F210", + "end_addr": "0xBFC2F614", + "instruction_count": 258, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F210", + "block_leaders": ["0xBFC2F210", "0xBFC2F228", "0xBFC2F230", "0xBFC2F240", "0xBFC2F248", "0xBFC2F254", "0xBFC2F264", "0xBFC2F29C", "0xBFC2F2C4", "0xBFC2F2F0", "0xBFC2F31C", "0xBFC2F330", "0xBFC2F388", "0xBFC2F3A0", "0xBFC2F3A4", "0xBFC2F3C4", "0xBFC2F3C8", "0xBFC2F3FC", "0xBFC2F424", "0xBFC2F450", "0xBFC2F47C", "0xBFC2F490", "0xBFC2F4E8", "0xBFC2F50C", "0xBFC2F518", "0xBFC2F58C", "0xBFC2F60C"] + }, + { + "entry_addr": "0xBFC2F618", + "normalized_addr": "0x1FC2F618", + "end_addr": "0xBFC2F658", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F618", + "block_leaders": ["0xBFC2F618", "0xBFC2F62C", "0xBFC2F630", "0xBFC2F63C", "0xBFC2F644", "0xBFC2F64C"] + }, + { + "entry_addr": "0xBFC2F65C", + "normalized_addr": "0x1FC2F65C", + "end_addr": "0xBFC2F69C", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F65C", + "block_leaders": ["0xBFC2F65C", "0xBFC2F670", "0xBFC2F674", "0xBFC2F680", "0xBFC2F688", "0xBFC2F690"] + }, + { + "entry_addr": "0xBFC2F6A0", + "normalized_addr": "0x1FC2F6A0", + "end_addr": "0xBFC2F714", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2F6A0", + "block_leaders": ["0xBFC2F6A0", "0xBFC2F6BC", "0xBFC2F6C8", "0xBFC2F6CC", "0xBFC2F6E0", "0xBFC2F6F8", "0xBFC2F700", "0xBFC2F704"] + }, + { + "entry_addr": "0xBFC2F718", + "normalized_addr": "0x1FC2F718", + "end_addr": "0xBFC2F798", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F718", + "block_leaders": ["0xBFC2F718", "0xBFC2F728", "0xBFC2F730", "0xBFC2F740", "0xBFC2F750", "0xBFC2F760", "0xBFC2F774", "0xBFC2F784", "0xBFC2F78C"] + }, + { + "entry_addr": "0xBFC2F79C", + "normalized_addr": "0x1FC2F79C", + "end_addr": "0xBFC2F804", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2F79C", + "block_leaders": ["0xBFC2F79C", "0xBFC2F7F8"] + }, + { + "entry_addr": "0xBFC2F808", + "normalized_addr": "0x1FC2F808", + "end_addr": "0xBFC2F858", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F808", + "block_leaders": ["0xBFC2F808", "0xBFC2F81C", "0xBFC2F830", "0xBFC2F840", "0xBFC2F84C"] + }, + { + "entry_addr": "0xBFC2F85C", + "normalized_addr": "0x1FC2F85C", + "end_addr": "0xBFC2F8A8", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F85C", + "block_leaders": ["0xBFC2F85C", "0xBFC2F874", "0xBFC2F87C", "0xBFC2F884", "0xBFC2F88C", "0xBFC2F898"] + }, + { + "entry_addr": "0xBFC2F8AC", + "normalized_addr": "0x1FC2F8AC", + "end_addr": "0xBFC2FA74", + "instruction_count": 115, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2F8AC", + "block_leaders": ["0xBFC2F8AC", "0xBFC2F924", "0xBFC2F928", "0xBFC2F934", "0xBFC2F93C", "0xBFC2F940", "0xBFC2F948", "0xBFC2F94C", "0xBFC2F958", "0xBFC2F960", "0xBFC2F964", "0xBFC2F96C", "0xBFC2F970", "0xBFC2F97C", "0xBFC2F984", "0xBFC2F988", "0xBFC2F990", "0xBFC2F99C", "0xBFC2F9A4", "0xBFC2F9C0", "0xBFC2F9F0", "0xBFC2F9F8", "0xBFC2FA08", "0xBFC2FA10", "0xBFC2FA18", "0xBFC2FA28", "0xBFC2FA48", "0xBFC2FA4C", "0xBFC2FA5C"] + }, + { + "entry_addr": "0xBFC2FA78", + "normalized_addr": "0x1FC2FA78", + "end_addr": "0xBFC2FC0C", + "instruction_count": 102, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29B38", + "block_leaders": ["0xBFC2FA78", "0xBFC2FAEC", "0xBFC2FAF0", "0xBFC2FAFC", "0xBFC2FB04", "0xBFC2FB08", "0xBFC2FB10", "0xBFC2FB14", "0xBFC2FB20", "0xBFC2FB28", "0xBFC2FB2C", "0xBFC2FB34", "0xBFC2FB38", "0xBFC2FB44", "0xBFC2FB4C", "0xBFC2FB50", "0xBFC2FB58", "0xBFC2FB94", "0xBFC2FB9C", "0xBFC2FBB8", "0xBFC2FBC0", "0xBFC2FBC8", "0xBFC2FBDC", "0xBFC2FBEC", "0xBFC2FBF4"] + }, + { + "entry_addr": "0xBFC2FC10", + "normalized_addr": "0x1FC2FC10", + "end_addr": "0xBFC2FC40", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC2FC10", + "block_leaders": ["0xBFC2FC10"] + }, + { + "entry_addr": "0xBFC2FCC4", + "normalized_addr": "0x1FC2FCC4", + "end_addr": "0xBFC2FE68", + "instruction_count": 106, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2FCC4", + "block_leaders": ["0xBFC2FCC4", "0xBFC2FCDC", "0xBFC2FD24", "0xBFC2FD64", "0xBFC2FD6C", "0xBFC2FDB4", "0xBFC2FDF4", "0xBFC2FDFC", "0xBFC2FE38", "0xBFC2FE40", "0xBFC2FE48", "0xBFC2FE54", "0xBFC2FE5C", "0xBFC2FE60"] + }, + { + "entry_addr": "0xBFC2FE6C", + "normalized_addr": "0x1FC2FE6C", + "end_addr": "0xBFC2FF30", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2FE6C", + "block_leaders": ["0xBFC2FE6C", "0xBFC2FEAC", "0xBFC2FEB4", "0xBFC2FEC4", "0xBFC2FEE0", "0xBFC2FEEC", "0xBFC2FF20", "0xBFC2FF24"] + }, + { + "entry_addr": "0xBFC2FF34", + "normalized_addr": "0x1FC2FF34", + "end_addr": "0xBFC2FF60", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2FCC4 -> jal at 0xBFC2FE30", + "block_leaders": ["0xBFC2FF34", "0xBFC2FF40", "0xBFC2FF5C"] + }, + { + "entry_addr": "0xBFC3010C", + "normalized_addr": "0x1FC3010C", + "end_addr": "0xBFC30158", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3010C", + "block_leaders": ["0xBFC3010C", "0xBFC3012C", "0xBFC30138"] + }, + { + "entry_addr": "0xBFC3015C", + "normalized_addr": "0x1FC3015C", + "end_addr": "0xBFC301A8", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3015C", + "block_leaders": ["0xBFC3015C", "0xBFC3017C", "0xBFC30188"] + }, + { + "entry_addr": "0xBFC301AC", + "normalized_addr": "0x1FC301AC", + "end_addr": "0xBFC30228", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC301AC", + "block_leaders": ["0xBFC301AC", "0xBFC301D8", "0xBFC301E8", "0xBFC301F0", "0xBFC301F4", "0xBFC30200", "0xBFC30208", "0xBFC30214", "0xBFC3021C", "0xBFC30220"] + }, + { + "entry_addr": "0xBFC3022C", + "normalized_addr": "0x1FC3022C", + "end_addr": "0xBFC30298", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3022C", + "block_leaders": ["0xBFC3022C", "0xBFC30258", "0xBFC30260", "0xBFC30268", "0xBFC30270", "0xBFC30278", "0xBFC30284", "0xBFC3028C", "0xBFC30290"] + }, + { + "entry_addr": "0xBFC3029C", + "normalized_addr": "0x1FC3029C", + "end_addr": "0xBFC302B8", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3029C", + "block_leaders": ["0xBFC3029C", "0xBFC302AC"] + }, + { + "entry_addr": "0xBFC302BC", + "normalized_addr": "0x1FC302BC", + "end_addr": "0xBFC30318", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC302BC", + "block_leaders": ["0xBFC302BC", "0xBFC302D0", "0xBFC302DC", "0xBFC302E4", "0xBFC302E8", "0xBFC302F0", "0xBFC302F8", "0xBFC302FC", "0xBFC30304", "0xBFC3030C", "0xBFC30310"] + }, + { + "entry_addr": "0xBFC3031C", + "normalized_addr": "0x1FC3031C", + "end_addr": "0xBFC3034C", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3031C", + "block_leaders": ["0xBFC3031C", "0xBFC30340"] + }, + { + "entry_addr": "0xBFC30350", + "normalized_addr": "0x1FC30350", + "end_addr": "0xBFC30390", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30350", + "block_leaders": ["0xBFC30350", "0xBFC30384"] + }, + { + "entry_addr": "0xBFC303A4", + "normalized_addr": "0x1FC303A4", + "end_addr": "0xBFC30418", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC301AC -> jal at 0xBFC301E0", + "block_leaders": ["0xBFC303A4", "0xBFC303C0", "0xBFC303D4", "0xBFC303E8", "0xBFC303FC", "0xBFC30404", "0xBFC3040C", "0xBFC30414"] + }, + { + "entry_addr": "0xBFC3041C", + "normalized_addr": "0x1FC3041C", + "end_addr": "0xBFC304B0", + "instruction_count": 18, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC301AC -> jal at 0xBFC301F8", + "block_leaders": ["0xBFC3041C", "0xBFC30440", "0xBFC304AC"] + }, + { + "entry_addr": "0xBFC304B4", + "normalized_addr": "0x1FC304B4", + "end_addr": "0xBFC30510", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3022C -> jal at 0xBFC30258", + "block_leaders": ["0xBFC304B4", "0xBFC304D0", "0xBFC304DC", "0xBFC304E8", "0xBFC304F4", "0xBFC304FC", "0xBFC30504", "0xBFC3050C"] + }, + { + "entry_addr": "0xBFC30514", + "normalized_addr": "0x1FC30514", + "end_addr": "0xBFC30588", + "instruction_count": 18, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC3022C -> jal at 0xBFC30268", + "block_leaders": ["0xBFC30514", "0xBFC30538", "0xBFC30584"] + }, + { + "entry_addr": "0xBFC3058C", + "normalized_addr": "0x1FC3058C", + "end_addr": "0xBFC3066C", + "instruction_count": 57, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3079C -> jal at 0xBFC307CC", + "block_leaders": ["0xBFC3058C", "0xBFC305DC", "0xBFC305E0", "0xBFC30600", "0xBFC30604", "0xBFC30624", "0xBFC30628", "0xBFC30638", "0xBFC3063C", "0xBFC3064C", "0xBFC30650", "0xBFC30660", "0xBFC30664"] + }, + { + "entry_addr": "0xBFC30670", + "normalized_addr": "0x1FC30670", + "end_addr": "0xBFC30798", + "instruction_count": 75, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30868 -> jal at 0xBFC30898", + "block_leaders": ["0xBFC30670", "0xBFC306C0", "0xBFC306C4", "0xBFC306E4", "0xBFC306E8", "0xBFC30708", "0xBFC3070C", "0xBFC3072C", "0xBFC30730", "0xBFC30750", "0xBFC30754", "0xBFC30764", "0xBFC30768", "0xBFC30778", "0xBFC3077C", "0xBFC3078C", "0xBFC30790"] + }, + { + "entry_addr": "0xBFC3079C", + "normalized_addr": "0x1FC3079C", + "end_addr": "0xBFC30864", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3079C", + "block_leaders": ["0xBFC3079C", "0xBFC307C0", "0xBFC307D4"] + }, + { + "entry_addr": "0xBFC30868", + "normalized_addr": "0x1FC30868", + "end_addr": "0xBFC30958", + "instruction_count": 61, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30868", + "block_leaders": ["0xBFC30868", "0xBFC3088C", "0xBFC308A0"] + }, + { + "entry_addr": "0xBFC30960", + "normalized_addr": "0x1FC30960", + "end_addr": "0xBFC30A7C", + "instruction_count": 72, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30960", + "block_leaders": ["0xBFC30960", "0xBFC30998", "0xBFC309A8", "0xBFC309CC", "0xBFC30A14", "0xBFC30A20"] + }, + { + "entry_addr": "0xBFC30A80", + "normalized_addr": "0x1FC30A80", + "end_addr": "0xBFC30DE4", + "instruction_count": 218, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30A80", + "block_leaders": ["0xBFC30A80", "0xBFC30AD4", "0xBFC30AE8", "0xBFC30B0C", "0xBFC30BD8", "0xBFC30BE0", "0xBFC30C18", "0xBFC30C44", "0xBFC30C84", "0xBFC30CB4", "0xBFC30CE8", "0xBFC30D14", "0xBFC30D50", "0xBFC30D80", "0xBFC30D8C"] + }, + { + "entry_addr": "0xBFC30DF0", + "normalized_addr": "0x1FC30DF0", + "end_addr": "0xBFC31190", + "instruction_count": 233, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30DF0", + "block_leaders": ["0xBFC30DF0", "0xBFC30E3C", "0xBFC30E4C", "0xBFC30E68", "0xBFC30E7C", "0xBFC30E8C", "0xBFC30EAC", "0xBFC30ECC", "0xBFC30EDC", "0xBFC30F38", "0xBFC30F44", "0xBFC30F50", "0xBFC30F58", "0xBFC30F68", "0xBFC30F6C", "0xBFC30F78", "0xBFC30F80", "0xBFC30F84", "0xBFC30F8C", "0xBFC30F94", "0xBFC30FA8", "0xBFC30FAC", "0xBFC30FB8", "0xBFC30FC0", "0xBFC30FC4", "0xBFC30FCC", "0xBFC30FD4", "0xBFC30FE4", "0xBFC30FE8", "0xBFC30FF4", "0xBFC30FFC", "0xBFC31000", "0xBFC31008", "0xBFC31018", "0xBFC3101C", "0xBFC31028", "0xBFC31030", "0xBFC31034", "0xBFC3103C", "0xBFC31044", "0xBFC31058", "0xBFC3105C", "0xBFC31068", "0xBFC31070", "0xBFC31074", "0xBFC3107C", "0xBFC31084", "0xBFC31094", "0xBFC31098", "0xBFC310A4", "0xBFC310AC", "0xBFC310B0", "0xBFC310B4", "0xBFC310C4", "0xBFC310D0", "0xBFC310D8", "0xBFC310E0", "0xBFC310E8", "0xBFC310EC", "0xBFC310F8", "0xBFC31100", "0xBFC3111C", "0xBFC31128", "0xBFC31138"] + }, + { + "entry_addr": "0xBFC31194", + "normalized_addr": "0x1FC31194", + "end_addr": "0xBFC3137C", + "instruction_count": 123, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31194", + "block_leaders": ["0xBFC31194", "0xBFC311CC", "0xBFC311DC", "0xBFC31200", "0xBFC31234", "0xBFC3123C", "0xBFC31244", "0xBFC31288", "0xBFC31290", "0xBFC31294", "0xBFC312D4", "0xBFC312D8", "0xBFC312E4", "0xBFC312E8", "0xBFC312FC", "0xBFC31300", "0xBFC3130C", "0xBFC31314", "0xBFC31320"] + }, + { + "entry_addr": "0xBFC31380", + "normalized_addr": "0x1FC31380", + "end_addr": "0xBFC313E8", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31380", + "block_leaders": ["0xBFC31380", "0xBFC313AC", "0xBFC313B8", "0xBFC313D0"] + }, + { + "entry_addr": "0xBFC313EC", + "normalized_addr": "0x1FC313EC", + "end_addr": "0xBFC31444", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC313EC", + "block_leaders": ["0xBFC313EC", "0xBFC31410", "0xBFC31418", "0xBFC31430"] + }, + { + "entry_addr": "0xBFC31448", + "normalized_addr": "0x1FC31448", + "end_addr": "0xBFC3157C", + "instruction_count": 78, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31448", + "block_leaders": ["0xBFC31448", "0xBFC31500", "0xBFC31530", "0xBFC31540", "0xBFC31550", "0xBFC31554"] + }, + { + "entry_addr": "0xBFC31580", + "normalized_addr": "0x1FC31580", + "end_addr": "0xBFC31634", + "instruction_count": 46, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31580", + "block_leaders": ["0xBFC31580", "0xBFC315B8", "0xBFC315FC", "0xBFC31614"] + }, + { + "entry_addr": "0xBFC31638", + "normalized_addr": "0x1FC31638", + "end_addr": "0xBFC317C0", + "instruction_count": 99, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31638", + "block_leaders": ["0xBFC31638", "0xBFC3165C", "0xBFC316DC", "0xBFC31708", "0xBFC31724", "0xBFC31744"] + }, + { + "entry_addr": "0xBFC317D0", + "normalized_addr": "0x1FC317D0", + "end_addr": "0xBFC31964", + "instruction_count": 102, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC317D0", + "block_leaders": ["0xBFC317D0", "0xBFC3180C", "0xBFC31828", "0xBFC3182C", "0xBFC31858", "0xBFC31860", "0xBFC31864", "0xBFC3186C", "0xBFC31874", "0xBFC31878", "0xBFC31880", "0xBFC31884", "0xBFC318C4", "0xBFC318E0", "0xBFC318E4", "0xBFC31910", "0xBFC31918", "0xBFC3191C", "0xBFC31924", "0xBFC3192C", "0xBFC31930", "0xBFC31938", "0xBFC3193C", "0xBFC31958"] + }, + { + "entry_addr": "0xBFC31968", + "normalized_addr": "0x1FC31968", + "end_addr": "0xBFC319E8", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31968", + "block_leaders": ["0xBFC31968", "0xBFC3197C", "0xBFC31994", "0xBFC319AC", "0xBFC319B8", "0xBFC319D0", "0xBFC319DC"] + }, + { + "entry_addr": "0xBFC319EC", + "normalized_addr": "0x1FC319EC", + "end_addr": "0xBFC31C60", + "instruction_count": 158, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC228D8 -> jal at 0xBFC22B14", + "block_leaders": ["0xBFC319EC", "0xBFC31A18", "0xBFC31A20", "0xBFC31A24", "0xBFC31A2C", "0xBFC31A34", "0xBFC31A38", "0xBFC31A4C", "0xBFC31A50", "0xBFC31A9C", "0xBFC31AA8", "0xBFC31AF4", "0xBFC31AFC", "0xBFC31B28", "0xBFC31B38", "0xBFC31B40", "0xBFC31B48", "0xBFC31B4C", "0xBFC31B54", "0xBFC31B5C", "0xBFC31B60", "0xBFC31B74", "0xBFC31B78", "0xBFC31BC0", "0xBFC31BCC", "0xBFC31C18", "0xBFC31C20", "0xBFC31C4C", "0xBFC31C50"] + }, + { + "entry_addr": "0xBFC31C64", + "normalized_addr": "0x1FC31C64", + "end_addr": "0xBFC31D10", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31C64", + "block_leaders": ["0xBFC31C64", "0xBFC31C84", "0xBFC31C88", "0xBFC31CB0", "0xBFC31CB8", "0xBFC31CBC", "0xBFC31CC4", "0xBFC31CCC", "0xBFC31CD0", "0xBFC31CD8", "0xBFC31CDC", "0xBFC31D04"] + }, + { + "entry_addr": "0xBFC31D14", + "normalized_addr": "0x1FC31D14", + "end_addr": "0xBFC31DC0", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31D14", + "block_leaders": ["0xBFC31D14", "0xBFC31D34", "0xBFC31D38", "0xBFC31D60", "0xBFC31D68", "0xBFC31D6C", "0xBFC31D74", "0xBFC31D7C", "0xBFC31D80", "0xBFC31D88", "0xBFC31D8C", "0xBFC31DB4"] + }, + { + "entry_addr": "0xBFC31DC4", + "normalized_addr": "0x1FC31DC4", + "end_addr": "0xBFC31E70", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31DC4", + "block_leaders": ["0xBFC31DC4", "0xBFC31DE4", "0xBFC31DE8", "0xBFC31E10", "0xBFC31E18", "0xBFC31E1C", "0xBFC31E24", "0xBFC31E2C", "0xBFC31E30", "0xBFC31E38", "0xBFC31E3C", "0xBFC31E64"] + }, + { + "entry_addr": "0xBFC31E74", + "normalized_addr": "0x1FC31E74", + "end_addr": "0xBFC31F20", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31E74", + "block_leaders": ["0xBFC31E74", "0xBFC31E94", "0xBFC31E98", "0xBFC31EC0", "0xBFC31EC8", "0xBFC31ECC", "0xBFC31ED4", "0xBFC31EDC", "0xBFC31EE0", "0xBFC31EE8", "0xBFC31EEC", "0xBFC31F14"] + }, + { + "entry_addr": "0xBFC32010", + "normalized_addr": "0x1FC32010", + "end_addr": "0xBFC3203C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31968 -> jal at 0xBFC31974", + "block_leaders": ["0xBFC32010", "0xBFC32024", "0xBFC32038"] + }, + { + "entry_addr": "0xBFC32040", + "normalized_addr": "0x1FC32040", + "end_addr": "0xBFC32074", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31968 -> jal at 0xBFC319D4", + "block_leaders": ["0xBFC32040", "0xBFC32054", "0xBFC32070"] + }, + { + "entry_addr": "0xBFC32078", + "normalized_addr": "0x1FC32078", + "end_addr": "0xBFC320B0", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32CCC -> jal at 0xBFC330DC", + "block_leaders": ["0xBFC32078", "0xBFC32090", "0xBFC320AC"] + }, + { + "entry_addr": "0xBFC320B4", + "normalized_addr": "0x1FC320B4", + "end_addr": "0xBFC320FC", + "instruction_count": 19, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32CCC -> jal at 0xBFC3310C", + "block_leaders": ["0xBFC320B4", "0xBFC320D0", "0xBFC320F8"] + }, + { + "entry_addr": "0xBFC32100", + "normalized_addr": "0x1FC32100", + "end_addr": "0xBFC321EC", + "instruction_count": 60, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30DF0 -> jal at 0xBFC310F0", + "block_leaders": ["0xBFC32100", "0xBFC32114", "0xBFC3211C", "0xBFC32130", "0xBFC32144", "0xBFC3214C", "0xBFC321CC", "0xBFC321D0", "0xBFC321D8", "0xBFC321DC", "0xBFC321E4", "0xBFC321E8"] + }, + { + "entry_addr": "0xBFC321F0", + "normalized_addr": "0x1FC321F0", + "end_addr": "0xBFC322E0", + "instruction_count": 61, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30DF0 -> jal at 0xBFC310BC", + "block_leaders": ["0xBFC321F0", "0xBFC32208", "0xBFC32210", "0xBFC32224", "0xBFC32238", "0xBFC322C0", "0xBFC322C4", "0xBFC322CC", "0xBFC322D0", "0xBFC322D8", "0xBFC322DC"] + }, + { + "entry_addr": "0xBFC322E4", + "normalized_addr": "0x1FC322E4", + "end_addr": "0xBFC32364", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC322E4", + "block_leaders": ["0xBFC322E4", "0xBFC32324", "0xBFC32348", "0xBFC32354"] + }, + { + "entry_addr": "0xBFC32368", + "normalized_addr": "0x1FC32368", + "end_addr": "0xBFC3240C", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC322E4 -> jal at 0xBFC3231C", + "block_leaders": ["0xBFC32368", "0xBFC3239C", "0xBFC323A0", "0xBFC323A8", "0xBFC323AC", "0xBFC323B8", "0xBFC323C0", "0xBFC323C4", "0xBFC323CC", "0xBFC323D4", "0xBFC323D8", "0xBFC323EC", "0xBFC323F0", "0xBFC323FC", "0xBFC32404", "0xBFC32408"] + }, + { + "entry_addr": "0xBFC32410", + "normalized_addr": "0x1FC32410", + "end_addr": "0xBFC3244C", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32410", + "block_leaders": ["0xBFC32410", "0xBFC32434"] + }, + { + "entry_addr": "0xBFC32450", + "normalized_addr": "0x1FC32450", + "end_addr": "0xBFC32558", + "instruction_count": 67, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32450", + "block_leaders": ["0xBFC32450", "0xBFC32490", "0xBFC324A4", "0xBFC324AC", "0xBFC324C8", "0xBFC324D0", "0xBFC324F8", "0xBFC32514", "0xBFC3251C", "0xBFC32534", "0xBFC32540", "0xBFC32548"] + }, + { + "entry_addr": "0xBFC3255C", + "normalized_addr": "0x1FC3255C", + "end_addr": "0xBFC3270C", + "instruction_count": 109, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3255C", + "block_leaders": ["0xBFC3255C", "0xBFC3258C", "0xBFC325A8", "0xBFC325B0", "0xBFC325C8", "0xBFC325E4", "0xBFC325EC", "0xBFC32604", "0xBFC3260C", "0xBFC32624", "0xBFC3262C", "0xBFC32644", "0xBFC3264C", "0xBFC3265C", "0xBFC32660", "0xBFC3266C", "0xBFC32674", "0xBFC3267C", "0xBFC3268C", "0xBFC32690", "0xBFC3269C", "0xBFC326C0", "0xBFC326D0", "0xBFC326E8", "0xBFC326F0", "0xBFC326F8"] + }, + { + "entry_addr": "0xBFC32710", + "normalized_addr": "0x1FC32710", + "end_addr": "0xBFC32720", + "instruction_count": 5, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30DF0 -> jal at 0xBFC30ED4", + "block_leaders": ["0xBFC32710"] + }, + { + "entry_addr": "0xBFC32724", + "normalized_addr": "0x1FC32724", + "end_addr": "0xBFC3281C", + "instruction_count": 63, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32724", + "block_leaders": ["0xBFC32724", "0xBFC32758", "0xBFC32764", "0xBFC3278C", "0xBFC327C4", "0xBFC327CC", "0xBFC327E0", "0xBFC327F4", "0xBFC327F8", "0xBFC32800", "0xBFC32808"] + }, + { + "entry_addr": "0xBFC32820", + "normalized_addr": "0x1FC32820", + "end_addr": "0xBFC328F0", + "instruction_count": 53, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32820", + "block_leaders": ["0xBFC32820", "0xBFC3285C", "0xBFC3286C", "0xBFC32874", "0xBFC328BC", "0xBFC328C0", "0xBFC328CC"] + }, + { + "entry_addr": "0xBFC328F4", + "normalized_addr": "0x1FC328F4", + "end_addr": "0xBFC32940", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC328F4", + "block_leaders": ["0xBFC328F4", "0xBFC3291C", "0xBFC32934"] + }, + { + "entry_addr": "0xBFC32944", + "normalized_addr": "0x1FC32944", + "end_addr": "0xBFC329E0", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC328F4 -> jal at 0xBFC32914", + "block_leaders": ["0xBFC32944", "0xBFC3294C", "0xBFC3296C", "0xBFC32988", "0xBFC329A8", "0xBFC329B0", "0xBFC329B8", "0xBFC329C0"] + }, + { + "entry_addr": "0xBFC329F0", + "normalized_addr": "0x1FC329F0", + "end_addr": "0xBFC32CC8", + "instruction_count": 183, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC329F0", + "block_leaders": ["0xBFC329F0", "0xBFC32A44", "0xBFC32A48", "0xBFC32A50", "0xBFC32A5C", "0xBFC32A6C", "0xBFC32AA4", "0xBFC32AA8", "0xBFC32AB8", "0xBFC32ABC", "0xBFC32AC4", "0xBFC32AEC", "0xBFC32AF0", "0xBFC32AF4", "0xBFC32B0C", "0xBFC32B18", "0xBFC32B1C", "0xBFC32C30", "0xBFC32C50", "0xBFC32C90", "0xBFC32C9C"] + }, + { + "entry_addr": "0xBFC32CCC", + "normalized_addr": "0x1FC32CCC", + "end_addr": "0xBFC33134", + "instruction_count": 283, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC32CCC", + "block_leaders": ["0xBFC32CCC", "0xBFC32D0C", "0xBFC32D18", "0xBFC32D20", "0xBFC32D3C", "0xBFC32D44", "0xBFC32D54", "0xBFC32D58", "0xBFC32D64", "0xBFC32D6C", "0xBFC32D70", "0xBFC32D78", "0xBFC32D80", "0xBFC32D94", "0xBFC32D98", "0xBFC32DA4", "0xBFC32DAC", "0xBFC32DB0", "0xBFC32DB8", "0xBFC32DC0", "0xBFC32DD0", "0xBFC32DD4", "0xBFC32DE0", "0xBFC32DE8", "0xBFC32DEC", "0xBFC32DF4", "0xBFC32E04", "0xBFC32E08", "0xBFC32E14", "0xBFC32E1C", "0xBFC32E20", "0xBFC32E28", "0xBFC32E30", "0xBFC32E44", "0xBFC32E48", "0xBFC32E54", "0xBFC32E5C", "0xBFC32E60", "0xBFC32E68", "0xBFC32E70", "0xBFC32E80", "0xBFC32E84", "0xBFC32E90", "0xBFC32E98", "0xBFC32E9C", "0xBFC32EA0", "0xBFC32EB0", "0xBFC32EBC", "0xBFC32ECC", "0xBFC32ED4", "0xBFC32F0C", "0xBFC32F10", "0xBFC32F1C", "0xBFC32F20", "0xBFC32F2C", "0xBFC32F30", "0xBFC32F3C", "0xBFC32F40", "0xBFC32F44", "0xBFC32F4C", "0xBFC32F5C", "0xBFC32F60", "0xBFC32F6C", "0xBFC32F74", "0xBFC32F78", "0xBFC32F80", "0xBFC32F88", "0xBFC32F9C", "0xBFC32FA0", "0xBFC32FAC", "0xBFC32FB4", "0xBFC32FB8", "0xBFC32FC0", "0xBFC32FC8", "0xBFC32FD8", "0xBFC32FDC", "0xBFC32FE8", "0xBFC32FF0", "0xBFC32FF4", "0xBFC32FFC", "0xBFC3300C", "0xBFC33010", "0xBFC3301C", "0xBFC33024", "0xBFC33028", "0xBFC33030", "0xBFC33038", "0xBFC3304C", "0xBFC33050", "0xBFC3305C", "0xBFC33064", "0xBFC33068", "0xBFC33070", "0xBFC33078", "0xBFC33088", "0xBFC3308C", "0xBFC33098", "0xBFC330A0", "0xBFC330A4", "0xBFC330A8", "0xBFC330B8", "0xBFC330C4", "0xBFC330D8", "0xBFC330E4", "0xBFC330F0", "0xBFC33104", "0xBFC33114", "0xBFC3311C"] + }, + { + "entry_addr": "0xBFC33138", + "normalized_addr": "0x1FC33138", + "end_addr": "0xBFC33198", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC33138", + "block_leaders": ["0xBFC33138", "0xBFC33148"] + }, + { + "entry_addr": "0xBFC331A0", + "normalized_addr": "0x1FC331A0", + "end_addr": "0xBFC33354", + "instruction_count": 110, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC331A0", + "block_leaders": ["0xBFC331A0", "0xBFC331E8", "0xBFC331F0", "0xBFC331F4", "0xBFC33208", "0xBFC33210", "0xBFC33214", "0xBFC33220", "0xBFC33228", "0xBFC3322C", "0xBFC33238", "0xBFC33240", "0xBFC33244", "0xBFC33250", "0xBFC3325C", "0xBFC33268", "0xBFC3327C", "0xBFC3328C", "0xBFC3329C", "0xBFC332B4", "0xBFC332C0", "0xBFC332C4", "0xBFC332CC", "0xBFC332D8", "0xBFC332EC", "0xBFC332FC", "0xBFC3330C", "0xBFC33324", "0xBFC3332C", "0xBFC33330"] + }, + { + "entry_addr": "0xBFC33358", + "normalized_addr": "0x1FC33358", + "end_addr": "0xBFC333F8", + "instruction_count": 41, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC33358", + "block_leaders": ["0xBFC33358", "0xBFC33398", "0xBFC333BC", "0xBFC333E0"] + }, + { + "entry_addr": "0xBFC33400", + "normalized_addr": "0x1FC33400", + "end_addr": "0xBFC33534", + "instruction_count": 78, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC33400", + "block_leaders": ["0xBFC33400", "0xBFC33438", "0xBFC33460", "0xBFC33468", "0xBFC33478", "0xBFC3347C", "0xBFC3348C", "0xBFC3349C", "0xBFC334AC", "0xBFC334BC", "0xBFC334C4", "0xBFC334CC", "0xBFC334D0", "0xBFC334E0", "0xBFC334F0", "0xBFC33504", "0xBFC33528"] + }, + { + "entry_addr": "0xBFC33538", + "normalized_addr": "0x1FC33538", + "end_addr": "0xBFC336E8", + "instruction_count": 109, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC33400 -> jal at 0xBFC334B4", + "block_leaders": ["0xBFC33538", "0xBFC3356C", "0xBFC33574", "0xBFC33580", "0xBFC33588", "0xBFC33594", "0xBFC3359C", "0xBFC335A8", "0xBFC335B0", "0xBFC335BC", "0xBFC335C0", "0xBFC335CC", "0xBFC335D4", "0xBFC335E0", "0xBFC335E4", "0xBFC335F8", "0xBFC33600", "0xBFC3360C", "0xBFC33614", "0xBFC33620", "0xBFC33628", "0xBFC33634", "0xBFC33638", "0xBFC33644", "0xBFC3364C", "0xBFC3365C", "0xBFC33660", "0xBFC33674", "0xBFC3367C", "0xBFC33684", "0xBFC3368C", "0xBFC33698", "0xBFC3369C", "0xBFC336A8", "0xBFC336AC", "0xBFC336BC", "0xBFC336C4", "0xBFC336D0", "0xBFC336D4", "0xBFC336E0", "0xBFC336E4"] + }, + { + "entry_addr": "0xBFC336F0", + "normalized_addr": "0x1FC336F0", + "end_addr": "0xBFC3370C", + "instruction_count": 8, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29B18", + "block_leaders": ["0xBFC336F0"] + }, + { + "entry_addr": "0xBFC339F0", + "normalized_addr": "0x1FC339F0", + "end_addr": "0xBFC33AB4", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34B58 -> jal at 0xBFC34E2C", + "block_leaders": ["0xBFC339F0", "0xBFC33A58"] + }, + { + "entry_addr": "0xBFC33C98", + "normalized_addr": "0x1FC33C98", + "end_addr": "0xBFC33C98", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC34B58 -> jal at 0xBFC34E2C -> jal at 0xBFC33A50", + "block_leaders": ["0xBFC33C98"] + }, + { + "entry_addr": "0xBFC33CC0", + "normalized_addr": "0x1FC33CC0", + "end_addr": "0xBFC33CCC", + "instruction_count": 4, + "termination_reason": "no_exit_found", + "discovered_by": "jal_BFC33CC0", + "block_leaders": ["0xBFC33CC0"] + }, + { + "entry_addr": "0xBFC33F00", + "normalized_addr": "0x1FC33F00", + "end_addr": "0xBFC33F0C", + "instruction_count": 4, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC18D10 -> jal at 0xBFC18D3C", + "block_leaders": ["0xBFC33F00"] + }, + { + "entry_addr": "0xBFC33F20", + "normalized_addr": "0x1FC33F20", + "end_addr": "0xBFC33F2C", + "instruction_count": 4, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC18D10 -> jal at 0xBFC18D4C", + "block_leaders": ["0xBFC33F20"] + }, + { + "entry_addr": "0xBFC33FB4", + "normalized_addr": "0x1FC33FB4", + "end_addr": "0xBFC33FBC", + "instruction_count": 3, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC18D10 -> jal at 0xBFC18D24", + "block_leaders": ["0xBFC33FB4"] + }, + { + "entry_addr": "0xBFC33FCC", + "normalized_addr": "0x1FC33FCC", + "end_addr": "0xBFC33FCC", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC18D10 -> jal at 0xBFC18D2C", + "block_leaders": ["0xBFC33FCC"] + }, + { + "entry_addr": "0xBFC33FD8", + "normalized_addr": "0x1FC33FD8", + "end_addr": "0xBFC33FD8", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29C84 -> jal at 0xBFC34B38", + "block_leaders": ["0xBFC33FD8"] + }, + { + "entry_addr": "0xBFC33FE4", + "normalized_addr": "0x1FC33FE4", + "end_addr": "0xBFC33FE4", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29C84 -> jal at 0xBFC34B40", + "block_leaders": ["0xBFC33FE4"] + }, + { + "entry_addr": "0xBFC34160", + "normalized_addr": "0x1FC34160", + "end_addr": "0xBFC34300", + "instruction_count": 105, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34160", + "block_leaders": ["0xBFC34160", "0xBFC34188", "0xBFC34194", "0xBFC341A0", "0xBFC341B0", "0xBFC341C4", "0xBFC341DC"] + }, + { + "entry_addr": "0xBFC34304", + "normalized_addr": "0x1FC34304", + "end_addr": "0xBFC344A0", + "instruction_count": 104, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34304", + "block_leaders": ["0xBFC34304", "0xBFC3432C", "0xBFC34338", "0xBFC34344", "0xBFC34354", "0xBFC34368", "0xBFC34380"] + }, + { + "entry_addr": "0xBFC344A4", + "normalized_addr": "0x1FC344A4", + "end_addr": "0xBFC345F0", + "instruction_count": 84, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC344A4", + "block_leaders": ["0xBFC344A4", "0xBFC344BC", "0xBFC344D0"] + }, + { + "entry_addr": "0xBFC345F4", + "normalized_addr": "0x1FC345F4", + "end_addr": "0xBFC34744", + "instruction_count": 85, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC345F4", + "block_leaders": ["0xBFC345F4", "0xBFC3460C", "0xBFC34620"] + }, + { + "entry_addr": "0xBFC34748", + "normalized_addr": "0x1FC34748", + "end_addr": "0xBFC34894", + "instruction_count": 84, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34748", + "block_leaders": ["0xBFC34748", "0xBFC34760", "0xBFC34774"] + }, + { + "entry_addr": "0xBFC34898", + "normalized_addr": "0x1FC34898", + "end_addr": "0xBFC348F8", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34898", + "block_leaders": ["0xBFC34898", "0xBFC348A8", "0xBFC348B4", "0xBFC348BC", "0xBFC348C0", "0xBFC348C8", "0xBFC348D0", "0xBFC348D8", "0xBFC348E0", "0xBFC348E4", "0xBFC348EC"] + }, + { + "entry_addr": "0xBFC348FC", + "normalized_addr": "0x1FC348FC", + "end_addr": "0xBFC349B4", + "instruction_count": 47, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC34898 -> jal at 0xBFC348E4", + "block_leaders": ["0xBFC348FC", "0xBFC34904", "0xBFC3490C", "0xBFC34924", "0xBFC34928", "0xBFC34930", "0xBFC34938", "0xBFC34954", "0xBFC34958", "0xBFC34960", "0xBFC34968", "0xBFC34980", "0xBFC34984", "0xBFC3498C", "0xBFC34994", "0xBFC349B0"] + }, + { + "entry_addr": "0xBFC349B8", + "normalized_addr": "0x1FC349B8", + "end_addr": "0xBFC34A8C", + "instruction_count": 54, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC31638 -> jal at 0xBFC316D4", + "block_leaders": ["0xBFC349B8", "0xBFC349C0", "0xBFC349C4", "0xBFC349CC", "0xBFC349D4", "0xBFC349D8", "0xBFC349E0", "0xBFC349E8", "0xBFC34A04", "0xBFC34A08", "0xBFC34A10", "0xBFC34A18", "0xBFC34A30", "0xBFC34A34", "0xBFC34A3C", "0xBFC34A44", "0xBFC34A60", "0xBFC34A64", "0xBFC34A6C", "0xBFC34A74", "0xBFC34A88"] + }, + { + "entry_addr": "0xBFC34AF0", + "normalized_addr": "0x1FC34AF0", + "end_addr": "0xBFC34B54", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29C84", + "block_leaders": ["0xBFC34AF0", "0xBFC34B1C", "0xBFC34B20", "0xBFC34B2C", "0xBFC34B34", "0xBFC34B38", "0xBFC34B40", "0xBFC34B48"] + }, + { + "entry_addr": "0xBFC34B58", + "normalized_addr": "0x1FC34B58", + "end_addr": "0xBFC34EBC", + "instruction_count": 187, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC34B58", + "block_leaders": ["0xBFC34B58", "0xBFC34CC8", "0xBFC34CD0", "0xBFC34CE0", "0xBFC34CE8", "0xBFC34CF4", "0xBFC34D04", "0xBFC34D24", "0xBFC34D2C", "0xBFC34D40", "0xBFC34D54", "0xBFC34D60", "0xBFC34D70", "0xBFC34D80", "0xBFC34E18", "0xBFC34E28", "0xBFC34E34", "0xBFC34E58", "0xBFC34E80", "0xBFC34E8C"] + }, + { + "entry_addr": "0xBFC3586C", + "normalized_addr": "0x1FC3586C", + "end_addr": "0xBFC3588C", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29D00", + "block_leaders": ["0xBFC3586C"] + }, + { + "entry_addr": "0xBFC359B4", + "normalized_addr": "0x1FC359B4", + "end_addr": "0xBFC35AD4", + "instruction_count": 73, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29CC8", + "block_leaders": ["0xBFC359B4"] + }, + { + "entry_addr": "0xBFC35AD8", + "normalized_addr": "0x1FC35AD8", + "end_addr": "0xBFC35AEC", + "instruction_count": 6, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29DA4", + "block_leaders": ["0xBFC35AD8"] + }, + { + "entry_addr": "0xBFC35B08", + "normalized_addr": "0x1FC35B08", + "end_addr": "0xBFC35B1C", + "instruction_count": 6, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29CB4", + "block_leaders": ["0xBFC35B08"] + }, + { + "entry_addr": "0xBFC35B38", + "normalized_addr": "0x1FC35B38", + "end_addr": "0xBFC35B4C", + "instruction_count": 6, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29CA8", + "block_leaders": ["0xBFC35B38"] + }, + { + "entry_addr": "0xBFC35B68", + "normalized_addr": "0x1FC35B68", + "end_addr": "0xBFC35B74", + "instruction_count": 4, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29DB0", + "block_leaders": ["0xBFC35B68"] + }, + { + "entry_addr": "0xBFC36068", + "normalized_addr": "0x1FC36068", + "end_addr": "0xBFC36068", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29EC4", + "block_leaders": ["0xBFC36068"] + }, + { + "entry_addr": "0xBFC362D0", + "normalized_addr": "0x1FC362D0", + "end_addr": "0xBFC362D0", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC34B58 -> jal at 0xBFC34E20", + "block_leaders": ["0xBFC362D0"] + }, + { + "entry_addr": "0xBFC36740", + "normalized_addr": "0x1FC36740", + "end_addr": "0xBFC36740", + "instruction_count": 1, + "termination_reason": "no_exit_found", + "discovered_by": "ghidra_BFC29AE0 -> jal at 0xBFC29EAC", + "block_leaders": ["0xBFC36740"] + }, + { + "entry_addr": "0xBFC36CF0", + "normalized_addr": "0x1FC36CF0", + "end_addr": "0xBFC36D18", + "instruction_count": 11, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC36CF0", + "block_leaders": ["0xBFC36CF0", "0xBFC36D0C"] + }, + { + "entry_addr": "0xBFC36D1C", + "normalized_addr": "0x1FC36D1C", + "end_addr": "0xBFC36D44", + "instruction_count": 11, + "termination_reason": "indirect_jump_recorded_for_1d", + "discovered_by": "ghidra_BFC36D1C", + "block_leaders": ["0xBFC36D1C"] + }, + { + "entry_addr": "0xBFC36D48", + "normalized_addr": "0x1FC36D48", + "end_addr": "0xBFC36EBC", + "instruction_count": 94, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC36D48", + "block_leaders": ["0xBFC36D48", "0xBFC36D50", "0xBFC36D68", "0xBFC36D78", "0xBFC36D94", "0xBFC36DA0", "0xBFC36DA8", "0xBFC36DC4", "0xBFC36DD0", "0xBFC36DEC", "0xBFC36DF8", "0xBFC36E0C", "0xBFC36E14", "0xBFC36E18", "0xBFC36E34", "0xBFC36E54", "0xBFC36E68", "0xBFC36E80", "0xBFC36E8C", "0xBFC36E94", "0xBFC36EB0", "0xBFC36EB4"] + }, + { + "entry_addr": "0xBFC36EC0", + "normalized_addr": "0x1FC36EC0", + "end_addr": "0xBFC36F8C", + "instruction_count": 52, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC36EC0", + "block_leaders": ["0xBFC36EC0", "0xBFC36EE0", "0xBFC36EE8", "0xBFC36EEC", "0xBFC36F08", "0xBFC36F28", "0xBFC36F3C", "0xBFC36F50", "0xBFC36F5C", "0xBFC36F60", "0xBFC36F64", "0xBFC36F80", "0xBFC36F84"] + }, + { + "entry_addr": "0xBFC36F90", + "normalized_addr": "0x1FC36F90", + "end_addr": "0xBFC36FEC", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC36F90", + "block_leaders": ["0xBFC36F90", "0xBFC36FB0", "0xBFC36FD8", "0xBFC36FE0"] + }, + { + "entry_addr": "0xBFC36FF0", + "normalized_addr": "0x1FC36FF0", + "end_addr": "0xBFC36FFC", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC36FF0", + "block_leaders": ["0xBFC36FF0"] + }, + { + "entry_addr": "0xBFC37028", + "normalized_addr": "0x1FC37028", + "end_addr": "0xBFC3706C", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37028", + "block_leaders": ["0xBFC37028", "0xBFC37034", "0xBFC3703C", "0xBFC37044", "0xBFC37060"] + }, + { + "entry_addr": "0xBFC37070", + "normalized_addr": "0x1FC37070", + "end_addr": "0xBFC3709C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37070", + "block_leaders": ["0xBFC37070", "0xBFC37090"] + }, + { + "entry_addr": "0xBFC370A0", + "normalized_addr": "0x1FC370A0", + "end_addr": "0xBFC370F0", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC370A0", + "block_leaders": ["0xBFC370A0", "0xBFC370E4"] + }, + { + "entry_addr": "0xBFC370F4", + "normalized_addr": "0x1FC370F4", + "end_addr": "0xBFC3712C", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC370F4", + "block_leaders": ["0xBFC370F4", "0xBFC37120"] + }, + { + "entry_addr": "0xBFC37130", + "normalized_addr": "0x1FC37130", + "end_addr": "0xBFC37168", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37130", + "block_leaders": ["0xBFC37130", "0xBFC3715C"] + }, + { + "entry_addr": "0xBFC3716C", + "normalized_addr": "0x1FC3716C", + "end_addr": "0xBFC371E0", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3716C", + "block_leaders": ["0xBFC3716C", "0xBFC371D4"] + }, + { + "entry_addr": "0xBFC37334", + "normalized_addr": "0x1FC37334", + "end_addr": "0xBFC37364", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37334", + "block_leaders": ["0xBFC37334", "0xBFC37358"] + }, + { + "entry_addr": "0xBFC37368", + "normalized_addr": "0x1FC37368", + "end_addr": "0xBFC373DC", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37368", + "block_leaders": ["0xBFC37368", "0xBFC37380", "0xBFC37390", "0xBFC373AC", "0xBFC373D0"] + }, + { + "entry_addr": "0xBFC373E0", + "normalized_addr": "0x1FC373E0", + "end_addr": "0xBFC37430", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC373E0", + "block_leaders": ["0xBFC373E0", "0xBFC373F8", "0xBFC37400", "0xBFC37408", "0xBFC37424", "0xBFC37428"] + }, + { + "entry_addr": "0xBFC37434", + "normalized_addr": "0x1FC37434", + "end_addr": "0xBFC374B8", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37434", + "block_leaders": ["0xBFC37434", "0xBFC37458", "0xBFC37494", "0xBFC374A8"] + }, + { + "entry_addr": "0xBFC374BC", + "normalized_addr": "0x1FC374BC", + "end_addr": "0xBFC374E8", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC374BC", + "block_leaders": ["0xBFC374BC", "0xBFC374DC"] + }, + { + "entry_addr": "0xBFC374EC", + "normalized_addr": "0x1FC374EC", + "end_addr": "0xBFC37834", + "instruction_count": 211, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC374EC", + "block_leaders": ["0xBFC374EC", "0xBFC37508", "0xBFC37518", "0xBFC37538", "0xBFC37550", "0xBFC37570", "0xBFC375A0", "0xBFC375A8", "0xBFC375AC", "0xBFC375C4", "0xBFC375CC", "0xBFC375D0", "0xBFC375DC", "0xBFC375E4", "0xBFC375F0", "0xBFC375F8", "0xBFC375FC", "0xBFC37600", "0xBFC37610", "0xBFC37618", "0xBFC3761C", "0xBFC37624", "0xBFC3762C", "0xBFC37630", "0xBFC37634", "0xBFC3763C", "0xBFC37644", "0xBFC37648", "0xBFC37650", "0xBFC37658", "0xBFC3765C", "0xBFC37660", "0xBFC3766C", "0xBFC37674", "0xBFC37678", "0xBFC37680", "0xBFC37688", "0xBFC3768C", "0xBFC37690", "0xBFC376C8", "0xBFC37700", "0xBFC37718", "0xBFC37720", "0xBFC37730", "0xBFC37734", "0xBFC37744", "0xBFC37748", "0xBFC3775C", "0xBFC37760", "0xBFC37774", "0xBFC3777C", "0xBFC37780", "0xBFC37788", "0xBFC37790", "0xBFC37794", "0xBFC3779C", "0xBFC377A4", "0xBFC377A8", "0xBFC377B0", "0xBFC377B8", "0xBFC377BC", "0xBFC377C4", "0xBFC377CC", "0xBFC377D0", "0xBFC377E4", "0xBFC377EC", "0xBFC377F0", "0xBFC3780C", "0xBFC37824"] + }, + { + "entry_addr": "0xBFC37838", + "normalized_addr": "0x1FC37838", + "end_addr": "0xBFC37864", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37838", + "block_leaders": ["0xBFC37838", "0xBFC37858"] + }, + { + "entry_addr": "0xBFC37868", + "normalized_addr": "0x1FC37868", + "end_addr": "0xBFC378B0", + "instruction_count": 19, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37868", + "block_leaders": ["0xBFC37868", "0xBFC37888", "0xBFC37898", "0xBFC378A0", "0xBFC378A4"] + }, + { + "entry_addr": "0xBFC378B4", + "normalized_addr": "0x1FC378B4", + "end_addr": "0xBFC37904", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC378B4", + "block_leaders": ["0xBFC378B4", "0xBFC378E8"] + }, + { + "entry_addr": "0xBFC37908", + "normalized_addr": "0x1FC37908", + "end_addr": "0xBFC37994", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37908", + "block_leaders": ["0xBFC37908", "0xBFC37948", "0xBFC3797C"] + }, + { + "entry_addr": "0xBFC37998", + "normalized_addr": "0x1FC37998", + "end_addr": "0xBFC379F0", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37998", + "block_leaders": ["0xBFC37998", "0xBFC379D4"] + }, + { + "entry_addr": "0xBFC37A4C", + "normalized_addr": "0x1FC37A4C", + "end_addr": "0xBFC37AC0", + "instruction_count": 30, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37A4C", + "block_leaders": ["0xBFC37A4C", "0xBFC37A90", "0xBFC37AA8"] + }, + { + "entry_addr": "0xBFC37AC4", + "normalized_addr": "0x1FC37AC4", + "end_addr": "0xBFC37DC4", + "instruction_count": 193, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC37AC4", + "block_leaders": ["0xBFC37AC4", "0xBFC37AF0", "0xBFC37B1C", "0xBFC37B40", "0xBFC37B64", "0xBFC37B80", "0xBFC37BA8", "0xBFC37BE0", "0xBFC37BE8", "0xBFC37BEC", "0xBFC37BFC", "0xBFC37C04", "0xBFC37C08", "0xBFC37C0C", "0xBFC37C10", "0xBFC37C20", "0xBFC37C28", "0xBFC37C3C", "0xBFC37C44", "0xBFC37C48", "0xBFC37C5C", "0xBFC37C64", "0xBFC37C6C", "0xBFC37C70", "0xBFC37C78", "0xBFC37C80", "0xBFC37C84", "0xBFC37C98", "0xBFC37CAC", "0xBFC37CB0", "0xBFC37D40", "0xBFC37D90"] + }, + { + "entry_addr": "0xBFC37DC8", + "normalized_addr": "0x1FC37DC8", + "end_addr": "0xBFC37E5C", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC37DC8", + "block_leaders": ["0xBFC37DC8", "0xBFC37DDC", "0xBFC37DE4", "0xBFC37DEC", "0xBFC37DF0", "0xBFC37DF8", "0xBFC37E00", "0xBFC37E04", "0xBFC37E1C", "0xBFC37E24", "0xBFC37E2C", "0xBFC37E30", "0xBFC37E38", "0xBFC37E40", "0xBFC37E44"] + }, + { + "entry_addr": "0xBFC37E60", + "normalized_addr": "0x1FC37E60", + "end_addr": "0xBFC37F48", + "instruction_count": 58, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC37E60", + "block_leaders": ["0xBFC37E60", "0xBFC37E74", "0xBFC37E7C", "0xBFC37E88", "0xBFC37E90", "0xBFC37E94", "0xBFC37E9C", "0xBFC37EA4", "0xBFC37EB4", "0xBFC37EC8", "0xBFC37ED0", "0xBFC37ED4", "0xBFC37EE0", "0xBFC37EE8", "0xBFC37EF0", "0xBFC37EF4", "0xBFC37EFC", "0xBFC37F00", "0xBFC37F08", "0xBFC37F10", "0xBFC37F30"] + }, + { + "entry_addr": "0xBFC37F4C", + "normalized_addr": "0x1FC37F4C", + "end_addr": "0xBFC38034", + "instruction_count": 58, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC37F4C", + "block_leaders": ["0xBFC37F4C", "0xBFC37F60", "0xBFC37F68", "0xBFC37F74", "0xBFC37F7C", "0xBFC37F80", "0xBFC37F88", "0xBFC37F90", "0xBFC37FA0", "0xBFC37FB4", "0xBFC37FBC", "0xBFC37FC0", "0xBFC37FCC", "0xBFC37FD4", "0xBFC37FDC", "0xBFC37FE0", "0xBFC37FE8", "0xBFC37FEC", "0xBFC37FF4", "0xBFC37FFC", "0xBFC3801C"] + }, + { + "entry_addr": "0xBFC38038", + "normalized_addr": "0x1FC38038", + "end_addr": "0xBFC3808C", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC38038", + "block_leaders": ["0xBFC38038", "0xBFC38054", "0xBFC38070"] + }, + { + "entry_addr": "0xBFC38090", + "normalized_addr": "0x1FC38090", + "end_addr": "0xBFC38104", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC38090", + "block_leaders": ["0xBFC38090", "0xBFC38098", "0xBFC38100"] + }, + { + "entry_addr": "0xBFC38108", + "normalized_addr": "0x1FC38108", + "end_addr": "0xBFC381E8", + "instruction_count": 57, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC374EC -> jal at 0xBFC37510", + "block_leaders": ["0xBFC38108", "0xBFC38110", "0xBFC3811C", "0xBFC38130", "0xBFC38148", "0xBFC38150", "0xBFC38158", "0xBFC3816C", "0xBFC38188", "0xBFC3818C", "0xBFC3819C", "0xBFC381B0", "0xBFC381B4", "0xBFC381B8", "0xBFC381C0", "0xBFC381D4", "0xBFC381DC", "0xBFC381E4"] + }, + { + "entry_addr": "0xBFC38204", + "normalized_addr": "0x1FC38204", + "end_addr": "0xBFC382DC", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38204", + "block_leaders": ["0xBFC38204", "0xBFC38270", "0xBFC38290", "0xBFC38298", "0xBFC382A0", "0xBFC382A8", "0xBFC382C8", "0xBFC382CC", "0xBFC382D0"] + }, + { + "entry_addr": "0xBFC382E0", + "normalized_addr": "0x1FC382E0", + "end_addr": "0xBFC38520", + "instruction_count": 145, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC382E0", + "block_leaders": ["0xBFC382E0", "0xBFC38320", "0xBFC38328", "0xBFC3832C", "0xBFC3833C", "0xBFC38344", "0xBFC38348", "0xBFC3834C", "0xBFC38350", "0xBFC38360", "0xBFC38368", "0xBFC3837C", "0xBFC38384", "0xBFC38388", "0xBFC3839C", "0xBFC383A4", "0xBFC383AC", "0xBFC383B0", "0xBFC383B8", "0xBFC383C0", "0xBFC383C4", "0xBFC383D8", "0xBFC383EC", "0xBFC383F0", "0xBFC3847C", "0xBFC38494", "0xBFC384AC", "0xBFC384C0", "0xBFC384C4", "0xBFC38508", "0xBFC38514"] + }, + { + "entry_addr": "0xBFC38524", + "normalized_addr": "0x1FC38524", + "end_addr": "0xBFC387D0", + "instruction_count": 172, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38524", + "block_leaders": ["0xBFC38524", "0xBFC3856C", "0xBFC38574", "0xBFC38578", "0xBFC38588", "0xBFC38590", "0xBFC38594", "0xBFC38598", "0xBFC3859C", "0xBFC385AC", "0xBFC385B4", "0xBFC385C8", "0xBFC385D0", "0xBFC385D4", "0xBFC385E8", "0xBFC385F0", "0xBFC385F8", "0xBFC385FC", "0xBFC38604", "0xBFC3860C", "0xBFC38610", "0xBFC38624", "0xBFC38630", "0xBFC38634", "0xBFC38644", "0xBFC38660", "0xBFC38664", "0xBFC38670", "0xBFC38690", "0xBFC38698", "0xBFC386A0", "0xBFC386C0", "0xBFC386E0", "0xBFC386EC", "0xBFC386F0", "0xBFC386F4", "0xBFC38718", "0xBFC38720", "0xBFC38724", "0xBFC38730", "0xBFC38748", "0xBFC38750", "0xBFC38754", "0xBFC38760", "0xBFC387C0"] + }, + { + "entry_addr": "0xBFC387D4", + "normalized_addr": "0x1FC387D4", + "end_addr": "0xBFC38A78", + "instruction_count": 170, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC387D4", + "block_leaders": ["0xBFC387D4", "0xBFC38818", "0xBFC38820", "0xBFC38824", "0xBFC38834", "0xBFC3883C", "0xBFC38840", "0xBFC38844", "0xBFC38848", "0xBFC38858", "0xBFC38860", "0xBFC38874", "0xBFC3887C", "0xBFC38880", "0xBFC38894", "0xBFC3889C", "0xBFC388A4", "0xBFC388A8", "0xBFC388B0", "0xBFC388B8", "0xBFC388BC", "0xBFC388DC", "0xBFC388E0", "0xBFC388EC", "0xBFC388F4", "0xBFC38914", "0xBFC3891C", "0xBFC38924", "0xBFC3892C", "0xBFC38940", "0xBFC38960", "0xBFC38968", "0xBFC389AC", "0xBFC389C0", "0xBFC389C8", "0xBFC389D0", "0xBFC389D4", "0xBFC389E0", "0xBFC389F8", "0xBFC38A00", "0xBFC38A04", "0xBFC38A10", "0xBFC38A68", "0xBFC38A6C"] + }, + { + "entry_addr": "0xBFC38A7C", + "normalized_addr": "0x1FC38A7C", + "end_addr": "0xBFC38AA0", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38A7C", + "block_leaders": ["0xBFC38A7C", "0xBFC38A94"] + }, + { + "entry_addr": "0xBFC38AA4", + "normalized_addr": "0x1FC38AA4", + "end_addr": "0xBFC38AD0", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC38AA4", + "block_leaders": ["0xBFC38AA4"] + }, + { + "entry_addr": "0xBFC38B28", + "normalized_addr": "0x1FC38B28", + "end_addr": "0xBFC38B7C", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC38B28", + "block_leaders": ["0xBFC38B28"] + }, + { + "entry_addr": "0xBFC38B80", + "normalized_addr": "0x1FC38B80", + "end_addr": "0xBFC38BAC", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC382E0 -> jal at 0xBFC38474", + "block_leaders": ["0xBFC38B80"] + }, + { + "entry_addr": "0xBFC38BE8", + "normalized_addr": "0x1FC38BE8", + "end_addr": "0xBFC38C64", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38BE8", + "block_leaders": ["0xBFC38BE8", "0xBFC38C24", "0xBFC38C58"] + }, + { + "entry_addr": "0xBFC38C68", + "normalized_addr": "0x1FC38C68", + "end_addr": "0xBFC38DA8", + "instruction_count": 81, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38C68", + "block_leaders": ["0xBFC38C68", "0xBFC38C94", "0xBFC38CA8", "0xBFC38CB0", "0xBFC38CB8", "0xBFC38CC0", "0xBFC38CD4", "0xBFC38CD8", "0xBFC38D78", "0xBFC38D80", "0xBFC38D9C"] + }, + { + "entry_addr": "0xBFC38DAC", + "normalized_addr": "0x1FC38DAC", + "end_addr": "0xBFC38F88", + "instruction_count": 120, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC38DAC", + "block_leaders": ["0xBFC38DAC", "0xBFC38DC0", "0xBFC38DC8", "0xBFC38DE8", "0xBFC38DFC", "0xBFC38E1C", "0xBFC38E24", "0xBFC38E40", "0xBFC38E48", "0xBFC38E68", "0xBFC38E70", "0xBFC38E78", "0xBFC38E98", "0xBFC38F20", "0xBFC38F3C", "0xBFC38F48", "0xBFC38F5C", "0xBFC38F64", "0xBFC38F7C"] + }, + { + "entry_addr": "0xBFC38F8C", + "normalized_addr": "0x1FC38F8C", + "end_addr": "0xBFC3907C", + "instruction_count": 61, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC39300 -> jal at 0xBFC393A8", + "block_leaders": ["0xBFC38F8C", "0xBFC38F94", "0xBFC38FCC", "0xBFC39018", "0xBFC39020", "0xBFC39028", "0xBFC39034", "0xBFC3906C", "0xBFC39074", "0xBFC39078"] + }, + { + "entry_addr": "0xBFC39080", + "normalized_addr": "0x1FC39080", + "end_addr": "0xBFC392E4", + "instruction_count": 154, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39080", + "block_leaders": ["0xBFC39080", "0xBFC3908C", "0xBFC3909C", "0xBFC390B8", "0xBFC390C8", "0xBFC390CC", "0xBFC390D4", "0xBFC390DC", "0xBFC390F0", "0xBFC39110", "0xBFC39118", "0xBFC39134", "0xBFC3913C", "0xBFC39144", "0xBFC3914C", "0xBFC39160", "0xBFC39180", "0xBFC39194", "0xBFC3919C", "0xBFC391BC", "0xBFC391C8", "0xBFC391DC", "0xBFC391E4", "0xBFC391EC", "0xBFC39200", "0xBFC39220", "0xBFC39228", "0xBFC39244", "0xBFC39264", "0xBFC39284", "0xBFC39290", "0xBFC392A8", "0xBFC392B8", "0xBFC392BC", "0xBFC392C8", "0xBFC392CC", "0xBFC392D8"] + }, + { + "entry_addr": "0xBFC392E8", + "normalized_addr": "0x1FC392E8", + "end_addr": "0xBFC392FC", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC392E8", + "block_leaders": ["0xBFC392E8"] + }, + { + "entry_addr": "0xBFC39300", + "normalized_addr": "0x1FC39300", + "end_addr": "0xBFC393C8", + "instruction_count": 51, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC39300", + "block_leaders": ["0xBFC39300", "0xBFC39320", "0xBFC39340", "0xBFC39348", "0xBFC3934C", "0xBFC3936C", "0xBFC39374", "0xBFC39378", "0xBFC393A8", "0xBFC393B0", "0xBFC393B8", "0xBFC393BC"] + }, + { + "entry_addr": "0xBFC393CC", + "normalized_addr": "0x1FC393CC", + "end_addr": "0xBFC393F8", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC393CC", + "block_leaders": ["0xBFC393CC", "0xBFC393D8", "0xBFC393F4"] + }, + { + "entry_addr": "0xBFC39410", + "normalized_addr": "0x1FC39410", + "end_addr": "0xBFC394E8", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39410", + "block_leaders": ["0xBFC39410", "0xBFC39440", "0xBFC39454", "0xBFC39458", "0xBFC39464", "0xBFC39478", "0xBFC3947C", "0xBFC39488", "0xBFC3948C", "0xBFC39494", "0xBFC3949C", "0xBFC394A4", "0xBFC394AC", "0xBFC394C0", "0xBFC394DC"] + }, + { + "entry_addr": "0xBFC394EC", + "normalized_addr": "0x1FC394EC", + "end_addr": "0xBFC39548", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC394EC", + "block_leaders": ["0xBFC394EC", "0xBFC3952C", "0xBFC3953C"] + }, + { + "entry_addr": "0xBFC3954C", + "normalized_addr": "0x1FC3954C", + "end_addr": "0xBFC395E8", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3954C", + "block_leaders": ["0xBFC3954C", "0xBFC395A0", "0xBFC395A8", "0xBFC395AC", "0xBFC395CC"] + }, + { + "entry_addr": "0xBFC395EC", + "normalized_addr": "0x1FC395EC", + "end_addr": "0xBFC39624", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC395EC", + "block_leaders": ["0xBFC395EC"] + }, + { + "entry_addr": "0xBFC39630", + "normalized_addr": "0x1FC39630", + "end_addr": "0xBFC396CC", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39630", + "block_leaders": ["0xBFC39630", "0xBFC3964C", "0xBFC39664", "0xBFC39694", "0xBFC39698", "0xBFC396C0"] + }, + { + "entry_addr": "0xBFC396D0", + "normalized_addr": "0x1FC396D0", + "end_addr": "0xBFC396E4", + "instruction_count": 6, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2C3E0 -> jal at 0xBFC2C764", + "block_leaders": ["0xBFC396D0"] + }, + { + "entry_addr": "0xBFC396E8", + "normalized_addr": "0x1FC396E8", + "end_addr": "0xBFC3978C", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC396E8", + "block_leaders": ["0xBFC396E8", "0xBFC396FC", "0xBFC39708", "0xBFC39740", "0xBFC39748", "0xBFC39780", "0xBFC39784"] + }, + { + "entry_addr": "0xBFC39804", + "normalized_addr": "0x1FC39804", + "end_addr": "0xBFC39844", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC193C0 -> jal at 0xBFC19424", + "block_leaders": ["0xBFC39804"] + }, + { + "entry_addr": "0xBFC398D4", + "normalized_addr": "0x1FC398D4", + "end_addr": "0xBFC3990C", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CA9C -> jal at 0xBFC2CAB8", + "block_leaders": ["0xBFC398D4", "0xBFC398DC", "0xBFC398F4"] + }, + { + "entry_addr": "0xBFC39910", + "normalized_addr": "0x1FC39910", + "end_addr": "0xBFC39948", + "instruction_count": 15, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2CAE0 -> jal at 0xBFC2CAFC", + "block_leaders": ["0xBFC39910", "0xBFC39918", "0xBFC39930"] + }, + { + "entry_addr": "0xBFC3994C", + "normalized_addr": "0x1FC3994C", + "end_addr": "0xBFC39970", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2A31C -> jal at 0xBFC2A3F8", + "block_leaders": ["0xBFC3994C"] + }, + { + "entry_addr": "0xBFC3999C", + "normalized_addr": "0x1FC3999C", + "end_addr": "0xBFC399C0", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3015C -> jal at 0xBFC30174", + "block_leaders": ["0xBFC3999C"] + }, + { + "entry_addr": "0xBFC399EC", + "normalized_addr": "0x1FC399EC", + "end_addr": "0xBFC39A10", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC399EC", + "block_leaders": ["0xBFC399EC"] + }, + { + "entry_addr": "0xBFC39A14", + "normalized_addr": "0x1FC39A14", + "end_addr": "0xBFC39A38", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2C3E0 -> jal at 0xBFC2C4DC", + "block_leaders": ["0xBFC39A14"] + }, + { + "entry_addr": "0xBFC39A3C", + "normalized_addr": "0x1FC39A3C", + "end_addr": "0xBFC39A60", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3010C -> jal at 0xBFC30124", + "block_leaders": ["0xBFC39A3C"] + }, + { + "entry_addr": "0xBFC39ADC", + "normalized_addr": "0x1FC39ADC", + "end_addr": "0xBFC39B00", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2C3E0 -> jal at 0xBFC2C6DC", + "block_leaders": ["0xBFC39ADC"] + }, + { + "entry_addr": "0xBFC39BA4", + "normalized_addr": "0x1FC39BA4", + "end_addr": "0xBFC39BC8", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30960 -> jal at 0xBFC309C4", + "block_leaders": ["0xBFC39BA4"] + }, + { + "entry_addr": "0xBFC39BCC", + "normalized_addr": "0x1FC39BCC", + "end_addr": "0xBFC39BF0", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC30A80 -> jal at 0xBFC30BD8", + "block_leaders": ["0xBFC39BCC"] + }, + { + "entry_addr": "0xBFC39D38", + "normalized_addr": "0x1FC39D38", + "end_addr": "0xBFC39E80", + "instruction_count": 83, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39D38", + "block_leaders": ["0xBFC39D38", "0xBFC39D70", "0xBFC39D8C", "0xBFC39DB4", "0xBFC39DCC", "0xBFC39DE4", "0xBFC39DEC", "0xBFC39DF4", "0xBFC39E30", "0xBFC39E38", "0xBFC39E74", "0xBFC39E78"] + }, + { + "entry_addr": "0xBFC39E84", + "normalized_addr": "0x1FC39E84", + "end_addr": "0xBFC39F20", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39E84", + "block_leaders": ["0xBFC39E84", "0xBFC39EBC", "0xBFC39EE4", "0xBFC39EFC", "0xBFC39F14"] + }, + { + "entry_addr": "0xBFC39F30", + "normalized_addr": "0x1FC39F30", + "end_addr": "0xBFC39F8C", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3A094 -> jal at 0xBFC3A1F0", + "block_leaders": ["0xBFC39F30", "0xBFC39F40", "0xBFC39F50", "0xBFC39F58", "0xBFC39F60", "0xBFC39F80"] + }, + { + "entry_addr": "0xBFC39F90", + "normalized_addr": "0x1FC39F90", + "end_addr": "0xBFC39FE0", + "instruction_count": 20, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3A228 -> jal at 0xBFC3A23C", + "block_leaders": ["0xBFC39F90", "0xBFC39FA0", "0xBFC39FAC", "0xBFC39FB4", "0xBFC39FBC", "0xBFC39FD8", "0xBFC39FDC"] + }, + { + "entry_addr": "0xBFC39FE4", + "normalized_addr": "0x1FC39FE4", + "end_addr": "0xBFC3A090", + "instruction_count": 44, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC39FE4", + "block_leaders": ["0xBFC39FE4", "0xBFC3A014", "0xBFC3A020", "0xBFC3A02C", "0xBFC3A034", "0xBFC3A044", "0xBFC3A060", "0xBFC3A06C", "0xBFC3A078", "0xBFC3A080", "0xBFC3A084"] + }, + { + "entry_addr": "0xBFC3A094", + "normalized_addr": "0x1FC3A094", + "end_addr": "0xBFC3A224", + "instruction_count": 101, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3A094", + "block_leaders": ["0xBFC3A094", "0xBFC3A0C8", "0xBFC3A0E4", "0xBFC3A114", "0xBFC3A120", "0xBFC3A13C", "0xBFC3A150", "0xBFC3A164", "0xBFC3A16C", "0xBFC3A178", "0xBFC3A184", "0xBFC3A198", "0xBFC3A1AC", "0xBFC3A1C8", "0xBFC3A1DC", "0xBFC3A1EC", "0xBFC3A1F8", "0xBFC3A210"] + }, + { + "entry_addr": "0xBFC3A228", + "normalized_addr": "0x1FC3A228", + "end_addr": "0xBFC3A2BC", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3A228", + "block_leaders": ["0xBFC3A228", "0xBFC3A244", "0xBFC3A250", "0xBFC3A268", "0xBFC3A274", "0xBFC3A2A4", "0xBFC3A2AC", "0xBFC3A2B0"] + }, + { + "entry_addr": "0xBFC3A2C0", + "normalized_addr": "0x1FC3A2C0", + "end_addr": "0xBFC3A448", + "instruction_count": 99, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3A2C0", + "block_leaders": ["0xBFC3A2C0", "0xBFC3A2D4", "0xBFC3A2F4", "0xBFC3A308", "0xBFC3A31C", "0xBFC3A334", "0xBFC3A33C", "0xBFC3A340", "0xBFC3A344", "0xBFC3A358", "0xBFC3A36C", "0xBFC3A3B8", "0xBFC3A3BC", "0xBFC3A3CC", "0xBFC3A3F4"] + }, + { + "entry_addr": "0xBFC3A44C", + "normalized_addr": "0x1FC3A44C", + "end_addr": "0xBFC3A634", + "instruction_count": 123, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3A44C", + "block_leaders": ["0xBFC3A44C", "0xBFC3A480", "0xBFC3A498", "0xBFC3A4AC", "0xBFC3A4CC", "0xBFC3A4DC", "0xBFC3A4E4", "0xBFC3A4F8", "0xBFC3A508", "0xBFC3A510", "0xBFC3A518", "0xBFC3A524", "0xBFC3A52C", "0xBFC3A540", "0xBFC3A550", "0xBFC3A560", "0xBFC3A568", "0xBFC3A57C", "0xBFC3A584", "0xBFC3A5A0", "0xBFC3A5A8", "0xBFC3A5B0", "0xBFC3A5B8", "0xBFC3A5C0", "0xBFC3A5C4", "0xBFC3A5D0", "0xBFC3A5D4", "0xBFC3A5F4", "0xBFC3A608", "0xBFC3A610", "0xBFC3A624", "0xBFC3A628"] + }, + { + "entry_addr": "0xBFC3A638", + "normalized_addr": "0x1FC3A638", + "end_addr": "0xBFC3A958", + "instruction_count": 201, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3A638", + "block_leaders": ["0xBFC3A638", "0xBFC3A714", "0xBFC3A730", "0xBFC3A734", "0xBFC3A74C", "0xBFC3A764", "0xBFC3A778", "0xBFC3A77C", "0xBFC3A78C", "0xBFC3A7A4", "0xBFC3A7B8", "0xBFC3A7BC", "0xBFC3A7CC", "0xBFC3A7E0", "0xBFC3A7E8", "0xBFC3A7F0", "0xBFC3A7F4", "0xBFC3A894", "0xBFC3A8A8", "0xBFC3A8BC", "0xBFC3A8D4", "0xBFC3A900", "0xBFC3A930"] + }, + { + "entry_addr": "0xBFC3A95C", + "normalized_addr": "0x1FC3A95C", + "end_addr": "0xBFC3A9E8", + "instruction_count": 36, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B054 -> jal at 0xBFC3B108", + "block_leaders": ["0xBFC3A95C", "0xBFC3A974", "0xBFC3A988", "0xBFC3A98C", "0xBFC3A99C"] + }, + { + "entry_addr": "0xBFC3A9EC", + "normalized_addr": "0x1FC3A9EC", + "end_addr": "0xBFC3AAC0", + "instruction_count": 54, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3A9EC", + "block_leaders": ["0xBFC3A9EC", "0xBFC3AA20", "0xBFC3AA24", "0xBFC3AA4C", "0xBFC3AA50", "0xBFC3AA9C", "0xBFC3AAA8", "0xBFC3AAB0", "0xBFC3AABC"] + }, + { + "entry_addr": "0xBFC3AAC4", + "normalized_addr": "0x1FC3AAC4", + "end_addr": "0xBFC3AB6C", + "instruction_count": 43, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3AAC4", + "block_leaders": ["0xBFC3AAC4", "0xBFC3AAE0", "0xBFC3AAF4", "0xBFC3AB20", "0xBFC3AB34", "0xBFC3AB50", "0xBFC3AB68"] + }, + { + "entry_addr": "0xBFC3AB70", + "normalized_addr": "0x1FC3AB70", + "end_addr": "0xBFC3AC98", + "instruction_count": 75, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3AB70", + "block_leaders": ["0xBFC3AB70", "0xBFC3ABB4", "0xBFC3ABD8", "0xBFC3ABDC", "0xBFC3ABF4", "0xBFC3AC18", "0xBFC3AC1C", "0xBFC3AC34"] + }, + { + "entry_addr": "0xBFC3AC9C", + "normalized_addr": "0x1FC3AC9C", + "end_addr": "0xBFC3AD64", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3AC9C", + "block_leaders": ["0xBFC3AC9C", "0xBFC3ACB0", "0xBFC3ACB8", "0xBFC3ACD0", "0xBFC3ACE8", "0xBFC3ACF4"] + }, + { + "entry_addr": "0xBFC3AD68", + "normalized_addr": "0x1FC3AD68", + "end_addr": "0xBFC3B050", + "instruction_count": 187, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3AD68", + "block_leaders": ["0xBFC3AD68", "0xBFC3ADA0", "0xBFC3ADA8", "0xBFC3ADB0", "0xBFC3AE34", "0xBFC3AE48", "0xBFC3AE50", "0xBFC3AE60", "0xBFC3AE68", "0xBFC3AE6C", "0xBFC3AE74", "0xBFC3AE84", "0xBFC3AEB0", "0xBFC3AF44", "0xBFC3AF68", "0xBFC3AF70", "0xBFC3AFD8", "0xBFC3AFE0", "0xBFC3AFEC", "0xBFC3B004", "0xBFC3B018", "0xBFC3B028", "0xBFC3B02C", "0xBFC3B03C"] + }, + { + "entry_addr": "0xBFC3B054", + "normalized_addr": "0x1FC3B054", + "end_addr": "0xBFC3B15C", + "instruction_count": 67, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B054", + "block_leaders": ["0xBFC3B054", "0xBFC3B0A8", "0xBFC3B0B8", "0xBFC3B0D4", "0xBFC3B0E4", "0xBFC3B0F4", "0xBFC3B104", "0xBFC3B110", "0xBFC3B118", "0xBFC3B12C", "0xBFC3B134"] + }, + { + "entry_addr": "0xBFC3B160", + "normalized_addr": "0x1FC3B160", + "end_addr": "0xBFC3B28C", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3B160", + "block_leaders": ["0xBFC3B160", "0xBFC3B174", "0xBFC3B17C", "0xBFC3B1B8"] + }, + { + "entry_addr": "0xBFC3B30C", + "normalized_addr": "0x1FC3B30C", + "end_addr": "0xBFC3B364", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B30C", + "block_leaders": ["0xBFC3B30C", "0xBFC3B320", "0xBFC3B338", "0xBFC3B350", "0xBFC3B358"] + }, + { + "entry_addr": "0xBFC3B368", + "normalized_addr": "0x1FC3B368", + "end_addr": "0xBFC3B858", + "instruction_count": 317, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B368", + "block_leaders": ["0xBFC3B368", "0xBFC3B388", "0xBFC3B39C", "0xBFC3B3A4", "0xBFC3B3B4", "0xBFC3B3C4", "0xBFC3B3CC", "0xBFC3B3D4", "0xBFC3B3E0", "0xBFC3B3EC", "0xBFC3B3FC", "0xBFC3B424", "0xBFC3B430", "0xBFC3B438", "0xBFC3B444", "0xBFC3B460", "0xBFC3B46C", "0xBFC3B470", "0xBFC3B490", "0xBFC3B498", "0xBFC3B4A8", "0xBFC3B4C4", "0xBFC3B4C8", "0xBFC3B4F0", "0xBFC3B4FC", "0xBFC3B50C", "0xBFC3B528", "0xBFC3B530", "0xBFC3B544", "0xBFC3B548", "0xBFC3B554", "0xBFC3B558", "0xBFC3B560", "0xBFC3B57C", "0xBFC3B58C", "0xBFC3B5A8", "0xBFC3B5AC", "0xBFC3B5E0", "0xBFC3B5EC", "0xBFC3B610", "0xBFC3B614", "0xBFC3B62C", "0xBFC3B634", "0xBFC3B668", "0xBFC3B674", "0xBFC3B698", "0xBFC3B6A4", "0xBFC3B6AC", "0xBFC3B6B8", "0xBFC3B6C4", "0xBFC3B6EC", "0xBFC3B70C", "0xBFC3B71C", "0xBFC3B738", "0xBFC3B750", "0xBFC3B760", "0xBFC3B77C", "0xBFC3B780", "0xBFC3B798", "0xBFC3B7AC", "0xBFC3B7B4", "0xBFC3B7B8", "0xBFC3B7C0", "0xBFC3B7D8", "0xBFC3B7DC", "0xBFC3B7F0", "0xBFC3B808", "0xBFC3B80C", "0xBFC3B81C", "0xBFC3B82C", "0xBFC3B84C"] + }, + { + "entry_addr": "0xBFC3B85C", + "normalized_addr": "0x1FC3B85C", + "end_addr": "0xBFC3B938", + "instruction_count": 56, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B85C", + "block_leaders": ["0xBFC3B85C", "0xBFC3B87C", "0xBFC3B884", "0xBFC3B88C", "0xBFC3B8A8", "0xBFC3B8B0", "0xBFC3B8B4", "0xBFC3B8D0", "0xBFC3B8DC", "0xBFC3B8FC", "0xBFC3B914", "0xBFC3B91C", "0xBFC3B920", "0xBFC3B92C"] + }, + { + "entry_addr": "0xBFC3B93C", + "normalized_addr": "0x1FC3B93C", + "end_addr": "0xBFC3B960", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B93C", + "block_leaders": ["0xBFC3B93C", "0xBFC3B950"] + }, + { + "entry_addr": "0xBFC3B964", + "normalized_addr": "0x1FC3B964", + "end_addr": "0xBFC3BA70", + "instruction_count": 68, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BA74 -> jal at 0xBFC3BC94", + "block_leaders": ["0xBFC3B964", "0xBFC3B9BC", "0xBFC3B9CC", "0xBFC3BA4C", "0xBFC3BA58", "0xBFC3BA60", "0xBFC3BA6C"] + }, + { + "entry_addr": "0xBFC3BA74", + "normalized_addr": "0x1FC3BA74", + "end_addr": "0xBFC3BCBC", + "instruction_count": 147, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BA74", + "block_leaders": ["0xBFC3BA74", "0xBFC3BA98", "0xBFC3BAA4", "0xBFC3BAAC", "0xBFC3BADC", "0xBFC3BAF0", "0xBFC3BAFC", "0xBFC3BB10", "0xBFC3BB14", "0xBFC3BB20", "0xBFC3BB28", "0xBFC3BB2C", "0xBFC3BB3C", "0xBFC3BB40", "0xBFC3BB60", "0xBFC3BB64", "0xBFC3BB70", "0xBFC3BB78", "0xBFC3BB7C", "0xBFC3BB88", "0xBFC3BBD4", "0xBFC3BBE0", "0xBFC3BBEC", "0xBFC3BC0C", "0xBFC3BC14", "0xBFC3BC8C", "0xBFC3BC9C", "0xBFC3BCA8", "0xBFC3BCB0"] + }, + { + "entry_addr": "0xBFC3BD78", + "normalized_addr": "0x1FC3BD78", + "end_addr": "0xBFC3BD94", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BD78", + "block_leaders": ["0xBFC3BD78", "0xBFC3BD88"] + }, + { + "entry_addr": "0xBFC3BD98", + "normalized_addr": "0x1FC3BD98", + "end_addr": "0xBFC3BDB4", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BD98", + "block_leaders": ["0xBFC3BD98", "0xBFC3BDA8"] + }, + { + "entry_addr": "0xBFC3BDB8", + "normalized_addr": "0x1FC3BDB8", + "end_addr": "0xBFC3BE14", + "instruction_count": 24, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3BDB8", + "block_leaders": ["0xBFC3BDB8", "0xBFC3BDCC", "0xBFC3BDD8", "0xBFC3BDF8", "0xBFC3BE04", "0xBFC3BE08"] + }, + { + "entry_addr": "0xBFC3BE18", + "normalized_addr": "0x1FC3BE18", + "end_addr": "0xBFC3BE68", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3BE18", + "block_leaders": ["0xBFC3BE18"] + }, + { + "entry_addr": "0xBFC3BE6C", + "normalized_addr": "0x1FC3BE6C", + "end_addr": "0xBFC3BE88", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BE6C", + "block_leaders": ["0xBFC3BE6C", "0xBFC3BE7C"] + }, + { + "entry_addr": "0xBFC3BE90", + "normalized_addr": "0x1FC3BE90", + "end_addr": "0xBFC3BF00", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3BE90", + "block_leaders": ["0xBFC3BE90", "0xBFC3BEF4"] + }, + { + "entry_addr": "0xBFC3BF10", + "normalized_addr": "0x1FC3BF10", + "end_addr": "0xBFC3BF3C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3BF10", + "block_leaders": ["0xBFC3BF10", "0xBFC3BF30"] + }, + { + "entry_addr": "0xBFC3BF40", + "normalized_addr": "0x1FC3BF40", + "end_addr": "0xBFC3BFE4", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3BF40", + "block_leaders": ["0xBFC3BF40", "0xBFC3BF64", "0xBFC3BF6C", "0xBFC3BF74", "0xBFC3BF84", "0xBFC3BF8C", "0xBFC3BF98", "0xBFC3BFA0", "0xBFC3BFA8", "0xBFC3BFB4", "0xBFC3BFBC", "0xBFC3BFCC", "0xBFC3BFD8"] + }, + { + "entry_addr": "0xBFC3BFF0", + "normalized_addr": "0x1FC3BFF0", + "end_addr": "0xBFC3C05C", + "instruction_count": 28, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3BFF0", + "block_leaders": ["0xBFC3BFF0", "0xBFC3C014", "0xBFC3C024", "0xBFC3C030", "0xBFC3C044", "0xBFC3C050"] + }, + { + "entry_addr": "0xBFC3C060", + "normalized_addr": "0x1FC3C060", + "end_addr": "0xBFC3C13C", + "instruction_count": 56, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C060", + "block_leaders": ["0xBFC3C060", "0xBFC3C070", "0xBFC3C080", "0xBFC3C0D8", "0xBFC3C0F0", "0xBFC3C100", "0xBFC3C118", "0xBFC3C128", "0xBFC3C130"] + }, + { + "entry_addr": "0xBFC3C140", + "normalized_addr": "0x1FC3C140", + "end_addr": "0xBFC3C198", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C140", + "block_leaders": ["0xBFC3C140", "0xBFC3C15C", "0xBFC3C160", "0xBFC3C194"] + }, + { + "entry_addr": "0xBFC3C19C", + "normalized_addr": "0x1FC3C19C", + "end_addr": "0xBFC3C414", + "instruction_count": 159, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3C19C", + "block_leaders": ["0xBFC3C19C", "0xBFC3C1EC", "0xBFC3C200", "0xBFC3C208", "0xBFC3C218", "0xBFC3C230", "0xBFC3C240", "0xBFC3C254", "0xBFC3C258", "0xBFC3C25C", "0xBFC3C2C0", "0xBFC3C2E0", "0xBFC3C384", "0xBFC3C3A8", "0xBFC3C3B0", "0xBFC3C3B8", "0xBFC3C3C0", "0xBFC3C3E4", "0xBFC3C3EC", "0xBFC3C3F4", "0xBFC3C3FC"] + }, + { + "entry_addr": "0xBFC3C418", + "normalized_addr": "0x1FC3C418", + "end_addr": "0xBFC3C424", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3C418", + "block_leaders": ["0xBFC3C418"] + }, + { + "entry_addr": "0xBFC3C428", + "normalized_addr": "0x1FC3C428", + "end_addr": "0xBFC3C4DC", + "instruction_count": 46, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C428", + "block_leaders": ["0xBFC3C428", "0xBFC3C46C", "0xBFC3C478", "0xBFC3C488", "0xBFC3C4A0", "0xBFC3C4A8", "0xBFC3C4BC", "0xBFC3C4C0", "0xBFC3C4C4", "0xBFC3C4D0"] + }, + { + "entry_addr": "0xBFC3C4E0", + "normalized_addr": "0x1FC3C4E0", + "end_addr": "0xBFC3C70C", + "instruction_count": 140, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C4E0", + "block_leaders": ["0xBFC3C4E0", "0xBFC3C528", "0xBFC3C53C", "0xBFC3C540", "0xBFC3C54C", "0xBFC3C564", "0xBFC3C574", "0xBFC3C588", "0xBFC3C58C", "0xBFC3C594", "0xBFC3C59C", "0xBFC3C5A4", "0xBFC3C5AC", "0xBFC3C5B0", "0xBFC3C5B8", "0xBFC3C5D0", "0xBFC3C5F0", "0xBFC3C604", "0xBFC3C608", "0xBFC3C614", "0xBFC3C62C", "0xBFC3C63C", "0xBFC3C650", "0xBFC3C654", "0xBFC3C65C", "0xBFC3C664", "0xBFC3C670", "0xBFC3C678", "0xBFC3C6A0", "0xBFC3C6A8", "0xBFC3C6B8", "0xBFC3C6D0", "0xBFC3C6D8", "0xBFC3C6EC", "0xBFC3C6F0", "0xBFC3C6F4"] + }, + { + "entry_addr": "0xBFC3C710", + "normalized_addr": "0x1FC3C710", + "end_addr": "0xBFC3CEC4", + "instruction_count": 494, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C710", + "block_leaders": ["0xBFC3C710", "0xBFC3C740", "0xBFC3C748", "0xBFC3C750", "0xBFC3C758", "0xBFC3C76C", "0xBFC3C780", "0xBFC3C794", "0xBFC3C79C", "0xBFC3C7A0", "0xBFC3C7A8", "0xBFC3C7B0", "0xBFC3C7C8", "0xBFC3C7E0", "0xBFC3C7F4", "0xBFC3C800", "0xBFC3C808", "0xBFC3C828", "0xBFC3C83C", "0xBFC3C85C", "0xBFC3C864", "0xBFC3C874", "0xBFC3C88C", "0xBFC3C894", "0xBFC3C8A8", "0xBFC3C8B0", "0xBFC3C8BC", "0xBFC3C8CC", "0xBFC3C8D0", "0xBFC3C8DC", "0xBFC3C8E4", "0xBFC3C8E8", "0xBFC3C8F0", "0xBFC3C8F8", "0xBFC3C918", "0xBFC3C92C", "0xBFC3C940", "0xBFC3C960", "0xBFC3C968", "0xBFC3C978", "0xBFC3C990", "0xBFC3C998", "0xBFC3C9AC", "0xBFC3C9B4", "0xBFC3C9C0", "0xBFC3C9D0", "0xBFC3C9D4", "0xBFC3C9E0", "0xBFC3C9E8", "0xBFC3C9EC", "0xBFC3C9F4", "0xBFC3C9FC", "0xBFC3CA14", "0xBFC3CA24", "0xBFC3CA3C", "0xBFC3CA4C", "0xBFC3CA5C", "0xBFC3CA74", "0xBFC3CA7C", "0xBFC3CA98", "0xBFC3CAB4", "0xBFC3CACC", "0xBFC3CAF4", "0xBFC3CB08", "0xBFC3CB14", "0xBFC3CB1C", "0xBFC3CB30", "0xBFC3CB3C", "0xBFC3CB4C", "0xBFC3CB50", "0xBFC3CB5C", "0xBFC3CB64", "0xBFC3CB68", "0xBFC3CB70", "0xBFC3CB78", "0xBFC3CB88", "0xBFC3CB9C", "0xBFC3CBB8", "0xBFC3CBC0", "0xBFC3CBC8", "0xBFC3CC08", "0xBFC3CC28", "0xBFC3CC70", "0xBFC3CC78", "0xBFC3CC80", "0xBFC3CC88", "0xBFC3CC90", "0xBFC3CC9C", "0xBFC3CCA4", "0xBFC3CCAC", "0xBFC3CCB4", "0xBFC3CCBC", "0xBFC3CCC4", "0xBFC3CCCC", "0xBFC3CCD4", "0xBFC3CCDC", "0xBFC3CCE4", "0xBFC3CCE8", "0xBFC3CCF0", "0xBFC3CCFC", "0xBFC3CD04", "0xBFC3CD10", "0xBFC3CD18", "0xBFC3CD20", "0xBFC3CD28", "0xBFC3CD34", "0xBFC3CD3C", "0xBFC3CD48", "0xBFC3CD50", "0xBFC3CD58", "0xBFC3CD60", "0xBFC3CD68", "0xBFC3CD70", "0xBFC3CD7C", "0xBFC3CD84", "0xBFC3CD90", "0xBFC3CD98", "0xBFC3CDA0", "0xBFC3CDA8", "0xBFC3CDB4", "0xBFC3CDBC", "0xBFC3CDC8", "0xBFC3CDD0", "0xBFC3CDD8", "0xBFC3CDE0", "0xBFC3CDE8", "0xBFC3CDF0", "0xBFC3CDF8", "0xBFC3CE00", "0xBFC3CE0C", "0xBFC3CE14", "0xBFC3CE20", "0xBFC3CE28", "0xBFC3CE30", "0xBFC3CE38", "0xBFC3CE44", "0xBFC3CE4C", "0xBFC3CE58", "0xBFC3CE60", "0xBFC3CE68", "0xBFC3CE70", "0xBFC3CE78", "0xBFC3CE80", "0xBFC3CE8C", "0xBFC3CE94", "0xBFC3CEA0", "0xBFC3CEA8", "0xBFC3CEB0", "0xBFC3CEB8", "0xBFC3CEBC"] + }, + { + "entry_addr": "0xBFC3CEC8", + "normalized_addr": "0x1FC3CEC8", + "end_addr": "0xBFC3D300", + "instruction_count": 271, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3CEC8", + "block_leaders": ["0xBFC3CEC8", "0xBFC3CED8", "0xBFC3CEE0", "0xBFC3CEE4", "0xBFC3CEEC", "0xBFC3CEF8", "0xBFC3CF08", "0xBFC3CF1C", "0xBFC3CF24", "0xBFC3CF30", "0xBFC3CF3C", "0xBFC3CF44", "0xBFC3CF50", "0xBFC3CF5C", "0xBFC3CF64", "0xBFC3CF70", "0xBFC3CF7C", "0xBFC3CF84", "0xBFC3CF90", "0xBFC3CF9C", "0xBFC3CFA4", "0xBFC3CFB0", "0xBFC3CFBC", "0xBFC3CFC4", "0xBFC3CFD0", "0xBFC3CFDC", "0xBFC3CFE4", "0xBFC3CFF0", "0xBFC3CFFC", "0xBFC3D004", "0xBFC3D010", "0xBFC3D01C", "0xBFC3D024", "0xBFC3D030", "0xBFC3D03C", "0xBFC3D044", "0xBFC3D050", "0xBFC3D05C", "0xBFC3D064", "0xBFC3D070", "0xBFC3D07C", "0xBFC3D084", "0xBFC3D090", "0xBFC3D09C", "0xBFC3D0A4", "0xBFC3D0B0", "0xBFC3D0BC", "0xBFC3D0C4", "0xBFC3D0D0", "0xBFC3D0DC", "0xBFC3D0E4", "0xBFC3D0F0", "0xBFC3D0FC", "0xBFC3D104", "0xBFC3D110", "0xBFC3D11C", "0xBFC3D124", "0xBFC3D130", "0xBFC3D13C", "0xBFC3D144", "0xBFC3D150", "0xBFC3D15C", "0xBFC3D164", "0xBFC3D170", "0xBFC3D17C", "0xBFC3D184", "0xBFC3D190", "0xBFC3D19C", "0xBFC3D1A4", "0xBFC3D1B0", "0xBFC3D1BC", "0xBFC3D1C4", "0xBFC3D1D0", "0xBFC3D1DC", "0xBFC3D1E4", "0xBFC3D1F0", "0xBFC3D1FC", "0xBFC3D204", "0xBFC3D210", "0xBFC3D21C", "0xBFC3D224", "0xBFC3D230", "0xBFC3D23C", "0xBFC3D244", "0xBFC3D250", "0xBFC3D25C", "0xBFC3D264", "0xBFC3D270", "0xBFC3D27C", "0xBFC3D284", "0xBFC3D290", "0xBFC3D29C", "0xBFC3D2A4", "0xBFC3D2B0", "0xBFC3D2BC", "0xBFC3D2C4", "0xBFC3D2D0", "0xBFC3D2DC", "0xBFC3D2E4", "0xBFC3D2F0", "0xBFC3D2FC"] + }, + { + "entry_addr": "0xBFC3D304", + "normalized_addr": "0x1FC3D304", + "end_addr": "0xBFC3D658", + "instruction_count": 214, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3D304", + "block_leaders": ["0xBFC3D304", "0xBFC3D314", "0xBFC3D31C", "0xBFC3D320", "0xBFC3D328", "0xBFC3D334", "0xBFC3D344", "0xBFC3D358", "0xBFC3D360", "0xBFC3D36C", "0xBFC3D378", "0xBFC3D380", "0xBFC3D38C", "0xBFC3D398", "0xBFC3D3A0", "0xBFC3D3AC", "0xBFC3D3B8", "0xBFC3D3C0", "0xBFC3D3CC", "0xBFC3D3D8", "0xBFC3D3E0", "0xBFC3D3EC", "0xBFC3D3F8", "0xBFC3D400", "0xBFC3D40C", "0xBFC3D41C", "0xBFC3D430", "0xBFC3D440", "0xBFC3D448", "0xBFC3D454", "0xBFC3D464", "0xBFC3D478", "0xBFC3D488", "0xBFC3D490", "0xBFC3D49C", "0xBFC3D4A8", "0xBFC3D4B0", "0xBFC3D4BC", "0xBFC3D4C8", "0xBFC3D4D0", "0xBFC3D4DC", "0xBFC3D4EC", "0xBFC3D500", "0xBFC3D510", "0xBFC3D518", "0xBFC3D524", "0xBFC3D534", "0xBFC3D548", "0xBFC3D558", "0xBFC3D560", "0xBFC3D56C", "0xBFC3D598", "0xBFC3D5A0", "0xBFC3D5AC", "0xBFC3D5D8", "0xBFC3D5E0", "0xBFC3D5EC", "0xBFC3D618", "0xBFC3D620", "0xBFC3D62C", "0xBFC3D654"] + }, + { + "entry_addr": "0xBFC3D65C", + "normalized_addr": "0x1FC3D65C", + "end_addr": "0xBFC3D80C", + "instruction_count": 109, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3C710 -> jal at 0xBFC3CC80", + "block_leaders": ["0xBFC3D65C", "0xBFC3D6DC", "0xBFC3D6E8", "0xBFC3D6F0", "0xBFC3D704", "0xBFC3D70C", "0xBFC3D710", "0xBFC3D744", "0xBFC3D74C", "0xBFC3D750", "0xBFC3D764", "0xBFC3D76C", "0xBFC3D770", "0xBFC3D798", "0xBFC3D7A4", "0xBFC3D7A8", "0xBFC3D7D0", "0xBFC3D7DC", "0xBFC3D7E0"] + }, + { + "entry_addr": "0xBFC3D810", + "normalized_addr": "0x1FC3D810", + "end_addr": "0xBFC3D860", + "instruction_count": 21, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3D810", + "block_leaders": ["0xBFC3D810", "0xBFC3D828", "0xBFC3D83C", "0xBFC3D844", "0xBFC3D848", "0xBFC3D850"] + }, + { + "entry_addr": "0xBFC3D870", + "normalized_addr": "0x1FC3D870", + "end_addr": "0xBFC3D8B4", + "instruction_count": 18, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3D870", + "block_leaders": ["0xBFC3D870", "0xBFC3D8A4"] + }, + { + "entry_addr": "0xBFC3D8C0", + "normalized_addr": "0x1FC3D8C0", + "end_addr": "0xBFC3DE34", + "instruction_count": 350, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3D8C0", + "block_leaders": ["0xBFC3D8C0", "0xBFC3D8DC", "0xBFC3D8E4", "0xBFC3D8E8", "0xBFC3D938", "0xBFC3D950", "0xBFC3D974", "0xBFC3D984", "0xBFC3D98C", "0xBFC3D9A0", "0xBFC3D9A4", "0xBFC3D9BC", "0xBFC3D9C4", "0xBFC3D9E0", "0xBFC3D9EC", "0xBFC3DA0C", "0xBFC3DA1C", "0xBFC3DA58", "0xBFC3DA88", "0xBFC3DA94", "0xBFC3DA9C", "0xBFC3DAB8", "0xBFC3DAD0", "0xBFC3DAE4", "0xBFC3DAEC", "0xBFC3DAF4", "0xBFC3DB14", "0xBFC3DB20", "0xBFC3DB34", "0xBFC3DB3C", "0xBFC3DB4C", "0xBFC3DB7C", "0xBFC3DB8C", "0xBFC3DC08", "0xBFC3DC1C", "0xBFC3DC24", "0xBFC3DC28", "0xBFC3DC2C", "0xBFC3DC38", "0xBFC3DC4C", "0xBFC3DC54", "0xBFC3DC64", "0xBFC3DC74", "0xBFC3DCA4", "0xBFC3DCB4", "0xBFC3DCB8", "0xBFC3DCC4", "0xBFC3DCFC", "0xBFC3DD10", "0xBFC3DD18", "0xBFC3DD20", "0xBFC3DD2C", "0xBFC3DD3C", "0xBFC3DD4C", "0xBFC3DD64", "0xBFC3DD70", "0xBFC3DD7C", "0xBFC3DD8C", "0xBFC3DDA0", "0xBFC3DDC4", "0xBFC3DDD0", "0xBFC3DDE4", "0xBFC3DE08", "0xBFC3DE14", "0xBFC3DE28", "0xBFC3DE2C"] + }, + { + "entry_addr": "0xBFC3DED0", + "normalized_addr": "0x1FC3DED0", + "end_addr": "0xBFC3DF10", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B85C -> jal at 0xBFC3B8F4", + "block_leaders": ["0xBFC3DED0", "0xBFC3DEE8", "0xBFC3DEF0", "0xBFC3DEF8"] + }, + { + "entry_addr": "0xBFC3DF20", + "normalized_addr": "0x1FC3DF20", + "end_addr": "0xBFC3DF84", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3DF20", + "block_leaders": ["0xBFC3DF20", "0xBFC3DF30", "0xBFC3DF3C", "0xBFC3DF44", "0xBFC3DF4C", "0xBFC3DF54", "0xBFC3DF5C", "0xBFC3DF78"] + }, + { + "entry_addr": "0xBFC3DF90", + "normalized_addr": "0x1FC3DF90", + "end_addr": "0xBFC3E014", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3B85C -> jal at 0xBFC3B8D4", + "block_leaders": ["0xBFC3DF90", "0xBFC3DFA8", "0xBFC3DFB0", "0xBFC3DFBC", "0xBFC3DFC4", "0xBFC3DFC8", "0xBFC3DFD0", "0xBFC3DFD8", "0xBFC3DFE8", "0xBFC3DFFC", "0xBFC3E008"] + }, + { + "entry_addr": "0xBFC3E020", + "normalized_addr": "0x1FC3E020", + "end_addr": "0xBFC3E0BC", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3E020", + "block_leaders": ["0xBFC3E020", "0xBFC3E03C", "0xBFC3E044", "0xBFC3E054", "0xBFC3E064", "0xBFC3E06C", "0xBFC3E07C", "0xBFC3E084", "0xBFC3E088", "0xBFC3E098", "0xBFC3E0A0", "0xBFC3E0B0"] + }, + { + "entry_addr": "0xBFC3E0C0", + "normalized_addr": "0x1FC3E0C0", + "end_addr": "0xBFC3E0E4", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3E0C0", + "block_leaders": ["0xBFC3E0C0", "0xBFC3E0CC", "0xBFC3E0D4"] + }, + { + "entry_addr": "0xBFC3E0E8", + "normalized_addr": "0x1FC3E0E8", + "end_addr": "0xBFC3E10C", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3E0E8", + "block_leaders": ["0xBFC3E0E8", "0xBFC3E0FC", "0xBFC3E108"] + }, + { + "entry_addr": "0xBFC3E110", + "normalized_addr": "0x1FC3E110", + "end_addr": "0xBFC3E320", + "instruction_count": 133, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3E110", + "block_leaders": ["0xBFC3E110", "0xBFC3E128", "0xBFC3E144", "0xBFC3E164", "0xBFC3E178", "0xBFC3E184", "0xBFC3E194", "0xBFC3E19C", "0xBFC3E1A0", "0xBFC3E1A8", "0xBFC3E1C0", "0xBFC3E1DC", "0xBFC3E1E4", "0xBFC3E1F0", "0xBFC3E1F4", "0xBFC3E1FC", "0xBFC3E204", "0xBFC3E208", "0xBFC3E20C", "0xBFC3E220", "0xBFC3E228", "0xBFC3E22C", "0xBFC3E23C", "0xBFC3E244", "0xBFC3E258", "0xBFC3E270", "0xBFC3E28C", "0xBFC3E29C", "0xBFC3E2A0", "0xBFC3E2AC", "0xBFC3E2B0", "0xBFC3E2B8", "0xBFC3E2BC", "0xBFC3E2D0", "0xBFC3E2D8", "0xBFC3E30C", "0xBFC3E318"] + }, + { + "entry_addr": "0xBFC3E324", + "normalized_addr": "0x1FC3E324", + "end_addr": "0xBFC3E38C", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3E324", + "block_leaders": ["0xBFC3E324", "0xBFC3E32C", "0xBFC3E384"] + }, + { + "entry_addr": "0xBFC3E390", + "normalized_addr": "0x1FC3E390", + "end_addr": "0xBFC3E630", + "instruction_count": 169, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3E390", + "block_leaders": ["0xBFC3E390", "0xBFC3E3C4", "0xBFC3E3CC", "0xBFC3E3F0", "0xBFC3E404", "0xBFC3E40C", "0xBFC3E410", "0xBFC3E434", "0xBFC3E444", "0xBFC3E458", "0xBFC3E478", "0xBFC3E488", "0xBFC3E49C", "0xBFC3E4B0", "0xBFC3E4BC", "0xBFC3E4D0", "0xBFC3E4D8", "0xBFC3E4E0", "0xBFC3E4F0", "0xBFC3E4F4", "0xBFC3E4FC", "0xBFC3E504", "0xBFC3E508", "0xBFC3E520", "0xBFC3E528", "0xBFC3E540", "0xBFC3E590", "0xBFC3E598", "0xBFC3E5A0", "0xBFC3E5B4", "0xBFC3E5CC", "0xBFC3E610", "0xBFC3E624"] + }, + { + "entry_addr": "0xBFC3E634", + "normalized_addr": "0x1FC3E634", + "end_addr": "0xBFC3E97C", + "instruction_count": 211, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3E980 -> jal at 0xBFC3EC98", + "block_leaders": ["0xBFC3E634", "0xBFC3E660", "0xBFC3E668", "0xBFC3E694", "0xBFC3E6A4", "0xBFC3E6C4", "0xBFC3E6E4", "0xBFC3E6F0", "0xBFC3E6F8", "0xBFC3E700", "0xBFC3E708", "0xBFC3E728", "0xBFC3E730", "0xBFC3E734", "0xBFC3E77C", "0xBFC3E79C", "0xBFC3E7A4", "0xBFC3E7A8", "0xBFC3E7C4", "0xBFC3E7F8", "0xBFC3E800", "0xBFC3E808", "0xBFC3E828", "0xBFC3E830", "0xBFC3E850", "0xBFC3E858", "0xBFC3E85C", "0xBFC3E88C", "0xBFC3E898", "0xBFC3E8D8", "0xBFC3E8DC", "0xBFC3E8E4", "0xBFC3E8F4", "0xBFC3E914", "0xBFC3E91C", "0xBFC3E920", "0xBFC3E938", "0xBFC3E974", "0xBFC3E978"] + }, + { + "entry_addr": "0xBFC3E980", + "normalized_addr": "0x1FC3E980", + "end_addr": "0xBFC3ECB4", + "instruction_count": 206, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3E980", + "block_leaders": ["0xBFC3E980", "0xBFC3E9B0", "0xBFC3E9B8", "0xBFC3E9DC", "0xBFC3E9F0", "0xBFC3E9F8", "0xBFC3E9FC", "0xBFC3EA14", "0xBFC3EA1C", "0xBFC3EA20", "0xBFC3EA38", "0xBFC3EA40", "0xBFC3EA44", "0xBFC3EA5C", "0xBFC3EA64", "0xBFC3EA84", "0xBFC3EA9C", "0xBFC3EABC", "0xBFC3EAC4", "0xBFC3EB00", "0xBFC3EB20", "0xBFC3EB28", "0xBFC3EB2C", "0xBFC3EB4C", "0xBFC3EB54", "0xBFC3EB64", "0xBFC3EB90", "0xBFC3EBA4", "0xBFC3EBB4", "0xBFC3EBCC", "0xBFC3EBE0", "0xBFC3EBEC", "0xBFC3EBF0", "0xBFC3EC00", "0xBFC3EC0C", "0xBFC3EC10", "0xBFC3EC18", "0xBFC3EC20", "0xBFC3EC34", "0xBFC3EC40", "0xBFC3EC44", "0xBFC3EC50", "0xBFC3EC58", "0xBFC3EC5C", "0xBFC3EC64", "0xBFC3EC70", "0xBFC3EC88", "0xBFC3EC90", "0xBFC3EC94", "0xBFC3ECA0", "0xBFC3ECA4", "0xBFC3ECA8"] + }, + { + "entry_addr": "0xBFC3ECB8", + "normalized_addr": "0x1FC3ECB8", + "end_addr": "0xBFC3ED3C", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC3ECB8", + "block_leaders": ["0xBFC3ECB8", "0xBFC3ECD4", "0xBFC3ECE8", "0xBFC3ECF4", "0xBFC3ED04", "0xBFC3ED0C", "0xBFC3ED24", "0xBFC3ED2C", "0xBFC3ED34"] + }, + { + "entry_addr": "0xBFC3ED40", + "normalized_addr": "0x1FC3ED40", + "end_addr": "0xBFC3EDB0", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3ED40", + "block_leaders": ["0xBFC3ED40", "0xBFC3ED5C", "0xBFC3ED68", "0xBFC3ED7C", "0xBFC3ED84", "0xBFC3ED90", "0xBFC3ED9C", "0xBFC3EDA4"] + }, + { + "entry_addr": "0xBFC3EDB4", + "normalized_addr": "0x1FC3EDB4", + "end_addr": "0xBFC3EE78", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EDB4", + "block_leaders": ["0xBFC3EDB4", "0xBFC3EDC4", "0xBFC3EDD8", "0xBFC3EDF8", "0xBFC3EE0C", "0xBFC3EE30", "0xBFC3EE44", "0xBFC3EE5C", "0xBFC3EE70"] + }, + { + "entry_addr": "0xBFC3EE80", + "normalized_addr": "0x1FC3EE80", + "end_addr": "0xBFC3EEBC", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0 -> jal at 0xBFC3F018 -> jal at 0xBFC3EF3C", + "block_leaders": ["0xBFC3EE80", "0xBFC3EEA8", "0xBFC3EEB8"] + }, + { + "entry_addr": "0xBFC3EEC0", + "normalized_addr": "0x1FC3EEC0", + "end_addr": "0xBFC3EEE0", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0 -> jal at 0xBFC3F028", + "block_leaders": ["0xBFC3EEC0"] + }, + { + "entry_addr": "0xBFC3EEE4", + "normalized_addr": "0x1FC3EEE4", + "end_addr": "0xBFC3EF04", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0 -> jal at 0xBFC3EFF8", + "block_leaders": ["0xBFC3EEE4"] + }, + { + "entry_addr": "0xBFC3EF08", + "normalized_addr": "0x1FC3EF08", + "end_addr": "0xBFC3EF78", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0 -> jal at 0xBFC3F018", + "block_leaders": ["0xBFC3EF08", "0xBFC3EF24", "0xBFC3EF3C", "0xBFC3EF44", "0xBFC3EF60", "0xBFC3EF68", "0xBFC3EF6C"] + }, + { + "entry_addr": "0xBFC3EF7C", + "normalized_addr": "0x1FC3EF7C", + "end_addr": "0xBFC3EFEC", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0 -> jal at 0xBFC3F038", + "block_leaders": ["0xBFC3EF7C", "0xBFC3EF98", "0xBFC3EFB0", "0xBFC3EFB8", "0xBFC3EFD4", "0xBFC3EFDC", "0xBFC3EFE0"] + }, + { + "entry_addr": "0xBFC3EFF0", + "normalized_addr": "0x1FC3EFF0", + "end_addr": "0xBFC3F08C", + "instruction_count": 40, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3EFF0", + "block_leaders": ["0xBFC3EFF0", "0xBFC3F000", "0xBFC3F020", "0xBFC3F028", "0xBFC3F030", "0xBFC3F038", "0xBFC3F040", "0xBFC3F048", "0xBFC3F050", "0xBFC3F058", "0xBFC3F05C", "0xBFC3F064", "0xBFC3F06C", "0xBFC3F074", "0xBFC3F07C", "0xBFC3F080"] + }, + { + "entry_addr": "0xBFC3F090", + "normalized_addr": "0x1FC3F090", + "end_addr": "0xBFC3F198", + "instruction_count": 67, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DBF4 -> jal at 0xBFC1DDC0", + "block_leaders": ["0xBFC3F090", "0xBFC3F140", "0xBFC3F150", "0xBFC3F184"] + }, + { + "entry_addr": "0xBFC3F19C", + "normalized_addr": "0x1FC3F19C", + "end_addr": "0xBFC3F1B4", + "instruction_count": 7, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1E3CC -> jal at 0xBFC1F158", + "block_leaders": ["0xBFC3F19C"] + }, + { + "entry_addr": "0xBFC3F1B8", + "normalized_addr": "0x1FC3F1B8", + "end_addr": "0xBFC3F2B0", + "instruction_count": 63, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F1B8", + "block_leaders": ["0xBFC3F1B8", "0xBFC3F1C8", "0xBFC3F1DC", "0xBFC3F1E4", "0xBFC3F1EC", "0xBFC3F200", "0xBFC3F208", "0xBFC3F210", "0xBFC3F230", "0xBFC3F238", "0xBFC3F240", "0xBFC3F244", "0xBFC3F248", "0xBFC3F24C", "0xBFC3F254", "0xBFC3F2A4"] + }, + { + "entry_addr": "0xBFC3F2B4", + "normalized_addr": "0x1FC3F2B4", + "end_addr": "0xBFC3F3E0", + "instruction_count": 76, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F2B4", + "block_leaders": ["0xBFC3F2B4", "0xBFC3F2C4", "0xBFC3F2D8", "0xBFC3F2E0", "0xBFC3F2E8", "0xBFC3F2FC", "0xBFC3F304", "0xBFC3F30C", "0xBFC3F314", "0xBFC3F31C", "0xBFC3F324", "0xBFC3F344", "0xBFC3F34C", "0xBFC3F350", "0xBFC3F358", "0xBFC3F360", "0xBFC3F368", "0xBFC3F370", "0xBFC3F374", "0xBFC3F378", "0xBFC3F37C", "0xBFC3F384", "0xBFC3F3D4"] + }, + { + "entry_addr": "0xBFC3F484", + "normalized_addr": "0x1FC3F484", + "end_addr": "0xBFC3F4EC", + "instruction_count": 27, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F484", + "block_leaders": ["0xBFC3F484", "0xBFC3F49C", "0xBFC3F4A4", "0xBFC3F4A8", "0xBFC3F4AC", "0xBFC3F4B8"] + }, + { + "entry_addr": "0xBFC3F4F0", + "normalized_addr": "0x1FC3F4F0", + "end_addr": "0xBFC3F56C", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F4F0", + "block_leaders": ["0xBFC3F4F0", "0xBFC3F508", "0xBFC3F514", "0xBFC3F528", "0xBFC3F534", "0xBFC3F560"] + }, + { + "entry_addr": "0xBFC3F570", + "normalized_addr": "0x1FC3F570", + "end_addr": "0xBFC3F5D4", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F570", + "block_leaders": ["0xBFC3F570", "0xBFC3F588", "0xBFC3F590", "0xBFC3F59C", "0xBFC3F5C8"] + }, + { + "entry_addr": "0xBFC3F5D8", + "normalized_addr": "0x1FC3F5D8", + "end_addr": "0xBFC3F6EC", + "instruction_count": 70, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F5D8", + "block_leaders": ["0xBFC3F5D8", "0xBFC3F5F4", "0xBFC3F5FC", "0xBFC3F604", "0xBFC3F608", "0xBFC3F638", "0xBFC3F648", "0xBFC3F654", "0xBFC3F664", "0xBFC3F668", "0xBFC3F670", "0xBFC3F690", "0xBFC3F698", "0xBFC3F6A0", "0xBFC3F6E0"] + }, + { + "entry_addr": "0xBFC3F6F0", + "normalized_addr": "0x1FC3F6F0", + "end_addr": "0xBFC3F7E4", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F6F0", + "block_leaders": ["0xBFC3F6F0", "0xBFC3F708", "0xBFC3F710", "0xBFC3F730", "0xBFC3F740", "0xBFC3F74C", "0xBFC3F75C", "0xBFC3F760", "0xBFC3F768", "0xBFC3F788", "0xBFC3F790", "0xBFC3F798", "0xBFC3F7D8"] + }, + { + "entry_addr": "0xBFC3F7E8", + "normalized_addr": "0x1FC3F7E8", + "end_addr": "0xBFC3F8E0", + "instruction_count": 63, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F7E8", + "block_leaders": ["0xBFC3F7E8", "0xBFC3F804", "0xBFC3F810", "0xBFC3F824", "0xBFC3F82C", "0xBFC3F834", "0xBFC3F848", "0xBFC3F850", "0xBFC3F854", "0xBFC3F86C", "0xBFC3F8D0", "0xBFC3F8D4"] + }, + { + "entry_addr": "0xBFC3F8E4", + "normalized_addr": "0x1FC3F8E4", + "end_addr": "0xBFC3F9A8", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F8E4", + "block_leaders": ["0xBFC3F8E4", "0xBFC3F8FC", "0xBFC3F908", "0xBFC3F910", "0xBFC3F934", "0xBFC3F93C", "0xBFC3F94C", "0xBFC3F99C"] + }, + { + "entry_addr": "0xBFC3F9AC", + "normalized_addr": "0x1FC3F9AC", + "end_addr": "0xBFC3FA0C", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F9AC", + "block_leaders": ["0xBFC3F9AC", "0xBFC3F9C4", "0xBFC3F9CC", "0xBFC3F9D4", "0xBFC3FA00"] + }, + { + "entry_addr": "0xBFC3FA10", + "normalized_addr": "0x1FC3FA10", + "end_addr": "0xBFC3FAE8", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FA10", + "block_leaders": ["0xBFC3FA10", "0xBFC3FA1C", "0xBFC3FA30", "0xBFC3FA38", "0xBFC3FA40", "0xBFC3FA54", "0xBFC3FA5C", "0xBFC3FA64", "0xBFC3FA6C", "0xBFC3FA74", "0xBFC3FA7C", "0xBFC3FA84", "0xBFC3FA8C", "0xBFC3FA94", "0xBFC3FA9C", "0xBFC3FAA0", "0xBFC3FAA4", "0xBFC3FAA8", "0xBFC3FAB0", "0xBFC3FADC"] + }, + { + "entry_addr": "0xBFC3FAEC", + "normalized_addr": "0x1FC3FAEC", + "end_addr": "0xBFC3FB70", + "instruction_count": 34, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FAEC", + "block_leaders": ["0xBFC3FAEC", "0xBFC3FB04", "0xBFC3FB10", "0xBFC3FB18", "0xBFC3FB20", "0xBFC3FB28", "0xBFC3FB30", "0xBFC3FB44", "0xBFC3FB64"] + }, + { + "entry_addr": "0xBFC3FB74", + "normalized_addr": "0x1FC3FB74", + "end_addr": "0xBFC3FC4C", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FB74", + "block_leaders": ["0xBFC3FB74", "0xBFC3FB80", "0xBFC3FB94", "0xBFC3FB9C", "0xBFC3FBA4", "0xBFC3FBB8", "0xBFC3FBC0", "0xBFC3FBC8", "0xBFC3FBD0", "0xBFC3FBD8", "0xBFC3FBE0", "0xBFC3FBE8", "0xBFC3FBF0", "0xBFC3FBF8", "0xBFC3FC00", "0xBFC3FC04", "0xBFC3FC08", "0xBFC3FC0C", "0xBFC3FC14", "0xBFC3FC40"] + }, + { + "entry_addr": "0xBFC3FC50", + "normalized_addr": "0x1FC3FC50", + "end_addr": "0xBFC3FD08", + "instruction_count": 47, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FC50", + "block_leaders": ["0xBFC3FC50", "0xBFC3FC5C", "0xBFC3FC70", "0xBFC3FC78", "0xBFC3FC80", "0xBFC3FC94", "0xBFC3FC9C", "0xBFC3FCA4", "0xBFC3FCAC", "0xBFC3FCB4", "0xBFC3FCBC", "0xBFC3FCC0", "0xBFC3FCC4", "0xBFC3FCC8", "0xBFC3FCD0", "0xBFC3FCFC"] + }, + { + "entry_addr": "0xBFC3FD0C", + "normalized_addr": "0x1FC3FD0C", + "end_addr": "0xBFC3FDC4", + "instruction_count": 47, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FD0C", + "block_leaders": ["0xBFC3FD0C", "0xBFC3FD18", "0xBFC3FD2C", "0xBFC3FD34", "0xBFC3FD3C", "0xBFC3FD50", "0xBFC3FD58", "0xBFC3FD60", "0xBFC3FD68", "0xBFC3FD70", "0xBFC3FD78", "0xBFC3FD7C", "0xBFC3FD80", "0xBFC3FD84", "0xBFC3FD8C", "0xBFC3FDB8"] + }, + { + "entry_addr": "0xBFC3FDC8", + "normalized_addr": "0x1FC3FDC8", + "end_addr": "0xBFC3FE5C", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FDC8", + "block_leaders": ["0xBFC3FDC8", "0xBFC3FDE0", "0xBFC3FDE8", "0xBFC3FDF0", "0xBFC3FE50"] + }, + { + "entry_addr": "0xBFC3FE60", + "normalized_addr": "0x1FC3FE60", + "end_addr": "0xBFC3FF3C", + "instruction_count": 56, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FE60", + "block_leaders": ["0xBFC3FE60", "0xBFC3FE7C", "0xBFC3FE84", "0xBFC3FEA4", "0xBFC3FEAC", "0xBFC3FEC0", "0xBFC3FEFC", "0xBFC3FF04", "0xBFC3FF30"] + }, + { + "entry_addr": "0xBFC3FF40", + "normalized_addr": "0x1FC3FF40", + "end_addr": "0xBFC40030", + "instruction_count": 61, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3FF40", + "block_leaders": ["0xBFC3FF40", "0xBFC3FF5C", "0xBFC3FF64", "0xBFC3FF84", "0xBFC3FF8C", "0xBFC3FFA0", "0xBFC3FFDC", "0xBFC3FFE4", "0xBFC40024"] + }, + { + "entry_addr": "0xBFC40034", + "normalized_addr": "0x1FC40034", + "end_addr": "0xBFC400D8", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40034", + "block_leaders": ["0xBFC40034", "0xBFC40040", "0xBFC40054", "0xBFC4005C", "0xBFC40064", "0xBFC40078", "0xBFC40080", "0xBFC40088", "0xBFC40090", "0xBFC40098", "0xBFC400A0", "0xBFC400CC"] + }, + { + "entry_addr": "0xBFC400DC", + "normalized_addr": "0x1FC400DC", + "end_addr": "0xBFC40180", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC400DC", + "block_leaders": ["0xBFC400DC", "0xBFC400E8", "0xBFC400FC", "0xBFC40104", "0xBFC4010C", "0xBFC40120", "0xBFC40128", "0xBFC40130", "0xBFC40138", "0xBFC40140", "0xBFC40148", "0xBFC40174"] + }, + { + "entry_addr": "0xBFC40184", + "normalized_addr": "0x1FC40184", + "end_addr": "0xBFC4025C", + "instruction_count": 55, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40184", + "block_leaders": ["0xBFC40184", "0xBFC40194", "0xBFC401A8", "0xBFC401B0", "0xBFC401B8", "0xBFC401CC", "0xBFC401D4", "0xBFC401DC", "0xBFC401E4", "0xBFC401EC", "0xBFC401F4", "0xBFC401FC", "0xBFC40210", "0xBFC40220", "0xBFC40230", "0xBFC40250"] + }, + { + "entry_addr": "0xBFC40260", + "normalized_addr": "0x1FC40260", + "end_addr": "0xBFC402D8", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40260", + "block_leaders": ["0xBFC40260", "0xBFC40278", "0xBFC40284", "0xBFC4028C", "0xBFC402A0", "0xBFC402CC"] + }, + { + "entry_addr": "0xBFC402DC", + "normalized_addr": "0x1FC402DC", + "end_addr": "0xBFC403C0", + "instruction_count": 58, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC402DC", + "block_leaders": ["0xBFC402DC", "0xBFC402F8", "0xBFC40300", "0xBFC40320", "0xBFC40328", "0xBFC40348", "0xBFC40370", "0xBFC40378", "0xBFC40394", "0xBFC403B4"] + }, + { + "entry_addr": "0xBFC403C4", + "normalized_addr": "0x1FC403C4", + "end_addr": "0xBFC40400", + "instruction_count": 16, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC21184 -> jal at 0xBFC211B8", + "block_leaders": ["0xBFC403C4", "0xBFC403D8", "0xBFC403E0"] + }, + { + "entry_addr": "0xBFC40404", + "normalized_addr": "0x1FC40404", + "end_addr": "0xBFC40480", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC2125C -> jal at 0xBFC21284", + "block_leaders": ["0xBFC40404", "0xBFC40418", "0xBFC40420", "0xBFC40428", "0xBFC40430", "0xBFC40434", "0xBFC40448", "0xBFC40478"] + }, + { + "entry_addr": "0xBFC40484", + "normalized_addr": "0x1FC40484", + "end_addr": "0xBFC40624", + "instruction_count": 75, + "termination_reason": "mixed", + "discovered_by": "ghidra_BFC40484", + "block_leaders": ["0xBFC40484", "0xBFC404A8", "0xBFC404B0", "0xBFC404C4", "0xBFC404CC", "0xBFC40518", "0xBFC405AC", "0xBFC405DC", "0xBFC405E0", "0xBFC4060C", "0xBFC40610", "0xBFC40618"] + }, + { + "entry_addr": "0xBFC40628", + "normalized_addr": "0x1FC40628", + "end_addr": "0xBFC406DC", + "instruction_count": 46, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40628", + "block_leaders": ["0xBFC40628", "0xBFC4064C", "0xBFC40654", "0xBFC40668", "0xBFC40670", "0xBFC406B4", "0xBFC406C4", "0xBFC406D0"] + }, + { + "entry_addr": "0xBFC406E0", + "normalized_addr": "0x1FC406E0", + "end_addr": "0xBFC406FC", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC406E0", + "block_leaders": ["0xBFC406E0", "0xBFC406F0"] + }, + { + "entry_addr": "0xBFC40700", + "normalized_addr": "0x1FC40700", + "end_addr": "0xBFC4071C", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40700", + "block_leaders": ["0xBFC40700", "0xBFC40710"] + }, + { + "entry_addr": "0xBFC40720", + "normalized_addr": "0x1FC40720", + "end_addr": "0xBFC40740", + "instruction_count": 9, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DBF4 -> jal at 0xBFC1DDC0 -> jal at 0xBFC3F148", + "block_leaders": ["0xBFC40720"] + }, + { + "entry_addr": "0xBFC40744", + "normalized_addr": "0x1FC40744", + "end_addr": "0xBFC407B4", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC1DBF4 -> jal at 0xBFC1DDC0 -> jal at 0xBFC3F138", + "block_leaders": ["0xBFC40744", "0xBFC40780", "0xBFC40784", "0xBFC407B0"] + }, + { + "entry_addr": "0xBFC407B8", + "normalized_addr": "0x1FC407B8", + "end_addr": "0xBFC40B64", + "instruction_count": 236, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC407B8", + "block_leaders": ["0xBFC407B8", "0xBFC407D0", "0xBFC407D8", "0xBFC407E0", "0xBFC407EC", "0xBFC407F4", "0xBFC407FC", "0xBFC40814", "0xBFC4081C", "0xBFC40824", "0xBFC4082C", "0xBFC40834", "0xBFC40838", "0xBFC40844", "0xBFC40848", "0xBFC40854", "0xBFC4085C", "0xBFC40864", "0xBFC4086C", "0xBFC40874", "0xBFC4087C", "0xBFC40884", "0xBFC4088C", "0xBFC40894", "0xBFC4089C", "0xBFC408A4", "0xBFC408AC", "0xBFC408B4", "0xBFC408BC", "0xBFC408C4", "0xBFC408CC", "0xBFC408D4", "0xBFC408DC", "0xBFC408E4", "0xBFC408EC", "0xBFC408F4", "0xBFC408F8", "0xBFC40904", "0xBFC4090C", "0xBFC40918", "0xBFC40920", "0xBFC40928", "0xBFC40930", "0xBFC40938", "0xBFC40940", "0xBFC40948", "0xBFC40950", "0xBFC40958", "0xBFC40960", "0xBFC40968", "0xBFC40970", "0xBFC4097C", "0xBFC40984", "0xBFC40990", "0xBFC40998", "0xBFC409A4", "0xBFC409AC", "0xBFC409B4", "0xBFC409BC", "0xBFC409C8", "0xBFC409D0", "0xBFC409DC", "0xBFC409E4", "0xBFC409EC", "0xBFC409F4", "0xBFC409FC", "0xBFC40A04", "0xBFC40A10", "0xBFC40A18", "0xBFC40A24", "0xBFC40A2C", "0xBFC40A34", "0xBFC40A3C", "0xBFC40A48", "0xBFC40A50", "0xBFC40A5C", "0xBFC40A64", "0xBFC40A6C", "0xBFC40A74", "0xBFC40A7C", "0xBFC40A84", "0xBFC40A8C", "0xBFC40A94", "0xBFC40AA0", "0xBFC40AA8", "0xBFC40AB4", "0xBFC40ABC", "0xBFC40AC4", "0xBFC40ACC", "0xBFC40AD8", "0xBFC40AE0", "0xBFC40AEC", "0xBFC40AF4", "0xBFC40AFC", "0xBFC40B04", "0xBFC40B0C", "0xBFC40B14", "0xBFC40B20", "0xBFC40B28", "0xBFC40B34", "0xBFC40B3C", "0xBFC40B44", "0xBFC40B4C", "0xBFC40B58", "0xBFC40B5C"] + }, + { + "entry_addr": "0xBFC40B68", + "normalized_addr": "0x1FC40B68", + "end_addr": "0xBFC40DE4", + "instruction_count": 160, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40B68", + "block_leaders": ["0xBFC40B68", "0xBFC40B90", "0xBFC40B98", "0xBFC40BA0", "0xBFC40BB4", "0xBFC40BBC", "0xBFC40BC4", "0xBFC40BCC", "0xBFC40BD4", "0xBFC40BE4", "0xBFC40BFC", "0xBFC40C04", "0xBFC40C20", "0xBFC40C28", "0xBFC40C4C", "0xBFC40C54", "0xBFC40C70", "0xBFC40CA8", "0xBFC40CD8", "0xBFC40CF4", "0xBFC40CFC", "0xBFC40D00", "0xBFC40D0C", "0xBFC40D14", "0xBFC40D18", "0xBFC40D20", "0xBFC40D28", "0xBFC40D30", "0xBFC40D38", "0xBFC40D40", "0xBFC40D48", "0xBFC40D54", "0xBFC40D5C", "0xBFC40D60", "0xBFC40D68", "0xBFC40D6C", "0xBFC40D84", "0xBFC40D8C", "0xBFC40D98", "0xBFC40DA0", "0xBFC40DAC", "0xBFC40DB4", "0xBFC40DBC", "0xBFC40DC4", "0xBFC40DD0", "0xBFC40DD8", "0xBFC40DDC"] + }, + { + "entry_addr": "0xBFC40DE8", + "normalized_addr": "0x1FC40DE8", + "end_addr": "0xBFC40F30", + "instruction_count": 83, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40DE8", + "block_leaders": ["0xBFC40DE8", "0xBFC40E24", "0xBFC40E60", "0xBFC40E98", "0xBFC40E9C", "0xBFC40EC0", "0xBFC40EC8", "0xBFC40ECC", "0xBFC40ED4", "0xBFC40EF0", "0xBFC40F24", "0xBFC40F28"] + }, + { + "entry_addr": "0xBFC40F34", + "normalized_addr": "0x1FC40F34", + "end_addr": "0xBFC41028", + "instruction_count": 62, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC40F34", + "block_leaders": ["0xBFC40F34", "0xBFC40F60", "0xBFC40F6C", "0xBFC40F80", "0xBFC40F88", "0xBFC40F90", "0xBFC40F98", "0xBFC40FA4", "0xBFC40FB0", "0xBFC40FB8", "0xBFC40FC0", "0xBFC40FC8", "0xBFC40FD0", "0xBFC40FD4", "0xBFC40FDC", "0xBFC40FE4", "0xBFC40FEC", "0xBFC40FF4", "0xBFC40FFC", "0xBFC41004", "0xBFC4100C", "0xBFC41010", "0xBFC4101C", "0xBFC41020"] + }, + { + "entry_addr": "0xBFC4102C", + "normalized_addr": "0x1FC4102C", + "end_addr": "0xBFC411FC", + "instruction_count": 117, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC4102C", + "block_leaders": ["0xBFC4102C", "0xBFC41044", "0xBFC41050", "0xBFC41064", "0xBFC4106C", "0xBFC41080", "0xBFC41090", "0xBFC4109C", "0xBFC410A4", "0xBFC410AC", "0xBFC410B4", "0xBFC410B8", "0xBFC410C0", "0xBFC410CC", "0xBFC410D4", "0xBFC410E0", "0xBFC410E8", "0xBFC410FC", "0xBFC41104", "0xBFC41118", "0xBFC4111C", "0xBFC4112C", "0xBFC41140", "0xBFC41148", "0xBFC41150", "0xBFC41154", "0xBFC4115C", "0xBFC41168", "0xBFC41170", "0xBFC4117C", "0xBFC41184", "0xBFC41190", "0xBFC41194", "0xBFC411A4", "0xBFC411B4", "0xBFC411C8", "0xBFC411D8", "0xBFC411E0", "0xBFC411E4", "0xBFC411F0", "0xBFC411F4"] + }, + { + "entry_addr": "0xBFC41200", + "normalized_addr": "0x1FC41200", + "end_addr": "0xBFC41254", + "instruction_count": 22, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41200", + "block_leaders": ["0xBFC41200", "0xBFC4120C", "0xBFC41214", "0xBFC41218", "0xBFC41224"] + }, + { + "entry_addr": "0xBFC41258", + "normalized_addr": "0x1FC41258", + "end_addr": "0xBFC41308", + "instruction_count": 45, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41258", + "block_leaders": ["0xBFC41258", "0xBFC4129C", "0xBFC412B8", "0xBFC412CC", "0xBFC412E0", "0xBFC412EC", "0xBFC412FC"] + }, + { + "entry_addr": "0xBFC4130C", + "normalized_addr": "0x1FC4130C", + "end_addr": "0xBFC413AC", + "instruction_count": 41, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC407B8 -> jal at 0xBFC407EC", + "block_leaders": ["0xBFC4130C", "0xBFC4132C", "0xBFC4135C", "0xBFC41370", "0xBFC41384", "0xBFC41390", "0xBFC413A0"] + }, + { + "entry_addr": "0xBFC413B0", + "normalized_addr": "0x1FC413B0", + "end_addr": "0xBFC413F0", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC413B0", + "block_leaders": ["0xBFC413B0", "0xBFC413E4"] + }, + { + "entry_addr": "0xBFC413F4", + "normalized_addr": "0x1FC413F4", + "end_addr": "0xBFC41454", + "instruction_count": 25, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC413F4", + "block_leaders": ["0xBFC413F4", "0xBFC4141C", "0xBFC4142C", "0xBFC41448"] + }, + { + "entry_addr": "0xBFC41458", + "normalized_addr": "0x1FC41458", + "end_addr": "0xBFC4151C", + "instruction_count": 50, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41458", + "block_leaders": ["0xBFC41458", "0xBFC41468", "0xBFC4148C", "0xBFC414A0", "0xBFC414B0", "0xBFC414B4", "0xBFC414BC", "0xBFC414D0", "0xBFC414E4", "0xBFC414F4", "0xBFC414F8", "0xBFC41500", "0xBFC41510"] + }, + { + "entry_addr": "0xBFC41520", + "normalized_addr": "0x1FC41520", + "end_addr": "0xBFC41644", + "instruction_count": 74, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41520", + "block_leaders": ["0xBFC41520", "0xBFC41534", "0xBFC41554", "0xBFC415C4", "0xBFC415F0", "0xBFC415F8", "0xBFC41624", "0xBFC4162C", "0xBFC41638", "0xBFC4163C"] + }, + { + "entry_addr": "0xBFC41648", + "normalized_addr": "0x1FC41648", + "end_addr": "0xBFC4166C", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41648", + "block_leaders": ["0xBFC41648", "0xBFC41660"] + }, + { + "entry_addr": "0xBFC41670", + "normalized_addr": "0x1FC41670", + "end_addr": "0xBFC41704", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41670", + "block_leaders": ["0xBFC41670", "0xBFC416B8", "0xBFC416E8", "0xBFC416F8"] + }, + { + "entry_addr": "0xBFC41708", + "normalized_addr": "0x1FC41708", + "end_addr": "0xBFC41784", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41708", + "block_leaders": ["0xBFC41708", "0xBFC41738", "0xBFC41740", "0xBFC4175C", "0xBFC41760", "0xBFC41778"] + }, + { + "entry_addr": "0xBFC41788", + "normalized_addr": "0x1FC41788", + "end_addr": "0xBFC417C8", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC407B8 -> jal at 0xBFC40894", + "block_leaders": ["0xBFC41788", "0xBFC417BC"] + }, + { + "entry_addr": "0xBFC417CC", + "normalized_addr": "0x1FC417CC", + "end_addr": "0xBFC41800", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC417CC", + "block_leaders": ["0xBFC417CC", "0xBFC417F4"] + }, + { + "entry_addr": "0xBFC41804", + "normalized_addr": "0x1FC41804", + "end_addr": "0xBFC41844", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC407B8 -> jal at 0xBFC40884", + "block_leaders": ["0xBFC41804", "0xBFC41838"] + }, + { + "entry_addr": "0xBFC41848", + "normalized_addr": "0x1FC41848", + "end_addr": "0xBFC418C0", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41848", + "block_leaders": ["0xBFC41848", "0xBFC4186C", "0xBFC41874", "0xBFC4187C", "0xBFC41880", "0xBFC4188C", "0xBFC418B8"] + }, + { + "entry_addr": "0xBFC418C4", + "normalized_addr": "0x1FC418C4", + "end_addr": "0xBFC41928", + "instruction_count": 26, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC418C4", + "block_leaders": ["0xBFC418C4", "0xBFC418F4"] + }, + { + "entry_addr": "0xBFC4192C", + "normalized_addr": "0x1FC4192C", + "end_addr": "0xBFC41A40", + "instruction_count": 70, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC4192C", + "block_leaders": ["0xBFC4192C", "0xBFC419B8", "0xBFC419C0", "0xBFC419C8", "0xBFC419FC", "0xBFC41A38"] + }, + { + "entry_addr": "0xBFC41A44", + "normalized_addr": "0x1FC41A44", + "end_addr": "0xBFC41BA4", + "instruction_count": 89, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41A44", + "block_leaders": ["0xBFC41A44", "0xBFC41A64", "0xBFC41A8C", "0xBFC41ABC", "0xBFC41ACC", "0xBFC41AE8", "0xBFC41AF0", "0xBFC41B10", "0xBFC41B18", "0xBFC41B20", "0xBFC41B24", "0xBFC41B44", "0xBFC41B48", "0xBFC41B60", "0xBFC41B9C"] + }, + { + "entry_addr": "0xBFC41BA8", + "normalized_addr": "0x1FC41BA8", + "end_addr": "0xBFC41C00", + "instruction_count": 23, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F7E8 -> jal at 0xBFC3F8C8", + "block_leaders": ["0xBFC41BA8"] + }, + { + "entry_addr": "0xBFC41C04", + "normalized_addr": "0x1FC41C04", + "end_addr": "0xBFC41C08", + "instruction_count": 2, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41848 -> jal at 0xBFC4186C", + "block_leaders": ["0xBFC41C04"] + }, + { + "entry_addr": "0xBFC41C0C", + "normalized_addr": "0x1FC41C0C", + "end_addr": "0xBFC41C7C", + "instruction_count": 29, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC3F1B8 -> jal at 0xBFC3F24C", + "block_leaders": ["0xBFC41C0C", "0xBFC41C48", "0xBFC41C4C", "0xBFC41C78"] + }, + { + "entry_addr": "0xBFC41C80", + "normalized_addr": "0x1FC41C80", + "end_addr": "0xBFC41DA0", + "instruction_count": 73, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41C80", + "block_leaders": ["0xBFC41C80", "0xBFC41CB8", "0xBFC41CC8", "0xBFC41CD4", "0xBFC41CDC", "0xBFC41CF4", "0xBFC41D18", "0xBFC41D30", "0xBFC41D54", "0xBFC41D6C", "0xBFC41D94", "0xBFC41D98"] + }, + { + "entry_addr": "0xBFC41DA4", + "normalized_addr": "0x1FC41DA4", + "end_addr": "0xBFC41E20", + "instruction_count": 32, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC41DA4", + "block_leaders": ["0xBFC41DA4", "0xBFC41DC8", "0xBFC41DE0", "0xBFC41DF4", "0xBFC41DFC", "0xBFC41E14", "0xBFC41E18"] + }, + { + "entry_addr": "0xBFC41E30", + "normalized_addr": "0x1FC41E30", + "end_addr": "0xBFC41ED4", + "instruction_count": 42, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254 -> jal at 0xBFC182A0", + "block_leaders": ["0xBFC41E30", "0xBFC41E44", "0xBFC41E4C", "0xBFC41E6C", "0xBFC41E78", "0xBFC41E84", "0xBFC41E8C", "0xBFC41E94", "0xBFC41E9C", "0xBFC41EA0", "0xBFC41EA8", "0xBFC41EB4", "0xBFC41EB8", "0xBFC41EBC", "0xBFC41EC4", "0xBFC41EC8"] + }, + { + "entry_addr": "0xBFC41ED8", + "normalized_addr": "0x1FC41ED8", + "end_addr": "0xBFC41F0C", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254 -> jal at 0xBFC18274", + "block_leaders": ["0xBFC41ED8", "0xBFC41EE8", "0xBFC41EF0"] + }, + { + "entry_addr": "0xBFC41F10", + "normalized_addr": "0x1FC41F10", + "end_addr": "0xBFC41F50", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC254B0 -> jal at 0xBFC25504", + "block_leaders": ["0xBFC41F10", "0xBFC41F40", "0xBFC41F48"] + }, + { + "entry_addr": "0xBFC41F54", + "normalized_addr": "0x1FC41F54", + "end_addr": "0xBFC41F84", + "instruction_count": 13, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC18254 -> jal at 0xBFC182A8", + "block_leaders": ["0xBFC41F54"] + }, + { + "entry_addr": "0xBFC41F88", + "normalized_addr": "0x1FC41F88", + "end_addr": "0xBFC41FBC", + "instruction_count": 14, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC25390 -> jal at 0xBFC253D0", + "block_leaders": ["0xBFC41F88", "0xBFC41F98", "0xBFC41FA0"] + }, + { + "entry_addr": "0xBFC42014", + "normalized_addr": "0x1FC42014", + "end_addr": "0xBFC42038", + "instruction_count": 10, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42014", + "block_leaders": ["0xBFC42014", "0xBFC42024"] + }, + { + "entry_addr": "0xBFC4203C", + "normalized_addr": "0x1FC4203C", + "end_addr": "0xBFC42058", + "instruction_count": 8, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC4203C", + "block_leaders": ["0xBFC4203C", "0xBFC4204C"] + }, + { + "entry_addr": "0xBFC42060", + "normalized_addr": "0x1FC42060", + "end_addr": "0xBFC4208C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42060", + "block_leaders": ["0xBFC42060", "0xBFC42080"] + }, + { + "entry_addr": "0xBFC42090", + "normalized_addr": "0x1FC42090", + "end_addr": "0xBFC420BC", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42090", + "block_leaders": ["0xBFC42090", "0xBFC420B0"] + }, + { + "entry_addr": "0xBFC420C0", + "normalized_addr": "0x1FC420C0", + "end_addr": "0xBFC420EC", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC420C0", + "block_leaders": ["0xBFC420C0", "0xBFC420E0"] + }, + { + "entry_addr": "0xBFC420F0", + "normalized_addr": "0x1FC420F0", + "end_addr": "0xBFC4211C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC420F0", + "block_leaders": ["0xBFC420F0", "0xBFC42110"] + }, + { + "entry_addr": "0xBFC42120", + "normalized_addr": "0x1FC42120", + "end_addr": "0xBFC4214C", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42120", + "block_leaders": ["0xBFC42120", "0xBFC42140"] + }, + { + "entry_addr": "0xBFC42160", + "normalized_addr": "0x1FC42160", + "end_addr": "0xBFC4237C", + "instruction_count": 136, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42160", + "block_leaders": ["0xBFC42160", "0xBFC42174", "0xBFC4217C", "0xBFC42184", "0xBFC421B4", "0xBFC421CC", "0xBFC421D8", "0xBFC421E0", "0xBFC42220", "0xBFC4223C", "0xBFC42244", "0xBFC42250", "0xBFC42264", "0xBFC4226C", "0xBFC42290", "0xBFC422B0", "0xBFC422B8", "0xBFC422CC", "0xBFC422D8", "0xBFC422F8", "0xBFC42308", "0xBFC42314", "0xBFC4231C", "0xBFC42338", "0xBFC42348", "0xBFC42358", "0xBFC42368", "0xBFC42370"] + }, + { + "entry_addr": "0xBFC42424", + "normalized_addr": "0x1FC42424", + "end_addr": "0xBFC424A4", + "instruction_count": 33, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42424", + "block_leaders": ["0xBFC42424", "0xBFC42434", "0xBFC42474", "0xBFC4248C", "0xBFC42498"] + }, + { + "entry_addr": "0xBFC424A8", + "normalized_addr": "0x1FC424A8", + "end_addr": "0xBFC4253C", + "instruction_count": 38, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC424A8", + "block_leaders": ["0xBFC424A8", "0xBFC42514", "0xBFC42520", "0xBFC42530", "0xBFC42534"] + }, + { + "entry_addr": "0xBFC42540", + "normalized_addr": "0x1FC42540", + "end_addr": "0xBFC425B8", + "instruction_count": 31, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42540", + "block_leaders": ["0xBFC42540", "0xBFC4255C", "0xBFC4256C", "0xBFC42594", "0xBFC425A0", "0xBFC425AC"] + }, + { + "entry_addr": "0xBFC425FC", + "normalized_addr": "0x1FC425FC", + "end_addr": "0xBFC4263C", + "instruction_count": 17, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC425FC", + "block_leaders": ["0xBFC425FC", "0xBFC4260C", "0xBFC42624", "0xBFC42634"] + }, + { + "entry_addr": "0xBFC42640", + "normalized_addr": "0x1FC42640", + "end_addr": "0xBFC426D8", + "instruction_count": 39, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC42640", + "block_leaders": ["0xBFC42640", "0xBFC4265C", "0xBFC4266C", "0xBFC426A0", "0xBFC426B8", "0xBFC426CC"] + }, + { + "entry_addr": "0xBFC426DC", + "normalized_addr": "0x1FC426DC", + "end_addr": "0xBFC42708", + "instruction_count": 12, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC426DC", + "block_leaders": ["0xBFC426DC", "0xBFC426FC"] + }, + { + "entry_addr": "0xBFC4270C", + "normalized_addr": "0x1FC4270C", + "end_addr": "0xBFC42840", + "instruction_count": 78, + "termination_reason": "jr_ra", + "discovered_by": "ghidra_BFC4270C", + "block_leaders": ["0xBFC4270C", "0xBFC42734", "0xBFC42768", "0xBFC4276C", "0xBFC42780", "0xBFC427A8", "0xBFC427B0", "0xBFC427BC", "0xBFC427C8", "0xBFC427DC", "0xBFC427F8", "0xBFC42810", "0xBFC42824", "0xBFC42834", "0xBFC42838"] + }, + { + "entry_addr": "0xBFC42A10", + "normalized_addr": "0x1FC42A10", + "end_addr": "0xBFC42A1C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC42A10", + "block_leaders": ["0xBFC42A10"] + }, + { + "entry_addr": "0xBFC42A90", + "normalized_addr": "0x1FC42A90", + "end_addr": "0xBFC42A9C", + "instruction_count": 4, + "termination_reason": "jr_ra", + "discovered_by": "rmiss_BFC42A90", + "block_leaders": ["0xBFC42A90"] } ] } diff --git a/generated/indirect_jump_classes.json b/generated/indirect_jump_classes.json index f73b056f..d88d7549 100644 --- a/generated/indirect_jump_classes.json +++ b/generated/indirect_jump_classes.json @@ -1,18 +1,22 @@ { "schema": "psxrecomp-v4 phase1d indirect_jump_classes v1", - "total_sites": 27, + "total_sites": 196, "classes": { "a0_b0_c0_dispatch": { - "count": 21, - "sites": ["0xBFC0D884", "0xBFC0D894", "0xBFC0D8A4", "0xBFC0D8B4", "0xBFC0D954", "0xBFC0D9A4", "0xBFC0D9B4", "0xBFC0D9C4", "0xBFC0D9E4", "0xBFC0DAE4", "0xBFC0DB14", "0xBFC0DB24", "0xBFC0DB34", "0xBFC0DB44", "0xBFC0DB54", "0xBFC0DB64", "0xBFC0DB74", "0xBFC0DBF4", "0xBFC0DC14", "0xBFC0DC24", "0xBFC0DC34"] + "count": 77, + "sites": ["0xBFC0D884", "0xBFC0D894", "0xBFC0D8A4", "0xBFC0D8B4", "0xBFC0D8D4", "0xBFC0D954", "0xBFC0D974", "0xBFC0D984", "0xBFC0D994", "0xBFC0D9A4", "0xBFC0D9B4", "0xBFC0D9C4", "0xBFC0D9D4", "0xBFC0D9E4", "0xBFC0D9F4", "0xBFC0DA04", "0xBFC0DA14", "0xBFC0DA24", "0xBFC0DA34", "0xBFC0DA44", "0xBFC0DA54", "0xBFC0DA64", "0xBFC0DA74", "0xBFC0DA84", "0xBFC0DA94", "0xBFC0DAA4", "0xBFC0DAB4", "0xBFC0DAC4", "0xBFC0DAD4", "0xBFC0DAE4", "0xBFC0DAF4", "0xBFC0DB04", "0xBFC0DB14", "0xBFC0DB24", "0xBFC0DB34", "0xBFC0DB44", "0xBFC0DB54", "0xBFC0DB64", "0xBFC0DB74", "0xBFC0DB84", "0xBFC0DB94", "0xBFC0DBA4", "0xBFC0DBB4", "0xBFC0DBC4", "0xBFC0DBD4", "0xBFC0DBE4", "0xBFC0DBF4", "0xBFC0DC04", "0xBFC0DC14", "0xBFC0DC24", "0xBFC0DC34", "0xBFC0DC44", "0xBFC0DC54", "0xBFC16574", "0xBFC16584", "0xBFC16594", "0xBFC165A4", "0xBFC165B4", "0xBFC165C4", "0xBFC165D4", "0xBFC165E4", "0xBFC165F4", "0xBFC16604", "0xBFC16614", "0xBFC16624", "0xBFC16634", "0xBFC16644", "0xBFC16654", "0xBFC166A4", "0xBFC166B4", "0xBFC166C4", "0xBFC166D4", "0xBFC166E4", "0xBFC166F4", "0xBFC16704", "0xBFC16714", "0xBFC16724"] }, "computed_call": { - "count": 4, - "sites": ["0xBFC03D58", "0xBFC07024", "0xBFC07130", "0xBFC0717C"] + "count": 87, + "sites": ["0xBFC02D5C", "0xBFC02E58", "0xBFC02E20", "0xBFC02FC8", "0xBFC0300C", "0xBFC03D58", "0xBFC07024", "0xBFC07130", "0xBFC0717C", "0xBFC09788", "0xBFC10908", "0xBFC10920", "0xBFC11718", "0xBFC12504", "0xBFC126A0", "0xBFC12748", "0xBFC1280C", "0xBFC128B4", "0xBFC12958", "0xBFC12A8C", "0xBFC1313C", "0xBFC13208", "0xBFC132D4", "0xBFC1339C", "0xBFC13468", "0xBFC13558", "0xBFC13594", "0xBFC136D8", "0xBFC137AC", "0xBFC13854", "0xBFC148D4", "0xBFC15F10", "0xBFC2D19C", "0xBFC2E73C", "0xBFC36D8C", "0xBFC36DBC", "0xBFC36E2C", "0xBFC36DE4", "0xBFC36E4C", "0xBFC36EA8", "0xBFC36F00", "0xBFC36F20", "0xBFC36F78", "0xBFC36FD0", "0xBFC37058", "0xBFC37088", "0xBFC370DC", "0xBFC37118", "0xBFC37154", "0xBFC371CC", "0xBFC37350", "0xBFC373A4", "0xBFC373C8", "0xBFC3741C", "0xBFC3748C", "0xBFC37568", "0xBFC376C0", "0xBFC376F8", "0xBFC37804", "0xBFC37880", "0xBFC38F5C", "0xBFC38F18", "0xBFC39738", "0xBFC39778", "0xBFC39D68", "0xBFC39D84", "0xBFC39DAC", "0xBFC39DC4", "0xBFC39DDC", "0xBFC39E28", "0xBFC39E6C", "0xBFC39EB4", "0xBFC39EDC", "0xBFC39EF4", "0xBFC39F0C", "0xBFC3A0C0", "0xBFC3A208", "0xBFC3A190", "0xBFC3A148", "0xBFC3A29C", "0xBFC42078", "0xBFC420A8", "0xBFC420D8", "0xBFC42108", "0xBFC42138", "0xBFC422B0", "0xBFC427A8"] }, "computed_tail_call": { - "count": 2, - "sites": ["0xBFC00454", "0xBFC01938"] + "count": 7, + "sites": ["0xBFC00454", "0xBFC01938", "0xBFC10008", "0xBFC10018", "0xBFC10028", "0xBFC10038", "0xBFC10174"] + }, + "jump_table": { + "count": 25, + "sites": ["0xBFC04F40", "0xBFC0B6B4", "0xBFC100D8", "0xBFC100F8", "0xBFC10118", "0xBFC10B10", "0xBFC11558", "0xBFC14D3C", "0xBFC151E0", "0xBFC1569C", "0xBFC160CC", "0xBFC161BC", "0xBFC1A664", "0xBFC1ACB4", "0xBFC1BE0C", "0xBFC1CE50", "0xBFC1E200", "0xBFC1E424", "0xBFC27EE8", "0xBFC2AD1C", "0xBFC30454", "0xBFC3054C", "0xBFC34D94", "0xBFC36D40", "0xBFC4052C"] } } } diff --git a/generated/indirect_jumps.json b/generated/indirect_jumps.json index 7613af77..4bd0b913 100644 --- a/generated/indirect_jumps.json +++ b/generated/indirect_jumps.json @@ -1,6 +1,6 @@ { "schema": "psxrecomp-v4 phase1d indirect_jumps v1", - "total_sites": 27, + "total_sites": 196, "sites": [ { "func_addr": "0xBFC00420", @@ -54,6 +54,136 @@ {"address": "0xBFC01934", "raw": "0x0341D025", "mnemonic": "OR"} ] }, + { + "func_addr": "0xBFC02D20", + "pc": "0xBFC02D5C", + "register": 18, + "register_name": "$s2", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC02D1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02D20", "raw": "0x27BDFFD0", "mnemonic": "ADDIU"}, + {"address": "0xBFC02D24", "raw": "0xAFB00014", "mnemonic": "SW"}, + {"address": "0xBFC02D28", "raw": "0xAFB40020", "mnemonic": "SW"}, + {"address": "0xBFC02D2C", "raw": "0x00C08021", "mnemonic": "ADDU"}, + {"address": "0xBFC02D30", "raw": "0xAFB3001C", "mnemonic": "SW"}, + {"address": "0xBFC02D34", "raw": "0xAFB10018", "mnemonic": "SW"}, + {"address": "0xBFC02D38", "raw": "0x00A08821", "mnemonic": "ADDU"}, + {"address": "0xBFC02D3C", "raw": "0x00809821", "mnemonic": "ADDU"}, + {"address": "0xBFC02D40", "raw": "0x00E0A021", "mnemonic": "ADDU"}, + {"address": "0xBFC02D44", "raw": "0x06000011", "mnemonic": "BLTZ"}, + {"address": "0xBFC02D48", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC02D4C", "raw": "0xAFB20028", "mnemonic": "SW"}, + {"address": "0xBFC02D50", "raw": "0x8FB20040", "mnemonic": "LW"}, + {"address": "0xBFC02D54", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02D58", "raw": "0x02602021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC02DAC", + "pc": "0xBFC02E58", + "register": 19, + "register_name": "$s3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC02E18", "raw": "0x00007012", "mnemonic": "MFLO"}, + {"address": "0xBFC02E1C", "raw": "0x028E2021", "mnemonic": "ADDU"}, + {"address": "0xBFC02E20", "raw": "0x0260F809", "mnemonic": "JALR"}, + {"address": "0xBFC02E24", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02E28", "raw": "0x04410003", "mnemonic": "BGEZ"}, + {"address": "0xBFC02E2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02E30", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC02E34", "raw": "0x26110001", "mnemonic": "ADDIU"}, + {"address": "0xBFC02E38", "raw": "0x02009021", "mnemonic": "ADDU"}, + {"address": "0xBFC02E3C", "raw": "0x0232082A", "mnemonic": "SLT"}, + {"address": "0xBFC02E40", "raw": "0x1420FFEE", "mnemonic": "BNE"}, + {"address": "0xBFC02E44", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02E48", "raw": "0x02B10019", "mnemonic": "MULTU"}, + {"address": "0xBFC02E4C", "raw": "0x02C02821", "mnemonic": "ADDU"}, + {"address": "0xBFC02E50", "raw": "0x00007812", "mnemonic": "MFLO"}, + {"address": "0xBFC02E54", "raw": "0x028F8021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC02DAC", + "pc": "0xBFC02E20", + "register": 19, + "register_name": "$s3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC02DE0", "raw": "0x1CC00004", "mnemonic": "BGTZ"}, + {"address": "0xBFC02DE4", "raw": "0x00C09021", "mnemonic": "ADDU"}, + {"address": "0xBFC02DE8", "raw": "0x8FB30048", "mnemonic": "LW"}, + {"address": "0xBFC02DEC", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC02DF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02DF4", "raw": "0x8FB30048", "mnemonic": "LW"}, + {"address": "0xBFC02DF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02DFC", "raw": "0x02B10019", "mnemonic": "MULTU"}, + {"address": "0xBFC02E00", "raw": "0x02328021", "mnemonic": "ADDU"}, + {"address": "0xBFC02E04", "raw": "0x06010002", "mnemonic": "BGEZ"}, + {"address": "0xBFC02E08", "raw": "0x02000821", "mnemonic": "ADDU"}, + {"address": "0xBFC02E0C", "raw": "0x24210001", "mnemonic": "ADDIU"}, + {"address": "0xBFC02E10", "raw": "0x00018043", "mnemonic": "SRA"}, + {"address": "0xBFC02E14", "raw": "0x02C02821", "mnemonic": "ADDU"}, + {"address": "0xBFC02E18", "raw": "0x00007012", "mnemonic": "MFLO"}, + {"address": "0xBFC02E1C", "raw": "0x028E2021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC02F20", + "pc": "0xBFC02FC8", + "register": 22, + "register_name": "$s6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC02F88", "raw": "0x26F1FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC02F8C", "raw": "0x1420002C", "mnemonic": "BNE"}, + {"address": "0xBFC02F90", "raw": "0x02A08021", "mnemonic": "ADDU"}, + {"address": "0xBFC02F94", "raw": "0x02910019", "mnemonic": "MULTU"}, + {"address": "0xBFC02F98", "raw": "0x00009012", "mnemonic": "MFLO"}, + {"address": "0xBFC02F9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02FA0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02FA4", "raw": "0x02950019", "mnemonic": "MULTU"}, + {"address": "0xBFC02FA8", "raw": "0x00009812", "mnemonic": "MFLO"}, + {"address": "0xBFC02FAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02FB0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02FB4", "raw": "0x3C02A001", "mnemonic": "LUI"}, + {"address": "0xBFC02FB8", "raw": "0x8C429020", "mnemonic": "LW"}, + {"address": "0xBFC02FBC", "raw": "0x02549021", "mnemonic": "ADDU"}, + {"address": "0xBFC02FC0", "raw": "0x26310001", "mnemonic": "ADDIU"}, + {"address": "0xBFC02FC4", "raw": "0x00522021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC02F20", + "pc": "0xBFC0300C", + "register": 22, + "register_name": "$s6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC02FCC", "raw": "0x00532821", "mnemonic": "ADDU"}, + {"address": "0xBFC02FD0", "raw": "0x04410003", "mnemonic": "BGEZ"}, + {"address": "0xBFC02FD4", "raw": "0x0230082A", "mnemonic": "SLT"}, + {"address": "0xBFC02FD8", "raw": "0x1420FFF6", "mnemonic": "BNE"}, + {"address": "0xBFC02FDC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC02FE0", "raw": "0x2610FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC02FE4", "raw": "0x0230082A", "mnemonic": "SLT"}, + {"address": "0xBFC02FE8", "raw": "0x1020000C", "mnemonic": "BEQ"}, + {"address": "0xBFC02FEC", "raw": "0x0230082A", "mnemonic": "SLT"}, + {"address": "0xBFC02FF0", "raw": "0x02900019", "mnemonic": "MULTU"}, + {"address": "0xBFC02FF4", "raw": "0x3C02A001", "mnemonic": "LUI"}, + {"address": "0xBFC02FF8", "raw": "0x8C429020", "mnemonic": "LW"}, + {"address": "0xBFC02FFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC03000", "raw": "0x00532821", "mnemonic": "ADDU"}, + {"address": "0xBFC03004", "raw": "0x00007012", "mnemonic": "MFLO"}, + {"address": "0xBFC03008", "raw": "0x004E2021", "mnemonic": "ADDU"} + ] + }, { "func_addr": "0xBFC03CF0", "pc": "0xBFC03D58", @@ -80,6 +210,32 @@ {"address": "0xBFC03D54", "raw": "0x00A02021", "mnemonic": "ADDU"} ] }, + { + "func_addr": "0xBFC04DEC", + "pc": "0xBFC04F40", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC04F00", "raw": "0xAFB80018", "mnemonic": "SW"}, + {"address": "0xBFC04F04", "raw": "0x8FB90018", "mnemonic": "LW"}, + {"address": "0xBFC04F08", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC04F0C", "raw": "0x2B210004", "mnemonic": "SLTI"}, + {"address": "0xBFC04F10", "raw": "0x1420FFF5", "mnemonic": "BNE"}, + {"address": "0xBFC04F14", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC04F18", "raw": "0x00E01021", "mnemonic": "ADDU"}, + {"address": "0xBFC04F1C", "raw": "0x2448FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC04F20", "raw": "0x2D010005", "mnemonic": "SLTIU"}, + {"address": "0xBFC04F24", "raw": "0x1020001C", "mnemonic": "BEQ"}, + {"address": "0xBFC04F28", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC04F2C", "raw": "0x00084080", "mnemonic": "SLL"}, + {"address": "0xBFC04F30", "raw": "0x3C01BFC1", "mnemonic": "LUI"}, + {"address": "0xBFC04F34", "raw": "0x00280821", "mnemonic": "ADDU"}, + {"address": "0xBFC04F38", "raw": "0x8C28DC70", "mnemonic": "LW"}, + {"address": "0xBFC04F3C", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, { "func_addr": "0xBFC06FF0", "pc": "0xBFC07024", @@ -158,6 +314,58 @@ {"address": "0xBFC07178", "raw": "0x00000000", "mnemonic": "NOP"} ] }, + { + "func_addr": "0xBFC09720", + "pc": "0xBFC09788", + "register": 19, + "register_name": "$s3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC09748", "raw": "0x3C17A001", "mnemonic": "LUI"}, + {"address": "0xBFC0974C", "raw": "0x3C16A001", "mnemonic": "LUI"}, + {"address": "0xBFC09750", "raw": "0xAFB00018", "mnemonic": "SW"}, + {"address": "0xBFC09754", "raw": "0x00C09821", "mnemonic": "ADDU"}, + {"address": "0xBFC09758", "raw": "0x0080A021", "mnemonic": "ADDU"}, + {"address": "0xBFC0975C", "raw": "0x00E0F021", "mnemonic": "ADDU"}, + {"address": "0xBFC09760", "raw": "0xAFA50044", "mnemonic": "SW"}, + {"address": "0xBFC09764", "raw": "0x26D6BE48", "mnemonic": "ADDIU"}, + {"address": "0xBFC09768", "raw": "0x26F7BA88", "mnemonic": "ADDIU"}, + {"address": "0xBFC0976C", "raw": "0x00008821", "mnemonic": "ADDU"}, + {"address": "0xBFC09770", "raw": "0x2415000F", "mnemonic": "ADDIU"}, + {"address": "0xBFC09774", "raw": "0x1260000A", "mnemonic": "BEQ"}, + {"address": "0xBFC09778", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0977C", "raw": "0x00117080", "mnemonic": "SLL"}, + {"address": "0xBFC09780", "raw": "0x03CE7821", "mnemonic": "ADDU"}, + {"address": "0xBFC09784", "raw": "0x8DE40000", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC0B648", + "pc": "0xBFC0B6B4", + "register": 15, + "register_name": "$t7", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC0B674", "raw": "0x00067080", "mnemonic": "SLL"}, + {"address": "0xBFC0B678", "raw": "0x00EE2821", "mnemonic": "ADDU"}, + {"address": "0xBFC0B67C", "raw": "0x8CA40000", "mnemonic": "LW"}, + {"address": "0xBFC0B680", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0B684", "raw": "0x10800256", "mnemonic": "BEQ"}, + {"address": "0xBFC0B688", "raw": "0x00C08821", "mnemonic": "ADDU"}, + {"address": "0xBFC0B68C", "raw": "0x00801821", "mnemonic": "ADDU"}, + {"address": "0xBFC0B690", "raw": "0x246FFFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC0B694", "raw": "0x2DE10008", "mnemonic": "SLTIU"}, + {"address": "0xBFC0B698", "raw": "0x10200247", "mnemonic": "BEQ"}, + {"address": "0xBFC0B69C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0B6A0", "raw": "0x000F7880", "mnemonic": "SLL"}, + {"address": "0xBFC0B6A4", "raw": "0x3C01BFC1", "mnemonic": "LUI"}, + {"address": "0xBFC0B6A8", "raw": "0x002F0821", "mnemonic": "ADDU"}, + {"address": "0xBFC0B6AC", "raw": "0x8C2FDC90", "mnemonic": "LW"}, + {"address": "0xBFC0B6B0", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, { "func_addr": "0xBFC0D880", "pc": "0xBFC0D884", @@ -262,6 +470,32 @@ {"address": "0xBFC0D8B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0D8D0", + "pc": "0xBFC0D8D4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D894", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D898", "raw": "0x24090032", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D89C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D8A0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D8A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D8A8", "raw": "0x24090036", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D8AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D8B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D8B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D8B8", "raw": "0x24090034", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D8BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D8C0", "raw": "0x24040002", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D8C4", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC0D8C8", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC0D8CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D8D0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0D950", "pc": "0xBFC0D954", @@ -288,6 +522,84 @@ {"address": "0xBFC0D950", "raw": "0x240A00A0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0D970", + "pc": "0xBFC0D974", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D934", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D938", "raw": "0x2409009A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D93C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D940", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D944", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D948", "raw": "0x2409009B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D94C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D950", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D954", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D958", "raw": "0x240900A1", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D95C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D960", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D964", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC0D968", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC0D96C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D970", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0D980", + "pc": "0xBFC0D984", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D944", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D948", "raw": "0x2409009B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D94C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D950", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D954", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D958", "raw": "0x240900A1", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D95C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D960", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D964", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC0D968", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC0D96C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D970", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D974", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D978", "raw": "0x24090007", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D97C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D980", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0D990", + "pc": "0xBFC0D994", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D954", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D958", "raw": "0x240900A1", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D95C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D960", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D964", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC0D968", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC0D96C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D970", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D974", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D978", "raw": "0x24090007", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D97C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D980", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D984", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D988", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D98C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D990", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0D9A0", "pc": "0xBFC0D9A4", @@ -366,6 +678,32 @@ {"address": "0xBFC0D9C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0D9D0", + "pc": "0xBFC0D9D4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D994", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D998", "raw": "0x24090020", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D99C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9A0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9A8", "raw": "0x24090018", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9B8", "raw": "0x24090008", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9C8", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0D9E0", "pc": "0xBFC0D9E4", @@ -392,6 +730,396 @@ {"address": "0xBFC0D9E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0D9F0", + "pc": "0xBFC0D9F4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D9B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9B8", "raw": "0x24090008", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9C8", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9D8", "raw": "0x24090009", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9E8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA00", + "pc": "0xBFC0DA04", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D9C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9C8", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9D8", "raw": "0x24090009", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9E8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9F8", "raw": "0x24090047", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA00", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA10", + "pc": "0xBFC0DA14", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D9D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9D8", "raw": "0x24090009", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9E8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9F8", "raw": "0x24090047", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA00", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA04", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA08", "raw": "0x2409004F", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA0C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA10", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA20", + "pc": "0xBFC0DA24", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D9E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9E8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0D9F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9F8", "raw": "0x24090047", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA00", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA04", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA08", "raw": "0x2409004F", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA0C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA10", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA18", "raw": "0x24090050", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA20", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA30", + "pc": "0xBFC0DA34", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0D9F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0D9F8", "raw": "0x24090047", "mnemonic": "ADDIU"}, + {"address": "0xBFC0D9FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA00", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA04", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA08", "raw": "0x2409004F", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA0C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA10", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA18", "raw": "0x24090050", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA20", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA28", "raw": "0x2409004E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA30", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA40", + "pc": "0xBFC0DA44", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA04", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA08", "raw": "0x2409004F", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA0C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA10", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA18", "raw": "0x24090050", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA20", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA28", "raw": "0x2409004E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA30", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA38", "raw": "0x24090058", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA40", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA50", + "pc": "0xBFC0DA54", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA18", "raw": "0x24090050", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA20", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA28", "raw": "0x2409004E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA30", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA38", "raw": "0x24090058", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA40", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA48", "raw": "0x2409004D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA50", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA60", + "pc": "0xBFC0DA64", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA28", "raw": "0x2409004E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA30", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA38", "raw": "0x24090058", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA40", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA48", "raw": "0x2409004D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA50", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA58", "raw": "0x2409004A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA60", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA70", + "pc": "0xBFC0DA74", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA38", "raw": "0x24090058", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA40", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA48", "raw": "0x2409004D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA50", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA58", "raw": "0x2409004A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA60", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA68", "raw": "0x2409004B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA70", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA80", + "pc": "0xBFC0DA84", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA48", "raw": "0x2409004D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA50", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA58", "raw": "0x2409004A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA60", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA68", "raw": "0x2409004B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA70", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA78", "raw": "0x2409003C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA80", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DA90", + "pc": "0xBFC0DA94", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA58", "raw": "0x2409004A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA60", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA68", "raw": "0x2409004B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA70", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA78", "raw": "0x2409003C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA80", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA88", "raw": "0x24090035", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA90", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DAA0", + "pc": "0xBFC0DAA4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA68", "raw": "0x2409004B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA70", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA78", "raw": "0x2409003C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA80", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA88", "raw": "0x24090035", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA90", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA98", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAA0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DAB0", + "pc": "0xBFC0DAB4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA78", "raw": "0x2409003C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA80", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA88", "raw": "0x24090035", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA90", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA98", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAA0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAA8", "raw": "0x24090012", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAB0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DAC0", + "pc": "0xBFC0DAC4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA88", "raw": "0x24090035", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DA90", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA98", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAA0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAA8", "raw": "0x24090012", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAB0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAB8", "raw": "0x24090013", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DABC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAC0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DAD0", + "pc": "0xBFC0DAD4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DA94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DA98", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DA9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAA0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAA8", "raw": "0x24090012", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAB0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAB8", "raw": "0x24090013", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DABC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAC0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAC8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DACC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAD0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0DAE0", "pc": "0xBFC0DAE4", @@ -418,6 +1146,58 @@ {"address": "0xBFC0DAE0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0DAF0", + "pc": "0xBFC0DAF4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DAB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAB8", "raw": "0x24090013", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DABC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAC0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAC8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DACC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAD0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAD4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAD8", "raw": "0x24090016", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DADC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAE0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAE4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAE8", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAF0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DB00", + "pc": "0xBFC0DB04", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DAC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAC8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DACC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAD0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAD4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAD8", "raw": "0x24090016", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DADC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAE0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAE4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAE8", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DAF0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAF4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DAF8", "raw": "0x24090002", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DAFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB00", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0DB10", "pc": "0xBFC0DB14", @@ -600,6 +1380,188 @@ {"address": "0xBFC0DB70", "raw": "0x240A00C0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0DB80", + "pc": "0xBFC0DB84", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB48", "raw": "0x24090008", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB50", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB58", "raw": "0x24090001", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB60", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB68", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB70", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB78", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB80", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DB90", + "pc": "0xBFC0DB94", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB54", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB58", "raw": "0x24090001", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB5C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB60", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB68", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB70", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB78", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB80", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB88", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB90", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DBA0", + "pc": "0xBFC0DBA4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB64", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB68", "raw": "0x2409000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB6C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB70", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB78", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB80", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB88", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB90", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB98", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBA0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DBB0", + "pc": "0xBFC0DBB4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB74", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB78", "raw": "0x24090000", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB80", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB88", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB90", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB98", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBA0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBA8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBB0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DBC0", + "pc": "0xBFC0DBC4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB84", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB88", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB8C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DB90", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB98", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBA0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBA8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBB0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBB8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBBC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBC0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DBD0", + "pc": "0xBFC0DBD4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DB94", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DB98", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DB9C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBA0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBA8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBB0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBB8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBBC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBC0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBC8", "raw": "0x24090016", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBCC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBD0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DBE0", + "pc": "0xBFC0DBE4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DBA4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBA8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBAC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBB0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBB4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBB8", "raw": "0x24090015", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBBC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBC0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBC8", "raw": "0x24090016", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBCC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBD0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBD4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBD8", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBDC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBE0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0DBF0", "pc": "0xBFC0DBF4", @@ -626,6 +1588,32 @@ {"address": "0xBFC0DBF0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} ] }, + { + "func_addr": "0xBFC0DC00", + "pc": "0xBFC0DC04", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DBC4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBC8", "raw": "0x24090016", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBCC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBD0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBD4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBD8", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBDC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBE0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBE4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBE8", "raw": "0x24090019", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DBF0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBF4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DBF8", "raw": "0x240900A2", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DBFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC00", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, { "func_addr": "0xBFC0DC10", "pc": "0xBFC0DC14", @@ -703,6 +1691,3412 @@ {"address": "0xBFC0DC2C", "raw": "0x00000000", "mnemonic": "NOP"}, {"address": "0xBFC0DC30", "raw": "0x240A00A0", "mnemonic": "ADDIU"} ] + }, + { + "func_addr": "0xBFC0DC40", + "pc": "0xBFC0DC44", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DC04", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC08", "raw": "0x240900A3", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC0C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC10", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC18", "raw": "0x24090095", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC20", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC28", "raw": "0x24090078", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC30", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC38", "raw": "0x2409007E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC40", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC0DC50", + "pc": "0xBFC0DC54", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC0DC14", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC18", "raw": "0x24090095", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC20", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC24", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC28", "raw": "0x24090078", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC2C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC30", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC34", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC38", "raw": "0x2409007E", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC3C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC40", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC44", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC0DC48", "raw": "0x2409007C", "mnemonic": "ADDIU"}, + {"address": "0xBFC0DC4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0DC50", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC10000", + "pc": "0xBFC10008", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "computed_tail_call", + "context_window": [ + {"address": "0xBFC0FFC8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFCC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFD0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFD4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFD8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFDC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10000", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10004", "raw": "0x25080598", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC10010", + "pc": "0xBFC10018", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "computed_tail_call", + "context_window": [ + {"address": "0xBFC0FFD8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFDC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFE8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10000", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10004", "raw": "0x25080598", "mnemonic": "ADDIU"}, + {"address": "0xBFC10008", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1000C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10010", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10014", "raw": "0x250805C4", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC10020", + "pc": "0xBFC10028", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "computed_tail_call", + "context_window": [ + {"address": "0xBFC0FFE8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFEC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10000", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10004", "raw": "0x25080598", "mnemonic": "ADDIU"}, + {"address": "0xBFC10008", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1000C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10010", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10014", "raw": "0x250805C4", "mnemonic": "ADDIU"}, + {"address": "0xBFC10018", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1001C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10020", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10024", "raw": "0x250805E0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC10030", + "pc": "0xBFC10038", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "computed_tail_call", + "context_window": [ + {"address": "0xBFC0FFF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC0FFFC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10000", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10004", "raw": "0x25080598", "mnemonic": "ADDIU"}, + {"address": "0xBFC10008", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1000C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10010", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10014", "raw": "0x250805C4", "mnemonic": "ADDIU"}, + {"address": "0xBFC10018", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1001C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10020", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10024", "raw": "0x250805E0", "mnemonic": "ADDIU"}, + {"address": "0xBFC10028", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC1002C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10030", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10034", "raw": "0x25080600", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC100C4", + "pc": "0xBFC100D8", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC10098", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC1009C", "raw": "0x24427460", "mnemonic": "ADDIU"}, + {"address": "0xBFC100A0", "raw": "0x3C030001", "mnemonic": "LUI"}, + {"address": "0xBFC100A4", "raw": "0x24638920", "mnemonic": "ADDIU"}, + {"address": "0xBFC100A8", "raw": "0xAC400000", "mnemonic": "SW"}, + {"address": "0xBFC100AC", "raw": "0x20420004", "mnemonic": "ADDI"}, + {"address": "0xBFC100B0", "raw": "0x0043082B", "mnemonic": "SLTU"}, + {"address": "0xBFC100B4", "raw": "0x1420FFFC", "mnemonic": "BNE"}, + {"address": "0xBFC100B8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100BC", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC100C0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100C4", "raw": "0x24080200", "mnemonic": "ADDIU"}, + {"address": "0xBFC100C8", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC100CC", "raw": "0x01094020", "mnemonic": "ADD"}, + {"address": "0xBFC100D0", "raw": "0x8D080000", "mnemonic": "LW"}, + {"address": "0xBFC100D4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC100E0", + "pc": "0xBFC100F8", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC100B8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100BC", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC100C0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100C4", "raw": "0x24080200", "mnemonic": "ADDIU"}, + {"address": "0xBFC100C8", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC100CC", "raw": "0x01094020", "mnemonic": "ADD"}, + {"address": "0xBFC100D0", "raw": "0x8D080000", "mnemonic": "LW"}, + {"address": "0xBFC100D4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100D8", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC100DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100E0", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC100E4", "raw": "0x25080874", "mnemonic": "ADDIU"}, + {"address": "0xBFC100E8", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC100EC", "raw": "0x01094020", "mnemonic": "ADD"}, + {"address": "0xBFC100F0", "raw": "0x8D080000", "mnemonic": "LW"}, + {"address": "0xBFC100F4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC10100", + "pc": "0xBFC10118", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC100D8", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC100DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100E0", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC100E4", "raw": "0x25080874", "mnemonic": "ADDIU"}, + {"address": "0xBFC100E8", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC100EC", "raw": "0x01094020", "mnemonic": "ADD"}, + {"address": "0xBFC100F0", "raw": "0x8D080000", "mnemonic": "LW"}, + {"address": "0xBFC100F4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC100F8", "raw": "0x01000008", "mnemonic": "JR"}, + {"address": "0xBFC100FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10100", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC10104", "raw": "0x25080674", "mnemonic": "ADDIU"}, + {"address": "0xBFC10108", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC1010C", "raw": "0x01094020", "mnemonic": "ADD"}, + {"address": "0xBFC10110", "raw": "0x8D080000", "mnemonic": "LW"}, + {"address": "0xBFC10114", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC10174", + "pc": "0xBFC10174", + "register": 0, + "register_name": "$zero", + "kind": "jr_non_ra", + "classification": "computed_tail_call", + "context_window": [ + {"address": "0xBFC10134", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10138", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1013C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10140", "raw": "0x40846000", "mnemonic": "MTC0"}, + {"address": "0xBFC10144", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10148", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1014C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10150", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC10154", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC10158", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1015C", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC10160", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC10164", "raw": "0x24420674", "mnemonic": "ADDIU"}, + {"address": "0xBFC10168", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC1016C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC10170", "raw": "0x24420874", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC10780", + "pc": "0xBFC10908", + "register": 17, + "register_name": "$s1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC108C8", "raw": "0x3C1D0000", "mnemonic": "LUI"}, + {"address": "0xBFC108CC", "raw": "0x24130100", "mnemonic": "ADDIU"}, + {"address": "0xBFC108D0", "raw": "0x8FBD6CF0", "mnemonic": "LW"}, + {"address": "0xBFC108D4", "raw": "0x8E730000", "mnemonic": "LW"}, + {"address": "0xBFC108D8", "raw": "0x3C1C0001", "mnemonic": "LUI"}, + {"address": "0xBFC108DC", "raw": "0x279CF450", "mnemonic": "ADDIU"}, + {"address": "0xBFC108E0", "raw": "0x03A0F021", "mnemonic": "ADDU"}, + {"address": "0xBFC108E4", "raw": "0x22740020", "mnemonic": "ADDI"}, + {"address": "0xBFC108E8", "raw": "0x8E760000", "mnemonic": "LW"}, + {"address": "0xBFC108EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC108F0", "raw": "0x12C00011", "mnemonic": "BEQ"}, + {"address": "0xBFC108F4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC108F8", "raw": "0x8ED10008", "mnemonic": "LW"}, + {"address": "0xBFC108FC", "raw": "0x8ED00004", "mnemonic": "LW"}, + {"address": "0xBFC10900", "raw": "0x12200009", "mnemonic": "BEQ"}, + {"address": "0xBFC10904", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC10780", + "pc": "0xBFC10920", + "register": 16, + "register_name": "$s0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC108E0", "raw": "0x03A0F021", "mnemonic": "ADDU"}, + {"address": "0xBFC108E4", "raw": "0x22740020", "mnemonic": "ADDI"}, + {"address": "0xBFC108E8", "raw": "0x8E760000", "mnemonic": "LW"}, + {"address": "0xBFC108EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC108F0", "raw": "0x12C00011", "mnemonic": "BEQ"}, + {"address": "0xBFC108F4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC108F8", "raw": "0x8ED10008", "mnemonic": "LW"}, + {"address": "0xBFC108FC", "raw": "0x8ED00004", "mnemonic": "LW"}, + {"address": "0xBFC10900", "raw": "0x12200009", "mnemonic": "BEQ"}, + {"address": "0xBFC10904", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10908", "raw": "0x0220F809", "mnemonic": "JALR"}, + {"address": "0xBFC1090C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10910", "raw": "0x10400005", "mnemonic": "BEQ"}, + {"address": "0xBFC10914", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10918", "raw": "0x12000003", "mnemonic": "BEQ"}, + {"address": "0xBFC1091C", "raw": "0x00402021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC10A40", + "pc": "0xBFC10B10", + "register": 26, + "register_name": "$k0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC10AD0", "raw": "0x8C950054", "mnemonic": "LW"}, + {"address": "0xBFC10AD4", "raw": "0x8C960058", "mnemonic": "LW"}, + {"address": "0xBFC10AD8", "raw": "0x8C97005C", "mnemonic": "LW"}, + {"address": "0xBFC10ADC", "raw": "0x8C980060", "mnemonic": "LW"}, + {"address": "0xBFC10AE0", "raw": "0x8C990064", "mnemonic": "LW"}, + {"address": "0xBFC10AE4", "raw": "0x8C9B006C", "mnemonic": "LW"}, + {"address": "0xBFC10AE8", "raw": "0x8C9C0070", "mnemonic": "LW"}, + {"address": "0xBFC10AEC", "raw": "0x8C9D0074", "mnemonic": "LW"}, + {"address": "0xBFC10AF0", "raw": "0x8C9E0078", "mnemonic": "LW"}, + {"address": "0xBFC10AF4", "raw": "0x8C9F007C", "mnemonic": "LW"}, + {"address": "0xBFC10AF8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10AFC", "raw": "0x8C810004", "mnemonic": "LW"}, + {"address": "0xBFC10B00", "raw": "0x8C9A0080", "mnemonic": "LW"}, + {"address": "0xBFC10B04", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC10B08", "raw": "0x8C840010", "mnemonic": "LW"}, + {"address": "0xBFC10B0C", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1152C", + "pc": "0xBFC11558", + "register": 25, + "register_name": "$t9", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC11518", "raw": "0x8C430098", "mnemonic": "LW"}, + {"address": "0xBFC1151C", "raw": "0x10000032", "mnemonic": "BEQ"}, + {"address": "0xBFC11520", "raw": "0x3063003C", "mnemonic": "ANDI"}, + {"address": "0xBFC11524", "raw": "0x1000003A", "mnemonic": "BEQ"}, + {"address": "0xBFC11528", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC1152C", "raw": "0x8C4F0088", "mnemonic": "LW"}, + {"address": "0xBFC11530", "raw": "0x8C430018", "mnemonic": "LW"}, + {"address": "0xBFC11534", "raw": "0x25F80004", "mnemonic": "ADDIU"}, + {"address": "0xBFC11538", "raw": "0x2C610004", "mnemonic": "SLTIU"}, + {"address": "0xBFC1153C", "raw": "0x10200020", "mnemonic": "BEQ"}, + {"address": "0xBFC11540", "raw": "0xAC580088", "mnemonic": "SW"}, + {"address": "0xBFC11544", "raw": "0x0003C880", "mnemonic": "SLL"}, + {"address": "0xBFC11548", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC1154C", "raw": "0x00390821", "mnemonic": "ADDU"}, + {"address": "0xBFC11550", "raw": "0x8C396C60", "mnemonic": "LW"}, + {"address": "0xBFC11554", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC11644", + "pc": "0xBFC11718", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC116D8", "raw": "0x8E090008", "mnemonic": "LW"}, + {"address": "0xBFC116DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC116E0", "raw": "0x16C9000F", "mnemonic": "BNE"}, + {"address": "0xBFC116E4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC116E8", "raw": "0x8E02000C", "mnemonic": "LW"}, + {"address": "0xBFC116EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC116F0", "raw": "0x16220003", "mnemonic": "BNE"}, + {"address": "0xBFC116F4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC116F8", "raw": "0x10000009", "mnemonic": "BEQ"}, + {"address": "0xBFC116FC", "raw": "0xAE120004", "mnemonic": "SW"}, + {"address": "0xBFC11700", "raw": "0x16620007", "mnemonic": "BNE"}, + {"address": "0xBFC11704", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC11708", "raw": "0x8E020010", "mnemonic": "LW"}, + {"address": "0xBFC1170C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC11710", "raw": "0x10400003", "mnemonic": "BEQ"}, + {"address": "0xBFC11714", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC12458", + "pc": "0xBFC12504", + "register": 11, + "register_name": "$t3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC124C4", "raw": "0x8FA6003C", "mnemonic": "LW"}, + {"address": "0xBFC124C8", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC124CC", "raw": "0xACE60000", "mnemonic": "SW"}, + {"address": "0xBFC124D0", "raw": "0xACF80004", "mnemonic": "SW"}, + {"address": "0xBFC124D4", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC124D8", "raw": "0x00E02021", "mnemonic": "ADDU"}, + {"address": "0xBFC124DC", "raw": "0xACF9001C", "mnemonic": "SW"}, + {"address": "0xBFC124E0", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC124E4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC124E8", "raw": "0x8D090004", "mnemonic": "LW"}, + {"address": "0xBFC124EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC124F0", "raw": "0xACE90014", "mnemonic": "SW"}, + {"address": "0xBFC124F4", "raw": "0x8FAA0028", "mnemonic": "LW"}, + {"address": "0xBFC124F8", "raw": "0xAFA70034", "mnemonic": "SW"}, + {"address": "0xBFC124FC", "raw": "0x8D4B0014", "mnemonic": "LW"}, + {"address": "0xBFC12500", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC12628", + "pc": "0xBFC126A0", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC12660", "raw": "0x10000048", "mnemonic": "BEQ"}, + {"address": "0xBFC12664", "raw": "0x2402FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC12668", "raw": "0x0C000FA0", "mnemonic": "JAL"}, + {"address": "0xBFC1266C", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC12670", "raw": "0x8FA40024", "mnemonic": "LW"}, + {"address": "0xBFC12674", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12678", "raw": "0x8C980014", "mnemonic": "LW"}, + {"address": "0xBFC1267C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12680", "raw": "0x33190010", "mnemonic": "ANDI"}, + {"address": "0xBFC12684", "raw": "0x1320000C", "mnemonic": "BEQ"}, + {"address": "0xBFC12688", "raw": "0x8FAA002C", "mnemonic": "LW"}, + {"address": "0xBFC1268C", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC12690", "raw": "0x8C88001C", "mnemonic": "LW"}, + {"address": "0xBFC12694", "raw": "0x8FA5002C", "mnemonic": "LW"}, + {"address": "0xBFC12698", "raw": "0x8D090024", "mnemonic": "LW"}, + {"address": "0xBFC1269C", "raw": "0x8FA60030", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC12628", + "pc": "0xBFC12748", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC12708", "raw": "0x3C040000", "mnemonic": "LUI"}, + {"address": "0xBFC1270C", "raw": "0x0C001AB8", "mnemonic": "JAL"}, + {"address": "0xBFC12710", "raw": "0x24846DE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC12714", "raw": "0x1000001B", "mnemonic": "BEQ"}, + {"address": "0xBFC12718", "raw": "0x2402FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC1271C", "raw": "0x8C98000C", "mnemonic": "LW"}, + {"address": "0xBFC12720", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12724", "raw": "0x0302001B", "mnemonic": "DIVU"}, + {"address": "0xBFC12728", "raw": "0x0000C812", "mnemonic": "MFLO"}, + {"address": "0xBFC1272C", "raw": "0xAC99000C", "mnemonic": "SW"}, + {"address": "0xBFC12730", "raw": "0x14400002", "mnemonic": "BNE"}, + {"address": "0xBFC12734", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12738", "raw": "0x0007000D", "mnemonic": "BREAK"}, + {"address": "0xBFC1273C", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC12740", "raw": "0x8C680018", "mnemonic": "LW"}, + {"address": "0xBFC12744", "raw": "0x24050001", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC12794", + "pc": "0xBFC1280C", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC127CC", "raw": "0x10000048", "mnemonic": "BEQ"}, + {"address": "0xBFC127D0", "raw": "0x2402FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC127D4", "raw": "0x0C000FA0", "mnemonic": "JAL"}, + {"address": "0xBFC127D8", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC127DC", "raw": "0x8FA40024", "mnemonic": "LW"}, + {"address": "0xBFC127E0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC127E4", "raw": "0x8C980014", "mnemonic": "LW"}, + {"address": "0xBFC127E8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC127EC", "raw": "0x33190010", "mnemonic": "ANDI"}, + {"address": "0xBFC127F0", "raw": "0x1320000C", "mnemonic": "BEQ"}, + {"address": "0xBFC127F4", "raw": "0x8FAA002C", "mnemonic": "LW"}, + {"address": "0xBFC127F8", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC127FC", "raw": "0x8C88001C", "mnemonic": "LW"}, + {"address": "0xBFC12800", "raw": "0x8FA5002C", "mnemonic": "LW"}, + {"address": "0xBFC12804", "raw": "0x8D090028", "mnemonic": "LW"}, + {"address": "0xBFC12808", "raw": "0x8FA60030", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC12794", + "pc": "0xBFC128B4", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC12874", "raw": "0x3C040000", "mnemonic": "LUI"}, + {"address": "0xBFC12878", "raw": "0x0C001AB8", "mnemonic": "JAL"}, + {"address": "0xBFC1287C", "raw": "0x24846E08", "mnemonic": "ADDIU"}, + {"address": "0xBFC12880", "raw": "0x1000001B", "mnemonic": "BEQ"}, + {"address": "0xBFC12884", "raw": "0x2402FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC12888", "raw": "0x8C98000C", "mnemonic": "LW"}, + {"address": "0xBFC1288C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12890", "raw": "0x0302001B", "mnemonic": "DIVU"}, + {"address": "0xBFC12894", "raw": "0x0000C812", "mnemonic": "MFLO"}, + {"address": "0xBFC12898", "raw": "0xAC99000C", "mnemonic": "SW"}, + {"address": "0xBFC1289C", "raw": "0x14400002", "mnemonic": "BNE"}, + {"address": "0xBFC128A0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC128A4", "raw": "0x0007000D", "mnemonic": "BREAK"}, + {"address": "0xBFC128A8", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC128AC", "raw": "0x8C680018", "mnemonic": "LW"}, + {"address": "0xBFC128B0", "raw": "0x24050002", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC12900", + "pc": "0xBFC12958", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC12918", "raw": "0x10400005", "mnemonic": "BEQ"}, + {"address": "0xBFC1291C", "raw": "0x00402021", "mnemonic": "ADDU"}, + {"address": "0xBFC12920", "raw": "0x8C4E0000", "mnemonic": "LW"}, + {"address": "0xBFC12924", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12928", "raw": "0x15C00006", "mnemonic": "BNE"}, + {"address": "0xBFC1292C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12930", "raw": "0x240F0009", "mnemonic": "ADDIU"}, + {"address": "0xBFC12934", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC12938", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC1293C", "raw": "0x10000012", "mnemonic": "BEQ"}, + {"address": "0xBFC12940", "raw": "0x2402FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC12944", "raw": "0xAFA40024", "mnemonic": "SW"}, + {"address": "0xBFC12948", "raw": "0x8C98001C", "mnemonic": "LW"}, + {"address": "0xBFC1294C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12950", "raw": "0x8F19001C", "mnemonic": "LW"}, + {"address": "0xBFC12954", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC129FC", + "pc": "0xBFC12A8C", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC12A4C", "raw": "0x346F0004", "mnemonic": "ORI"}, + {"address": "0xBFC12A50", "raw": "0x10000004", "mnemonic": "BEQ"}, + {"address": "0xBFC12A54", "raw": "0xAC4F0000", "mnemonic": "SW"}, + {"address": "0xBFC12A58", "raw": "0x2401FFFB", "mnemonic": "ADDIU"}, + {"address": "0xBFC12A5C", "raw": "0x0061C024", "mnemonic": "AND"}, + {"address": "0xBFC12A60", "raw": "0xAC580000", "mnemonic": "SW"}, + {"address": "0xBFC12A64", "raw": "0x10000014", "mnemonic": "BEQ"}, + {"address": "0xBFC12A68", "raw": "0x24020001", "mnemonic": "ADDIU"}, + {"address": "0xBFC12A6C", "raw": "0x24016601", "mnemonic": "ADDIU"}, + {"address": "0xBFC12A70", "raw": "0x10A1FFF4", "mnemonic": "BEQ"}, + {"address": "0xBFC12A74", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12A78", "raw": "0xAFA4001C", "mnemonic": "SW"}, + {"address": "0xBFC12A7C", "raw": "0x8C99001C", "mnemonic": "LW"}, + {"address": "0xBFC12A80", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC12A84", "raw": "0x8F280020", "mnemonic": "LW"}, + {"address": "0xBFC12A88", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC130AC", + "pc": "0xBFC1313C", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC130FC", "raw": "0xAC600000", "mnemonic": "SW"}, + {"address": "0xBFC13100", "raw": "0x240F0013", "mnemonic": "ADDIU"}, + {"address": "0xBFC13104", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC13108", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC1310C", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC13110", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC13114", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC13118", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC1311C", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC13120", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC13124", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13128", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC1312C", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC13130", "raw": "0xAFA30034", "mnemonic": "SW"}, + {"address": "0xBFC13134", "raw": "0x8D090040", "mnemonic": "LW"}, + {"address": "0xBFC13138", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC13178", + "pc": "0xBFC13208", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC131C8", "raw": "0xAC600000", "mnemonic": "SW"}, + {"address": "0xBFC131CC", "raw": "0x240F0013", "mnemonic": "ADDIU"}, + {"address": "0xBFC131D0", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC131D4", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC131D8", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC131DC", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC131E0", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC131E4", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC131E8", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC131EC", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC131F0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC131F4", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC131F8", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC131FC", "raw": "0xAFA30034", "mnemonic": "SW"}, + {"address": "0xBFC13200", "raw": "0x8D09004C", "mnemonic": "LW"}, + {"address": "0xBFC13204", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC13244", + "pc": "0xBFC132D4", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13294", "raw": "0xAC600000", "mnemonic": "SW"}, + {"address": "0xBFC13298", "raw": "0x240F0013", "mnemonic": "ADDIU"}, + {"address": "0xBFC1329C", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC132A0", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC132A4", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC132A8", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC132AC", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC132B0", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC132B4", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC132B8", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC132BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC132C0", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC132C4", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC132C8", "raw": "0xAFA30034", "mnemonic": "SW"}, + {"address": "0xBFC132CC", "raw": "0x8D09002C", "mnemonic": "LW"}, + {"address": "0xBFC132D0", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC13310", + "pc": "0xBFC1339C", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC1335C", "raw": "0x00402821", "mnemonic": "ADDU"}, + {"address": "0xBFC13360", "raw": "0x240F0013", "mnemonic": "ADDIU"}, + {"address": "0xBFC13364", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC13368", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC1336C", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC13370", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC13374", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC13378", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC1337C", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC13380", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC13384", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13388", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC1338C", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC13390", "raw": "0xAFA30034", "mnemonic": "SW"}, + {"address": "0xBFC13394", "raw": "0x8D090030", "mnemonic": "LW"}, + {"address": "0xBFC13398", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC133D8", + "pc": "0xBFC13468", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13428", "raw": "0x240F0013", "mnemonic": "ADDIU"}, + {"address": "0xBFC1342C", "raw": "0x3C010001", "mnemonic": "LUI"}, + {"address": "0xBFC13430", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC13434", "raw": "0xAC600000", "mnemonic": "SW"}, + {"address": "0xBFC13438", "raw": "0x10000016", "mnemonic": "BEQ"}, + {"address": "0xBFC1343C", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC13440", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC13444", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC13448", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC1344C", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC13450", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13454", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC13458", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC1345C", "raw": "0xAFA30034", "mnemonic": "SW"}, + {"address": "0xBFC13460", "raw": "0x8D09003C", "mnemonic": "LW"}, + {"address": "0xBFC13464", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC134A4", + "pc": "0xBFC13558", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13518", "raw": "0xAC2F8640", "mnemonic": "SW"}, + {"address": "0xBFC1351C", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC13520", "raw": "0x1000000F", "mnemonic": "BEQ"}, + {"address": "0xBFC13524", "raw": "0xAC600000", "mnemonic": "SW"}, + {"address": "0xBFC13528", "raw": "0x3C030000", "mnemonic": "LUI"}, + {"address": "0xBFC1352C", "raw": "0x8C637480", "mnemonic": "LW"}, + {"address": "0xBFC13530", "raw": "0x8FB80024", "mnemonic": "LW"}, + {"address": "0xBFC13534", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC13538", "raw": "0xAC780004", "mnemonic": "SW"}, + {"address": "0xBFC1353C", "raw": "0x8FB90028", "mnemonic": "LW"}, + {"address": "0xBFC13540", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13544", "raw": "0xAC79001C", "mnemonic": "SW"}, + {"address": "0xBFC13548", "raw": "0x8FA80028", "mnemonic": "LW"}, + {"address": "0xBFC1354C", "raw": "0x8FA60034", "mnemonic": "LW"}, + {"address": "0xBFC13550", "raw": "0x8D090034", "mnemonic": "LW"}, + {"address": "0xBFC13554", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC13570", + "pc": "0xBFC13594", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13554", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13558", "raw": "0x0120F809", "mnemonic": "JALR"}, + {"address": "0xBFC1355C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13560", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC13564", "raw": "0x27BD0030", "mnemonic": "ADDIU"}, + {"address": "0xBFC13568", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1356C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13570", "raw": "0x00802821", "mnemonic": "ADDU"}, + {"address": "0xBFC13574", "raw": "0x3C040000", "mnemonic": "LUI"}, + {"address": "0xBFC13578", "raw": "0x8C847480", "mnemonic": "LW"}, + {"address": "0xBFC1357C", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC13580", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC13584", "raw": "0x8C8E001C", "mnemonic": "LW"}, + {"address": "0xBFC13588", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1358C", "raw": "0x8DCF0038", "mnemonic": "LW"}, + {"address": "0xBFC13590", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC135AC", + "pc": "0xBFC136D8", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13698", "raw": "0x8FAC0034", "mnemonic": "LW"}, + {"address": "0xBFC1369C", "raw": "0x02002021", "mnemonic": "ADDU"}, + {"address": "0xBFC136A0", "raw": "0xAE0C0004", "mnemonic": "SW"}, + {"address": "0xBFC136A4", "raw": "0x8FAD003C", "mnemonic": "LW"}, + {"address": "0xBFC136A8", "raw": "0x01002821", "mnemonic": "ADDU"}, + {"address": "0xBFC136AC", "raw": "0xAE0D001C", "mnemonic": "SW"}, + {"address": "0xBFC136B0", "raw": "0x8FAE0030", "mnemonic": "LW"}, + {"address": "0xBFC136B4", "raw": "0x00603021", "mnemonic": "ADDU"}, + {"address": "0xBFC136B8", "raw": "0xAC6E0004", "mnemonic": "SW"}, + {"address": "0xBFC136BC", "raw": "0x8FAF0038", "mnemonic": "LW"}, + {"address": "0xBFC136C0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC136C4", "raw": "0xAC6F001C", "mnemonic": "SW"}, + {"address": "0xBFC136C8", "raw": "0x8FB8003C", "mnemonic": "LW"}, + {"address": "0xBFC136CC", "raw": "0xAFA30048", "mnemonic": "SW"}, + {"address": "0xBFC136D0", "raw": "0x8F190044", "mnemonic": "LW"}, + {"address": "0xBFC136D4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1376C", + "pc": "0xBFC137AC", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC1376C", "raw": "0x8C790000", "mnemonic": "LW"}, + {"address": "0xBFC13770", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13774", "raw": "0x17200011", "mnemonic": "BNE"}, + {"address": "0xBFC13778", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1377C", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC13780", "raw": "0x00E02821", "mnemonic": "ADDU"}, + {"address": "0xBFC13784", "raw": "0x24060050", "mnemonic": "ADDIU"}, + {"address": "0xBFC13788", "raw": "0x0C001AC8", "mnemonic": "JAL"}, + {"address": "0xBFC1378C", "raw": "0xAFA3001C", "mnemonic": "SW"}, + {"address": "0xBFC13790", "raw": "0x8FA3001C", "mnemonic": "LW"}, + {"address": "0xBFC13794", "raw": "0x0C001A9C", "mnemonic": "JAL"}, + {"address": "0xBFC13798", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1379C", "raw": "0x8FA3001C", "mnemonic": "LW"}, + {"address": "0xBFC137A0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC137A4", "raw": "0x8C680010", "mnemonic": "LW"}, + {"address": "0xBFC137A8", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC137E0", + "pc": "0xBFC13854", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC13814", "raw": "0xAFB00018", "mnemonic": "SW"}, + {"address": "0xBFC13818", "raw": "0x0319082B", "mnemonic": "SLTU"}, + {"address": "0xBFC1381C", "raw": "0x00809021", "mnemonic": "ADDU"}, + {"address": "0xBFC13820", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC13824", "raw": "0x1420001A", "mnemonic": "BNE"}, + {"address": "0xBFC13828", "raw": "0x02208021", "mnemonic": "ADDU"}, + {"address": "0xBFC1382C", "raw": "0x8E050000", "mnemonic": "LW"}, + {"address": "0xBFC13830", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC13834", "raw": "0x10A0000C", "mnemonic": "BEQ"}, + {"address": "0xBFC13838", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1383C", "raw": "0x0C001AC4", "mnemonic": "JAL"}, + {"address": "0xBFC13840", "raw": "0x02402021", "mnemonic": "ADDU"}, + {"address": "0xBFC13844", "raw": "0x14400008", "mnemonic": "BNE"}, + {"address": "0xBFC13848", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1384C", "raw": "0x8E080048", "mnemonic": "LW"}, + {"address": "0xBFC13850", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1486C", + "pc": "0xBFC148D4", + "register": 12, + "register_name": "$t4", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC14894", "raw": "0x3C0A0000", "mnemonic": "LUI"}, + {"address": "0xBFC14898", "raw": "0x946F000A", "mnemonic": "LHU"}, + {"address": "0xBFC1489C", "raw": "0x3C080000", "mnemonic": "LUI"}, + {"address": "0xBFC148A0", "raw": "0x01E2C025", "mnemonic": "OR"}, + {"address": "0xBFC148A4", "raw": "0x37190012", "mnemonic": "ORI"}, + {"address": "0xBFC148A8", "raw": "0xA479000A", "mnemonic": "SH"}, + {"address": "0xBFC148AC", "raw": "0x914A7264", "mnemonic": "LBU"}, + {"address": "0xBFC148B0", "raw": "0x8D087514", "mnemonic": "LW"}, + {"address": "0xBFC148B4", "raw": "0x3C0C0000", "mnemonic": "LUI"}, + {"address": "0xBFC148B8", "raw": "0x000A5880", "mnemonic": "SLL"}, + {"address": "0xBFC148BC", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC148C0", "raw": "0x018B6021", "mnemonic": "ADDU"}, + {"address": "0xBFC148C4", "raw": "0x25090001", "mnemonic": "ADDIU"}, + {"address": "0xBFC148C8", "raw": "0x8D8C7528", "mnemonic": "LW"}, + {"address": "0xBFC148CC", "raw": "0xAC297514", "mnemonic": "SW"}, + {"address": "0xBFC148D0", "raw": "0x3C010000", "mnemonic": "LUI"} + ] + }, + { + "func_addr": "0xBFC14CF4", + "pc": "0xBFC14D3C", + "register": 15, + "register_name": "$t7", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC14CFC", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC14D00", "raw": "0x8C427514", "mnemonic": "LW"}, + {"address": "0xBFC14D04", "raw": "0x3C050000", "mnemonic": "LUI"}, + {"address": "0xBFC14D08", "raw": "0x00067080", "mnemonic": "SLL"}, + {"address": "0xBFC14D0C", "raw": "0x00AE2821", "mnemonic": "ADDU"}, + {"address": "0xBFC14D10", "raw": "0x244FFFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC14D14", "raw": "0x27BDFFE0", "mnemonic": "ADDIU"}, + {"address": "0xBFC14D18", "raw": "0x94A57508", "mnemonic": "LHU"}, + {"address": "0xBFC14D1C", "raw": "0x2DE1000A", "mnemonic": "SLTIU"}, + {"address": "0xBFC14D20", "raw": "0x10200112", "mnemonic": "BEQ"}, + {"address": "0xBFC14D24", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC14D28", "raw": "0x000F7880", "mnemonic": "SLL"}, + {"address": "0xBFC14D2C", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC14D30", "raw": "0x002F0821", "mnemonic": "ADDU"}, + {"address": "0xBFC14D34", "raw": "0x8C2F6C70", "mnemonic": "LW"}, + {"address": "0xBFC14D38", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC15188", + "pc": "0xBFC151E0", + "register": 24, + "register_name": "$t8", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC151A0", "raw": "0x00077080", "mnemonic": "SLL"}, + {"address": "0xBFC151A4", "raw": "0x00077880", "mnemonic": "SLL"}, + {"address": "0xBFC151A8", "raw": "0x00CE3021", "mnemonic": "ADDU"}, + {"address": "0xBFC151AC", "raw": "0x00AF2821", "mnemonic": "ADDU"}, + {"address": "0xBFC151B0", "raw": "0x2458FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC151B4", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC151B8", "raw": "0x94C67508", "mnemonic": "LHU"}, + {"address": "0xBFC151BC", "raw": "0x8CA57550", "mnemonic": "LW"}, + {"address": "0xBFC151C0", "raw": "0x2F01000D", "mnemonic": "SLTIU"}, + {"address": "0xBFC151C4", "raw": "0x10200120", "mnemonic": "BEQ"}, + {"address": "0xBFC151C8", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC151CC", "raw": "0x0018C080", "mnemonic": "SLL"}, + {"address": "0xBFC151D0", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC151D4", "raw": "0x00380821", "mnemonic": "ADDU"}, + {"address": "0xBFC151D8", "raw": "0x8C386C98", "mnemonic": "LW"}, + {"address": "0xBFC151DC", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC15664", + "pc": "0xBFC1569C", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1565C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC15660", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC15664", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC15668", "raw": "0x8C427514", "mnemonic": "LW"}, + {"address": "0xBFC1566C", "raw": "0x3C040000", "mnemonic": "LUI"}, + {"address": "0xBFC15670", "raw": "0x244EFFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC15674", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC15678", "raw": "0x90847264", "mnemonic": "LBU"}, + {"address": "0xBFC1567C", "raw": "0x2DC10004", "mnemonic": "SLTIU"}, + {"address": "0xBFC15680", "raw": "0x10200082", "mnemonic": "BEQ"}, + {"address": "0xBFC15684", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC15688", "raw": "0x000E7080", "mnemonic": "SLL"}, + {"address": "0xBFC1568C", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC15690", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC15694", "raw": "0x8C2E6CCC", "mnemonic": "LW"}, + {"address": "0xBFC15698", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC15F08", + "pc": "0xBFC15F10", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC15ED0", "raw": "0x24420CF0", "mnemonic": "ADDIU"}, + {"address": "0xBFC15ED4", "raw": "0x275A6408", "mnemonic": "ADDIU"}, + {"address": "0xBFC15ED8", "raw": "0x277B6418", "mnemonic": "ADDIU"}, + {"address": "0xBFC15EDC", "raw": "0x8F430000", "mnemonic": "LW"}, + {"address": "0xBFC15EE0", "raw": "0x275A0004", "mnemonic": "ADDIU"}, + {"address": "0xBFC15EE4", "raw": "0x24420004", "mnemonic": "ADDIU"}, + {"address": "0xBFC15EE8", "raw": "0x175BFFFC", "mnemonic": "BNE"}, + {"address": "0xBFC15EEC", "raw": "0xAC43FFFC", "mnemonic": "SW"}, + {"address": "0xBFC15EF0", "raw": "0x08001A9C", "mnemonic": "J"}, + {"address": "0xBFC15EF4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC15EF8", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC15EFC", "raw": "0x8C4275C0", "mnemonic": "LW"}, + {"address": "0xBFC15F00", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC15F04", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC15F08", "raw": "0x3C020000", "mnemonic": "LUI"}, + {"address": "0xBFC15F0C", "raw": "0x2442641C", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC1609C", + "pc": "0xBFC160CC", + "register": 26, + "register_name": "$k0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1608C", "raw": "0x08001967", "mnemonic": "J"}, + {"address": "0xBFC16090", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16094", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC16098", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1609C", "raw": "0x241A0100", "mnemonic": "ADDIU"}, + {"address": "0xBFC160A0", "raw": "0x8F5A0008", "mnemonic": "LW"}, + {"address": "0xBFC160A4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC160A8", "raw": "0x8F5A0000", "mnemonic": "LW"}, + {"address": "0xBFC160AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC160B0", "raw": "0x8F420010", "mnemonic": "LW"}, + {"address": "0xBFC160B4", "raw": "0x8F430014", "mnemonic": "LW"}, + {"address": "0xBFC160B8", "raw": "0x8F5F0084", "mnemonic": "LW"}, + {"address": "0xBFC160BC", "raw": "0x235A0008", "mnemonic": "ADDI"}, + {"address": "0xBFC160C0", "raw": "0x8F410004", "mnemonic": "LW"}, + {"address": "0xBFC160C4", "raw": "0x8F5A0080", "mnemonic": "LW"}, + {"address": "0xBFC160C8", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC16170", + "pc": "0xBFC161BC", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1617C", "raw": "0x27A40028", "mnemonic": "ADDIU"}, + {"address": "0xBFC16180", "raw": "0x27A50020", "mnemonic": "ADDIU"}, + {"address": "0xBFC16184", "raw": "0x0C000845", "mnemonic": "JAL"}, + {"address": "0xBFC16188", "raw": "0x24060002", "mnemonic": "ADDIU"}, + {"address": "0xBFC1618C", "raw": "0x93A50021", "mnemonic": "LBU"}, + {"address": "0xBFC16190", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16194", "raw": "0x00A01821", "mnemonic": "ADDU"}, + {"address": "0xBFC16198", "raw": "0x246EFF7F", "mnemonic": "ADDIU"}, + {"address": "0xBFC1619C", "raw": "0x2DC10004", "mnemonic": "SLTIU"}, + {"address": "0xBFC161A0", "raw": "0x102000CF", "mnemonic": "BEQ"}, + {"address": "0xBFC161A4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC161A8", "raw": "0x000E7080", "mnemonic": "SLL"}, + {"address": "0xBFC161AC", "raw": "0x3C010000", "mnemonic": "LUI"}, + {"address": "0xBFC161B0", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC161B4", "raw": "0x8C2E6CE0", "mnemonic": "LW"}, + {"address": "0xBFC161B8", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC16570", + "pc": "0xBFC16574", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16534", "raw": "0x03282021", "mnemonic": "ADDU"}, + {"address": "0xBFC16538", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC1653C", "raw": "0x27BD0028", "mnemonic": "ADDIU"}, + {"address": "0xBFC16540", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC16544", "raw": "0x00801021", "mnemonic": "ADDU"}, + {"address": "0xBFC16548", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1654C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16550", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16554", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16558", "raw": "0x24090052", "mnemonic": "ADDIU"}, + {"address": "0xBFC1655C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16560", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16564", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16568", "raw": "0x2409005A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1656C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16570", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16580", + "pc": "0xBFC16584", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16544", "raw": "0x00801021", "mnemonic": "ADDU"}, + {"address": "0xBFC16548", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1654C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16550", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16554", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16558", "raw": "0x24090052", "mnemonic": "ADDIU"}, + {"address": "0xBFC1655C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16560", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16564", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16568", "raw": "0x2409005A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1656C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16570", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16574", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16578", "raw": "0x24090044", "mnemonic": "ADDIU"}, + {"address": "0xBFC1657C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16580", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16590", + "pc": "0xBFC16594", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16554", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16558", "raw": "0x24090052", "mnemonic": "ADDIU"}, + {"address": "0xBFC1655C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16560", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16564", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16568", "raw": "0x2409005A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1656C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16570", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16574", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16578", "raw": "0x24090044", "mnemonic": "ADDIU"}, + {"address": "0xBFC1657C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16580", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16584", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16588", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC1658C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16590", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165A0", + "pc": "0xBFC165A4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16564", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16568", "raw": "0x2409005A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1656C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16570", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16574", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16578", "raw": "0x24090044", "mnemonic": "ADDIU"}, + {"address": "0xBFC1657C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16580", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16584", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16588", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC1658C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16590", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16594", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16598", "raw": "0x24090025", "mnemonic": "ADDIU"}, + {"address": "0xBFC1659C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165A0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165B0", + "pc": "0xBFC165B4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16574", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16578", "raw": "0x24090044", "mnemonic": "ADDIU"}, + {"address": "0xBFC1657C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16580", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16584", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16588", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC1658C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16590", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16594", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16598", "raw": "0x24090025", "mnemonic": "ADDIU"}, + {"address": "0xBFC1659C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165A0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165A8", "raw": "0x24090096", "mnemonic": "ADDIU"}, + {"address": "0xBFC165AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165B0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165C0", + "pc": "0xBFC165C4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16584", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16588", "raw": "0x24090040", "mnemonic": "ADDIU"}, + {"address": "0xBFC1658C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16590", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16594", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16598", "raw": "0x24090025", "mnemonic": "ADDIU"}, + {"address": "0xBFC1659C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165A0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165A8", "raw": "0x24090096", "mnemonic": "ADDIU"}, + {"address": "0xBFC165AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165B0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165B8", "raw": "0x24090097", "mnemonic": "ADDIU"}, + {"address": "0xBFC165BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165C0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165D0", + "pc": "0xBFC165D4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16594", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16598", "raw": "0x24090025", "mnemonic": "ADDIU"}, + {"address": "0xBFC1659C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165A0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165A8", "raw": "0x24090096", "mnemonic": "ADDIU"}, + {"address": "0xBFC165AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165B0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165B8", "raw": "0x24090097", "mnemonic": "ADDIU"}, + {"address": "0xBFC165BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165C0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165C8", "raw": "0x24090099", "mnemonic": "ADDIU"}, + {"address": "0xBFC165CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165D0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165E0", + "pc": "0xBFC165E4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165A8", "raw": "0x24090096", "mnemonic": "ADDIU"}, + {"address": "0xBFC165AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165B0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165B8", "raw": "0x24090097", "mnemonic": "ADDIU"}, + {"address": "0xBFC165BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165C0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165C8", "raw": "0x24090099", "mnemonic": "ADDIU"}, + {"address": "0xBFC165CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165D0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165D8", "raw": "0x24090098", "mnemonic": "ADDIU"}, + {"address": "0xBFC165DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165E0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC165F0", + "pc": "0xBFC165F4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165B8", "raw": "0x24090097", "mnemonic": "ADDIU"}, + {"address": "0xBFC165BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165C0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165C8", "raw": "0x24090099", "mnemonic": "ADDIU"}, + {"address": "0xBFC165CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165D0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165D8", "raw": "0x24090098", "mnemonic": "ADDIU"}, + {"address": "0xBFC165DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165E0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165E8", "raw": "0x2409003F", "mnemonic": "ADDIU"}, + {"address": "0xBFC165EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165F0", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16600", + "pc": "0xBFC16604", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165C8", "raw": "0x24090099", "mnemonic": "ADDIU"}, + {"address": "0xBFC165CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165D0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165D8", "raw": "0x24090098", "mnemonic": "ADDIU"}, + {"address": "0xBFC165DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165E0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165E8", "raw": "0x2409003F", "mnemonic": "ADDIU"}, + {"address": "0xBFC165EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165F0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165F8", "raw": "0x240900B2", "mnemonic": "ADDIU"}, + {"address": "0xBFC165FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16600", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16610", + "pc": "0xBFC16614", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165D8", "raw": "0x24090098", "mnemonic": "ADDIU"}, + {"address": "0xBFC165DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165E0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165E8", "raw": "0x2409003F", "mnemonic": "ADDIU"}, + {"address": "0xBFC165EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165F0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165F8", "raw": "0x240900B2", "mnemonic": "ADDIU"}, + {"address": "0xBFC165FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16600", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16604", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16608", "raw": "0x2409003A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1660C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16610", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16620", + "pc": "0xBFC16624", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165E8", "raw": "0x2409003F", "mnemonic": "ADDIU"}, + {"address": "0xBFC165EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC165F0", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC165F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165F8", "raw": "0x240900B2", "mnemonic": "ADDIU"}, + {"address": "0xBFC165FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16600", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16604", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16608", "raw": "0x2409003A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1660C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16610", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16614", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16618", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC1661C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16620", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16630", + "pc": "0xBFC16634", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC165F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC165F8", "raw": "0x240900B2", "mnemonic": "ADDIU"}, + {"address": "0xBFC165FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16600", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16604", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16608", "raw": "0x2409003A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1660C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16610", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16614", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16618", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC1661C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16620", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16624", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16628", "raw": "0x2409002A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1662C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16630", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16640", + "pc": "0xBFC16644", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16604", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16608", "raw": "0x2409003A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1660C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16610", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16614", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16618", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC1661C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16620", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16624", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16628", "raw": "0x2409002A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1662C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16630", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16634", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16638", "raw": "0x240900A7", "mnemonic": "ADDIU"}, + {"address": "0xBFC1663C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16640", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16650", + "pc": "0xBFC16654", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16614", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16618", "raw": "0x24090017", "mnemonic": "ADDIU"}, + {"address": "0xBFC1661C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16620", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16624", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16628", "raw": "0x2409002A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1662C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16630", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16634", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16638", "raw": "0x240900A7", "mnemonic": "ADDIU"}, + {"address": "0xBFC1663C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16640", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16644", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16648", "raw": "0x240900A8", "mnemonic": "ADDIU"}, + {"address": "0xBFC1664C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16650", "raw": "0x240A00A0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166A0", + "pc": "0xBFC166A4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16664", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16668", "raw": "0x240900AA", "mnemonic": "ADDIU"}, + {"address": "0xBFC1666C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16670", "raw": "0x240A00A0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16674", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16678", "raw": "0x240900AE", "mnemonic": "ADDIU"}, + {"address": "0xBFC1667C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16680", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC16684", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16688", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1668C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16690", "raw": "0x24040002", "mnemonic": "ADDIU"}, + {"address": "0xBFC16694", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16698", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1669C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166A0", "raw": "0x240A00C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166B0", + "pc": "0xBFC166B4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16674", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16678", "raw": "0x240900AE", "mnemonic": "ADDIU"}, + {"address": "0xBFC1667C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16680", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC16684", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16688", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1668C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16690", "raw": "0x24040002", "mnemonic": "ADDIU"}, + {"address": "0xBFC16694", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16698", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1669C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166A0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166A8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166C0", + "pc": "0xBFC166C4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16684", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16688", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1668C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16690", "raw": "0x24040002", "mnemonic": "ADDIU"}, + {"address": "0xBFC16694", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16698", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1669C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166A0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166A8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166B8", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC166BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166D0", + "pc": "0xBFC166D4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC16694", "raw": "0x0000000C", "mnemonic": "SYSCALL"}, + {"address": "0xBFC16698", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1669C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166A0", "raw": "0x240A00C0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166A8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166B8", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC166BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166C8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166E0", + "pc": "0xBFC166E4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC166A4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166A8", "raw": "0x2409000B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166B0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166B8", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC166BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166C8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166D8", "raw": "0x2409001C", "mnemonic": "ADDIU"}, + {"address": "0xBFC166DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC166F0", + "pc": "0xBFC166F4", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC166B4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166B8", "raw": "0x2409001A", "mnemonic": "ADDIU"}, + {"address": "0xBFC166BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166C0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166C8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166D8", "raw": "0x2409001C", "mnemonic": "ADDIU"}, + {"address": "0xBFC166DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166E8", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC166EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16700", + "pc": "0xBFC16704", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC166C4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166C8", "raw": "0x2409001B", "mnemonic": "ADDIU"}, + {"address": "0xBFC166CC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166D0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166D8", "raw": "0x2409001C", "mnemonic": "ADDIU"}, + {"address": "0xBFC166DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166E8", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC166EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166F8", "raw": "0x2409001E", "mnemonic": "ADDIU"}, + {"address": "0xBFC166FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16700", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16710", + "pc": "0xBFC16714", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC166D4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166D8", "raw": "0x2409001C", "mnemonic": "ADDIU"}, + {"address": "0xBFC166DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166E0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166E8", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC166EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166F8", "raw": "0x2409001E", "mnemonic": "ADDIU"}, + {"address": "0xBFC166FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16700", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16704", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16708", "raw": "0x2409001F", "mnemonic": "ADDIU"}, + {"address": "0xBFC1670C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16710", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC16720", + "pc": "0xBFC16724", + "register": 10, + "register_name": "$t2", + "kind": "jr_non_ra", + "classification": "a0_b0_c0_dispatch", + "context_window": [ + {"address": "0xBFC166E4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166E8", "raw": "0x2409001D", "mnemonic": "ADDIU"}, + {"address": "0xBFC166EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC166F0", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC166F4", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC166F8", "raw": "0x2409001E", "mnemonic": "ADDIU"}, + {"address": "0xBFC166FC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16700", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16704", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16708", "raw": "0x2409001F", "mnemonic": "ADDIU"}, + {"address": "0xBFC1670C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16710", "raw": "0x240A00B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC16714", "raw": "0x01400008", "mnemonic": "JR"}, + {"address": "0xBFC16718", "raw": "0x24090021", "mnemonic": "ADDIU"}, + {"address": "0xBFC1671C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC16720", "raw": "0x240A00B0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC1A5B0", + "pc": "0xBFC1A664", + "register": 9, + "register_name": "$t1", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1A624", "raw": "0xAFA20024", "mnemonic": "SW"}, + {"address": "0xBFC1A628", "raw": "0x0C00C90C", "mnemonic": "JAL"}, + {"address": "0xBFC1A62C", "raw": "0x00402021", "mnemonic": "ADDU"}, + {"address": "0xBFC1A630", "raw": "0x8FA20024", "mnemonic": "LW"}, + {"address": "0xBFC1A634", "raw": "0x24010064", "mnemonic": "ADDIU"}, + {"address": "0xBFC1A638", "raw": "0x0041001A", "mnemonic": "DIV"}, + {"address": "0xBFC1A63C", "raw": "0x00001010", "mnemonic": "MFHI"}, + {"address": "0xBFC1A640", "raw": "0x2449FFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC1A644", "raw": "0x2D210007", "mnemonic": "SLTIU"}, + {"address": "0xBFC1A648", "raw": "0x10200024", "mnemonic": "BEQ"}, + {"address": "0xBFC1A64C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1A650", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC1A654", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1A658", "raw": "0x00290821", "mnemonic": "ADDU"}, + {"address": "0xBFC1A65C", "raw": "0x8C29AC10", "mnemonic": "LW"}, + {"address": "0xBFC1A660", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1AC68", + "pc": "0xBFC1ACB4", + "register": 15, + "register_name": "$t7", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1AC74", "raw": "0x24010003", "mnemonic": "ADDIU"}, + {"address": "0xBFC1AC78", "raw": "0x15C10066", "mnemonic": "BNE"}, + {"address": "0xBFC1AC7C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC1AC80", "raw": "0x3C058006", "mnemonic": "LUI"}, + {"address": "0xBFC1AC84", "raw": "0x8CA56948", "mnemonic": "LW"}, + {"address": "0xBFC1AC88", "raw": "0x00003821", "mnemonic": "ADDU"}, + {"address": "0xBFC1AC8C", "raw": "0x00A01021", "mnemonic": "ADDU"}, + {"address": "0xBFC1AC90", "raw": "0x244FFFCE", "mnemonic": "ADDIU"}, + {"address": "0xBFC1AC94", "raw": "0x2DE1000A", "mnemonic": "SLTIU"}, + {"address": "0xBFC1AC98", "raw": "0x1020001B", "mnemonic": "BEQ"}, + {"address": "0xBFC1AC9C", "raw": "0x2401003A", "mnemonic": "ADDIU"}, + {"address": "0xBFC1ACA0", "raw": "0x000F7880", "mnemonic": "SLL"}, + {"address": "0xBFC1ACA4", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1ACA8", "raw": "0x002F0821", "mnemonic": "ADDU"}, + {"address": "0xBFC1ACAC", "raw": "0x8C2FAC2C", "mnemonic": "LW"}, + {"address": "0xBFC1ACB0", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1BD68", + "pc": "0xBFC1BE0C", + "register": 9, + "register_name": "$t1", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1BDCC", "raw": "0x11000041", "mnemonic": "BEQ"}, + {"address": "0xBFC1BDD0", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC1BDD4", "raw": "0x0C011934", "mnemonic": "JAL"}, + {"address": "0xBFC1BDD8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1BDDC", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC1BDE0", "raw": "0x00401821", "mnemonic": "ADDU"}, + {"address": "0xBFC1BDE4", "raw": "0xAC229F6C", "mnemonic": "SW"}, + {"address": "0xBFC1BDE8", "raw": "0x2469FFE1", "mnemonic": "ADDIU"}, + {"address": "0xBFC1BDEC", "raw": "0x2D210005", "mnemonic": "SLTIU"}, + {"address": "0xBFC1BDF0", "raw": "0x10200037", "mnemonic": "BEQ"}, + {"address": "0xBFC1BDF4", "raw": "0x00402821", "mnemonic": "ADDU"}, + {"address": "0xBFC1BDF8", "raw": "0x00094880", "mnemonic": "SLL"}, + {"address": "0xBFC1BDFC", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1BE00", "raw": "0x00290821", "mnemonic": "ADDU"}, + {"address": "0xBFC1BE04", "raw": "0x8C29AC54", "mnemonic": "LW"}, + {"address": "0xBFC1BE08", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1CDD8", + "pc": "0xBFC1CE50", + "register": 8, + "register_name": "$t0", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1CE10", "raw": "0xA3190002", "mnemonic": "SB"}, + {"address": "0xBFC1CE14", "raw": "0xA3000000", "mnemonic": "SB"}, + {"address": "0xBFC1CE18", "raw": "0xA3000003", "mnemonic": "SB"}, + {"address": "0xBFC1CE1C", "raw": "0x100002D4", "mnemonic": "BEQ"}, + {"address": "0xBFC1CE20", "raw": "0xA3000004", "mnemonic": "SB"}, + {"address": "0xBFC1CE24", "raw": "0xAFB0004C", "mnemonic": "SW"}, + {"address": "0xBFC1CE28", "raw": "0x00A08021", "mnemonic": "ADDU"}, + {"address": "0xBFC1CE2C", "raw": "0x2E010005", "mnemonic": "SLTIU"}, + {"address": "0xBFC1CE30", "raw": "0xAFB30048", "mnemonic": "SW"}, + {"address": "0xBFC1CE34", "raw": "0x10200286", "mnemonic": "BEQ"}, + {"address": "0xBFC1CE38", "raw": "0xAFB40044", "mnemonic": "SW"}, + {"address": "0xBFC1CE3C", "raw": "0x00104080", "mnemonic": "SLL"}, + {"address": "0xBFC1CE40", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1CE44", "raw": "0x00280821", "mnemonic": "ADDU"}, + {"address": "0xBFC1CE48", "raw": "0x8C28AC70", "mnemonic": "LW"}, + {"address": "0xBFC1CE4C", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1E1CC", + "pc": "0xBFC1E200", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1E1C0", "raw": "0x27BD0028", "mnemonic": "ADDIU"}, + {"address": "0xBFC1E1C4", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC1E1C8", "raw": "0xAC2B6940", "mnemonic": "SW"}, + {"address": "0xBFC1E1CC", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1E1D0", "raw": "0x00801021", "mnemonic": "ADDU"}, + {"address": "0xBFC1E1D4", "raw": "0xAC246940", "mnemonic": "SW"}, + {"address": "0xBFC1E1D8", "raw": "0x244EFFFE", "mnemonic": "ADDIU"}, + {"address": "0xBFC1E1DC", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC1E1E0", "raw": "0x2DC10018", "mnemonic": "SLTIU"}, + {"address": "0xBFC1E1E4", "raw": "0x10200075", "mnemonic": "BEQ"}, + {"address": "0xBFC1E1E8", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC1E1EC", "raw": "0x000E7080", "mnemonic": "SLL"}, + {"address": "0xBFC1E1F0", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1E1F4", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC1E1F8", "raw": "0x8C2EAC84", "mnemonic": "LW"}, + {"address": "0xBFC1E1FC", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC1E3CC", + "pc": "0xBFC1E424", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC1E3E4", "raw": "0x24010001", "mnemonic": "ADDIU"}, + {"address": "0xBFC1E3E8", "raw": "0x14410091", "mnemonic": "BNE"}, + {"address": "0xBFC1E3EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1E3F0", "raw": "0x3C028006", "mnemonic": "LUI"}, + {"address": "0xBFC1E3F4", "raw": "0x8C426940", "mnemonic": "LW"}, + {"address": "0xBFC1E3F8", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1E3FC", "raw": "0xAC206950", "mnemonic": "SW"}, + {"address": "0xBFC1E400", "raw": "0x244EFFFE", "mnemonic": "ADDIU"}, + {"address": "0xBFC1E404", "raw": "0x2DC10018", "mnemonic": "SLTIU"}, + {"address": "0xBFC1E408", "raw": "0x1020005B", "mnemonic": "BEQ"}, + {"address": "0xBFC1E40C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC1E410", "raw": "0x000E7080", "mnemonic": "SLL"}, + {"address": "0xBFC1E414", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC1E418", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC1E41C", "raw": "0x8C2EAD0C", "mnemonic": "LW"}, + {"address": "0xBFC1E420", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC27EB4", + "pc": "0xBFC27EE8", + "register": 15, + "register_name": "$t7", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC27EA8", "raw": "0xA4229EE2", "mnemonic": "SH"}, + {"address": "0xBFC27EAC", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC27EB0", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC27EB4", "raw": "0x27BDEFC8", "mnemonic": "ADDIU"}, + {"address": "0xBFC27EB8", "raw": "0x00801021", "mnemonic": "ADDU"}, + {"address": "0xBFC27EBC", "raw": "0x340EE000", "mnemonic": "ORI"}, + {"address": "0xBFC27EC0", "raw": "0x2C410007", "mnemonic": "SLTIU"}, + {"address": "0xBFC27EC4", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC27EC8", "raw": "0xAFAE1030", "mnemonic": "SW"}, + {"address": "0xBFC27ECC", "raw": "0x1020005F", "mnemonic": "BEQ"}, + {"address": "0xBFC27ED0", "raw": "0xAFA0002C", "mnemonic": "SW"}, + {"address": "0xBFC27ED4", "raw": "0x00027880", "mnemonic": "SLL"}, + {"address": "0xBFC27ED8", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC27EDC", "raw": "0x002F0821", "mnemonic": "ADDU"}, + {"address": "0xBFC27EE0", "raw": "0x8C2FAD70", "mnemonic": "LW"}, + {"address": "0xBFC27EE4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC2ACD0", + "pc": "0xBFC2AD1C", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC2ACDC", "raw": "0x27A40028", "mnemonic": "ADDIU"}, + {"address": "0xBFC2ACE0", "raw": "0x27A50020", "mnemonic": "ADDIU"}, + {"address": "0xBFC2ACE4", "raw": "0x0C010C7F", "mnemonic": "JAL"}, + {"address": "0xBFC2ACE8", "raw": "0x24060002", "mnemonic": "ADDIU"}, + {"address": "0xBFC2ACEC", "raw": "0x93A50021", "mnemonic": "LBU"}, + {"address": "0xBFC2ACF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC2ACF4", "raw": "0x00A01821", "mnemonic": "ADDU"}, + {"address": "0xBFC2ACF8", "raw": "0x246EFF7F", "mnemonic": "ADDIU"}, + {"address": "0xBFC2ACFC", "raw": "0x2DC10004", "mnemonic": "SLTIU"}, + {"address": "0xBFC2AD00", "raw": "0x102000CF", "mnemonic": "BEQ"}, + {"address": "0xBFC2AD04", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC2AD08", "raw": "0x000E7080", "mnemonic": "SLL"}, + {"address": "0xBFC2AD0C", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC2AD10", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC2AD14", "raw": "0x8C2EAD90", "mnemonic": "LW"}, + {"address": "0xBFC2AD18", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC2D0E0", + "pc": "0xBFC2D19C", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC2D15C", "raw": "0x000FC080", "mnemonic": "SLL"}, + {"address": "0xBFC2D160", "raw": "0x030FC023", "mnemonic": "SUBU"}, + {"address": "0xBFC2D164", "raw": "0x0018C080", "mnemonic": "SLL"}, + {"address": "0xBFC2D168", "raw": "0x030FC021", "mnemonic": "ADDU"}, + {"address": "0xBFC2D16C", "raw": "0x0018C100", "mnemonic": "SLL"}, + {"address": "0xBFC2D170", "raw": "0x0015C8C0", "mnemonic": "SLL"}, + {"address": "0xBFC2D174", "raw": "0x8DCE8324", "mnemonic": "LW"}, + {"address": "0xBFC2D178", "raw": "0x0335C823", "mnemonic": "SUBU"}, + {"address": "0xBFC2D17C", "raw": "0x030FC021", "mnemonic": "ADDU"}, + {"address": "0xBFC2D180", "raw": "0x0018C0C0", "mnemonic": "SLL"}, + {"address": "0xBFC2D184", "raw": "0x0019C900", "mnemonic": "SLL"}, + {"address": "0xBFC2D188", "raw": "0x3C098011", "mnemonic": "LUI"}, + {"address": "0xBFC2D18C", "raw": "0x25290F04", "mnemonic": "ADDIU"}, + {"address": "0xBFC2D190", "raw": "0x03194021", "mnemonic": "ADDU"}, + {"address": "0xBFC2D194", "raw": "0x01C32026", "mnemonic": "XOR"}, + {"address": "0xBFC2D198", "raw": "0x2C840001", "mnemonic": "SLTIU"} + ] + }, + { + "func_addr": "0xBFC2E6B8", + "pc": "0xBFC2E73C", + "register": 10, + "register_name": "$t2", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC2E6FC", "raw": "0x13000013", "mnemonic": "BEQ"}, + {"address": "0xBFC2E700", "raw": "0x00603021", "mnemonic": "ADDU"}, + {"address": "0xBFC2E704", "raw": "0x8C590034", "mnemonic": "LW"}, + {"address": "0xBFC2E708", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC2E70C", "raw": "0x13200010", "mnemonic": "BEQ"}, + {"address": "0xBFC2E710", "raw": "0x3C018000", "mnemonic": "LUI"}, + {"address": "0xBFC2E714", "raw": "0x00064080", "mnemonic": "SLL"}, + {"address": "0xBFC2E718", "raw": "0x01064023", "mnemonic": "SUBU"}, + {"address": "0xBFC2E71C", "raw": "0x00084080", "mnemonic": "SLL"}, + {"address": "0xBFC2E720", "raw": "0x01064021", "mnemonic": "ADDU"}, + {"address": "0xBFC2E724", "raw": "0x00084100", "mnemonic": "SLL"}, + {"address": "0xBFC2E728", "raw": "0x01064021", "mnemonic": "ADDU"}, + {"address": "0xBFC2E72C", "raw": "0x000840C0", "mnemonic": "SLL"}, + {"address": "0xBFC2E730", "raw": "0x00E84821", "mnemonic": "ADDU"}, + {"address": "0xBFC2E734", "raw": "0x8D2A0034", "mnemonic": "LW"}, + {"address": "0xBFC2E738", "raw": "0x00A02021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC3041C", + "pc": "0xBFC30454", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC30414", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC30418", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3041C", "raw": "0x00052C00", "mnemonic": "SLL"}, + {"address": "0xBFC30420", "raw": "0x00052C03", "mnemonic": "SRA"}, + {"address": "0xBFC30424", "raw": "0x00A01021", "mnemonic": "ADDU"}, + {"address": "0xBFC30428", "raw": "0x00063400", "mnemonic": "SLL"}, + {"address": "0xBFC3042C", "raw": "0x00073C00", "mnemonic": "SLL"}, + {"address": "0xBFC30430", "raw": "0x2C410004", "mnemonic": "SLTIU"}, + {"address": "0xBFC30434", "raw": "0x00073C03", "mnemonic": "SRA"}, + {"address": "0xBFC30438", "raw": "0x1020001C", "mnemonic": "BEQ"}, + {"address": "0xBFC3043C", "raw": "0x00063403", "mnemonic": "SRA"}, + {"address": "0xBFC30440", "raw": "0x00027080", "mnemonic": "SLL"}, + {"address": "0xBFC30444", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC30448", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC3044C", "raw": "0x8C2EADA0", "mnemonic": "LW"}, + {"address": "0xBFC30450", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC30514", + "pc": "0xBFC3054C", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC3050C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC30510", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC30514", "raw": "0x00052C00", "mnemonic": "SLL"}, + {"address": "0xBFC30518", "raw": "0x00052C03", "mnemonic": "SRA"}, + {"address": "0xBFC3051C", "raw": "0x00A01021", "mnemonic": "ADDU"}, + {"address": "0xBFC30520", "raw": "0x00063400", "mnemonic": "SLL"}, + {"address": "0xBFC30524", "raw": "0x00073C00", "mnemonic": "SLL"}, + {"address": "0xBFC30528", "raw": "0x2C410004", "mnemonic": "SLTIU"}, + {"address": "0xBFC3052C", "raw": "0x00073C03", "mnemonic": "SRA"}, + {"address": "0xBFC30530", "raw": "0x10200014", "mnemonic": "BEQ"}, + {"address": "0xBFC30534", "raw": "0x00063403", "mnemonic": "SRA"}, + {"address": "0xBFC30538", "raw": "0x00027080", "mnemonic": "SLL"}, + {"address": "0xBFC3053C", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC30540", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC30544", "raw": "0x8C2EADB0", "mnemonic": "LW"}, + {"address": "0xBFC30548", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC34B58", + "pc": "0xBFC34D94", + "register": 25, + "register_name": "$t9", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC34D54", "raw": "0x24630001", "mnemonic": "ADDIU"}, + {"address": "0xBFC34D58", "raw": "0x1467FFF4", "mnemonic": "BNE"}, + {"address": "0xBFC34D5C", "raw": "0x24840004", "mnemonic": "ADDIU"}, + {"address": "0xBFC34D60", "raw": "0x2529000C", "mnemonic": "ADDIU"}, + {"address": "0xBFC34D64", "raw": "0x012A082B", "mnemonic": "SLTU"}, + {"address": "0xBFC34D68", "raw": "0x1420FFEE", "mnemonic": "BNE"}, + {"address": "0xBFC34D6C", "raw": "0x24C60003", "mnemonic": "ADDIU"}, + {"address": "0xBFC34D70", "raw": "0x01001021", "mnemonic": "ADDU"}, + {"address": "0xBFC34D74", "raw": "0x2C410009", "mnemonic": "SLTIU"}, + {"address": "0xBFC34D78", "raw": "0x10200027", "mnemonic": "BEQ"}, + {"address": "0xBFC34D7C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC34D80", "raw": "0x0002C880", "mnemonic": "SLL"}, + {"address": "0xBFC34D84", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC34D88", "raw": "0x00390821", "mnemonic": "ADDU"}, + {"address": "0xBFC34D8C", "raw": "0x8C39ADC0", "mnemonic": "LW"}, + {"address": "0xBFC34D90", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36D1C", + "pc": "0xBFC36D40", + "register": 14, + "register_name": "$t6", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC36D00", "raw": "0x3421FFFF", "mnemonic": "ORI"}, + {"address": "0xBFC36D04", "raw": "0x0C016ADC", "mnemonic": "JAL"}, + {"address": "0xBFC36D08", "raw": "0x00612024", "mnemonic": "AND"}, + {"address": "0xBFC36D0C", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC36D10", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC36D14", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC36D18", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D1C", "raw": "0x27BDFFD8", "mnemonic": "ADDIU"}, + {"address": "0xBFC36D20", "raw": "0xAFA40028", "mnemonic": "SW"}, + {"address": "0xBFC36D24", "raw": "0x8FA30028", "mnemonic": "LW"}, + {"address": "0xBFC36D28", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC36D2C", "raw": "0x30630003", "mnemonic": "ANDI"}, + {"address": "0xBFC36D30", "raw": "0x00037080", "mnemonic": "SLL"}, + {"address": "0xBFC36D34", "raw": "0x002E0821", "mnemonic": "ADDU"}, + {"address": "0xBFC36D38", "raw": "0x8C2EADF0", "mnemonic": "LW"}, + {"address": "0xBFC36D3C", "raw": "0xAFBF001C", "mnemonic": "SW"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36D8C", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36D4C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D50", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC36D54", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC36D58", "raw": "0x24040002", "mnemonic": "ADDIU"}, + {"address": "0xBFC36D5C", "raw": "0x8DE50024", "mnemonic": "LW"}, + {"address": "0xBFC36D60", "raw": "0x0C016830", "mnemonic": "JAL"}, + {"address": "0xBFC36D64", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D68", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC36D6C", "raw": "0x8C84924C", "mnemonic": "LW"}, + {"address": "0xBFC36D70", "raw": "0x0C013B3C", "mnemonic": "JAL"}, + {"address": "0xBFC36D74", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D78", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC36D7C", "raw": "0x8F18924C", "mnemonic": "LW"}, + {"address": "0xBFC36D80", "raw": "0x00002021", "mnemonic": "ADDU"}, + {"address": "0xBFC36D84", "raw": "0x8F190034", "mnemonic": "LW"}, + {"address": "0xBFC36D88", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36DBC", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36D7C", "raw": "0x8F18924C", "mnemonic": "LW"}, + {"address": "0xBFC36D80", "raw": "0x00002021", "mnemonic": "ADDU"}, + {"address": "0xBFC36D84", "raw": "0x8F190034", "mnemonic": "LW"}, + {"address": "0xBFC36D88", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D8C", "raw": "0x0320F809", "mnemonic": "JALR"}, + {"address": "0xBFC36D90", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36D94", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36D98", "raw": "0x0C01429F", "mnemonic": "JAL"}, + {"address": "0xBFC36D9C", "raw": "0xAC229254", "mnemonic": "SW"}, + {"address": "0xBFC36DA0", "raw": "0x10000015", "mnemonic": "BEQ"}, + {"address": "0xBFC36DA4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36DA8", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC36DAC", "raw": "0x8D08924C", "mnemonic": "LW"}, + {"address": "0xBFC36DB0", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC36DB4", "raw": "0x8D090034", "mnemonic": "LW"}, + {"address": "0xBFC36DB8", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36E2C", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36DEC", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36DF0", "raw": "0x10000001", "mnemonic": "BEQ"}, + {"address": "0xBFC36DF4", "raw": "0xAC229254", "mnemonic": "SW"}, + {"address": "0xBFC36DF8", "raw": "0x3C0C8008", "mnemonic": "LUI"}, + {"address": "0xBFC36DFC", "raw": "0x8D8C9258", "mnemonic": "LW"}, + {"address": "0xBFC36E00", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36E04", "raw": "0x11800004", "mnemonic": "BEQ"}, + {"address": "0xBFC36E08", "raw": "0x00001821", "mnemonic": "ADDU"}, + {"address": "0xBFC36E0C", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC36E10", "raw": "0x24030080", "mnemonic": "ADDIU"}, + {"address": "0xBFC36E14", "raw": "0x00001821", "mnemonic": "ADDU"}, + {"address": "0xBFC36E18", "raw": "0x3C0D8008", "mnemonic": "LUI"}, + {"address": "0xBFC36E1C", "raw": "0x8DAD924C", "mnemonic": "LW"}, + {"address": "0xBFC36E20", "raw": "0xAFA30024", "mnemonic": "SW"}, + {"address": "0xBFC36E24", "raw": "0x8DAE0028", "mnemonic": "LW"}, + {"address": "0xBFC36E28", "raw": "0x24040008", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36DE4", + "register": 11, + "register_name": "$t3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36DA4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36DA8", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC36DAC", "raw": "0x8D08924C", "mnemonic": "LW"}, + {"address": "0xBFC36DB0", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC36DB4", "raw": "0x8D090034", "mnemonic": "LW"}, + {"address": "0xBFC36DB8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36DBC", "raw": "0x0120F809", "mnemonic": "JALR"}, + {"address": "0xBFC36DC0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36DC4", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36DC8", "raw": "0x1000000B", "mnemonic": "BEQ"}, + {"address": "0xBFC36DCC", "raw": "0xAC229254", "mnemonic": "SW"}, + {"address": "0xBFC36DD0", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC36DD4", "raw": "0x8D4A924C", "mnemonic": "LW"}, + {"address": "0xBFC36DD8", "raw": "0x24040001", "mnemonic": "ADDIU"}, + {"address": "0xBFC36DDC", "raw": "0x8D4B0034", "mnemonic": "LW"}, + {"address": "0xBFC36DE0", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36E4C", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36E0C", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC36E10", "raw": "0x24030080", "mnemonic": "ADDIU"}, + {"address": "0xBFC36E14", "raw": "0x00001821", "mnemonic": "ADDU"}, + {"address": "0xBFC36E18", "raw": "0x3C0D8008", "mnemonic": "LUI"}, + {"address": "0xBFC36E1C", "raw": "0x8DAD924C", "mnemonic": "LW"}, + {"address": "0xBFC36E20", "raw": "0xAFA30024", "mnemonic": "SW"}, + {"address": "0xBFC36E24", "raw": "0x8DAE0028", "mnemonic": "LW"}, + {"address": "0xBFC36E28", "raw": "0x24040008", "mnemonic": "ADDIU"}, + {"address": "0xBFC36E2C", "raw": "0x01C0F809", "mnemonic": "JALR"}, + {"address": "0xBFC36E30", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36E34", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC36E38", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC36E3C", "raw": "0x8FA30024", "mnemonic": "LW"}, + {"address": "0xBFC36E40", "raw": "0x8DF80010", "mnemonic": "LW"}, + {"address": "0xBFC36E44", "raw": "0x3C010800", "mnemonic": "LUI"}, + {"address": "0xBFC36E48", "raw": "0x00622025", "mnemonic": "OR"} + ] + }, + { + "func_addr": "0xBFC36D48", + "pc": "0xBFC36EA8", + "register": 12, + "register_name": "$t4", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36E68", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC36E6C", "raw": "0x8D4A9258", "mnemonic": "LW"}, + {"address": "0xBFC36E70", "raw": "0x24090002", "mnemonic": "ADDIU"}, + {"address": "0xBFC36E74", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36E78", "raw": "0x11400004", "mnemonic": "BEQ"}, + {"address": "0xBFC36E7C", "raw": "0xAC299254", "mnemonic": "SW"}, + {"address": "0xBFC36E80", "raw": "0x3C032000", "mnemonic": "LUI"}, + {"address": "0xBFC36E84", "raw": "0x10000003", "mnemonic": "BEQ"}, + {"address": "0xBFC36E88", "raw": "0x34630501", "mnemonic": "ORI"}, + {"address": "0xBFC36E8C", "raw": "0x3C032000", "mnemonic": "LUI"}, + {"address": "0xBFC36E90", "raw": "0x34630504", "mnemonic": "ORI"}, + {"address": "0xBFC36E94", "raw": "0x3C0B8008", "mnemonic": "LUI"}, + {"address": "0xBFC36E98", "raw": "0x8D6B924C", "mnemonic": "LW"}, + {"address": "0xBFC36E9C", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC36EA0", "raw": "0x8D6C0010", "mnemonic": "LW"}, + {"address": "0xBFC36EA4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36EC0", + "pc": "0xBFC36F00", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36EC0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC36EC4", "raw": "0x8DCE9258", "mnemonic": "LW"}, + {"address": "0xBFC36EC8", "raw": "0x27BDFFD8", "mnemonic": "ADDIU"}, + {"address": "0xBFC36ECC", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36ED0", "raw": "0xAFBF001C", "mnemonic": "SW"}, + {"address": "0xBFC36ED4", "raw": "0xAC249258", "mnemonic": "SW"}, + {"address": "0xBFC36ED8", "raw": "0x10800003", "mnemonic": "BEQ"}, + {"address": "0xBFC36EDC", "raw": "0xAFAE0024", "mnemonic": "SW"}, + {"address": "0xBFC36EE0", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC36EE4", "raw": "0x24030080", "mnemonic": "ADDIU"}, + {"address": "0xBFC36EE8", "raw": "0x00001821", "mnemonic": "ADDU"}, + {"address": "0xBFC36EEC", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC36EF0", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC36EF4", "raw": "0xAFA30020", "mnemonic": "SW"}, + {"address": "0xBFC36EF8", "raw": "0x8DF80028", "mnemonic": "LW"}, + {"address": "0xBFC36EFC", "raw": "0x24040008", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC36EC0", + "pc": "0xBFC36F20", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36EE0", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC36EE4", "raw": "0x24030080", "mnemonic": "ADDIU"}, + {"address": "0xBFC36EE8", "raw": "0x00001821", "mnemonic": "ADDU"}, + {"address": "0xBFC36EEC", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC36EF0", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC36EF4", "raw": "0xAFA30020", "mnemonic": "SW"}, + {"address": "0xBFC36EF8", "raw": "0x8DF80028", "mnemonic": "LW"}, + {"address": "0xBFC36EFC", "raw": "0x24040008", "mnemonic": "ADDIU"}, + {"address": "0xBFC36F00", "raw": "0x0300F809", "mnemonic": "JALR"}, + {"address": "0xBFC36F04", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36F08", "raw": "0x3C198008", "mnemonic": "LUI"}, + {"address": "0xBFC36F0C", "raw": "0x8F39924C", "mnemonic": "LW"}, + {"address": "0xBFC36F10", "raw": "0x8FA30020", "mnemonic": "LW"}, + {"address": "0xBFC36F14", "raw": "0x8F280010", "mnemonic": "LW"}, + {"address": "0xBFC36F18", "raw": "0x3C010800", "mnemonic": "LUI"}, + {"address": "0xBFC36F1C", "raw": "0x00622025", "mnemonic": "OR"} + ] + }, + { + "func_addr": "0xBFC36EC0", + "pc": "0xBFC36F78", + "register": 12, + "register_name": "$t4", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36F38", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC36F3C", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC36F40", "raw": "0x8D4A9258", "mnemonic": "LW"}, + {"address": "0xBFC36F44", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC36F48", "raw": "0x11400005", "mnemonic": "BEQ"}, + {"address": "0xBFC36F4C", "raw": "0x3C032000", "mnemonic": "LUI"}, + {"address": "0xBFC36F50", "raw": "0x3C032000", "mnemonic": "LUI"}, + {"address": "0xBFC36F54", "raw": "0x10000003", "mnemonic": "BEQ"}, + {"address": "0xBFC36F58", "raw": "0x34630501", "mnemonic": "ORI"}, + {"address": "0xBFC36F5C", "raw": "0x3C032000", "mnemonic": "LUI"}, + {"address": "0xBFC36F60", "raw": "0x34630504", "mnemonic": "ORI"}, + {"address": "0xBFC36F64", "raw": "0x3C0B8008", "mnemonic": "LUI"}, + {"address": "0xBFC36F68", "raw": "0x8D6B924C", "mnemonic": "LW"}, + {"address": "0xBFC36F6C", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC36F70", "raw": "0x8D6C0010", "mnemonic": "LW"}, + {"address": "0xBFC36F74", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC36F90", + "pc": "0xBFC36FD0", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC36F90", "raw": "0x3C038008", "mnemonic": "LUI"}, + {"address": "0xBFC36F94", "raw": "0x27BDFFE0", "mnemonic": "ADDIU"}, + {"address": "0xBFC36F98", "raw": "0x00802821", "mnemonic": "ADDU"}, + {"address": "0xBFC36F9C", "raw": "0x8C639250", "mnemonic": "LW"}, + {"address": "0xBFC36FA0", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC36FA4", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC36FA8", "raw": "0x10A0000D", "mnemonic": "BEQ"}, + {"address": "0xBFC36FAC", "raw": "0xAC259250", "mnemonic": "SW"}, + {"address": "0xBFC36FB0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC36FB4", "raw": "0x8DCE92F8", "mnemonic": "LW"}, + {"address": "0xBFC36FB8", "raw": "0x3C068008", "mnemonic": "LUI"}, + {"address": "0xBFC36FBC", "raw": "0x3C078008", "mnemonic": "LUI"}, + {"address": "0xBFC36FC0", "raw": "0x8CE79258", "mnemonic": "LW"}, + {"address": "0xBFC36FC4", "raw": "0x8CC69254", "mnemonic": "LW"}, + {"address": "0xBFC36FC8", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC36FCC", "raw": "0x24849260", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC37028", + "pc": "0xBFC37058", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37018", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC3701C", "raw": "0xAC24925C", "mnemonic": "SW"}, + {"address": "0xBFC37020", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC37024", "raw": "0x00601021", "mnemonic": "ADDU"}, + {"address": "0xBFC37028", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC3702C", "raw": "0x10800003", "mnemonic": "BEQ"}, + {"address": "0xBFC37030", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC37034", "raw": "0x10000003", "mnemonic": "BEQ"}, + {"address": "0xBFC37038", "raw": "0x3C040300", "mnemonic": "LUI"}, + {"address": "0xBFC3703C", "raw": "0x3C040300", "mnemonic": "LUI"}, + {"address": "0xBFC37040", "raw": "0x34840001", "mnemonic": "ORI"}, + {"address": "0xBFC37044", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC37048", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC3704C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37050", "raw": "0x8DCF0010", "mnemonic": "LW"}, + {"address": "0xBFC37054", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC37070", + "pc": "0xBFC37088", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37048", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC3704C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37050", "raw": "0x8DCF0010", "mnemonic": "LW"}, + {"address": "0xBFC37054", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37058", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC3705C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37060", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC37064", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC37068", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC3706C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37070", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC37074", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC37078", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC3707C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC37080", "raw": "0x8DCF003C", "mnemonic": "LW"}, + {"address": "0xBFC37084", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC370A0", + "pc": "0xBFC370DC", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3709C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC370A0", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC370A4", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC370A8", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC370AC", "raw": "0xAFA40018", "mnemonic": "SW"}, + {"address": "0xBFC370B0", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC370B4", "raw": "0x30C800FF", "mnemonic": "ANDI"}, + {"address": "0xBFC370B8", "raw": "0x30E300FF", "mnemonic": "ANDI"}, + {"address": "0xBFC370BC", "raw": "0x8C590008", "mnemonic": "LW"}, + {"address": "0xBFC370C0", "raw": "0x30A900FF", "mnemonic": "ANDI"}, + {"address": "0xBFC370C4", "raw": "0x00037400", "mnemonic": "SLL"}, + {"address": "0xBFC370C8", "raw": "0x00087A00", "mnemonic": "SLL"}, + {"address": "0xBFC370CC", "raw": "0x8FA50018", "mnemonic": "LW"}, + {"address": "0xBFC370D0", "raw": "0x01CFC025", "mnemonic": "OR"}, + {"address": "0xBFC370D4", "raw": "0x8C44000C", "mnemonic": "LW"}, + {"address": "0xBFC370D8", "raw": "0x03093825", "mnemonic": "OR"} + ] + }, + { + "func_addr": "0xBFC370F4", + "pc": "0xBFC37118", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC370D8", "raw": "0x03093825", "mnemonic": "OR"}, + {"address": "0xBFC370DC", "raw": "0x0320F809", "mnemonic": "JALR"}, + {"address": "0xBFC370E0", "raw": "0x24060008", "mnemonic": "ADDIU"}, + {"address": "0xBFC370E4", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC370E8", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC370EC", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC370F0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC370F4", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC370F8", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC370FC", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC37100", "raw": "0xAFA40018", "mnemonic": "SW"}, + {"address": "0xBFC37104", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC37108", "raw": "0x8C4E0008", "mnemonic": "LW"}, + {"address": "0xBFC3710C", "raw": "0x00A03821", "mnemonic": "ADDU"}, + {"address": "0xBFC37110", "raw": "0x8FA50018", "mnemonic": "LW"}, + {"address": "0xBFC37114", "raw": "0x8C440020", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC37130", + "pc": "0xBFC37154", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37114", "raw": "0x8C440020", "mnemonic": "LW"}, + {"address": "0xBFC37118", "raw": "0x01C0F809", "mnemonic": "JALR"}, + {"address": "0xBFC3711C", "raw": "0x24060008", "mnemonic": "ADDIU"}, + {"address": "0xBFC37120", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC37124", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC37128", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC3712C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC37130", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC37134", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC37138", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC3713C", "raw": "0xAFA40018", "mnemonic": "SW"}, + {"address": "0xBFC37140", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC37144", "raw": "0x8C4E0008", "mnemonic": "LW"}, + {"address": "0xBFC37148", "raw": "0x00A03821", "mnemonic": "ADDU"}, + {"address": "0xBFC3714C", "raw": "0x8FA50018", "mnemonic": "LW"}, + {"address": "0xBFC37150", "raw": "0x8C44001C", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC3716C", + "pc": "0xBFC371CC", + "register": 13, + "register_name": "$t5", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3718C", "raw": "0xAFAE001C", "mnemonic": "SW"}, + {"address": "0xBFC37190", "raw": "0xAFAF0020", "mnemonic": "SW"}, + {"address": "0xBFC37194", "raw": "0x8C780000", "mnemonic": "LW"}, + {"address": "0xBFC37198", "raw": "0x0008CC00", "mnemonic": "SLL"}, + {"address": "0xBFC3719C", "raw": "0x312AFFFF", "mnemonic": "ANDI"}, + {"address": "0xBFC371A0", "raw": "0x032A5825", "mnemonic": "OR"}, + {"address": "0xBFC371A4", "raw": "0xAFAB0028", "mnemonic": "SW"}, + {"address": "0xBFC371A8", "raw": "0xAFB80024", "mnemonic": "SW"}, + {"address": "0xBFC371AC", "raw": "0x8C6C0004", "mnemonic": "LW"}, + {"address": "0xBFC371B0", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC371B4", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC371B8", "raw": "0xAFAC002C", "mnemonic": "SW"}, + {"address": "0xBFC371BC", "raw": "0x8C4D0008", "mnemonic": "LW"}, + {"address": "0xBFC371C0", "raw": "0x8C440018", "mnemonic": "LW"}, + {"address": "0xBFC371C4", "raw": "0x24060014", "mnemonic": "ADDIU"}, + {"address": "0xBFC371C8", "raw": "0x27A5001C", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC37334", + "pc": "0xBFC37350", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37310", "raw": "0x000A5A00", "mnemonic": "SLL"}, + {"address": "0xBFC37314", "raw": "0x000B6202", "mnemonic": "SRL"}, + {"address": "0xBFC37318", "raw": "0x01826826", "mnemonic": "XOR"}, + {"address": "0xBFC3731C", "raw": "0xAC8D0000", "mnemonic": "SW"}, + {"address": "0xBFC37320", "raw": "0x14A0FFD0", "mnemonic": "BNE"}, + {"address": "0xBFC37324", "raw": "0x00602021", "mnemonic": "ADDU"}, + {"address": "0xBFC37328", "raw": "0xAC870000", "mnemonic": "SW"}, + {"address": "0xBFC3732C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC37330", "raw": "0x00801021", "mnemonic": "ADDU"}, + {"address": "0xBFC37334", "raw": "0x27BDFFE0", "mnemonic": "ADDIU"}, + {"address": "0xBFC37338", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC3733C", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC37340", "raw": "0xAFBF001C", "mnemonic": "SW"}, + {"address": "0xBFC37344", "raw": "0xAFA40020", "mnemonic": "SW"}, + {"address": "0xBFC37348", "raw": "0x8DCF002C", "mnemonic": "LW"}, + {"address": "0xBFC3734C", "raw": "0x8FA40020", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC37368", + "pc": "0xBFC373A4", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37364", "raw": "0x27BD0020", "mnemonic": "ADDIU"}, + {"address": "0xBFC37368", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC3736C", "raw": "0x8DCE9250", "mnemonic": "LW"}, + {"address": "0xBFC37370", "raw": "0x27BDFFE0", "mnemonic": "ADDIU"}, + {"address": "0xBFC37374", "raw": "0xAFBF001C", "mnemonic": "SW"}, + {"address": "0xBFC37378", "raw": "0x11C00005", "mnemonic": "BEQ"}, + {"address": "0xBFC3737C", "raw": "0xAFA40020", "mnemonic": "SW"}, + {"address": "0xBFC37380", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC37384", "raw": "0x8FA50020", "mnemonic": "LW"}, + {"address": "0xBFC37388", "raw": "0x0C01488A", "mnemonic": "JAL"}, + {"address": "0xBFC3738C", "raw": "0x2484928C", "mnemonic": "ADDIU"}, + {"address": "0xBFC37390", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC37394", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC37398", "raw": "0x00002021", "mnemonic": "ADDU"}, + {"address": "0xBFC3739C", "raw": "0x8DF8003C", "mnemonic": "LW"}, + {"address": "0xBFC373A0", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC37368", + "pc": "0xBFC373C8", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37388", "raw": "0x0C01488A", "mnemonic": "JAL"}, + {"address": "0xBFC3738C", "raw": "0x2484928C", "mnemonic": "ADDIU"}, + {"address": "0xBFC37390", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC37394", "raw": "0x8DEF924C", "mnemonic": "LW"}, + {"address": "0xBFC37398", "raw": "0x00002021", "mnemonic": "ADDU"}, + {"address": "0xBFC3739C", "raw": "0x8DF8003C", "mnemonic": "LW"}, + {"address": "0xBFC373A0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC373A4", "raw": "0x0300F809", "mnemonic": "JALR"}, + {"address": "0xBFC373A8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC373AC", "raw": "0x8FB90020", "mnemonic": "LW"}, + {"address": "0xBFC373B0", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC373B4", "raw": "0x8D08924C", "mnemonic": "LW"}, + {"address": "0xBFC373B8", "raw": "0x8F250000", "mnemonic": "LW"}, + {"address": "0xBFC373BC", "raw": "0x8D090014", "mnemonic": "LW"}, + {"address": "0xBFC373C0", "raw": "0x00052E02", "mnemonic": "SRL"}, + {"address": "0xBFC373C4", "raw": "0x30A500FF", "mnemonic": "ANDI"} + ] + }, + { + "func_addr": "0xBFC373E0", + "pc": "0xBFC3741C", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC373DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC373E0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC373E4", "raw": "0x8DCE9250", "mnemonic": "LW"}, + {"address": "0xBFC373E8", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC373EC", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC373F0", "raw": "0x11C00005", "mnemonic": "BEQ"}, + {"address": "0xBFC373F4", "raw": "0x00802821", "mnemonic": "ADDU"}, + {"address": "0xBFC373F8", "raw": "0x0C0147F9", "mnemonic": "JAL"}, + {"address": "0xBFC373FC", "raw": "0x00A02021", "mnemonic": "ADDU"}, + {"address": "0xBFC37400", "raw": "0x10000009", "mnemonic": "BEQ"}, + {"address": "0xBFC37404", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC37408", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC3740C", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC37410", "raw": "0x00003021", "mnemonic": "ADDU"}, + {"address": "0xBFC37414", "raw": "0x8C4F0004", "mnemonic": "LW"}, + {"address": "0xBFC37418", "raw": "0x8C440018", "mnemonic": "LW"} + ] + }, + { + "func_addr": "0xBFC37434", + "pc": "0xBFC3748C", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3744C", "raw": "0xAFA30024", "mnemonic": "SW"}, + {"address": "0xBFC37450", "raw": "0x0C013EB1", "mnemonic": "JAL"}, + {"address": "0xBFC37454", "raw": "0x02002821", "mnemonic": "ADDU"}, + {"address": "0xBFC37458", "raw": "0x8E0E001C", "mnemonic": "LW"}, + {"address": "0xBFC3745C", "raw": "0x3C01FF00", "mnemonic": "LUI"}, + {"address": "0xBFC37460", "raw": "0x01C17824", "mnemonic": "AND"}, + {"address": "0xBFC37464", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC37468", "raw": "0x3C0100FF", "mnemonic": "LUI"}, + {"address": "0xBFC3746C", "raw": "0x8C42924C", "mnemonic": "LW"}, + {"address": "0xBFC37470", "raw": "0x3421FFFF", "mnemonic": "ORI"}, + {"address": "0xBFC37474", "raw": "0x8FA30024", "mnemonic": "LW"}, + {"address": "0xBFC37478", "raw": "0x01E1C025", "mnemonic": "OR"}, + {"address": "0xBFC3747C", "raw": "0xAE18001C", "mnemonic": "SW"}, + {"address": "0xBFC37480", "raw": "0x8C590004", "mnemonic": "LW"}, + {"address": "0xBFC37484", "raw": "0x8C440018", "mnemonic": "LW"}, + {"address": "0xBFC37488", "raw": "0x00003021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC374EC", + "pc": "0xBFC37568", + "register": 11, + "register_name": "$t3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37528", "raw": "0x31F80FFF", "mnemonic": "ANDI"}, + {"address": "0xBFC3752C", "raw": "0x0018CB00", "mnemonic": "SLL"}, + {"address": "0xBFC37530", "raw": "0x10000007", "mnemonic": "BEQ"}, + {"address": "0xBFC37534", "raw": "0x032B1825", "mnemonic": "OR"}, + {"address": "0xBFC37538", "raw": "0x854C0002", "mnemonic": "LH"}, + {"address": "0xBFC3753C", "raw": "0x854F0000", "mnemonic": "LH"}, + {"address": "0xBFC37540", "raw": "0x318D01FF", "mnemonic": "ANDI"}, + {"address": "0xBFC37544", "raw": "0x000D7280", "mnemonic": "SLL"}, + {"address": "0xBFC37548", "raw": "0x31F803FF", "mnemonic": "ANDI"}, + {"address": "0xBFC3754C", "raw": "0x01D81825", "mnemonic": "OR"}, + {"address": "0xBFC37550", "raw": "0x3C198008", "mnemonic": "LUI"}, + {"address": "0xBFC37554", "raw": "0x8F39924C", "mnemonic": "LW"}, + {"address": "0xBFC37558", "raw": "0xAFA5002C", "mnemonic": "SW"}, + {"address": "0xBFC3755C", "raw": "0xAFAA0030", "mnemonic": "SW"}, + {"address": "0xBFC37560", "raw": "0x8F2B0010", "mnemonic": "LW"}, + {"address": "0xBFC37564", "raw": "0x3C010500", "mnemonic": "LUI"} + ] + }, + { + "func_addr": "0xBFC374EC", + "pc": "0xBFC376C0", + "register": 11, + "register_name": "$t3", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37680", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC37684", "raw": "0x24030137", "mnemonic": "ADDIU"}, + {"address": "0xBFC37688", "raw": "0x01001821", "mnemonic": "ADDU"}, + {"address": "0xBFC3768C", "raw": "0x00604021", "mnemonic": "ADDU"}, + {"address": "0xBFC37690", "raw": "0x3C198008", "mnemonic": "LUI"}, + {"address": "0xBFC37694", "raw": "0x8F39924C", "mnemonic": "LW"}, + {"address": "0xBFC37698", "raw": "0x312D0FFF", "mnemonic": "ANDI"}, + {"address": "0xBFC3769C", "raw": "0xAFA5002C", "mnemonic": "SW"}, + {"address": "0xBFC376A0", "raw": "0xAFA60020", "mnemonic": "SW"}, + {"address": "0xBFC376A4", "raw": "0xAFA8001C", "mnemonic": "SW"}, + {"address": "0xBFC376A8", "raw": "0xAFAA0030", "mnemonic": "SW"}, + {"address": "0xBFC376AC", "raw": "0x8F2B0010", "mnemonic": "LW"}, + {"address": "0xBFC376B0", "raw": "0x000D7B00", "mnemonic": "SLL"}, + {"address": "0xBFC376B4", "raw": "0x3C010600", "mnemonic": "LUI"}, + {"address": "0xBFC376B8", "raw": "0x01E17025", "mnemonic": "OR"}, + {"address": "0xBFC376BC", "raw": "0x30F80FFF", "mnemonic": "ANDI"} + ] + }, + { + "func_addr": "0xBFC374EC", + "pc": "0xBFC376F8", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC376B8", "raw": "0x01E17025", "mnemonic": "OR"}, + {"address": "0xBFC376BC", "raw": "0x30F80FFF", "mnemonic": "ANDI"}, + {"address": "0xBFC376C0", "raw": "0x0160F809", "mnemonic": "JALR"}, + {"address": "0xBFC376C4", "raw": "0x01D82025", "mnemonic": "OR"}, + {"address": "0xBFC376C8", "raw": "0x8FA8001C", "mnemonic": "LW"}, + {"address": "0xBFC376CC", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC376D0", "raw": "0x8F18924C", "mnemonic": "LW"}, + {"address": "0xBFC376D4", "raw": "0x8FA60020", "mnemonic": "LW"}, + {"address": "0xBFC376D8", "raw": "0x310C03FF", "mnemonic": "ANDI"}, + {"address": "0xBFC376DC", "raw": "0x8F190010", "mnemonic": "LW"}, + {"address": "0xBFC376E0", "raw": "0x000C6A80", "mnemonic": "SLL"}, + {"address": "0xBFC376E4", "raw": "0x3C010700", "mnemonic": "LUI"}, + {"address": "0xBFC376E8", "raw": "0x8FA5002C", "mnemonic": "LW"}, + {"address": "0xBFC376EC", "raw": "0x8FAA0030", "mnemonic": "LW"}, + {"address": "0xBFC376F0", "raw": "0x01A17825", "mnemonic": "OR"}, + {"address": "0xBFC376F4", "raw": "0x30CE03FF", "mnemonic": "ANDI"} + ] + }, + { + "func_addr": "0xBFC374EC", + "pc": "0xBFC37804", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC377C4", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC377C8", "raw": "0x24030120", "mnemonic": "ADDIU"}, + {"address": "0xBFC377CC", "raw": "0x24030100", "mnemonic": "ADDIU"}, + {"address": "0xBFC377D0", "raw": "0x854F0006", "mnemonic": "LH"}, + {"address": "0xBFC377D4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC377D8", "raw": "0x006F082A", "mnemonic": "SLT"}, + {"address": "0xBFC377DC", "raw": "0x14200003", "mnemonic": "BNE"}, + {"address": "0xBFC377E0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC377E4", "raw": "0x10000002", "mnemonic": "BEQ"}, + {"address": "0xBFC377E8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC377EC", "raw": "0x34A50024", "mnemonic": "ORI"}, + {"address": "0xBFC377F0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC377F4", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC377F8", "raw": "0xAFAA0030", "mnemonic": "SW"}, + {"address": "0xBFC377FC", "raw": "0x8DD80010", "mnemonic": "LW"}, + {"address": "0xBFC37800", "raw": "0x00A02021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC37868", + "pc": "0xBFC37880", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC37840", "raw": "0xAFBF001C", "mnemonic": "SW"}, + {"address": "0xBFC37844", "raw": "0x8FA40020", "mnemonic": "LW"}, + {"address": "0xBFC37848", "raw": "0x3C05800E", "mnemonic": "LUI"}, + {"address": "0xBFC3784C", "raw": "0x24A5DE80", "mnemonic": "ADDIU"}, + {"address": "0xBFC37850", "raw": "0x0C0144F3", "mnemonic": "JAL"}, + {"address": "0xBFC37854", "raw": "0x24060014", "mnemonic": "ADDIU"}, + {"address": "0xBFC37858", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC3785C", "raw": "0x8FA20020", "mnemonic": "LW"}, + {"address": "0xBFC37860", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC37864", "raw": "0x27BD0020", "mnemonic": "ADDIU"}, + {"address": "0xBFC37868", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC3786C", "raw": "0x8DCE924C", "mnemonic": "LW"}, + {"address": "0xBFC37870", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC37874", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC37878", "raw": "0x8DCF0038", "mnemonic": "LW"}, + {"address": "0xBFC3787C", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC38DAC", + "pc": "0xBFC38F5C", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC38F1C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC38F20", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC38F24", "raw": "0x8D08929C", "mnemonic": "LW"}, + {"address": "0xBFC38F28", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC38F2C", "raw": "0x25090001", "mnemonic": "ADDIU"}, + {"address": "0xBFC38F30", "raw": "0x312A003F", "mnemonic": "ANDI"}, + {"address": "0xBFC38F34", "raw": "0x1000FFB1", "mnemonic": "BEQ"}, + {"address": "0xBFC38F38", "raw": "0xAC2A929C", "mnemonic": "SW"}, + {"address": "0xBFC38F3C", "raw": "0x3C018008", "mnemonic": "LUI"}, + {"address": "0xBFC38F40", "raw": "0x16000008", "mnemonic": "BNE"}, + {"address": "0xBFC38F44", "raw": "0xAC2092C4", "mnemonic": "SW"}, + {"address": "0xBFC38F48", "raw": "0x3C028008", "mnemonic": "LUI"}, + {"address": "0xBFC38F4C", "raw": "0x8C42925C", "mnemonic": "LW"}, + {"address": "0xBFC38F50", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC38F54", "raw": "0x10400003", "mnemonic": "BEQ"}, + {"address": "0xBFC38F58", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC38DAC", + "pc": "0xBFC38F18", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC38ED8", "raw": "0x018B6023", "mnemonic": "SUBU"}, + {"address": "0xBFC38EDC", "raw": "0x000C6080", "mnemonic": "SLL"}, + {"address": "0xBFC38EE0", "raw": "0x018B6023", "mnemonic": "SUBU"}, + {"address": "0xBFC38EE4", "raw": "0x000C6080", "mnemonic": "SLL"}, + {"address": "0xBFC38EE8", "raw": "0x022C6821", "mnemonic": "ADDU"}, + {"address": "0xBFC38EEC", "raw": "0x8DA50008", "mnemonic": "LW"}, + {"address": "0xBFC38EF0", "raw": "0x8DCE929C", "mnemonic": "LW"}, + {"address": "0xBFC38EF4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC38EF8", "raw": "0x000E7880", "mnemonic": "SLL"}, + {"address": "0xBFC38EFC", "raw": "0x01EE7823", "mnemonic": "SUBU"}, + {"address": "0xBFC38F00", "raw": "0x000F7880", "mnemonic": "SLL"}, + {"address": "0xBFC38F04", "raw": "0x01EE7823", "mnemonic": "SUBU"}, + {"address": "0xBFC38F08", "raw": "0x000F7880", "mnemonic": "SLL"}, + {"address": "0xBFC38F0C", "raw": "0x022FC021", "mnemonic": "ADDU"}, + {"address": "0xBFC38F10", "raw": "0x8F190000", "mnemonic": "LW"}, + {"address": "0xBFC38F14", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC396E8", + "pc": "0xBFC39738", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC396F8", "raw": "0xA7A30020", "mnemonic": "SH"}, + {"address": "0xBFC396FC", "raw": "0x97A30020", "mnemonic": "LHU"}, + {"address": "0xBFC39700", "raw": "0x10400011", "mnemonic": "BEQ"}, + {"address": "0xBFC39704", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC39708", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC3970C", "raw": "0x8F1892F8", "mnemonic": "LW"}, + {"address": "0xBFC39710", "raw": "0x000370C0", "mnemonic": "SLL"}, + {"address": "0xBFC39714", "raw": "0x31CF0300", "mnemonic": "ANDI"}, + {"address": "0xBFC39718", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3971C", "raw": "0x00032A42", "mnemonic": "SRL"}, + {"address": "0xBFC39720", "raw": "0x000331C2", "mnemonic": "SRL"}, + {"address": "0xBFC39724", "raw": "0x00033980", "mnemonic": "SLL"}, + {"address": "0xBFC39728", "raw": "0x30E707C0", "mnemonic": "ANDI"}, + {"address": "0xBFC3972C", "raw": "0x30C60003", "mnemonic": "ANDI"}, + {"address": "0xBFC39730", "raw": "0x30A50003", "mnemonic": "ANDI"}, + {"address": "0xBFC39734", "raw": "0x2484935C", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC396E8", + "pc": "0xBFC39778", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39738", "raw": "0x0300F809", "mnemonic": "JALR"}, + {"address": "0xBFC3973C", "raw": "0xAFAF0010", "mnemonic": "SW"}, + {"address": "0xBFC39740", "raw": "0x10000010", "mnemonic": "BEQ"}, + {"address": "0xBFC39744", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC39748", "raw": "0x3C098008", "mnemonic": "LUI"}, + {"address": "0xBFC3974C", "raw": "0x8D2992F8", "mnemonic": "LW"}, + {"address": "0xBFC39750", "raw": "0x0003C900", "mnemonic": "SLL"}, + {"address": "0xBFC39754", "raw": "0x33280100", "mnemonic": "ANDI"}, + {"address": "0xBFC39758", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3975C", "raw": "0x000329C2", "mnemonic": "SRL"}, + {"address": "0xBFC39760", "raw": "0x00033142", "mnemonic": "SRL"}, + {"address": "0xBFC39764", "raw": "0x00033980", "mnemonic": "SLL"}, + {"address": "0xBFC39768", "raw": "0x30E707C0", "mnemonic": "ANDI"}, + {"address": "0xBFC3976C", "raw": "0x30C60003", "mnemonic": "ANDI"}, + {"address": "0xBFC39770", "raw": "0x30A50003", "mnemonic": "ANDI"}, + {"address": "0xBFC39774", "raw": "0x24849374", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39D68", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39D28", "raw": "0xACA00000", "mnemonic": "SW"}, + {"address": "0xBFC39D2C", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC39D30", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC39D34", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC39D38", "raw": "0x27BDFFD8", "mnemonic": "ADDIU"}, + {"address": "0xBFC39D3C", "raw": "0xAFB00020", "mnemonic": "SW"}, + {"address": "0xBFC39D40", "raw": "0x00808021", "mnemonic": "ADDU"}, + {"address": "0xBFC39D44", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC39D48", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC39D4C", "raw": "0x8DEF92F8", "mnemonic": "LW"}, + {"address": "0xBFC39D50", "raw": "0x860E0006", "mnemonic": "LH"}, + {"address": "0xBFC39D54", "raw": "0x86070004", "mnemonic": "LH"}, + {"address": "0xBFC39D58", "raw": "0x86060002", "mnemonic": "LH"}, + {"address": "0xBFC39D5C", "raw": "0x86050000", "mnemonic": "LH"}, + {"address": "0xBFC39D60", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D64", "raw": "0x2484939C", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39D84", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39D44", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC39D48", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC39D4C", "raw": "0x8DEF92F8", "mnemonic": "LW"}, + {"address": "0xBFC39D50", "raw": "0x860E0006", "mnemonic": "LH"}, + {"address": "0xBFC39D54", "raw": "0x86070004", "mnemonic": "LH"}, + {"address": "0xBFC39D58", "raw": "0x86060002", "mnemonic": "LH"}, + {"address": "0xBFC39D5C", "raw": "0x86050000", "mnemonic": "LH"}, + {"address": "0xBFC39D60", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D64", "raw": "0x2484939C", "mnemonic": "ADDIU"}, + {"address": "0xBFC39D68", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC39D6C", "raw": "0xAFAE0010", "mnemonic": "SW"}, + {"address": "0xBFC39D70", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC39D74", "raw": "0x8F1892F8", "mnemonic": "LW"}, + {"address": "0xBFC39D78", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D7C", "raw": "0x86050008", "mnemonic": "LH"}, + {"address": "0xBFC39D80", "raw": "0x8606000A", "mnemonic": "LH"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39DAC", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39D6C", "raw": "0xAFAE0010", "mnemonic": "SW"}, + {"address": "0xBFC39D70", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC39D74", "raw": "0x8F1892F8", "mnemonic": "LW"}, + {"address": "0xBFC39D78", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D7C", "raw": "0x86050008", "mnemonic": "LH"}, + {"address": "0xBFC39D80", "raw": "0x8606000A", "mnemonic": "LH"}, + {"address": "0xBFC39D84", "raw": "0x0300F809", "mnemonic": "JALR"}, + {"address": "0xBFC39D88", "raw": "0x248493B4", "mnemonic": "ADDIU"}, + {"address": "0xBFC39D8C", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC39D90", "raw": "0x8D0892F8", "mnemonic": "LW"}, + {"address": "0xBFC39D94", "raw": "0x86190012", "mnemonic": "LH"}, + {"address": "0xBFC39D98", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D9C", "raw": "0x8605000C", "mnemonic": "LH"}, + {"address": "0xBFC39DA0", "raw": "0x8606000E", "mnemonic": "LH"}, + {"address": "0xBFC39DA4", "raw": "0x86070010", "mnemonic": "LH"}, + {"address": "0xBFC39DA8", "raw": "0x248493C4", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39DC4", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39D84", "raw": "0x0300F809", "mnemonic": "JALR"}, + {"address": "0xBFC39D88", "raw": "0x248493B4", "mnemonic": "ADDIU"}, + {"address": "0xBFC39D8C", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC39D90", "raw": "0x8D0892F8", "mnemonic": "LW"}, + {"address": "0xBFC39D94", "raw": "0x86190012", "mnemonic": "LH"}, + {"address": "0xBFC39D98", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39D9C", "raw": "0x8605000C", "mnemonic": "LH"}, + {"address": "0xBFC39DA0", "raw": "0x8606000E", "mnemonic": "LH"}, + {"address": "0xBFC39DA4", "raw": "0x86070010", "mnemonic": "LH"}, + {"address": "0xBFC39DA8", "raw": "0x248493C4", "mnemonic": "ADDIU"}, + {"address": "0xBFC39DAC", "raw": "0x0100F809", "mnemonic": "JALR"}, + {"address": "0xBFC39DB0", "raw": "0xAFB90010", "mnemonic": "SW"}, + {"address": "0xBFC39DB4", "raw": "0x3C098008", "mnemonic": "LUI"}, + {"address": "0xBFC39DB8", "raw": "0x8D2992F8", "mnemonic": "LW"}, + {"address": "0xBFC39DBC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39DC0", "raw": "0x92050016", "mnemonic": "LBU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39DDC", + "register": 10, + "register_name": "$t2", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39D9C", "raw": "0x8605000C", "mnemonic": "LH"}, + {"address": "0xBFC39DA0", "raw": "0x8606000E", "mnemonic": "LH"}, + {"address": "0xBFC39DA4", "raw": "0x86070010", "mnemonic": "LH"}, + {"address": "0xBFC39DA8", "raw": "0x248493C4", "mnemonic": "ADDIU"}, + {"address": "0xBFC39DAC", "raw": "0x0100F809", "mnemonic": "JALR"}, + {"address": "0xBFC39DB0", "raw": "0xAFB90010", "mnemonic": "SW"}, + {"address": "0xBFC39DB4", "raw": "0x3C098008", "mnemonic": "LUI"}, + {"address": "0xBFC39DB8", "raw": "0x8D2992F8", "mnemonic": "LW"}, + {"address": "0xBFC39DBC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39DC0", "raw": "0x92050016", "mnemonic": "LBU"}, + {"address": "0xBFC39DC4", "raw": "0x0120F809", "mnemonic": "JALR"}, + {"address": "0xBFC39DC8", "raw": "0x248493DC", "mnemonic": "ADDIU"}, + {"address": "0xBFC39DCC", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC39DD0", "raw": "0x8D4A92F8", "mnemonic": "LW"}, + {"address": "0xBFC39DD4", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39DD8", "raw": "0x92050017", "mnemonic": "LBU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39E28", + "register": 13, + "register_name": "$t5", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39DE8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC39DEC", "raw": "0x10400012", "mnemonic": "BEQ"}, + {"address": "0xBFC39DF0", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC39DF4", "raw": "0x96020014", "mnemonic": "LHU"}, + {"address": "0xBFC39DF8", "raw": "0x3C0D8008", "mnemonic": "LUI"}, + {"address": "0xBFC39DFC", "raw": "0x8DAD92F8", "mnemonic": "LW"}, + {"address": "0xBFC39E00", "raw": "0x000258C0", "mnemonic": "SLL"}, + {"address": "0xBFC39E04", "raw": "0x316C0300", "mnemonic": "ANDI"}, + {"address": "0xBFC39E08", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39E0C", "raw": "0x00022A42", "mnemonic": "SRL"}, + {"address": "0xBFC39E10", "raw": "0x000231C2", "mnemonic": "SRL"}, + {"address": "0xBFC39E14", "raw": "0x00023980", "mnemonic": "SLL"}, + {"address": "0xBFC39E18", "raw": "0x30E707C0", "mnemonic": "ANDI"}, + {"address": "0xBFC39E1C", "raw": "0x30C60003", "mnemonic": "ANDI"}, + {"address": "0xBFC39E20", "raw": "0x30A50003", "mnemonic": "ANDI"}, + {"address": "0xBFC39E24", "raw": "0x248493F4", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39D38", + "pc": "0xBFC39E6C", + "register": 24, + "register_name": "$t8", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39E2C", "raw": "0xAFAC0010", "mnemonic": "SW"}, + {"address": "0xBFC39E30", "raw": "0x10000011", "mnemonic": "BEQ"}, + {"address": "0xBFC39E34", "raw": "0x8FBF0024", "mnemonic": "LW"}, + {"address": "0xBFC39E38", "raw": "0x96020014", "mnemonic": "LHU"}, + {"address": "0xBFC39E3C", "raw": "0x3C188008", "mnemonic": "LUI"}, + {"address": "0xBFC39E40", "raw": "0x8F1892F8", "mnemonic": "LW"}, + {"address": "0xBFC39E44", "raw": "0x00027100", "mnemonic": "SLL"}, + {"address": "0xBFC39E48", "raw": "0x31CF0100", "mnemonic": "ANDI"}, + {"address": "0xBFC39E4C", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39E50", "raw": "0x000229C2", "mnemonic": "SRL"}, + {"address": "0xBFC39E54", "raw": "0x00023142", "mnemonic": "SRL"}, + {"address": "0xBFC39E58", "raw": "0x00023980", "mnemonic": "SLL"}, + {"address": "0xBFC39E5C", "raw": "0x30E707C0", "mnemonic": "ANDI"}, + {"address": "0xBFC39E60", "raw": "0x30C60003", "mnemonic": "ANDI"}, + {"address": "0xBFC39E64", "raw": "0x30A50003", "mnemonic": "ANDI"}, + {"address": "0xBFC39E68", "raw": "0x24849410", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39E84", + "pc": "0xBFC39EB4", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39E74", "raw": "0x8FBF0024", "mnemonic": "LW"}, + {"address": "0xBFC39E78", "raw": "0x8FB00020", "mnemonic": "LW"}, + {"address": "0xBFC39E7C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC39E80", "raw": "0x27BD0028", "mnemonic": "ADDIU"}, + {"address": "0xBFC39E84", "raw": "0x27BDFFD8", "mnemonic": "ADDIU"}, + {"address": "0xBFC39E88", "raw": "0xAFB00020", "mnemonic": "SW"}, + {"address": "0xBFC39E8C", "raw": "0x00808021", "mnemonic": "ADDU"}, + {"address": "0xBFC39E90", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC39E94", "raw": "0x3C0F8008", "mnemonic": "LUI"}, + {"address": "0xBFC39E98", "raw": "0x8DEF92F8", "mnemonic": "LW"}, + {"address": "0xBFC39E9C", "raw": "0x860E0006", "mnemonic": "LH"}, + {"address": "0xBFC39EA0", "raw": "0x86070004", "mnemonic": "LH"}, + {"address": "0xBFC39EA4", "raw": "0x86060002", "mnemonic": "LH"}, + {"address": "0xBFC39EA8", "raw": "0x86050000", "mnemonic": "LH"}, + {"address": "0xBFC39EAC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39EB0", "raw": "0x2484942C", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39E84", + "pc": "0xBFC39EDC", + "register": 25, + "register_name": "$t9", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39E9C", "raw": "0x860E0006", "mnemonic": "LH"}, + {"address": "0xBFC39EA0", "raw": "0x86070004", "mnemonic": "LH"}, + {"address": "0xBFC39EA4", "raw": "0x86060002", "mnemonic": "LH"}, + {"address": "0xBFC39EA8", "raw": "0x86050000", "mnemonic": "LH"}, + {"address": "0xBFC39EAC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39EB0", "raw": "0x2484942C", "mnemonic": "ADDIU"}, + {"address": "0xBFC39EB4", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC39EB8", "raw": "0xAFAE0010", "mnemonic": "SW"}, + {"address": "0xBFC39EBC", "raw": "0x3C198008", "mnemonic": "LUI"}, + {"address": "0xBFC39EC0", "raw": "0x8F3992F8", "mnemonic": "LW"}, + {"address": "0xBFC39EC4", "raw": "0x8618000E", "mnemonic": "LH"}, + {"address": "0xBFC39EC8", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39ECC", "raw": "0x86050008", "mnemonic": "LH"}, + {"address": "0xBFC39ED0", "raw": "0x8606000A", "mnemonic": "LH"}, + {"address": "0xBFC39ED4", "raw": "0x8607000C", "mnemonic": "LH"}, + {"address": "0xBFC39ED8", "raw": "0x24849448", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC39E84", + "pc": "0xBFC39EF4", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39EB4", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC39EB8", "raw": "0xAFAE0010", "mnemonic": "SW"}, + {"address": "0xBFC39EBC", "raw": "0x3C198008", "mnemonic": "LUI"}, + {"address": "0xBFC39EC0", "raw": "0x8F3992F8", "mnemonic": "LW"}, + {"address": "0xBFC39EC4", "raw": "0x8618000E", "mnemonic": "LH"}, + {"address": "0xBFC39EC8", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39ECC", "raw": "0x86050008", "mnemonic": "LH"}, + {"address": "0xBFC39ED0", "raw": "0x8606000A", "mnemonic": "LH"}, + {"address": "0xBFC39ED4", "raw": "0x8607000C", "mnemonic": "LH"}, + {"address": "0xBFC39ED8", "raw": "0x24849448", "mnemonic": "ADDIU"}, + {"address": "0xBFC39EDC", "raw": "0x0320F809", "mnemonic": "JALR"}, + {"address": "0xBFC39EE0", "raw": "0xAFB80010", "mnemonic": "SW"}, + {"address": "0xBFC39EE4", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC39EE8", "raw": "0x8D0892F8", "mnemonic": "LW"}, + {"address": "0xBFC39EEC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39EF0", "raw": "0x92050010", "mnemonic": "LBU"} + ] + }, + { + "func_addr": "0xBFC39E84", + "pc": "0xBFC39F0C", + "register": 9, + "register_name": "$t1", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC39ECC", "raw": "0x86050008", "mnemonic": "LH"}, + {"address": "0xBFC39ED0", "raw": "0x8606000A", "mnemonic": "LH"}, + {"address": "0xBFC39ED4", "raw": "0x8607000C", "mnemonic": "LH"}, + {"address": "0xBFC39ED8", "raw": "0x24849448", "mnemonic": "ADDIU"}, + {"address": "0xBFC39EDC", "raw": "0x0320F809", "mnemonic": "JALR"}, + {"address": "0xBFC39EE0", "raw": "0xAFB80010", "mnemonic": "SW"}, + {"address": "0xBFC39EE4", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC39EE8", "raw": "0x8D0892F8", "mnemonic": "LW"}, + {"address": "0xBFC39EEC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39EF0", "raw": "0x92050010", "mnemonic": "LBU"}, + {"address": "0xBFC39EF4", "raw": "0x0100F809", "mnemonic": "JALR"}, + {"address": "0xBFC39EF8", "raw": "0x24849464", "mnemonic": "ADDIU"}, + {"address": "0xBFC39EFC", "raw": "0x3C098008", "mnemonic": "LUI"}, + {"address": "0xBFC39F00", "raw": "0x8D2992F8", "mnemonic": "LW"}, + {"address": "0xBFC39F04", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC39F08", "raw": "0x92050011", "mnemonic": "LBU"} + ] + }, + { + "func_addr": "0xBFC3A094", + "pc": "0xBFC3A0C0", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3A080", "raw": "0x8FBF001C", "mnemonic": "LW"}, + {"address": "0xBFC3A084", "raw": "0x8FB00014", "mnemonic": "LW"}, + {"address": "0xBFC3A088", "raw": "0x8FB20018", "mnemonic": "LW"}, + {"address": "0xBFC3A08C", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC3A090", "raw": "0x27BD0030", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A094", "raw": "0x27BDFFB0", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A098", "raw": "0xAFB00018", "mnemonic": "SW"}, + {"address": "0xBFC3A09C", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC3A0A0", "raw": "0x8DCE92F8", "mnemonic": "LW"}, + {"address": "0xBFC3A0A4", "raw": "0x00808021", "mnemonic": "ADDU"}, + {"address": "0xBFC3A0A8", "raw": "0xAFBF0024", "mnemonic": "SW"}, + {"address": "0xBFC3A0AC", "raw": "0xAFB1001C", "mnemonic": "SW"}, + {"address": "0xBFC3A0B0", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3A0B4", "raw": "0xAFB60020", "mnemonic": "SW"}, + {"address": "0xBFC3A0B8", "raw": "0x2484958C", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A0BC", "raw": "0x24110001", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC3A094", + "pc": "0xBFC3A208", + "register": 8, + "register_name": "$t0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3A1C8", "raw": "0x8FB20034", "mnemonic": "LW"}, + {"address": "0xBFC3A1CC", "raw": "0x8FB30030", "mnemonic": "LW"}, + {"address": "0xBFC3A1D0", "raw": "0x8FB4002C", "mnemonic": "LW"}, + {"address": "0xBFC3A1D4", "raw": "0x8FB50028", "mnemonic": "LW"}, + {"address": "0xBFC3A1D8", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A1DC", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3A1E0", "raw": "0x248495B4", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A1E4", "raw": "0x0C01488A", "mnemonic": "JAL"}, + {"address": "0xBFC3A1E8", "raw": "0x02002821", "mnemonic": "ADDU"}, + {"address": "0xBFC3A1EC", "raw": "0x92040007", "mnemonic": "LBU"}, + {"address": "0xBFC3A1F0", "raw": "0x0C0147CC", "mnemonic": "JAL"}, + {"address": "0xBFC3A1F4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A1F8", "raw": "0x3C088008", "mnemonic": "LUI"}, + {"address": "0xBFC3A1FC", "raw": "0x8D0892F8", "mnemonic": "LW"}, + {"address": "0xBFC3A200", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3A204", "raw": "0x248495C0", "mnemonic": "ADDIU"} + ] + }, + { + "func_addr": "0xBFC3A094", + "pc": "0xBFC3A190", + "register": 14, + "register_name": "$t6", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3A150", "raw": "0x8E0B0000", "mnemonic": "LW"}, + {"address": "0xBFC3A154", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A158", "raw": "0x000B6200", "mnemonic": "SLL"}, + {"address": "0xBFC3A15C", "raw": "0x000C6A02", "mnemonic": "SRL"}, + {"address": "0xBFC3A160", "raw": "0x01B21025", "mnemonic": "OR"}, + {"address": "0xBFC3A164", "raw": "0x10000011", "mnemonic": "BEQ"}, + {"address": "0xBFC3A168", "raw": "0x26310001", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A16C", "raw": "0x02802021", "mnemonic": "ADDU"}, + {"address": "0xBFC3A170", "raw": "0x0C01488A", "mnemonic": "JAL"}, + {"address": "0xBFC3A174", "raw": "0x02002821", "mnemonic": "ADDU"}, + {"address": "0xBFC3A178", "raw": "0x92040007", "mnemonic": "LBU"}, + {"address": "0xBFC3A17C", "raw": "0x0C0147CC", "mnemonic": "JAL"}, + {"address": "0xBFC3A180", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A184", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC3A188", "raw": "0x8DCE92F8", "mnemonic": "LW"}, + {"address": "0xBFC3A18C", "raw": "0x02A02021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC3A094", + "pc": "0xBFC3A148", + "register": 10, + "register_name": "$t2", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3A108", "raw": "0x269495A4", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A10C", "raw": "0x26B595B0", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A110", "raw": "0x00037E02", "mnemonic": "SRL"}, + {"address": "0xBFC3A114", "raw": "0x31F800FF", "mnemonic": "ANDI"}, + {"address": "0xBFC3A118", "raw": "0x17000014", "mnemonic": "BNE"}, + {"address": "0xBFC3A11C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A120", "raw": "0x00921025", "mnemonic": "OR"}, + {"address": "0xBFC3A124", "raw": "0x8C590000", "mnemonic": "LW"}, + {"address": "0xBFC3A128", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A12C", "raw": "0x00194602", "mnemonic": "SRL"}, + {"address": "0xBFC3A130", "raw": "0x310900FF", "mnemonic": "ANDI"}, + {"address": "0xBFC3A134", "raw": "0x1120000B", "mnemonic": "BEQ"}, + {"address": "0xBFC3A138", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC3A13C", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC3A140", "raw": "0x8D4A92F8", "mnemonic": "LW"}, + {"address": "0xBFC3A144", "raw": "0x02602021", "mnemonic": "ADDU"} + ] + }, + { + "func_addr": "0xBFC3A228", + "pc": "0xBFC3A29C", + "register": 10, + "register_name": "$t2", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC3A25C", "raw": "0x31F800FF", "mnemonic": "ANDI"}, + {"address": "0xBFC3A260", "raw": "0x10580013", "mnemonic": "BEQ"}, + {"address": "0xBFC3A264", "raw": "0x00001021", "mnemonic": "ADDU"}, + {"address": "0xBFC3A268", "raw": "0x90C40007", "mnemonic": "LBU"}, + {"address": "0xBFC3A26C", "raw": "0x0C0147CC", "mnemonic": "JAL"}, + {"address": "0xBFC3A270", "raw": "0xAFA6002C", "mnemonic": "SW"}, + {"address": "0xBFC3A274", "raw": "0x8FA6002C", "mnemonic": "LW"}, + {"address": "0xBFC3A278", "raw": "0x3C0A8008", "mnemonic": "LUI"}, + {"address": "0xBFC3A27C", "raw": "0x8CD90000", "mnemonic": "LW"}, + {"address": "0xBFC3A280", "raw": "0x8D4A92F8", "mnemonic": "LW"}, + {"address": "0xBFC3A284", "raw": "0x00194602", "mnemonic": "SRL"}, + {"address": "0xBFC3A288", "raw": "0x310900FF", "mnemonic": "ANDI"}, + {"address": "0xBFC3A28C", "raw": "0x3C048008", "mnemonic": "LUI"}, + {"address": "0xBFC3A290", "raw": "0x8FA50028", "mnemonic": "LW"}, + {"address": "0xBFC3A294", "raw": "0x248495C8", "mnemonic": "ADDIU"}, + {"address": "0xBFC3A298", "raw": "0xAFA90010", "mnemonic": "SW"} + ] + }, + { + "func_addr": "0xBFC40484", + "pc": "0xBFC4052C", + "register": 12, + "register_name": "$t4", + "kind": "jr_non_ra", + "classification": "jump_table", + "context_window": [ + {"address": "0xBFC404EC", "raw": "0x8D4A9C34", "mnemonic": "LW"}, + {"address": "0xBFC404F0", "raw": "0x240BFFFB", "mnemonic": "ADDIU"}, + {"address": "0xBFC404F4", "raw": "0x91420000", "mnemonic": "LBU"}, + {"address": "0xBFC404F8", "raw": "0xAC8B0000", "mnemonic": "SW"}, + {"address": "0xBFC404FC", "raw": "0x30420007", "mnemonic": "ANDI"}, + {"address": "0xBFC40500", "raw": "0x304200FF", "mnemonic": "ANDI"}, + {"address": "0xBFC40504", "raw": "0x00401821", "mnemonic": "ADDU"}, + {"address": "0xBFC40508", "raw": "0x246CFFFF", "mnemonic": "ADDIU"}, + {"address": "0xBFC4050C", "raw": "0x2D810005", "mnemonic": "SLTIU"}, + {"address": "0xBFC40510", "raw": "0x10200026", "mnemonic": "BEQ"}, + {"address": "0xBFC40514", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC40518", "raw": "0x000C6080", "mnemonic": "SLL"}, + {"address": "0xBFC4051C", "raw": "0x3C018006", "mnemonic": "LUI"}, + {"address": "0xBFC40520", "raw": "0x002C0821", "mnemonic": "ADDU"}, + {"address": "0xBFC40524", "raw": "0x8C2CAE00", "mnemonic": "LW"}, + {"address": "0xBFC40528", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC42060", + "pc": "0xBFC42078", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC42038", "raw": "0x00401027", "mnemonic": "NOR"}, + {"address": "0xBFC4203C", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC42040", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42044", "raw": "0x0C016AF4", "mnemonic": "JAL"}, + {"address": "0xBFC42048", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC4204C", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC42050", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC42054", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC42058", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC4205C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42060", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC42064", "raw": "0x8DCE9D44", "mnemonic": "LW"}, + {"address": "0xBFC42068", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC4206C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42070", "raw": "0x8DCF000C", "mnemonic": "LW"}, + {"address": "0xBFC42074", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC42090", + "pc": "0xBFC420A8", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC42068", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC4206C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42070", "raw": "0x8DCF000C", "mnemonic": "LW"}, + {"address": "0xBFC42074", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42078", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC4207C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42080", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC42084", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC42088", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC4208C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42090", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC42094", "raw": "0x8DCE9D44", "mnemonic": "LW"}, + {"address": "0xBFC42098", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC4209C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC420A0", "raw": "0x8DCF0008", "mnemonic": "LW"}, + {"address": "0xBFC420A4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC420C0", + "pc": "0xBFC420D8", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC42098", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC4209C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC420A0", "raw": "0x8DCF0008", "mnemonic": "LW"}, + {"address": "0xBFC420A4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420A8", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC420AC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420B0", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC420B4", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC420B8", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC420BC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420C0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC420C4", "raw": "0x8DCE9D44", "mnemonic": "LW"}, + {"address": "0xBFC420C8", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC420CC", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC420D0", "raw": "0x8DCF0004", "mnemonic": "LW"}, + {"address": "0xBFC420D4", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC420F0", + "pc": "0xBFC42108", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC420C8", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC420CC", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC420D0", "raw": "0x8DCF0004", "mnemonic": "LW"}, + {"address": "0xBFC420D4", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420D8", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC420DC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420E0", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC420E4", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC420E8", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC420EC", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC420F0", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC420F4", "raw": "0x8DCE9D44", "mnemonic": "LW"}, + {"address": "0xBFC420F8", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC420FC", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42100", "raw": "0x8DCF0014", "mnemonic": "LW"}, + {"address": "0xBFC42104", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC42120", + "pc": "0xBFC42138", + "register": 15, + "register_name": "$t7", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC420F8", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC420FC", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42100", "raw": "0x8DCF0014", "mnemonic": "LW"}, + {"address": "0xBFC42104", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42108", "raw": "0x01E0F809", "mnemonic": "JALR"}, + {"address": "0xBFC4210C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42110", "raw": "0x8FBF0014", "mnemonic": "LW"}, + {"address": "0xBFC42114", "raw": "0x27BD0018", "mnemonic": "ADDIU"}, + {"address": "0xBFC42118", "raw": "0x03E00008", "mnemonic": "JR"}, + {"address": "0xBFC4211C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42120", "raw": "0x3C0E8008", "mnemonic": "LUI"}, + {"address": "0xBFC42124", "raw": "0x8DCE9D44", "mnemonic": "LW"}, + {"address": "0xBFC42128", "raw": "0x27BDFFE8", "mnemonic": "ADDIU"}, + {"address": "0xBFC4212C", "raw": "0xAFBF0014", "mnemonic": "SW"}, + {"address": "0xBFC42130", "raw": "0x8DCF0010", "mnemonic": "LW"}, + {"address": "0xBFC42134", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC42160", + "pc": "0xBFC422B0", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC42270", "raw": "0x8D6BFF0C", "mnemonic": "LW"}, + {"address": "0xBFC42274", "raw": "0x946D0000", "mnemonic": "LHU"}, + {"address": "0xBFC42278", "raw": "0x948F0000", "mnemonic": "LHU"}, + {"address": "0xBFC4227C", "raw": "0x020B6024", "mnemonic": "AND"}, + {"address": "0xBFC42280", "raw": "0x018D7024", "mnemonic": "AND"}, + {"address": "0xBFC42284", "raw": "0x01CFC024", "mnemonic": "AND"}, + {"address": "0xBFC42288", "raw": "0x13000010", "mnemonic": "BEQ"}, + {"address": "0xBFC4228C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42290", "raw": "0x0200C827", "mnemonic": "NOR"}, + {"address": "0xBFC42294", "raw": "0x00114080", "mnemonic": "SLL"}, + {"address": "0xBFC42298", "raw": "0xA4790000", "mnemonic": "SH"}, + {"address": "0xBFC4229C", "raw": "0x02484821", "mnemonic": "ADDU"}, + {"address": "0xBFC422A0", "raw": "0x8D220000", "mnemonic": "LW"}, + {"address": "0xBFC422A4", "raw": "0x94600000", "mnemonic": "LHU"}, + {"address": "0xBFC422A8", "raw": "0x10400008", "mnemonic": "BEQ"}, + {"address": "0xBFC422AC", "raw": "0x00000000", "mnemonic": "NOP"} + ] + }, + { + "func_addr": "0xBFC4270C", + "pc": "0xBFC427A8", + "register": 2, + "register_name": "$v0", + "kind": "jalr", + "classification": "computed_call", + "context_window": [ + {"address": "0xBFC42768", "raw": "0x02A08821", "mnemonic": "ADDU"}, + {"address": "0xBFC4276C", "raw": "0x8C780000", "mnemonic": "LW"}, + {"address": "0xBFC42770", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42774", "raw": "0x0311C824", "mnemonic": "AND"}, + {"address": "0xBFC42778", "raw": "0x13200010", "mnemonic": "BEQ"}, + {"address": "0xBFC4277C", "raw": "0x00000000", "mnemonic": "NOP"}, + {"address": "0xBFC42780", "raw": "0x8C680000", "mnemonic": "LW"}, + {"address": "0xBFC42784", "raw": "0x02324825", "mnemonic": "OR"}, + {"address": "0xBFC42788", "raw": "0x00105880", "mnemonic": "SLL"}, + {"address": "0xBFC4278C", "raw": "0x01095024", "mnemonic": "AND"}, + {"address": "0xBFC42790", "raw": "0xAC6A0000", "mnemonic": "SW"}, + {"address": "0xBFC42794", "raw": "0x026B6021", "mnemonic": "ADDU"}, + {"address": "0xBFC42798", "raw": "0x8D820000", "mnemonic": "LW"}, + {"address": "0xBFC4279C", "raw": "0x8C600000", "mnemonic": "LW"}, + {"address": "0xBFC427A0", "raw": "0x10400006", "mnemonic": "BEQ"}, + {"address": "0xBFC427A4", "raw": "0x00000000", "mnemonic": "NOP"} + ] } ] } diff --git a/generated/skipped_functions.json b/generated/skipped_functions.json index e012bce1..66528ded 100644 --- a/generated/skipped_functions.json +++ b/generated/skipped_functions.json @@ -1,4 +1,19 @@ [ {"address": "0xBFC02324", "reason": "addr=0xBFC0233C raw=0x44801000 opcode=0x11: top-level opcode 0x11 not implemented in Phase 1a"}, - {"address": "0xBFC33CC0", "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator"} + {"address": "0xBFC336F0", "reason": "addr=0xBFC3370C raw=0x48C8E800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33C98", "reason": "addr=0xBFC33C98 raw=0x4884F000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33CC0", "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator"}, + {"address": "0xBFC33F00", "reason": "addr=0xBFC33F0C raw=0x48C46800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33F20", "reason": "addr=0xBFC33F2C raw=0x48C4A800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FB4", "reason": "addr=0xBFC33FBC raw=0x48C4C000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FCC", "reason": "addr=0xBFC33FCC raw=0x48C4D000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FD8", "reason": "addr=0xBFC33FD8 raw=0x48C4D800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC33FE4", "reason": "addr=0xBFC33FE4 raw=0x48C4E000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35AD8", "reason": "addr=0xBFC35AEC raw=0x48C80000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B08", "reason": "addr=0xBFC35B1C raw=0x48C84000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B38", "reason": "addr=0xBFC35B4C raw=0x48C88000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC35B68", "reason": "addr=0xBFC35B74 raw=0x48C82800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC36068", "reason": "addr=0xBFC36068 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"}, + {"address": "0xBFC362D0", "reason": "addr=0xBFC362D0 raw=0x484D0000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a"}, + {"address": "0xBFC36740", "reason": "addr=0xBFC36740 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a"} ] diff --git a/generated/unsupported_ops.json b/generated/unsupported_ops.json index fe51488c..f973e847 100644 --- a/generated/unsupported_ops.json +++ b/generated/unsupported_ops.json @@ -1 +1,172 @@ -[] +[ + { + "address": "0xBFC0233C", + "raw_word": "0x44801000", + "reason": "addr=0xBFC0233C raw=0x44801000 opcode=0x11: top-level opcode 0x11 not implemented in Phase 1a" + }, + { + "address": "0xBFC33CCC", + "raw_word": "0x012A4822", + "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator" + }, + { + "address": "0xBFC33FBC", + "raw_word": "0x48C4C000", + "reason": "addr=0xBFC33FBC raw=0x48C4C000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FCC", + "raw_word": "0x48C4D000", + "reason": "addr=0xBFC33FCC raw=0x48C4D000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33F0C", + "raw_word": "0x48C46800", + "reason": "addr=0xBFC33F0C raw=0x48C46800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33F2C", + "raw_word": "0x48C4A800", + "reason": "addr=0xBFC33F2C raw=0x48C4A800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC3370C", + "raw_word": "0x48C8E800", + "reason": "addr=0xBFC3370C raw=0x48C8E800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B4C", + "raw_word": "0x48C88000", + "reason": "addr=0xBFC35B4C raw=0x48C88000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B1C", + "raw_word": "0x48C84000", + "reason": "addr=0xBFC35B1C raw=0x48C84000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35AEC", + "raw_word": "0x48C80000", + "reason": "addr=0xBFC35AEC raw=0x48C80000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B74", + "raw_word": "0x48C82800", + "reason": "addr=0xBFC35B74 raw=0x48C82800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC36740", + "raw_word": "0xC8800000", + "reason": "addr=0xBFC36740 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a" + }, + { + "address": "0xBFC36068", + "raw_word": "0xC8800000", + "reason": "addr=0xBFC36068 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a" + }, + { + "address": "0xBFC362D0", + "raw_word": "0x484D0000", + "reason": "addr=0xBFC362D0 raw=0x484D0000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FD8", + "raw_word": "0x48C4D800", + "reason": "addr=0xBFC33FD8 raw=0x48C4D800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FE4", + "raw_word": "0x48C4E000", + "reason": "addr=0xBFC33FE4 raw=0x48C4E000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33C98", + "raw_word": "0x4884F000", + "reason": "addr=0xBFC33C98 raw=0x4884F000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC0233C", + "raw_word": "0x44801000", + "reason": "addr=0xBFC0233C raw=0x44801000 opcode=0x11: top-level opcode 0x11 not implemented in Phase 1a" + }, + { + "address": "0xBFC3370C", + "raw_word": "0x48C8E800", + "reason": "addr=0xBFC3370C raw=0x48C8E800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33C98", + "raw_word": "0x4884F000", + "reason": "addr=0xBFC33C98 raw=0x4884F000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33CCC", + "raw_word": "0x012A4822", + "reason": "addr=0xBFC33CCC raw=0x012A4822 opcode=0x00: SPECIAL funct 0x22 not implemented in Phase 1a strict translator" + }, + { + "address": "0xBFC33F0C", + "raw_word": "0x48C46800", + "reason": "addr=0xBFC33F0C raw=0x48C46800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33F2C", + "raw_word": "0x48C4A800", + "reason": "addr=0xBFC33F2C raw=0x48C4A800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FBC", + "raw_word": "0x48C4C000", + "reason": "addr=0xBFC33FBC raw=0x48C4C000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FCC", + "raw_word": "0x48C4D000", + "reason": "addr=0xBFC33FCC raw=0x48C4D000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FD8", + "raw_word": "0x48C4D800", + "reason": "addr=0xBFC33FD8 raw=0x48C4D800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC33FE4", + "raw_word": "0x48C4E000", + "reason": "addr=0xBFC33FE4 raw=0x48C4E000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35AEC", + "raw_word": "0x48C80000", + "reason": "addr=0xBFC35AEC raw=0x48C80000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B1C", + "raw_word": "0x48C84000", + "reason": "addr=0xBFC35B1C raw=0x48C84000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B4C", + "raw_word": "0x48C88000", + "reason": "addr=0xBFC35B4C raw=0x48C88000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC35B74", + "raw_word": "0x48C82800", + "reason": "addr=0xBFC35B74 raw=0x48C82800 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC36068", + "raw_word": "0xC8800000", + "reason": "addr=0xBFC36068 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a" + }, + { + "address": "0xBFC362D0", + "raw_word": "0x484D0000", + "reason": "addr=0xBFC362D0 raw=0x484D0000 opcode=0x12: top-level opcode 0x12 not implemented in Phase 1a" + }, + { + "address": "0xBFC36740", + "raw_word": "0xC8800000", + "reason": "addr=0xBFC36740 raw=0xC8800000 opcode=0x32: top-level opcode 0x32 not implemented in Phase 1a" + } +] diff --git a/recompiler/seeds/dispatch_miss_seeds.json b/recompiler/seeds/dispatch_miss_seeds.json new file mode 100644 index 00000000..d7c69682 --- /dev/null +++ b/recompiler/seeds/dispatch_miss_seeds.json @@ -0,0 +1,29 @@ +{ + "schema": "psxrecomp-v4 dispatch-miss seeds", + "source": "runtime dispatch miss log — functions called indirectly (JALR / function pointer tables)", + "note": "These functions have no static JAL callers and cannot be found by transitive discovery. They are reached at runtime via BIOS API dispatch tables (A0/B0/C0 vectors) or other indirect call mechanisms.", + "seeds": [ + {"address": "0xBFC42380", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC42844", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC38AD4", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC42A90", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC42A10", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC27FB0", "rationale": "dispatch miss: Kernel Part 2 function, indirect call"}, + {"address": "0xBFC36D48", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC38AA4", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC1E3AC", "rationale": "dispatch miss: Shell function, called in vblank loop"}, + {"address": "0xBFC3045C", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30470", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30484", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30498", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30554", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30560", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC3056C", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC30578", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC36DD0", "rationale": "dispatch miss: Shell function, indirect call via table"}, + {"address": "0xBFC11840", "rationale": "dispatch miss: KP2 function, indirect call"}, + {"address": "0xBFC36DF8", "rationale": "dispatch miss: Shell function, indirect call"}, + {"address": "0xBFC11524", "rationale": "dispatch miss: KP2 secondary entry point for exception handler, mid-function split of func_00001A00, called during VBlank"}, + {"address": "0xBFC11610", "rationale": "dispatch miss: KP2 function, tail-call target from 0xBFC11524 exception handler path"} + ] +} diff --git a/recompiler/seeds/phase2_ghidra_seeds.json b/recompiler/seeds/phase2_ghidra_seeds.json index f5d8b16f..a5227529 100644 --- a/recompiler/seeds/phase2_ghidra_seeds.json +++ b/recompiler/seeds/phase2_ghidra_seeds.json @@ -1,7 +1,7 @@ { "schema": "psxrecomp-v4 phase2 seeds", - "source": "generated/ghidra_function_starts.json + phase1c seeds", - "seed_count": 801, + "source": "generated/ghidra_function_starts.json + phase1c seeds + dispatch_miss_seeds + preserved manual", + "seed_count": 823, "seeds": [ { "address": "0xBFC00000", @@ -98,11 +98,6 @@ "label": "ghidra_BFC01C8C", "rationale": "Ghidra function start" }, - { - "address": "0xBFC01E24", - "label": "SysInitMemory", - "rationale": "Dispatch miss during boot — kernel init function" - }, { "address": "0xBFC01E5C", "label": "ghidra_BFC01E5C", @@ -3348,6 +3343,156 @@ "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": "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", @@ -3428,6 +3573,11 @@ "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", @@ -3453,6 +3603,11 @@ "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", @@ -3463,6 +3618,11 @@ "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", @@ -3533,6 +3693,26 @@ "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", @@ -3663,6 +3843,11 @@ "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", @@ -3688,6 +3873,21 @@ "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", @@ -3898,6 +4098,11 @@ "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", @@ -3908,105 +4113,10 @@ "label": "kernel_BFC188B4", "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" }, - { - "address": "0xBFC0193C", - "label": "cache_flush_continuation", - "rationale": "Jump target of cache-flush jr k0 at BFC01938" - }, - { - "address": "0xBFC02200", - "label": "jal_BFC02200", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC03FC0", - "label": "jal_BFC03FC0", - "rationale": "JAL target from code region" - }, - { - "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": "0xBFC33CC0", "label": "jal_BFC33CC0", "rationale": "JAL target from code region" - }, - { - "address": "0xBFC06FDC", - "label": "indirect_BFC06FDC", - "rationale": "Reached via indirect dispatch during boot" - }, - { - "address": "0xBFC137B4", - "label": "indirect_BFC137B4", - "rationale": "Reached via indirect dispatch during boot (kernel relocated)" - }, - { - "address": "0xBFC12BE4", - "label": "rmiss_BFC12BE4", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC137BC", - "label": "rmiss_BFC137BC", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC1376C", - "label": "rmiss_BFC1376C", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC10B30", - "label": "rmiss_BFC10B30", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC10BE4", - "label": "rmiss_BFC10BE4", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC18000", - "label": "shell_entry", - "rationale": "Shell entry point at BFC18000, copied to RAM 0x80030000" - }, - { - "address": "0xBFC10780", - "label": "rmiss_BFC10780", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC11560", - "label": "rmiss_BFC11560", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC115E8", - "label": "rmiss_BFC115E8", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC1152C", - "label": "rmiss_BFC1152C", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC115FC", - "label": "rmiss_BFC115FC", - "rationale": "runtime dispatch miss" } ], "excluded": [ diff --git a/recompiler/src/full_function_emitter.cpp b/recompiler/src/full_function_emitter.cpp index 81527a78..3c88da4f 100644 --- a/recompiler/src/full_function_emitter.cpp +++ b/recompiler/src/full_function_emitter.cpp @@ -29,7 +29,7 @@ uint32_t FullFunctionEmitter::normalize_address(uint32_t addr) { phys = phys - 0x1FC10000u + 0x00000500u; } /* Shell: RAM 0x30000+ → ROM physical 0x1FC18000+ */ - if (phys >= 0x00030000u && phys <= 0x0005A7FFu) { + if (phys >= 0x00030000u && phys <= 0x0005AFFFu) { phys = phys - 0x00030000u + 0x1FC18000u; } return phys; @@ -155,6 +155,16 @@ bool FullFunctionEmitter::emit_function( } } + // Detect delay slots that fall outside this function's address range. + // These will never be visited by the emit loop, so their PendingBranch + // would silently vanish. Collect them for immediate resolution. + std::set orphaned_delay_slots; + for (const auto& [ds_addr, pb] : pending_at) { + if (addr_to_raw.count(ds_addr) == 0) { + orphaned_delay_slots.insert(pb.terminator_addr); + } + } + for (auto it = addr_to_raw.begin(); it != addr_to_raw.end(); ++it) { uint32_t addr = it->first; uint32_t raw = it->second; @@ -193,10 +203,56 @@ bool FullFunctionEmitter::emit_function( out += fmt::format(" int psx_taken_{:08X} = ({});\n", addr, cond); } else if (kind == "rfe") { // RFE: emit cop0 stack pop immediately (no delay slot). - out += fmt::format(" {}\n", tr.c_code); + // + // HOWEVER: RFE is commonly used as the delay slot of + // `jr $k0` (exception return). In MIPS the sequence is: + // jr $k0 <- terminator, pending at addr + // rfe <- delay slot AND terminator + // The jr records a PendingBranch at addr (this address). + // If we just emit the RFE and `continue`, the jr's + // `cpu->pc = cpu->gpr[26]` is never emitted and the + // exception return address is lost. + // + // Fix: if this RFE address has a pending jr, emit the + // RFE SR manipulation WITHOUT the return, then emit the + // JR's pc-set + return instead. + if (pending_at.count(addr)) { + const PendingBranch& pb = pending_at[addr]; + if (pb.kind == "jr") { + // Emit RFE SR pop without return. + out += " { uint32_t sr = cpu->cop0[12]; " + "cpu->cop0[12] = (sr & 0xFFFFFFC0u) | ((sr >> 2) & 0x0Fu); } /* rfe */\n"; + // Emit JR resolution. + uint8_t rs = (pb.raw >> 21) & 0x1F; + if (rs == 31) { + out += " return;\n"; + } else { + out += fmt::format(" cpu->pc = cpu->gpr[{}]; return;\n", + static_cast(rs)); + } + } else { + // Pending non-JR terminator (unexpected but safe). + out += fmt::format(" {}\n", tr.c_code); + } + } else { + // Standalone RFE (no pending JR): emit as-is with return. + out += fmt::format(" {}\n", tr.c_code); + } + } + // For J/JAL/JALR/JR: normally nothing emitted at terminator + // address — resolution happens after delay slot. But if the + // delay slot falls outside this function, resolve NOW (the + // delay-slot side effect is in the adjacent function and will + // execute when dispatch routes there). + if (orphaned_delay_slots.count(addr) && kind == "jr") { + uint8_t rs = (raw >> 21) & 0x1F; + if (rs == 31) { + out += " return;\n"; + } else { + out += fmt::format(" cpu->pc = cpu->gpr[{}]; return;\n", + static_cast(rs)); + } } - // For J/JAL/JALR/JR: nothing emitted at terminator address. - // Resolution happens after delay slot. continue; } @@ -334,7 +390,7 @@ void FullFunctionEmitter::emit_dispatch( out += " if (phys >= 0x1FC10000u && phys <= 0x1FC17FFFu)\n"; out += " phys = phys - 0x1FC10000u + 0x00000500u;\n"; out += " /* Shell: RAM 0x30000+ -> ROM physical 0x1FC18000+ */\n"; - out += " if (phys >= 0x00030000u && phys <= 0x0005A7FFu)\n"; + out += " if (phys >= 0x00030000u && phys <= 0x0005AFFFu)\n"; out += " phys = phys - 0x00030000u + 0x1FC18000u;\n"; out += " return phys;\n"; out += "}\n\n"; diff --git a/recompiler/src/function_discovery.cpp b/recompiler/src/function_discovery.cpp index 7df2e3b4..fb9f01ed 100644 --- a/recompiler/src/function_discovery.cpp +++ b/recompiler/src/function_discovery.cpp @@ -44,6 +44,49 @@ static uint32_t normalize_address(uint32_t addr) { return phys; } +// Relocated code (Shell, Kernel Part 2) runs at RAM addresses, not ROM +// addresses. J/JAL targets use (PC & 0xF0000000) as the region base, so +// when the instruction is analyzed at its ROM address the target lands in +// 0xB0xxxxxx (KSEG1 expansion region) instead of the correct 0x80xxxxxx. +// This mirrors full_function_emitter.cpp relocate_j_target, but converts +// the resulting RAM address back to a ROM address so that function +// discovery can follow it. +static uint32_t remap_relocated_j_target(uint32_t target, uint32_t source_rom_addr) { + uint32_t src_phys = source_rom_addr & 0x1FFFFFFFu; + + // Kernel Part 2: ROM 0x1FC10000..0x1FC17FFF → runs at RAM 0x500+ + if (src_phys >= 0x1FC10000u && src_phys <= 0x1FC17FFFu) { + uint32_t runtime_addr = src_phys - 0x1FC10000u + 0x00000500u; + uint32_t ram_target = (runtime_addr & 0xF0000000u) | (target & 0x0FFFFFFFu); + uint32_t ram_phys = ram_target & 0x1FFFFFFFu; + // KP2 RAM → KP2 ROM + if (ram_phys >= 0x00000500u && ram_phys < 0x00008500u) + return 0xBFC10000u + (ram_phys - 0x00000500u); + // KP1 ROM (target already correct for 0x00 region) + if (ram_phys >= 0x1FC00000u && ram_phys < 0x1FC80000u) + return ram_target; + return target; + } + + // Shell: ROM 0x1FC18000..0x1FC427FF → runs at RAM 0x80030000+ + if (src_phys >= 0x1FC18000u && src_phys <= 0x1FC427FFu) { + uint32_t ram_target = 0x80000000u | (target & 0x0FFFFFFFu); + uint32_t ram_phys = ram_target & 0x1FFFFFFFu; + // Shell RAM → Shell ROM + if (ram_phys >= 0x00030000u && ram_phys < 0x0005A800u) + return 0xBFC18000u + (ram_phys - 0x00030000u); + // KP2 RAM → KP2 ROM + if (ram_phys >= 0x00000500u && ram_phys < 0x00008500u) + return 0xBFC10000u + (ram_phys - 0x00000500u); + // KP1 ROM range (Shell calling Kernel Part 1 — target already correct) + if (ram_phys >= 0x1FC00000u && ram_phys < 0x1FC10000u) + return 0xBFC00000u + (ram_phys - 0x1FC00000u); + return target; + } + + return target; +} + FunctionDiscovery::CFInfo FunctionDiscovery::classify_control_flow(uint32_t raw, uint32_t addr) { CFInfo info{}; info.kind = CFKind::Normal; @@ -75,6 +118,7 @@ FunctionDiscovery::CFInfo FunctionDiscovery::classify_control_flow(uint32_t raw, uint32_t target26 = raw & 0x03FFFFFF; info.kind = CFKind::Jump; info.target = ((addr + 4) & 0xF0000000u) | (target26 << 2); + info.target = remap_relocated_j_target(info.target, addr); return info; } @@ -83,6 +127,7 @@ FunctionDiscovery::CFInfo FunctionDiscovery::classify_control_flow(uint32_t raw, uint32_t target26 = raw & 0x03FFFFFF; info.kind = CFKind::Call; info.target = ((addr + 4) & 0xF0000000u) | (target26 << 2); + info.target = remap_relocated_j_target(info.target, addr); return info; } diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 68ac434f..a90e6647 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -7,8 +7,13 @@ set(CMAKE_CXX_STANDARD 17) add_executable(psx-runtime src/main.cpp src/memory.c + src/gpu.c + src/dma.c src/timers.c src/interrupts.c + src/sio.c + src/memcard.c + src/debug_server.c src/traps.c ../generated/SCPH1001_full.c ../generated/SCPH1001_dispatch.c @@ -18,6 +23,17 @@ target_include_directories(psx-runtime PRIVATE include ) +# SDL2 for display presentation. +find_package(PkgConfig REQUIRED) +pkg_check_modules(SDL2 REQUIRED sdl2) +target_include_directories(psx-runtime PRIVATE ${SDL2_INCLUDE_DIRS}) +target_link_libraries(psx-runtime PRIVATE ${SDL2_LIBRARIES}) + +# Winsock2 for TCP debug server. +if(WIN32 OR MINGW) + target_link_libraries(psx-runtime PRIVATE ws2_32) +endif() + # Large stack for deep call chains during BIOS execution. if(MINGW OR WIN32) target_link_options(psx-runtime PRIVATE -Wl,--stack,67108864) diff --git a/runtime/include/debug_server.h b/runtime/include/debug_server.h new file mode 100644 index 00000000..a219455a --- /dev/null +++ b/runtime/include/debug_server.h @@ -0,0 +1,125 @@ +/* + * debug_server.h -- TCP debug server for PSX recomp v4 + * + * Non-blocking TCP server on localhost (default port 4370). + * JSON-over-newline protocol, polled once per vblank. + * Includes a 36000-frame ring buffer for retroactive state queries. + * + * Same public API names as nesrecomp/snesrecomp debug servers + * so TCP.md and DEBUG.md documentation is reusable across projects. + */ +#ifndef PSXRECOMP_V4_DEBUG_SERVER_H +#define PSXRECOMP_V4_DEBUG_SERVER_H + +#include + +#include "cpu_state.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---- Ring buffer frame record ---- */ + +#define FRAME_HISTORY_CAP 36000 /* ~10 min @ 60fps */ +#define MAX_FRAME_DIFFS 32 +#define RAM_SNAPSHOT_REGIONS 4 +#define RAM_SNAPSHOT_SIZE 128 + +typedef struct { + uint16_t addr; + uint8_t mine; + uint8_t theirs; +} FrameDiffEntry; + +typedef struct { + uint32_t frame_number; + int verify_pass; /* 1=pass, 0=fail, -1=not checked */ + int diff_count; + + /* ---- MIPS CPU state ---- */ + uint32_t gpr[32]; + uint32_t hi, lo; + uint32_t cop0_sr; + uint32_t cop0_cause; + uint32_t cop0_epc; + + /* ---- Interrupt state ---- */ + uint32_t i_stat; + uint32_t i_mask; + + /* ---- GPU display state ---- */ + uint16_t display_area_x, display_area_y; + uint16_t display_w, display_h; + uint8_t display_disabled; + + /* ---- SIO state ---- */ + uint16_t pad_buttons; + uint16_t sio_stat; + uint16_t sio_ctrl; + + /* ---- Timing ---- */ + uint32_t dispatch_count; + uint64_t total_dispatches; + + /* ---- Game-specific (filled by hook) ---- */ + uint8_t game_data[32]; + + /* ---- Last function name ---- */ + char last_func[32]; + + /* ---- Configurable RAM snapshot regions ---- */ + uint32_t snapshot_addr[RAM_SNAPSHOT_REGIONS]; + uint8_t snapshot_data[RAM_SNAPSHOT_REGIONS][RAM_SNAPSHOT_SIZE]; + + /* ---- Divergence diffs (verify mode) ---- */ + FrameDiffEntry diffs[MAX_FRAME_DIFFS]; +} PSXFrameRecord; + +/* ---- Public API (same names as NES version) ---- */ + +/* Initialize the server. Call once at startup. + * port=0 uses the default (4370). */ +void debug_server_init(int port); + +/* Poll for incoming connections and commands. Non-blocking. + * Call once per vblank. */ +void debug_server_poll(void); + +/* Record the current frame's state into the ring buffer. + * Call after vblank processing. */ +void debug_server_record_frame(void); + +/* Block while paused, polling TCP + SDL events. + * Call from vblank callback before frame processing. */ +void debug_server_wait_if_paused(void); + +/* Graceful shutdown. Call at exit. */ +void debug_server_shutdown(void); + +/* Check if a TCP client is connected. */ +int debug_server_is_connected(void); + +/* ---- Watchpoint notifications ---- */ + +void debug_server_check_watchpoints(void); + +/* ---- Input override ---- */ + +/* Returns >= 0 if the debug server wants to override pad input, + * -1 if no override is active. Value is PS1 16-bit button mask. */ +int debug_server_get_input_override(void); + +/* ---- Send helpers (for extensions) ---- */ + +/* Set the CPU state pointer for register queries. Call after CPU init. */ +void debug_server_set_cpu(CPUState *cpu); + +void debug_server_send_line(const char *json); +void debug_server_send_fmt(const char *fmt, ...); + +#ifdef __cplusplus +} +#endif + +#endif /* PSXRECOMP_V4_DEBUG_SERVER_H */ diff --git a/runtime/include/dma.h b/runtime/include/dma.h new file mode 100644 index 00000000..7a6bc9fb --- /dev/null +++ b/runtime/include/dma.h @@ -0,0 +1,34 @@ +/* dma.h — PS1 DMA controller simulation (Phase 3). + * + * 7 DMA channels: + * Ch0: MDEC in 0x1F801080 + * Ch1: MDEC out 0x1F801090 + * Ch2: GPU 0x1F8010A0 + * Ch3: CDROM 0x1F8010B0 + * Ch4: SPU 0x1F8010C0 + * Ch5: PIO 0x1F8010D0 + * Ch6: OTC 0x1F8010E0 + * + * Global: + * DPCR: 0x1F8010F0 (DMA control — enable bits per channel) + * DICR: 0x1F8010F4 (DMA interrupt control) + */ + +#ifndef PSXRECOMP_V4_DMA_H +#define PSXRECOMP_V4_DMA_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void dma_init(void); +uint32_t dma_read(uint32_t addr); +void dma_write(uint32_t addr, uint32_t val); + +#ifdef __cplusplus +} +#endif + +#endif /* PSXRECOMP_V4_DMA_H */ diff --git a/runtime/include/gpu.h b/runtime/include/gpu.h new file mode 100644 index 00000000..d7e0cf6b --- /dev/null +++ b/runtime/include/gpu.h @@ -0,0 +1,51 @@ +/* gpu.h — PS1 GPU hardware simulation (Phase 3). + * + * Implements GPUSTAT, GP0, GP1, and 1024x512 16-bit VRAM. + * No rendering to screen — just correct hardware state transitions. + */ + +#ifndef PSXRECOMP_V4_GPU_H +#define PSXRECOMP_V4_GPU_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void gpu_init(void); +uint32_t gpu_read_gpustat(void); /* 0x1F801814 read */ +uint32_t gpu_read_gpuread(void); /* 0x1F801810 read */ +void gpu_write_gp0(uint32_t val); /* 0x1F801810 write */ +void gpu_write_gp1(uint32_t val); /* 0x1F801814 write */ +void gpu_vblank_tick(void); /* Toggle LCF, called at each simulated vblank */ + +/* Display presentation accessors (Phase 3). */ +const uint16_t* gpu_get_vram(void); /* Pointer to 1024x512 16-bit VRAM */ + +typedef struct { + uint32_t display_x, display_y; /* VRAM start of display area (GP1(05h)) */ + uint32_t width, height; /* Derived from display mode + ranges */ + int disabled; /* GP1(03h) display disable flag */ +} GpuDisplayInfo; + +void gpu_get_display_info(GpuDisplayInfo* out); +uint64_t gpu_get_gp0_count(void); /* Total GP0 writes since init */ +void gpu_get_gp0_stats(uint64_t* nop, uint64_t* fill, uint64_t* draw, uint64_t* env, uint64_t* copy); + +typedef struct { + uint32_t left, top, right, bottom; + int32_t offset_x, offset_y; +} GpuDrawArea; +void gpu_get_draw_area(GpuDrawArea* out); +uint16_t gpu_vram_peek(int x, int y); + +/* Vblank presentation callback — called from gpu_vblank_tick(). */ +typedef void (*gpu_vblank_cb)(void); +void gpu_set_vblank_callback(gpu_vblank_cb cb); + +#ifdef __cplusplus +} +#endif + +#endif /* PSXRECOMP_V4_GPU_H */ diff --git a/runtime/include/interrupts.h b/runtime/include/interrupts.h index 3c19c622..a0f2845e 100644 --- a/runtime/include/interrupts.h +++ b/runtime/include/interrupts.h @@ -29,6 +29,14 @@ void interrupts_init(void); * pending + COP0 allows, dispatches the exception handler. */ void psx_check_interrupts(struct CPUState* cpu); +/* Query whether we are currently inside an exception handler dispatch. */ +int psx_get_in_exception(void); + +/* longjmp back to psx_check_interrupts, unwinding the exception handler. + * Called by ReturnFromException (B0:0x17 or SYSCALL(3)) when inside + * the exception handler to model real hardware's RFE+JR $k0 unwind. */ +void psx_exception_longjmp(void); + #ifdef __cplusplus } #endif diff --git a/runtime/include/memcard.h b/runtime/include/memcard.h new file mode 100644 index 00000000..cab706a1 --- /dev/null +++ b/runtime/include/memcard.h @@ -0,0 +1,31 @@ +#ifndef PSXRECOMP_V4_MEMCARD_H +#define PSXRECOMP_V4_MEMCARD_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MEMCARD_SIZE (128 * 1024) /* 128KB per card */ +#define MEMCARD_SECTOR_SIZE 128 +#define MEMCARD_SECTORS 1024 + +/* Initialize memcard subsystem. dir = directory for .mcd files (can be NULL). */ +void memcard_init(const char* dir); + +/* Read/write 128-byte sectors */ +int memcard_read_sector(int card, int sector, uint8_t* buf); +int memcard_write_sector(int card, int sector, const uint8_t* buf); + +/* Flush pending writes to disk */ +void memcard_flush(int card); + +/* Check if card is present */ +int memcard_is_present(int card); + +#ifdef __cplusplus +} +#endif + +#endif /* PSXRECOMP_V4_MEMCARD_H */ diff --git a/runtime/include/sio.h b/runtime/include/sio.h new file mode 100644 index 00000000..a52b45a1 --- /dev/null +++ b/runtime/include/sio.h @@ -0,0 +1,36 @@ +#ifndef PSXRECOMP_V4_SIO_H +#define PSXRECOMP_V4_SIO_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SIO0 register base: 0x1F801040 */ +#define SIO_BASE 0x1F801040 + +void sio_init(void); + +/* MMIO read/write (0x1F801040-0x1F80104E) */ +uint32_t sio_read(uint32_t addr); +void sio_write(uint32_t addr, uint32_t value); + +/* Advance SIO timing by one step. Called from psx_check_interrupts(). + * Fires pending IRQ7 after the transfer delay expires. */ +void sio_tick(void); + +/* Update pad button state. Buttons use PS1 convention: 0=pressed, 1=released. + Bit layout: SELECT, L3, R3, START, UP, RIGHT, DOWN, LEFT, + L2, R2, L1, R1, TRIANGLE, CIRCLE, CROSS, SQUARE */ +void sio_set_pad_state(uint16_t buttons); + +/* Connect a pad to a slot (0=port1, 1=port2). By default no pads are + * connected during initial BIOS boot. */ +void sio_connect_pad(int slot); + +#ifdef __cplusplus +} +#endif + +#endif /* PSXRECOMP_V4_SIO_H */ diff --git a/runtime/src/debug_server.c b/runtime/src/debug_server.c new file mode 100644 index 00000000..f46faaa6 --- /dev/null +++ b/runtime/src/debug_server.c @@ -0,0 +1,1106 @@ +/* + * debug_server.c -- TCP debug server for PSX recomp v4 + * + * Single-threaded, non-blocking TCP server polled once per vblank. + * JSON-over-newline protocol on localhost:4370. + * + * Same function names and protocol as nesrecomp/snesrecomp versions + * so TCP.md and DEBUG.md are reusable across projects. + */ +#include "debug_server.h" +#include "cpu_state.h" +#include "gpu.h" +#include "sio.h" + +#include +#include +#include +#include +#include + +/* ---- Platform sockets ---- */ +#ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# include +# include + typedef SOCKET sock_t; +# define SOCK_INVALID INVALID_SOCKET +# define sock_close closesocket + static int sock_error(void) { return WSAGetLastError(); } +#else +# include +# include +# include +# include +# include + typedef int sock_t; +# define SOCK_INVALID (-1) +# define sock_close close + static int sock_error(void) { return errno; } +#endif + +#include + +/* ---- Externs from runtime ---- */ +extern uint32_t i_stat; +extern uint32_t i_mask; + +/* Memory access (from memory.c) */ +extern uint32_t psx_read_word(uint32_t addr); +extern void psx_write_word(uint32_t addr, uint32_t val); +extern uint8_t psx_read_byte(uint32_t addr); +extern void psx_write_byte(uint32_t addr, uint8_t val); + +/* ---- Server state ---- */ +static sock_t s_listen = SOCK_INVALID; +static sock_t s_client = SOCK_INVALID; +static int s_port = 4370; + +#define RECV_BUF_SIZE 8192 +static char s_recv_buf[RECV_BUF_SIZE]; +static int s_recv_len = 0; + +/* ---- Frame counter (set by record_frame caller) ---- */ +static uint64_t s_frame_count = 0; + +/* ---- CPU state pointer (set at init) ---- */ +static CPUState *s_cpu = NULL; + +/* ---- Pause / step ---- */ +static volatile int s_paused = 0; +static int s_step_count = 0; +static uint32_t s_run_to = 0; + +/* ---- Input override ---- */ +static int s_input_override = -1; +static int s_input_frames = 0; + +/* ---- Ring buffer (heap-allocated) ---- */ +static PSXFrameRecord *s_frame_history = NULL; +static uint64_t s_history_count = 0; + +/* ---- Snapshot regions (configurable via set_snapshot command) ---- */ +static uint32_t s_snapshot_addrs[RAM_SNAPSHOT_REGIONS]; +static int s_snapshot_active[RAM_SNAPSHOT_REGIONS]; + +/* ---- Watchpoints ---- */ +#define MAX_WATCHPOINTS 8 +typedef struct { + uint32_t addr; + uint8_t prev_val; + int active; +} Watchpoint; +static Watchpoint s_watchpoints[MAX_WATCHPOINTS]; + +/* ---- Platform helpers ---- */ +static void set_nonblocking(sock_t s) +{ +#ifdef _WIN32 + u_long mode = 1; + ioctlsocket(s, FIONBIO, &mode); +#else + int flags = fcntl(s, F_GETFL, 0); + fcntl(s, F_SETFL, flags | O_NONBLOCK); +#endif +} + +/* ---- JSON helpers ---- */ + +static const char *json_get_str(const char *json, const char *key, + char *out, int out_sz) +{ + char pattern[128]; + snprintf(pattern, sizeof(pattern), "\"%s\"", key); + const char *p = strstr(json, pattern); + if (!p) return NULL; + p += strlen(pattern); + while (*p == ' ' || *p == ':') p++; + if (*p == '"') { + p++; + int i = 0; + while (*p && *p != '"' && i < out_sz - 1) + out[i++] = *p++; + out[i] = '\0'; + return out; + } + { + int i = 0; + while (*p && *p != ',' && *p != '}' && *p != ' ' && i < out_sz - 1) + out[i++] = *p++; + out[i] = '\0'; + return out; + } +} + +static int json_get_int(const char *json, const char *key, int def) +{ + char buf[64]; + if (!json_get_str(json, key, buf, sizeof(buf))) return def; + return atoi(buf); +} + +static uint32_t hex_to_u32(const char *s) +{ + if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) s += 2; + return (uint32_t)strtoul(s, NULL, 16); +} + +/* ---- Send helpers ---- */ + +static void send_all_blocking(sock_t sock, const char *data, int len) +{ +#ifdef _WIN32 + u_long mode = 0; + ioctlsocket(sock, FIONBIO, &mode); +#else + int flags = fcntl(sock, F_GETFL, 0); + fcntl(sock, F_SETFL, flags & ~O_NONBLOCK); +#endif + int sent = 0; + while (sent < len) { + int n = send(sock, data + sent, len - sent, 0); + if (n > 0) { sent += n; continue; } + break; + } +#ifdef _WIN32 + mode = 1; + ioctlsocket(sock, FIONBIO, &mode); +#else + fcntl(sock, F_SETFL, flags); +#endif +} + +void debug_server_send_line(const char *json) +{ + if (s_client == SOCK_INVALID) return; + int len = (int)strlen(json); + send_all_blocking(s_client, json, len); + send_all_blocking(s_client, "\n", 1); +} + +void debug_server_send_fmt(const char *fmt, ...) +{ + char buf[16384]; + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + debug_server_send_line(buf); +} + +#define send_line debug_server_send_line +#define send_fmt debug_server_send_fmt + +static void send_ok(int id) +{ + send_fmt("{\"id\":%d,\"ok\":true}", id); +} + +static void send_err(int id, const char *msg) +{ + send_fmt("{\"id\":%d,\"ok\":false,\"error\":\"%s\"}", id, msg); +} + +/* ---- Command handlers ---- */ + +static void handle_ping(int id, const char *json) +{ + (void)json; + send_fmt("{\"id\":%d,\"ok\":true,\"frame\":%llu}", + id, (unsigned long long)s_frame_count); +} + +static void handle_frame(int id, const char *json) +{ + (void)json; + send_fmt("{\"id\":%d,\"ok\":true,\"frame\":%llu}", + id, (unsigned long long)s_frame_count); +} + +static void handle_get_registers(int id, const char *json) +{ + (void)json; + if (!s_cpu) { send_err(id, "no cpu"); return; } + + char *buf = (char *)malloc(4096); + if (!buf) { send_err(id, "alloc failed"); return; } + + int pos = snprintf(buf, 4096, + "{\"id\":%d,\"ok\":true,\"frame\":%llu," + "\"gpr\":[", + id, (unsigned long long)s_frame_count); + + for (int i = 0; i < 32; i++) { + if (i) buf[pos++] = ','; + pos += snprintf(buf + pos, 4096 - pos, "\"0x%08X\"", s_cpu->gpr[i]); + } + + pos += snprintf(buf + pos, 4096 - pos, + "],\"hi\":\"0x%08X\",\"lo\":\"0x%08X\"," + "\"cop0_sr\":\"0x%08X\",\"cop0_cause\":\"0x%08X\",\"cop0_epc\":\"0x%08X\"," + "\"i_stat\":\"0x%08X\",\"i_mask\":\"0x%08X\"," + "\"pc\":\"0x%08X\"}", + s_cpu->hi, s_cpu->lo, + s_cpu->cop0[12], s_cpu->cop0[13], s_cpu->cop0[14], + i_stat, i_mask, + s_cpu->pc); + + send_line(buf); + free(buf); +} + +static void handle_read_ram(int id, const char *json) +{ + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + int len = json_get_int(json, "len", 1); + if (len < 1) len = 1; + if (len > 256) len = 256; + + char hex[513]; + for (int i = 0; i < len; i++) + snprintf(hex + i * 2, 3, "%02x", psx_read_byte(addr + i)); + + send_fmt("{\"id\":%d,\"ok\":true,\"addr\":\"0x%08X\",\"len\":%d,\"hex\":\"%s\"}", + id, addr, len, hex); +} + +static void handle_dump_ram(int id, const char *json) +{ + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + int len = json_get_int(json, "len", 256); + if (len < 1) len = 1; + if (len > 4096) len = 4096; + + int offset = 0; + while (offset < len) { + int chunk = len - offset; + if (chunk > 256) chunk = 256; + char hex[513]; + for (int i = 0; i < chunk; i++) + snprintf(hex + i * 2, 3, "%02x", psx_read_byte(addr + offset + i)); + send_fmt("{\"id\":%d,\"ok\":true,\"addr\":\"0x%08X\",\"offset\":%d,\"len\":%d,\"hex\":\"%s\"}", + id, addr + offset, offset, chunk, hex); + offset += chunk; + } +} + +static void handle_write_ram(int id, const char *json) +{ + char addr_str[32], val_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + if (!json_get_str(json, "val", val_str, sizeof(val_str))) { + send_err(id, "missing val"); return; + } + uint32_t addr = hex_to_u32(addr_str); + uint8_t val = (uint8_t)hex_to_u32(val_str); + psx_write_byte(addr, val); + send_ok(id); +} + +static void handle_gpu_state(int id, const char *json) +{ + (void)json; + GpuDisplayInfo di; + gpu_get_display_info(&di); + uint32_t gpustat = gpu_read_gpustat(); + + GpuDrawArea da; + gpu_get_draw_area(&da); + uint64_t nop, fill, draw, env, copy; + gpu_get_gp0_stats(&nop, &fill, &draw, &env, ©); + send_fmt("{\"id\":%d,\"ok\":true," + "\"display_x\":%d,\"display_y\":%d," + "\"width\":%d,\"height\":%d," + "\"disabled\":%d," + "\"gpustat\":\"0x%08X\"," + "\"gp0_writes\":%llu," + "\"gp0_nop\":%llu,\"gp0_fill\":%llu,\"gp0_draw\":%llu,\"gp0_env\":%llu,\"gp0_copy\":%llu," + "\"draw_area\":[%u,%u,%u,%u]," + "\"draw_offset\":[%d,%d]}", + id, di.display_x, di.display_y, + di.width, di.height, + di.disabled, + gpustat, + (unsigned long long)gpu_get_gp0_count(), + (unsigned long long)nop, (unsigned long long)fill, + (unsigned long long)draw, (unsigned long long)env, + (unsigned long long)copy, + da.left, da.top, da.right, da.bottom, + da.offset_x, da.offset_y); +} + +static void handle_irq_state(int id, const char *json) +{ + (void)json; + send_fmt("{\"id\":%d,\"ok\":true," + "\"i_stat\":\"0x%08X\",\"i_mask\":\"0x%08X\"," + "\"pending\":\"0x%08X\"," + "\"cop0_sr\":\"0x%08X\"," + "\"IEc\":%d,\"IM2\":%d,\"BEV\":%d}", + id, i_stat, i_mask, i_stat & i_mask, + s_cpu ? s_cpu->cop0[12] : 0, + s_cpu ? (s_cpu->cop0[12] & 1) : 0, + s_cpu ? ((s_cpu->cop0[12] >> 10) & 1) : 0, + s_cpu ? ((s_cpu->cop0[12] >> 22) & 1) : 0); +} + +static void handle_sio_state(int id, const char *json) +{ + (void)json; + send_fmt("{\"id\":%d,\"ok\":true," + "\"sio_stat\":\"0x%04X\"," + "\"sio_ctrl\":\"0x%04X\"," + "\"sio_rx\":\"0x%02X\"," + "\"pad_buttons\":\"0x%04X\"}", + id, + (uint16_t)sio_read(0x1F801044), + (uint16_t)sio_read(0x1F80104A), + (uint8_t)sio_read(0x1F801040), + 0); /* TODO: expose pad_buttons from sio.c */ +} + +static void handle_watch(int id, const char *json) +{ + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + + for (int i = 0; i < MAX_WATCHPOINTS; i++) { + if (!s_watchpoints[i].active) { + s_watchpoints[i].addr = addr; + s_watchpoints[i].prev_val = psx_read_byte(addr); + s_watchpoints[i].active = 1; + send_fmt("{\"id\":%d,\"ok\":true,\"slot\":%d,\"addr\":\"0x%08X\"}", + id, i, addr); + return; + } + } + send_err(id, "all watchpoint slots full (max 8)"); +} + +static void handle_unwatch(int id, const char *json) +{ + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + + for (int i = 0; i < MAX_WATCHPOINTS; i++) { + if (s_watchpoints[i].active && s_watchpoints[i].addr == addr) { + s_watchpoints[i].active = 0; + send_ok(id); + return; + } + } + send_err(id, "watchpoint not found"); +} + +static void handle_set_input(int id, const char *json) +{ + char val_str[32]; + if (!json_get_str(json, "buttons", val_str, sizeof(val_str))) { + send_err(id, "missing buttons"); return; + } + s_input_override = (int)hex_to_u32(val_str); + s_input_frames = 0; + send_ok(id); +} + +static void handle_press(int id, const char *json) +{ + int buttons = json_get_int(json, "buttons", -1); + int frames = json_get_int(json, "frames", 2); + if (buttons < 0) { send_err(id, "missing buttons"); return; } + s_input_override = buttons; + s_input_frames = frames; + send_ok(id); +} + +static void handle_clear_input(int id, const char *json) +{ + (void)json; + s_input_override = -1; + s_input_frames = 0; + send_ok(id); +} + +static void handle_pause(int id, const char *json) +{ + (void)json; + s_paused = 1; + send_fmt("{\"id\":%d,\"ok\":true,\"paused\":true,\"frame\":%llu}", + id, (unsigned long long)s_frame_count); +} + +static void handle_continue(int id, const char *json) +{ + (void)json; + s_paused = 0; + s_step_count = 0; + s_run_to = 0; + send_fmt("{\"id\":%d,\"ok\":true,\"paused\":false}", id); +} + +static void handle_step(int id, const char *json) +{ + int n = json_get_int(json, "count", 1); + if (n < 1) n = 1; + s_step_count = n; + s_paused = 0; + send_fmt("{\"id\":%d,\"ok\":true,\"stepping\":%d}", id, n); +} + +static void handle_run_to_frame(int id, const char *json) +{ + int target = json_get_int(json, "frame", 0); + if (target <= (int)s_frame_count) { + send_err(id, "target frame already passed"); return; + } + s_run_to = (uint32_t)target; + s_paused = 0; + send_fmt("{\"id\":%d,\"ok\":true,\"running_to\":%d}", id, target); +} + +/* ---- Ring buffer queries ---- */ + +static void handle_history(int id, const char *json) +{ + (void)json; + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + send_fmt("{\"id\":%d,\"ok\":true,\"count\":%llu,\"oldest\":%llu,\"newest\":%llu}", + id, + (unsigned long long)s_history_count, + (unsigned long long)oldest, + (unsigned long long)(s_history_count > 0 ? s_history_count - 1 : 0)); +} + +static void handle_get_frame(int id, const char *json) +{ + int f = json_get_int(json, "frame", -1); + if (f < 0) { send_err(id, "missing frame"); return; } + + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + if ((uint64_t)f < oldest || (uint64_t)f >= s_history_count) { + send_err(id, "frame not in buffer"); return; + } + + uint32_t idx = (uint32_t)f % FRAME_HISTORY_CAP; + const PSXFrameRecord *r = &s_frame_history[idx]; + if (r->frame_number != (uint32_t)f) { + send_err(id, "frame record mismatch"); return; + } + + char *buf = (char *)malloc(8192); + if (!buf) { send_err(id, "alloc failed"); return; } + + int pos = snprintf(buf, 8192, + "{\"id\":%d,\"ok\":true," + "\"frame\":%u,\"verify_pass\":%d,\"diff_count\":%d," + "\"cop0_sr\":\"0x%08X\",\"cop0_cause\":\"0x%08X\",\"cop0_epc\":\"0x%08X\"," + "\"i_stat\":\"0x%08X\",\"i_mask\":\"0x%08X\"," + "\"display\":{\"x\":%d,\"y\":%d,\"w\":%d,\"h\":%d,\"disabled\":%d}," + "\"pad_buttons\":\"0x%04X\"," + "\"sio_stat\":\"0x%04X\",\"sio_ctrl\":\"0x%04X\"," + "\"dispatch_count\":%u," + "\"total_dispatches\":%llu," + "\"last_func\":\"%s\"," + "\"gpr\":[", + id, r->frame_number, r->verify_pass, r->diff_count, + r->cop0_sr, r->cop0_cause, r->cop0_epc, + r->i_stat, r->i_mask, + r->display_area_x, r->display_area_y, r->display_w, r->display_h, + r->display_disabled, + r->pad_buttons, + r->sio_stat, r->sio_ctrl, + r->dispatch_count, + (unsigned long long)r->total_dispatches, + r->last_func); + + for (int i = 0; i < 32; i++) { + if (i) buf[pos++] = ','; + pos += snprintf(buf + pos, 8192 - pos, "\"0x%08X\"", r->gpr[i]); + } + + pos += snprintf(buf + pos, 8192 - pos, "]}"); + send_line(buf); + free(buf); +} + +static void handle_frame_range(int id, const char *json) +{ + int start = json_get_int(json, "start", -1); + int end = json_get_int(json, "end", -1); + if (start < 0 || end < 0) { send_err(id, "missing start/end"); return; } + if (end - start + 1 > 200) { send_err(id, "max 200 frames per request"); return; } + + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + + char *buf = (char *)malloc(200 * 256 + 256); + if (!buf) { send_err(id, "alloc failed"); return; } + + int pos = snprintf(buf, 64, "{\"id\":%d,\"ok\":true,\"frames\":[", id); + int first = 1; + + for (int f = start; f <= end; f++) { + if (!first) buf[pos++] = ','; + first = 0; + + if ((uint64_t)f < oldest || (uint64_t)f >= s_history_count) { + pos += snprintf(buf + pos, 128, "{\"frame\":%d,\"available\":false}", f); + continue; + } + uint32_t idx = (uint32_t)f % FRAME_HISTORY_CAP; + const PSXFrameRecord *r = &s_frame_history[idx]; + if (r->frame_number != (uint32_t)f) { + pos += snprintf(buf + pos, 128, "{\"frame\":%d,\"available\":false}", f); + continue; + } + + pos += snprintf(buf + pos, 256, + "{\"frame\":%u,\"verify\":%d," + "\"sr\":\"0x%08X\",\"i_stat\":\"0x%08X\"," + "\"pad\":\"0x%04X\"}", + r->frame_number, r->verify_pass, + r->cop0_sr, r->i_stat, + r->pad_buttons); + } + + pos += snprintf(buf + pos, 8, "]}"); + send_line(buf); + free(buf); +} + +static void handle_frame_timeseries(int id, const char *json) +{ + int start = json_get_int(json, "start", -1); + int end = json_get_int(json, "end", -1); + if (start < 0 || end < 0) { send_err(id, "missing start/end"); return; } + if (end - start + 1 > 200) { send_err(id, "max 200 frames per request"); return; } + + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + + char *buf = (char *)malloc(200 * 320 + 256); + if (!buf) { send_err(id, "alloc failed"); return; } + + int pos = snprintf(buf, 64, "{\"id\":%d,\"ok\":true,\"ts\":[", id); + int first = 1; + + for (int f = start; f <= end; f++) { + if (!first) buf[pos++] = ','; + first = 0; + + if ((uint64_t)f < oldest || (uint64_t)f >= s_history_count) { + pos += snprintf(buf + pos, 32, "null"); + continue; + } + uint32_t idx = (uint32_t)f % FRAME_HISTORY_CAP; + const PSXFrameRecord *r = &s_frame_history[idx]; + if (r->frame_number != (uint32_t)f) { + pos += snprintf(buf + pos, 32, "null"); + continue; + } + + pos += snprintf(buf + pos, 320, + "{\"f\":%u,\"v\":%d," + "\"sr\":\"0x%08X\",\"ist\":\"0x%08X\",\"imk\":\"0x%08X\"," + "\"pad\":\"0x%04X\",\"dc\":%u}", + r->frame_number, r->verify_pass, + r->cop0_sr, r->i_stat, r->i_mask, + r->pad_buttons, r->dispatch_count); + } + + pos += snprintf(buf + pos, 8, "]}"); + send_line(buf); + free(buf); +} + +static void handle_first_failure(int id, const char *json) +{ + (void)json; + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + + for (uint64_t f = oldest; f < s_history_count; f++) { + uint32_t idx = (uint32_t)(f % FRAME_HISTORY_CAP); + const PSXFrameRecord *r = &s_frame_history[idx]; + if (r->frame_number == (uint32_t)f && r->verify_pass == 0) { + send_fmt("{\"id\":%d,\"ok\":true,\"frame\":%u,\"diff_count\":%d}", + id, r->frame_number, r->diff_count); + return; + } + } + send_fmt("{\"id\":%d,\"ok\":true,\"frame\":-1,\"message\":\"no failures found\"}", id); +} + +static void handle_read_frame_ram(int id, const char *json) +{ + int f = json_get_int(json, "frame", -1); + if (f < 0) { send_err(id, "missing frame"); return; } + if (!s_frame_history) { send_err(id, "ring buffer not allocated"); return; } + + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + int len = json_get_int(json, "len", 1); + if (len < 1) len = 1; + if (len > 128) len = 128; + + uint64_t oldest = (s_history_count > FRAME_HISTORY_CAP) + ? s_history_count - FRAME_HISTORY_CAP : 0; + if ((uint64_t)f < oldest || (uint64_t)f >= s_history_count) { + send_err(id, "frame not in buffer"); return; + } + + uint32_t idx = (uint32_t)f % FRAME_HISTORY_CAP; + const PSXFrameRecord *r = &s_frame_history[idx]; + + /* Find matching snapshot region */ + char hex[257]; + int found = 0; + for (int i = 0; i < RAM_SNAPSHOT_REGIONS; i++) { + if (r->snapshot_addr[i] == 0) continue; + if (addr >= r->snapshot_addr[i] && addr + len <= r->snapshot_addr[i] + RAM_SNAPSHOT_SIZE) { + uint32_t off = addr - r->snapshot_addr[i]; + for (int j = 0; j < len; j++) + snprintf(hex + j * 2, 3, "%02x", r->snapshot_data[i][off + j]); + found = 1; + break; + } + } + + if (!found) { + send_err(id, "address not in any snapshot region for this frame"); return; + } + + send_fmt("{\"id\":%d,\"ok\":true,\"frame\":%d,\"addr\":\"0x%08X\",\"len\":%d,\"hex\":\"%s\"}", + id, f, addr, len, hex); +} + +static void handle_set_snapshot(int id, const char *json) +{ + int slot = json_get_int(json, "slot", -1); + if (slot < 0 || slot >= RAM_SNAPSHOT_REGIONS) { + send_err(id, "invalid slot (0-3)"); return; + } + char addr_str[32]; + if (!json_get_str(json, "addr", addr_str, sizeof(addr_str))) { + send_err(id, "missing addr"); return; + } + uint32_t addr = hex_to_u32(addr_str); + s_snapshot_addrs[slot] = addr; + s_snapshot_active[slot] = (addr != 0); + send_fmt("{\"id\":%d,\"ok\":true,\"slot\":%d,\"addr\":\"0x%08X\"}", id, slot, addr); +} + +static void handle_get_snapshots(int id, const char *json) +{ + (void)json; + send_fmt("{\"id\":%d,\"ok\":true,\"snapshots\":[" + "{\"slot\":0,\"addr\":\"0x%08X\",\"active\":%d}," + "{\"slot\":1,\"addr\":\"0x%08X\",\"active\":%d}," + "{\"slot\":2,\"addr\":\"0x%08X\",\"active\":%d}," + "{\"slot\":3,\"addr\":\"0x%08X\",\"active\":%d}]}", + id, + s_snapshot_addrs[0], s_snapshot_active[0], + s_snapshot_addrs[1], s_snapshot_active[1], + s_snapshot_addrs[2], s_snapshot_active[2], + s_snapshot_addrs[3], s_snapshot_active[3]); +} + +static void handle_screenshot(int id, const char *json) +{ + (void)json; + /* Read display area from GPU and encode as hex RGB555 */ + GpuDisplayInfo di; + gpu_get_display_info(&di); + + if (di.disabled || di.width == 0 || di.height == 0) { + send_err(id, "display disabled"); return; + } + + const uint16_t *vram = gpu_get_vram(); + uint32_t w = di.width; + uint32_t h = di.height; + if (w > 640) w = 640; + if (h > 512) h = 512; + + /* Send metadata first */ + send_fmt("{\"id\":%d,\"ok\":true,\"width\":%u,\"height\":%u,\"format\":\"rgb555\"}", + id, w, h); + + /* Send rows as hex lines */ + char *hex = (char *)malloc(w * 4 + 32); + if (!hex) return; + + for (uint32_t y = 0; y < h; y++) { + uint32_t vy = (di.display_y + y) & 511; + for (uint32_t x = 0; x < w; x++) { + uint32_t vx = (di.display_x + x) & 1023; + uint16_t pixel = vram[vy * 1024 + vx]; + snprintf(hex + x * 4, 5, "%04x", pixel); + } + send_fmt("{\"row\":%u,\"hex\":\"%s\"}", y, hex); + } + free(hex); +} + +static void handle_vram_peek(int id, const char *json) +{ + int x = json_get_int(json, "x", 0); + int y = json_get_int(json, "y", 0); + int w = json_get_int(json, "w", 8); + int h = json_get_int(json, "h", 1); + if (w > 64) w = 64; + if (h > 64) h = 64; + char hex[64*64*4+1]; + int pos = 0; + for (int row = 0; row < h; row++) { + for (int col = 0; col < w; col++) { + uint16_t p = gpu_vram_peek(x + col, y + row); + pos += snprintf(hex + pos, sizeof(hex) - pos, "%04x", p); + } + } + send_fmt("{\"id\":%d,\"ok\":true,\"x\":%d,\"y\":%d,\"w\":%d,\"h\":%d,\"hex\":\"%s\"}", + id, x, y, w, h, hex); +} + +static void handle_quit(int id, const char *json) +{ + (void)json; + send_ok(id); + debug_server_shutdown(); + exit(0); +} + +/* ---- Command dispatch table ---- */ + +typedef void (*CmdHandler)(int id, const char *json); +typedef struct { const char *name; CmdHandler handler; } CmdEntry; + +static const CmdEntry s_commands[] = { + { "ping", handle_ping }, + { "frame", handle_frame }, + { "get_registers", handle_get_registers }, + { "read_ram", handle_read_ram }, + { "dump_ram", handle_dump_ram }, + { "write_ram", handle_write_ram }, + { "gpu_state", handle_gpu_state }, + { "vram_peek", handle_vram_peek }, + { "irq_state", handle_irq_state }, + { "sio_state", handle_sio_state }, + { "watch", handle_watch }, + { "unwatch", handle_unwatch }, + { "set_input", handle_set_input }, + { "press", handle_press }, + { "clear_input", handle_clear_input }, + { "pause", handle_pause }, + { "continue", handle_continue }, + { "step", handle_step }, + { "run_to_frame", handle_run_to_frame }, + { "history", handle_history }, + { "get_frame", handle_get_frame }, + { "frame_range", handle_frame_range }, + { "frame_timeseries", handle_frame_timeseries }, + { "first_failure", handle_first_failure }, + { "read_frame_ram", handle_read_frame_ram }, + { "set_snapshot", handle_set_snapshot }, + { "get_snapshots", handle_get_snapshots }, + { "screenshot", handle_screenshot }, + { "quit", handle_quit }, + { NULL, NULL } +}; + +static void process_command(const char *line) +{ + char cmd[64]; + if (!json_get_str(line, "cmd", cmd, sizeof(cmd))) { + strncpy(cmd, line, sizeof(cmd) - 1); + cmd[sizeof(cmd) - 1] = '\0'; + int len = (int)strlen(cmd); + while (len > 0 && (cmd[len-1] == '\r' || cmd[len-1] == ' ')) + cmd[--len] = '\0'; + } + + int id = json_get_int(line, "id", 0); + + for (const CmdEntry *e = s_commands; e->name; e++) { + if (strcmp(cmd, e->name) == 0) { + e->handler(id, line); + return; + } + } + + send_err(id, "unknown command"); +} + +/* ---- Public API ---- */ + +/* Extended init that accepts a CPU state pointer for register queries. */ +static CPUState *s_init_cpu = NULL; + +void debug_server_set_cpu(CPUState *cpu) +{ + s_cpu = cpu; +} + +void debug_server_init(int port) +{ + if (port > 0) s_port = port; + +#ifdef _WIN32 + WSADATA wsa; + WSAStartup(MAKEWORD(2, 2), &wsa); +#endif + + s_listen = socket(AF_INET, SOCK_STREAM, 0); + if (s_listen == SOCK_INVALID) return; + + int yes = 1; + setsockopt(s_listen, SOL_SOCKET, SO_REUSEADDR, (const char *)&yes, sizeof(yes)); + + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + addr.sin_port = htons((uint16_t)s_port); + + if (bind(s_listen, (struct sockaddr *)&addr, sizeof(addr)) != 0) { + sock_close(s_listen); + s_listen = SOCK_INVALID; + return; + } + + listen(s_listen, 1); + set_nonblocking(s_listen); + + if (!s_frame_history) { + s_frame_history = (PSXFrameRecord *)calloc(FRAME_HISTORY_CAP, sizeof(PSXFrameRecord)); + } + s_history_count = 0; + + memset(s_watchpoints, 0, sizeof(s_watchpoints)); + memset(s_snapshot_addrs, 0, sizeof(s_snapshot_addrs)); + memset(s_snapshot_active, 0, sizeof(s_snapshot_active)); +} + +void debug_server_poll(void) +{ + if (s_listen == SOCK_INVALID) return; + + if (s_client == SOCK_INVALID) { + struct sockaddr_in caddr; + int clen = sizeof(caddr); + sock_t c = accept(s_listen, (struct sockaddr *)&caddr, &clen); + if (c != SOCK_INVALID) { + s_client = c; + set_nonblocking(s_client); + s_recv_len = 0; + } + return; + } + + int space = RECV_BUF_SIZE - s_recv_len - 1; + if (space > 0) { + int n = recv(s_client, s_recv_buf + s_recv_len, space, 0); + if (n > 0) { + s_recv_len += n; + s_recv_buf[s_recv_len] = '\0'; + } else if (n == 0) { + sock_close(s_client); + s_client = SOCK_INVALID; + s_paused = 0; + s_input_override = -1; + return; + } else { + int err = sock_error(); +#ifdef _WIN32 + if (err != WSAEWOULDBLOCK) { +#else + if (err != EAGAIN && err != EWOULDBLOCK) { +#endif + sock_close(s_client); + s_client = SOCK_INVALID; + s_paused = 0; + s_input_override = -1; + return; + } + } + } + + char *nl; + while ((nl = strchr(s_recv_buf, '\n')) != NULL) { + *nl = '\0'; + if (nl > s_recv_buf && *(nl - 1) == '\r') + *(nl - 1) = '\0'; + if (s_recv_buf[0] != '\0') + process_command(s_recv_buf); + int consumed = (int)(nl - s_recv_buf) + 1; + s_recv_len -= consumed; + memmove(s_recv_buf, nl + 1, s_recv_len + 1); + } +} + +void debug_server_record_frame(void) +{ + if (!s_frame_history) return; + if (!s_cpu) return; + + uint32_t idx = (uint32_t)(s_frame_count % FRAME_HISTORY_CAP); + PSXFrameRecord *r = &s_frame_history[idx]; + + r->frame_number = (uint32_t)s_frame_count; + r->verify_pass = -1; + r->diff_count = 0; + memset(r->diffs, 0, sizeof(r->diffs)); + + /* MIPS CPU state */ + memcpy(r->gpr, s_cpu->gpr, sizeof(r->gpr)); + r->hi = s_cpu->hi; + r->lo = s_cpu->lo; + r->cop0_sr = s_cpu->cop0[12]; + r->cop0_cause = s_cpu->cop0[13]; + r->cop0_epc = s_cpu->cop0[14]; + + /* Interrupt state */ + r->i_stat = i_stat; + r->i_mask = i_mask; + + /* GPU display state */ + { + GpuDisplayInfo di; + gpu_get_display_info(&di); + r->display_area_x = (uint16_t)di.display_x; + r->display_area_y = (uint16_t)di.display_y; + r->display_w = (uint16_t)di.width; + r->display_h = (uint16_t)di.height; + r->display_disabled = di.disabled; + } + + /* SIO state */ + r->pad_buttons = 0; /* TODO: expose from sio.c */ + r->sio_stat = (uint16_t)sio_read(0x1F801044); + r->sio_ctrl = (uint16_t)sio_read(0x1F80104A); + + /* Timing */ + r->dispatch_count = 0; /* filled externally if needed */ + r->total_dispatches = s_frame_count; + + /* Snapshot regions */ + for (int i = 0; i < RAM_SNAPSHOT_REGIONS; i++) { + r->snapshot_addr[i] = s_snapshot_addrs[i]; + if (s_snapshot_active[i] && s_snapshot_addrs[i] != 0) { + for (int j = 0; j < RAM_SNAPSHOT_SIZE; j++) + r->snapshot_data[i][j] = psx_read_byte(s_snapshot_addrs[i] + j); + } else { + memset(r->snapshot_data[i], 0, RAM_SNAPSHOT_SIZE); + } + } + + /* Game-specific data */ + memset(r->game_data, 0, sizeof(r->game_data)); + + /* Last function */ + strcpy(r->last_func, "(no tracking)"); + + s_history_count = s_frame_count + 1; + s_frame_count++; + + /* Step mode */ + if (s_step_count > 0) { + s_step_count--; + if (s_step_count == 0) { + s_paused = 1; + send_fmt("{\"event\":\"step_done\",\"frame\":%llu}", + (unsigned long long)(s_frame_count - 1)); + } + } + + /* Run-to-frame */ + if (s_run_to > 0 && s_frame_count - 1 >= s_run_to) { + s_paused = 1; + s_run_to = 0; + send_fmt("{\"event\":\"run_to_done\",\"frame\":%llu}", + (unsigned long long)(s_frame_count - 1)); + } +} + +void debug_server_wait_if_paused(void) +{ + while (s_paused) { + debug_server_poll(); + + SDL_Event ev; + while (SDL_PollEvent(&ev)) { + if (ev.type == SDL_QUIT) exit(0); + } + + SDL_Delay(5); + } +} + +void debug_server_check_watchpoints(void) +{ + if (s_client == SOCK_INVALID) return; + + for (int i = 0; i < MAX_WATCHPOINTS; i++) { + if (!s_watchpoints[i].active) continue; + uint8_t cur = psx_read_byte(s_watchpoints[i].addr); + if (cur != s_watchpoints[i].prev_val) { + send_fmt("{\"event\":\"watchpoint\"," + "\"addr\":\"0x%08X\",\"old\":\"0x%02X\",\"new\":\"0x%02X\"," + "\"frame\":%llu}", + s_watchpoints[i].addr, + s_watchpoints[i].prev_val, cur, + (unsigned long long)s_frame_count); + s_watchpoints[i].prev_val = cur; + } + } +} + +void debug_server_shutdown(void) +{ + if (s_client != SOCK_INVALID) { + sock_close(s_client); + s_client = SOCK_INVALID; + } + if (s_listen != SOCK_INVALID) { + sock_close(s_listen); + s_listen = SOCK_INVALID; + } +#ifdef _WIN32 + WSACleanup(); +#endif +} + +int debug_server_is_connected(void) +{ + return s_client != SOCK_INVALID; +} + +int debug_server_get_input_override(void) +{ + if (s_input_override >= 0 && s_input_frames > 0) { + if (--s_input_frames == 0) + s_input_override = -1; + } + return s_input_override; +} diff --git a/runtime/src/dma.c b/runtime/src/dma.c new file mode 100644 index 00000000..d6be181b --- /dev/null +++ b/runtime/src/dma.c @@ -0,0 +1,304 @@ +/* dma.c — PS1 DMA controller simulation (Phase 3). + * + * Implements all 7 channel register reads/writes, DPCR, DICR, + * and transfer execution for: + * - Ch2 (GPU): block mode and linked-list mode + * - Ch6 (OTC): ordering table clear + * + * Transfer is executed synchronously when CHCR start bit is written. + * Reference: nocash PSX specs, DuckStation src/core/dma.cpp + */ + +#include "dma.h" +#include "gpu.h" +#include +#include +#include +#include + +/* Memory access — defined in memory.c */ +extern uint32_t psx_read_word(uint32_t addr); +extern void psx_write_word(uint32_t addr, uint32_t val); + +/* Interrupt status — defined in memory.c */ +extern uint32_t i_stat; + +/* ---- Per-channel registers ---- */ + +typedef struct { + uint32_t madr; /* +0x00: Memory address */ + uint32_t bcr; /* +0x04: Block control */ + uint32_t chcr; /* +0x08: Channel control */ +} DMAChannel; + +static DMAChannel channels[7]; + +/* ---- Global registers ---- */ + +static uint32_t dpcr; /* 0x1F8010F0: DMA control (enable bits) */ +static uint32_t dicr; /* 0x1F8010F4: DMA interrupt control */ + +/* ---- Helpers ---- */ + +static uint32_t prev_master_flag; /* for edge detection */ + +static void update_master_irq(void) { + /* DICR bit 31 (master IRQ flag) is read-only, calculated as: + * bit31 = bit15 OR (bit23 AND ((bits16-22 AND bits24-30) != 0)) + * + * We store bits 0-30 in dicr and compute bit 31 on read. */ + uint32_t force_irq = (dicr >> 15) & 1; + uint32_t master_enable = (dicr >> 23) & 1; + uint32_t enable_bits = (dicr >> 16) & 0x7F; + uint32_t flag_bits = (dicr >> 24) & 0x7F; + + uint32_t master_flag = force_irq | (master_enable & ((enable_bits & flag_bits) != 0)); + + dicr = (dicr & 0x7FFFFFFFu) | (master_flag << 31); + + /* Edge-triggered: only set I_STAT bit 3 on 0→1 transition of + * master_flag. On real PS1, the DMA controller asserts the IRQ + * line once per transition, not continuously while the flag is + * high. Without this, an unacknowledged DMA IRQ causes an + * interrupt storm (i_stat bit 3 re-set on every DMA register + * access or DICR read). */ + if (master_flag && !prev_master_flag) { + i_stat |= (1u << 3); + } + prev_master_flag = master_flag; +} + +static int channel_enabled(int ch) { + /* DPCR: each channel has 4 bits, bit 3 of each group is enable. + * Ch0 = bits 0-3, Ch1 = bits 4-7, etc. Enable = bit (ch*4 + 3). */ + return (dpcr >> (ch * 4 + 3)) & 1; +} + +/* ---- Transfer execution ---- */ + +static void execute_ch2_gpu(void) { + uint32_t chcr = channels[2].chcr; + uint32_t direction = chcr & 1; /* 0=to RAM, 1=from RAM (to device) */ + uint32_t step = (chcr >> 1) & 1; /* 0=forward(+4), 1=backward(-4) */ + uint32_t sync_mode = (chcr >> 9) & 3; /* 0=burst, 1=block, 2=linked-list */ + + if (direction == 0) { + /* GPU → RAM (VRAM read) — not implemented yet */ + fprintf(stderr, "DMA ch2: GPU→RAM transfer not implemented\n"); + fflush(stderr); + exit(1); + } + + /* direction == 1: RAM → GPU */ + if (sync_mode == 1) { + /* Block mode: BCR bits 0-15 = block size (words), bits 16-31 = block count */ + uint32_t block_size = channels[2].bcr & 0xFFFF; + uint32_t block_count = (channels[2].bcr >> 16) & 0xFFFF; + uint32_t total_words = block_size * block_count; + uint32_t addr = channels[2].madr & 0x1FFFFCu; /* mask to RAM, word-aligned */ + int32_t addr_step = step ? -4 : 4; + + for (uint32_t i = 0; i < total_words; i++) { + uint32_t word = psx_read_word(addr); + gpu_write_gp0(word); + addr = (addr + addr_step) & 0x1FFFFCu; + } + channels[2].madr = addr; + } else if (sync_mode == 2) { + /* Linked-list mode: follow ordering table in RAM. + * Each node: bits 24-31 = number of words following header, + * bits 0-23 = next node address (0xFFFFFF = end). + * The words following the header are sent to GP0. */ + uint32_t addr = channels[2].madr & 0x1FFFFCu; + uint32_t safety = 0; + const uint32_t MAX_NODES = 0x40000; /* prevent infinite loops */ + + for (;;) { + if (safety++ > MAX_NODES) { + fprintf(stderr, "DMA ch2 linked-list: exceeded %u nodes — possible corruption\n", MAX_NODES); + fflush(stderr); + exit(1); + } + + uint32_t header = psx_read_word(addr); + uint32_t num_words = (header >> 24) & 0xFF; + uint32_t word_addr = (addr + 4) & 0x1FFFFCu; + + for (uint32_t i = 0; i < num_words; i++) { + uint32_t word = psx_read_word(word_addr); + gpu_write_gp0(word); + word_addr = (word_addr + 4) & 0x1FFFFCu; + } + + /* Next node */ + uint32_t next = header & 0xFFFFFFu; + if (next == 0xFFFFFFu) break; /* end of list */ + addr = next & 0x1FFFFCu; + } + } else { + /* Burst mode (sync_mode == 0) */ + uint32_t word_count = channels[2].bcr & 0xFFFF; + if (word_count == 0) word_count = 0x10000; /* 0 means 0x10000 */ + uint32_t addr = channels[2].madr & 0x1FFFFCu; + int32_t addr_step = step ? -4 : 4; + + for (uint32_t i = 0; i < word_count; i++) { + uint32_t word = psx_read_word(addr); + gpu_write_gp0(word); + addr = (addr + addr_step) & 0x1FFFFCu; + } + channels[2].madr = addr; + } + + /* Transfer complete: clear start/busy/trigger bits */ + channels[2].chcr &= ~((1u << 24) | (1u << 28)); + + /* DMA completion IRQ: suppressed. In our model, DMA transfers + * complete synchronously when CHCR is written. The BIOS polls + * CHCR start bit (which we clear above) to detect completion. + * Posting DICR IRQ flags causes an interrupt storm because the + * BIOS kernel's exception handler has no registered EvCB callback + * to acknowledge DMA in i_stat, leaving it permanently pending. */ +} + +static void execute_ch6_otc(void) { + /* OTC (Ordering Table Clear): writes a backward-linked list to RAM. + * Node N = address of node N-1, node 0 = 0xFFFFFF (end marker). + * Direction is always to-RAM, step is always backward. + * BCR bits 0-15 = number of entries. */ + uint32_t num_entries = channels[6].bcr & 0xFFFF; + if (num_entries == 0) num_entries = 0x10000; + uint32_t addr = channels[6].madr & 0x1FFFFCu; + + for (uint32_t i = 0; i < num_entries; i++) { + uint32_t val; + if (i == num_entries - 1) { + /* Last entry (first in memory): end marker */ + val = 0x00FFFFFFu; + } else { + /* Points to the previous entry (addr - 4) */ + val = (addr - 4) & 0x00FFFFFFu; + } + psx_write_word(addr, val); + addr = (addr - 4) & 0x1FFFFCu; + } + + /* Transfer complete */ + channels[6].chcr &= ~((1u << 24) | (1u << 28)); + + /* DMA completion IRQ for ch6: suppressed (same rationale as ch2). */ +} + +static void try_execute(int ch) { + uint32_t chcr = channels[ch].chcr; + + /* Transfer starts when bit 24 (start/busy) is set AND channel is enabled in DPCR */ + if (!((chcr >> 24) & 1)) return; + if (!channel_enabled(ch)) return; + + switch (ch) { + case 2: + execute_ch2_gpu(); + break; + case 6: + execute_ch6_otc(); + break; + default: + /* Other channels not implemented yet — fatal if transfer is triggered */ + fprintf(stderr, "DMA ch%d: transfer triggered but not implemented (CHCR=0x%08X)\n", ch, chcr); + fflush(stderr); + exit(1); + } +} + +/* ---- Public interface ---- */ + +void dma_init(void) { + memset(channels, 0, sizeof(channels)); + dpcr = 0x07654321u; /* default: priorities set, no channels enabled */ + dicr = 0; + prev_master_flag = 0; +} + +uint32_t dma_read(uint32_t addr) { + /* DPCR */ + if (addr == 0x1F8010F0u) return dpcr; + /* DICR */ + if (addr == 0x1F8010F4u) { + update_master_irq(); + return dicr; + } + + /* Per-channel registers: 0x1F801080 + ch*0x10 + offset */ + if (addr >= 0x1F801080u && addr <= 0x1F8010EFu) { + uint32_t offset = addr - 0x1F801080u; + int ch = offset / 0x10; + int reg = offset % 0x10; + + if (ch > 6) goto bad; + switch (reg) { + case 0x00: return channels[ch].madr; + case 0x04: return channels[ch].bcr; + case 0x08: return channels[ch].chcr; + default: goto bad; + } + } + +bad: + fprintf(stderr, "DMA read from unknown address 0x%08X\n", addr); + fflush(stderr); + exit(1); + return 0; +} + +void dma_write(uint32_t addr, uint32_t val) { + /* DPCR */ + if (addr == 0x1F8010F0u) { + dpcr = val; + return; + } + /* DICR: bits 24-30 are write-1-to-acknowledge (clear), rest are writable */ + if (addr == 0x1F8010F4u) { + /* Bits 0-14: unused / force-IRQ bits — writable */ + /* Bit 15: force IRQ — writable */ + /* Bits 16-23: enable flags — writable */ + /* Bits 24-30: IRQ flags — write 1 to CLEAR */ + /* Bit 31: master flag — read-only (computed) */ + uint32_t ack_bits = val & 0x7F000000u; /* bits to clear */ + uint32_t write_bits = val & 0x00FFFFFFu; /* bits to set */ + dicr = (write_bits) | (dicr & 0x7F000000u & ~ack_bits); + update_master_irq(); + return; + } + + /* Per-channel registers */ + if (addr >= 0x1F801080u && addr <= 0x1F8010EFu) { + uint32_t offset = addr - 0x1F801080u; + int ch = offset / 0x10; + int reg = offset % 0x10; + + if (ch > 6) goto bad; + switch (reg) { + case 0x00: + channels[ch].madr = val; + return; + case 0x04: + channels[ch].bcr = val; + return; + case 0x08: + channels[ch].chcr = val; + /* Writing CHCR with start bit set triggers transfer */ + if ((val >> 24) & 1) { + try_execute(ch); + } + return; + default: + goto bad; + } + } + +bad: + fprintf(stderr, "DMA write to unknown address 0x%08X = 0x%08X\n", addr, val); + fflush(stderr); + exit(1); +} diff --git a/runtime/src/gpu.c b/runtime/src/gpu.c new file mode 100644 index 00000000..b4aa2874 --- /dev/null +++ b/runtime/src/gpu.c @@ -0,0 +1,1275 @@ +/* gpu.c — PS1 GPU hardware simulation (Phase 3, Step 1). + * + * Implements: + * - GPUSTAT register with correct bit semantics + * - GP1 commands 00h-08h (reset, display config) + * - VRAM storage (1024x512 x 16-bit) + * - GP0 command write — ABORTS (not yet implemented) + * - GPUREAD — returns last latched value + * + * Reference: nocash PSX specs, DuckStation src/core/gpu.cpp + */ + +#include "gpu.h" +#include +#include +#include +#include + +/* ---- VRAM ---- */ +static uint16_t vram[1024 * 512]; + +/* ---- GP0 state machine ---- */ + +typedef enum { + GP0_IDLE, + GP0_COLLECTING, + GP0_VRAM_WRITE +} Gp0State; + +static Gp0State gp0_state; +static uint64_t gp0_write_count; +static uint64_t gp0_nop_count, gp0_fill_count, gp0_draw_count, gp0_env_count, gp0_copy_count; +static uint32_t gp0_cmd_buf[16]; /* max fixed-length command is 12 words */ +static int gp0_words_collected; +static int gp0_words_needed; + +/* VRAM write transfer state (CPU→VRAM, command 0xA0) */ +static uint16_t vram_write_x, vram_write_y; /* start coords */ +static uint16_t vram_write_w, vram_write_h; /* dimensions */ +static uint16_t vram_write_col, vram_write_row; /* current offset */ +static uint32_t vram_write_remaining; /* words remaining */ + +/* VRAM read transfer state (VRAM→CPU, command 0xC0) */ +static int vram_read_active; +static uint16_t vram_read_x, vram_read_y; +static uint16_t vram_read_w, vram_read_h; +static uint16_t vram_read_col, vram_read_row; + +/* ---- GPU internal state ---- */ + +/* Texture page / draw mode (set by GP0(E1h), reflected in GPUSTAT bits 0-10) */ +static uint32_t texpage_x; /* bits 0-3: texture page X base (N*64) */ +static uint32_t texpage_y; /* bit 4: texture page Y base (0 or 256) */ +static uint32_t semi_transparency; /* bits 5-6 */ +static uint32_t texpage_colors; /* bits 7-8: 4bit/8bit/15bit */ +static uint32_t dither_enabled; /* bit 9 */ +static uint32_t draw_to_display; /* bit 10: drawing to display area allowed */ +static uint32_t set_mask_bit; /* bit 11 */ +static uint32_t check_mask_bit; /* bit 12 */ +static uint32_t interlace_field; /* bit 13 */ +static uint32_t reverse_flag; /* bit 14 */ +static uint32_t texture_disable; /* bit 15 */ + +/* Draw area (set by GP0(E3h)/GP0(E4h)) */ +static uint32_t draw_area_left, draw_area_top; +static uint32_t draw_area_right, draw_area_bottom; + +/* Draw offset (set by GP0(E5h)) */ +static int32_t draw_offset_x, draw_offset_y; + +/* Texture window raw value (set by GP0(E2h), readback via GP1(10h)) */ +static uint32_t texture_window_value; + +/* Display mode (set by GP1(08h), reflected in GPUSTAT bits 16-22) */ +static uint32_t hres2; /* bit 16: horizontal resolution 2 (368 mode) */ +static uint32_t hres1; /* bits 17-18: horizontal resolution 1 */ +static uint32_t vres; /* bit 19: vertical resolution (0=240, 1=480) */ +static uint32_t video_mode; /* bit 20: 0=NTSC, 1=PAL */ +static uint32_t display_depth; /* bit 21: 0=15bit, 1=24bit */ +static uint32_t vertical_interlace; /* bit 22 */ + +/* Display enable (set by GP1(03h)) */ +static uint32_t display_disabled; /* bit 23: 0=enabled, 1=disabled */ + +/* IRQ1 (set by GP0(1Fh), acked by GP1(02h)) */ +static uint32_t irq1_flag; /* bit 24 */ + +/* DMA direction (set by GP1(04h)) */ +static uint32_t dma_direction; /* bits 29-30 in GPUSTAT */ + +/* LCF (even/odd line in interlace, toggles per vblank) */ +static uint32_t lcf; /* bit 31 */ + +/* Display area start (GP1(05h)) */ +static uint32_t display_area_x; +static uint32_t display_area_y; + +/* Horizontal display range (GP1(06h)) */ +static uint32_t h_display_x1; +static uint32_t h_display_x2; + +/* Vertical display range (GP1(07h)) */ +static uint32_t v_display_y1; +static uint32_t v_display_y2; + +/* GPUREAD latch (GP1(10h) get-info result, or VRAM read data) */ +static uint32_t gpuread_latch; + +/* Vblank presentation callback */ +static gpu_vblank_cb vblank_callback; + +/* GPUSTAT poll counter: in v4, recompiled code runs as native C without + * per-instruction stepping. The BIOS contains tight VSYNC wait loops that + * poll GPUSTAT bit 31 (LCF) waiting for it to toggle. LCF only changes + * via gpu_vblank_tick(), which normally fires from psx_check_interrupts() + * at dispatch boundaries. A polling loop within a single recompiled + * function would spin forever. + * + * Fix: count GPUSTAT reads and trigger a vblank when the BIOS has polled + * enough times, approximating the real hardware timing where the field + * flips every ~33,868 GPU clocks (one NTSC frame). */ +#define GPUSTAT_POLL_VBLANK_THRESHOLD 1000 +static uint32_t gpustat_poll_count; + +/* ---- Initialization ---- */ + +void gpu_init(void) { + memset(vram, 0, sizeof(vram)); + + /* Reset GP0 state machine */ + gp0_state = GP0_IDLE; + gp0_words_collected = 0; + gp0_words_needed = 0; + vram_write_remaining = 0; + vram_read_active = 0; + + /* Reset all state to power-on defaults */ + texpage_x = 0; + texpage_y = 0; + semi_transparency = 0; + texpage_colors = 0; + dither_enabled = 0; + draw_to_display = 0; + set_mask_bit = 0; + check_mask_bit = 0; + interlace_field = 0; + reverse_flag = 0; + texture_disable = 0; + + draw_area_left = 0; + draw_area_top = 0; + draw_area_right = 0; + draw_area_bottom = 0; + draw_offset_x = 0; + draw_offset_y = 0; + texture_window_value = 0; + + hres2 = 0; + hres1 = 0; + vres = 0; + video_mode = 0; + display_depth = 0; + vertical_interlace = 0; + + display_disabled = 1; /* display is OFF after reset */ + irq1_flag = 0; + dma_direction = 0; + lcf = 0; + + display_area_x = 0; + display_area_y = 0; + h_display_x1 = 0x200; + h_display_x2 = 0xC00; + v_display_y1 = 0x010; + v_display_y2 = 0x100; + + gpuread_latch = 0; + gpustat_poll_count = 0; +} + +/* ---- GPUSTAT read (0x1F801814) ---- */ + +uint32_t gpu_read_gpustat(void) { + /* Advance vblank when polled enough times from within a single function. + * This handles BIOS VSYNC wait loops that poll LCF in tight loops. */ + gpustat_poll_count++; + if (gpustat_poll_count >= GPUSTAT_POLL_VBLANK_THRESHOLD) { + gpustat_poll_count = 0; + gpu_vblank_tick(); + } + + uint32_t stat = 0; + + stat |= (texpage_x & 0xF); + stat |= (texpage_y & 1) << 4; + stat |= (semi_transparency & 3) << 5; + stat |= (texpage_colors & 3) << 7; + stat |= (dither_enabled & 1) << 9; + stat |= (draw_to_display & 1) << 10; + stat |= (set_mask_bit & 1) << 11; + stat |= (check_mask_bit & 1) << 12; + stat |= (interlace_field & 1) << 13; + stat |= (reverse_flag & 1) << 14; + stat |= (texture_disable & 1) << 15; + stat |= (hres2 & 1) << 16; + stat |= (hres1 & 3) << 17; + stat |= (vres & 1) << 19; + stat |= (video_mode & 1) << 20; + stat |= (display_depth & 1) << 21; + stat |= (vertical_interlace & 1) << 22; + stat |= (display_disabled & 1) << 23; + stat |= (irq1_flag & 1) << 24; + + /* Bit 25: DMA request — depends on DMA direction. + * Direction 0: always 0 + * Direction 1: FIFO not full (always 1 for now — we process instantly) + * Direction 2: same as bit 28 (ready to receive DMA block) + * Direction 3: same as bit 27 (ready to send VRAM to CPU) + */ + switch (dma_direction) { + case 0: break; /* bit 25 = 0 */ + case 1: stat |= (1u << 25); break; + case 2: stat |= (1u << 25); break; /* mirrors ready-to-receive */ + case 3: stat |= (1u << 25); break; /* mirrors ready-to-send */ + } + + /* Bit 26: ready to receive cmd word — 1 when not busy */ + stat |= (1u << 26); + + /* Bit 27: ready to send VRAM to CPU — 1 when VRAM read is active */ + if (vram_read_active) + stat |= (1u << 27); + + /* Bit 28: ready to receive DMA block — 1 when not busy */ + stat |= (1u << 28); + + /* Bits 29-30: DMA direction */ + stat |= (dma_direction & 3) << 29; + + /* Bit 31: LCF — drawing even/odd lines in interlace mode */ + stat |= (lcf & 1) << 31; + + return stat; +} + +/* ---- GPUREAD (0x1F801810 read) ---- */ + +uint32_t gpu_read_gpuread(void) { + if (!vram_read_active) + return gpuread_latch; + + /* Read two 16-bit pixels from VRAM and pack into one 32-bit word */ + uint32_t value = 0; + for (int i = 0; i < 2; i++) { + uint16_t rx = (vram_read_x + vram_read_col) % 1024; + uint16_t ry = (vram_read_y + vram_read_row) % 512; + value |= (uint32_t)vram[ry * 1024 + rx] << (i * 16); + + if (++vram_read_col == vram_read_w) { + vram_read_col = 0; + if (++vram_read_row == vram_read_h) { + /* Transfer complete */ + vram_read_active = 0; + break; + } + } + } + + gpuread_latch = value; + return value; +} + +/* ---- GP0 command helpers ---- */ + +/* Convert 24-bit RGB888 to 16-bit RGB555 (PS1 VRAM format) */ +static uint16_t rgb888_to_rgb555(uint32_t color24) { + uint32_t r = (color24 >> 0) & 0xFF; + uint32_t g = (color24 >> 8) & 0xFF; + uint32_t b = (color24 >> 16) & 0xFF; + return (uint16_t)((r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10)); +} + +/* I_STAT owned by memory.c — needed to set IRQ_VBLANK from poll-triggered vblank */ +extern uint32_t i_stat; + +void gpu_vblank_tick(void) { + lcf ^= 1; + gpustat_poll_count = 0; + i_stat |= (1u << 0); /* IRQ_VBLANK */ + if (vblank_callback) vblank_callback(); +} + +const uint16_t* gpu_get_vram(void) { + return vram; +} + +void gpu_get_display_info(GpuDisplayInfo* out) { + out->display_x = display_area_x; + out->display_y = display_area_y; + out->disabled = (int)display_disabled; + + /* Derive pixel width from horizontal display range and resolution mode. + * The BIOS typically sets 256x240 or 320x240 NTSC. */ + uint32_t dots = (h_display_x2 > h_display_x1) ? (h_display_x2 - h_display_x1) : 0; + + /* Horizontal resolution in pixels depends on hres1/hres2 bits. + * Common: hres1=0 → 256, hres1=1 → 320, hres1=2 → 512, hres1=3 → 640 + * hres2=1 → 368 */ + uint32_t w; + if (hres2) { + w = 368; + } else { + static const uint32_t hres_lut[4] = { 256, 320, 512, 640 }; + w = hres_lut[hres1 & 3]; + } + + uint32_t h = (v_display_y2 > v_display_y1) ? (v_display_y2 - v_display_y1) : 240; + if (vres) h *= 2; /* 480i */ + + /* Clamp to sane maximums */ + if (w > 640) w = 640; + if (h > 512) h = 512; + + out->width = w; + out->height = h; +} + +void gpu_set_vblank_callback(gpu_vblank_cb cb) { + vblank_callback = cb; +} + +/* Sign-extend an N-bit value to int32_t */ +static int32_t sign_extend(uint32_t val, int bits) { + uint32_t sign_bit = 1u << (bits - 1); + return (int32_t)((val ^ sign_bit) - sign_bit); +} + +/* ---- Polygon rasterizer ---- */ + +/* Parse a vertex position word: signed 11-bit X and Y */ +static void parse_vertex(uint32_t word, int32_t* x, int32_t* y) { + *x = sign_extend(word & 0x7FFu, 11); + *y = sign_extend((word >> 16) & 0x7FFu, 11); +} + +/* Write a single pixel to VRAM with draw area clipping and mask bit handling */ +static void raster_pixel(int32_t x, int32_t y, uint16_t color) { + if (x < (int32_t)draw_area_left || x > (int32_t)draw_area_right) return; + if (y < (int32_t)draw_area_top || y > (int32_t)draw_area_bottom) return; + uint32_t vx = (uint32_t)x & 1023u; + uint32_t vy = (uint32_t)y & 511u; + uint32_t idx = vy * 1024 + vx; + if (check_mask_bit && (vram[idx] & 0x8000u)) return; + vram[idx] = color | (set_mask_bit ? 0x8000u : 0u); +} + +/* Rasterize a flat-shaded triangle using DDA scanline fill. + * Vertices are in screen coordinates (draw offset already applied). */ +static void raster_triangle(int32_t x0, int32_t y0, + int32_t x1, int32_t y1, + int32_t x2, int32_t y2, + uint16_t color) +{ + /* Sort vertices by Y (ascending). */ + int32_t tx, ty; + if (y0 > y1) { tx=x0; ty=y0; x0=x1; y0=y1; x1=tx; y1=ty; } + if (y1 > y2) { tx=x1; ty=y1; x1=x2; y1=y2; x2=tx; y2=ty; } + if (y0 > y1) { tx=x0; ty=y0; x0=x1; y0=y1; x1=tx; y1=ty; } + + /* Reject degenerate (zero-height) or oversized triangles. */ + if (y0 == y2) return; + if ((x2 - x0) > 1023 || (x0 - x2) > 1023) return; + if ((y2 - y0) > 511) return; + + /* 64-bit fixed-point DDA (32.32) matching PS1 hardware behavior. + * Reference: DuckStation gpu_sw_rasterizer.inl makefp_xy / makestep_xy */ + #define FP_ONE (1LL << 32) + #define MAKE_FP(v) (((int64_t)(v) << 32) + (FP_ONE - (1 << 11))) + #define MAKE_STEP(dx, dy) \ + ((((int64_t)(dx) << 32) + ((dx) < 0 ? -((dy)-1) : (((dx) > 0) ? ((dy)-1) : 0))) / (dy)) + #define UNFP(fp) ((int32_t)((uint64_t)(fp) >> 32)) + + /* Upper half: y0 to y1 */ + if (y1 > y0) { + int32_t dy_long = y2 - y0; + int32_t dy_short = y1 - y0; + int64_t base = MAKE_FP(x0); + int64_t step_long = MAKE_STEP(x2 - x0, dy_long); + int64_t step_short = MAKE_STEP(x1 - x0, dy_short); + /* Determine which edge is left vs right */ + int64_t lx, rx, ls, rs; + if (step_long < step_short) { + lx = base; ls = step_long; rx = base; rs = step_short; + } else { + lx = base; ls = step_short; rx = base; rs = step_long; + } + for (int32_t y = y0; y < y1; y++) { + int32_t xl = UNFP(lx); + int32_t xr = UNFP(rx); + for (int32_t x = xl; x < xr; x++) + raster_pixel(x, y, color); + lx += ls; rx += rs; + } + } + + /* Lower half: y1 to y2 */ + if (y2 > y1) { + int32_t dy_long = y2 - y0; + int32_t dy_short = y2 - y1; + /* Long edge continues from y0 to y2 */ + int64_t step_long = MAKE_STEP(x2 - x0, dy_long); + int64_t long_at_y1 = MAKE_FP(x0) + step_long * (y1 - y0); + int64_t short_start = MAKE_FP(x1); + int64_t step_short = MAKE_STEP(x2 - x1, dy_short); + /* Determine left/right from the upper half's orientation */ + int64_t lx, rx, ls, rs; + int64_t full_step_short_upper = (y1 > y0) ? MAKE_STEP(x1 - x0, y1 - y0) : 0; + if (step_long < full_step_short_upper || + (y1 == y0 && long_at_y1 <= short_start)) { + lx = long_at_y1; ls = step_long; rx = short_start; rs = step_short; + } else { + lx = short_start; ls = step_short; rx = long_at_y1; rs = step_long; + } + for (int32_t y = y1; y < y2; y++) { + int32_t xl = UNFP(lx); + int32_t xr = UNFP(rx); + for (int32_t x = xl; x < xr; x++) + raster_pixel(x, y, color); + lx += ls; rx += rs; + } + } + + #undef FP_ONE + #undef MAKE_FP + #undef MAKE_STEP + #undef UNFP +} + +/* Execute mono triangle (GP0 0x20-0x23) */ +static void gp0_exec_mono_tri(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[3], vy[3]; + for (int i = 0; i < 3; i++) { + parse_vertex(gp0_cmd_buf[1 + i], &vx[i], &vy[i]); + 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); +} + +/* Execute mono quad (GP0 0x28-0x2B) — two triangles: (0,1,2) and (2,1,3) */ +static void gp0_exec_mono_quad(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[4], vy[4]; + for (int i = 0; i < 4; i++) { + parse_vertex(gp0_cmd_buf[1 + i], &vx[i], &vy[i]); + 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); +} + +/* Execute shaded triangle (GP0 0x30-0x33) — flat shaded with first vertex color */ +static void gp0_exec_shaded_tri(void) { + /* For now, use first vertex color (true Gouraud shading deferred) */ + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[3], vy[3]; + /* Shaded tri: color0+v0, color1+v1, color2+v2 → words: C0, V0, C1, V1, C2, V2 */ + for (int i = 0; i < 3; i++) { + parse_vertex(gp0_cmd_buf[1 + i * 2], &vx[i], &vy[i]); + 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); +} + +/* Execute shaded quad (GP0 0x38-0x3B) */ +static void gp0_exec_shaded_quad(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[4], vy[4]; + /* Shaded quad: C0, V0, C1, V1, C2, V2, C3, V3 */ + for (int i = 0; i < 4; i++) { + parse_vertex(gp0_cmd_buf[1 + i * 2], &vx[i], &vy[i]); + 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); +} + +/* Execute textured triangle (GP0 0x24-0x27) — rasterize with flat color, ignore textures for now */ +static void gp0_exec_textured_tri(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[3], vy[3]; + /* Textured tri: color+v0, texcoord0+clut, v1, texcoord1+tpage, v2, texcoord2 */ + parse_vertex(gp0_cmd_buf[1], &vx[0], &vy[0]); + parse_vertex(gp0_cmd_buf[3], &vx[1], &vy[1]); + parse_vertex(gp0_cmd_buf[5], &vx[2], &vy[2]); + for (int i = 0; i < 3; i++) { + 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); +} + +/* Execute textured quad (GP0 0x2C-0x2F) */ +static void gp0_exec_textured_quad(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[4], vy[4]; + /* Textured quad: color+v0, texcoord0+clut, v1, texcoord1+tpage, v2, texcoord2, v3, texcoord3 */ + parse_vertex(gp0_cmd_buf[1], &vx[0], &vy[0]); + parse_vertex(gp0_cmd_buf[3], &vx[1], &vy[1]); + parse_vertex(gp0_cmd_buf[5], &vx[2], &vy[2]); + parse_vertex(gp0_cmd_buf[7], &vx[3], &vy[3]); + for (int i = 0; i < 4; i++) { + 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); +} + +/* Execute shaded textured triangle (GP0 0x34-0x37) */ +static void gp0_exec_shaded_textured_tri(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[3], vy[3]; + /* C0, V0, TC0+clut, C1, V1, TC1+tpage, C2, V2, TC2 */ + parse_vertex(gp0_cmd_buf[1], &vx[0], &vy[0]); + parse_vertex(gp0_cmd_buf[4], &vx[1], &vy[1]); + parse_vertex(gp0_cmd_buf[7], &vx[2], &vy[2]); + for (int i = 0; i < 3; i++) { + 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); +} + +/* Execute shaded textured quad (GP0 0x3C-0x3F) */ +static void gp0_exec_shaded_textured_quad(void) { + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t vx[4], vy[4]; + /* C0, V0, TC0+clut, C1, V1, TC1+tpage, C2, V2, TC2, C3, V3, TC3 */ + parse_vertex(gp0_cmd_buf[1], &vx[0], &vy[0]); + parse_vertex(gp0_cmd_buf[4], &vx[1], &vy[1]); + parse_vertex(gp0_cmd_buf[7], &vx[2], &vy[2]); + parse_vertex(gp0_cmd_buf[10], &vx[3], &vy[3]); + for (int i = 0; i < 4; i++) { + 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); +} + +/* Execute mono line (GP0 0x40-0x47) — Bresenham */ +static void gp0_exec_mono_line(void) { + 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; } + } +} + +/* Execute shaded line (GP0 0x50-0x57) — flat shaded for now */ +static void gp0_exec_shaded_line(void) { + 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); + /* Shaded line: C0, V0, C1, V1 */ + 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; } + } +} + +/* Execute mono rectangle (GP0 0x60-0x63) */ +static void gp0_exec_mono_rect(void) { + 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 */ + 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); +} + +/* Execute textured rectangle (GP0 0x64-0x67) */ +static void gp0_exec_textured_rect(void) { + /* Flat color for now — textures deferred */ + 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[3] & 0xFFFFu; + uint32_t h = (gp0_cmd_buf[3] >> 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); +} + +/* Execute 1x1 dot (GP0 0x68-0x6B) */ +static void gp0_exec_mono_dot(void) { + 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); +} + +/* Execute textured dot (GP0 0x74-0x77) */ +static void gp0_exec_textured_dot(void) { + 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); +} + +/* Execute 8x8 sprite (GP0 0x70-0x73) */ +static void gp0_exec_mono_8x8(void) { + 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); +} + +/* Execute 16x16 sprite (GP0 0x7C-0x7F) */ +static void gp0_exec_textured_16x16(void) { + 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 < 16; dy++) + for (int32_t dx = 0; dx < 16; dx++) + raster_pixel(x0 + dx, y0 + dy, color); +} + +/* ---- GP0 command execution ---- */ + +static void gp0_exec_nop(void) { + /* 0x00 / 0x01 — nothing to do */ +} + +static void gp0_exec_fill_rect(void) { + /* 0x02 — Fill Rectangle in VRAM + * Word 0: 0x02BBGGRR (color) + * Word 1: YstartXstart (X bits 0-9 aligned to 16, Y bits 16-24) + * Word 2: YsizXsiz (W bits 0-9 rounded up to 16, H bits 16-24) */ + uint32_t color24 = gp0_cmd_buf[0] & 0x00FFFFFF; + uint16_t color16 = rgb888_to_rgb555(color24); + + uint32_t dst_x = gp0_cmd_buf[1] & 0x3F0u; /* X masked to 16-pixel alignment */ + uint32_t dst_y = (gp0_cmd_buf[1] >> 16) & 0x1FFu; + uint32_t width = ((gp0_cmd_buf[2] & 0x3FFu) + 0xFu) & ~0xFu; /* round up to 16 */ + uint32_t height = (gp0_cmd_buf[2] >> 16) & 0x1FFu; + + /* Fill ignores draw area, mask bits, and draw offset — writes directly to VRAM */ + for (uint32_t row = 0; row < height; row++) { + uint32_t y = (dst_y + row) % 512; + for (uint32_t col = 0; col < width; col++) { + uint32_t x = (dst_x + col) % 1024; + vram[y * 1024 + x] = color16; + } + } +} + +static void gp0_exec_draw_mode(void) { + /* 0xE1 — Draw Mode / Texpage + * Bits 0-3: texpage X base + * Bit 4: texpage Y base + * Bits 5-6: semi-transparency mode + * Bits 7-8: texture color mode + * Bit 9: dither + * Bit 10: draw to display area + * Bit 11: texture disable (when allowed by GP1) */ + uint32_t param = gp0_cmd_buf[0] & 0x00FFFFFFu; + texpage_x = param & 0xF; + texpage_y = (param >> 4) & 1; + semi_transparency = (param >> 5) & 3; + texpage_colors = (param >> 7) & 3; + dither_enabled = (param >> 9) & 1; + draw_to_display = (param >> 10) & 1; + texture_disable = (param >> 11) & 1; +} + +static void gp0_exec_texture_window(void) { + /* 0xE2 — Texture Window + * Bits 0-4: mask X (in 8-pixel steps) + * Bits 5-9: mask Y + * Bits 10-14: offset X + * Bits 15-19: offset Y */ + texture_window_value = gp0_cmd_buf[0] & 0x000FFFFFu; +} + +static void gp0_exec_draw_area_tl(void) { + /* 0xE3 — Set Drawing Area Top-Left + * Bits 0-9: X + * Bits 10-19: Y */ + uint32_t param = gp0_cmd_buf[0] & 0x00FFFFFFu; + draw_area_left = param & 0x3FF; + draw_area_top = (param >> 10) & 0x3FF; +} + +static void gp0_exec_draw_area_br(void) { + /* 0xE4 — Set Drawing Area Bottom-Right + * Bits 0-9: X + * Bits 10-19: Y */ + uint32_t param = gp0_cmd_buf[0] & 0x00FFFFFFu; + draw_area_right = param & 0x3FF; + draw_area_bottom = (param >> 10) & 0x3FF; +} + +static void gp0_exec_draw_offset(void) { + /* 0xE5 — Set Drawing Offset + * Bits 0-10: X (signed 11-bit) + * Bits 11-21: Y (signed 11-bit) */ + uint32_t param = gp0_cmd_buf[0] & 0x00FFFFFFu; + draw_offset_x = sign_extend(param & 0x7FFu, 11); + draw_offset_y = sign_extend((param >> 11) & 0x7FFu, 11); +} + +static void gp0_exec_mask_bit(void) { + /* 0xE6 — Mask Bit Setting + * Bit 0: set mask bit when drawing (force bit 15 of pixels) + * Bit 1: check mask bit (don't draw to pixels with bit 15 set) */ + uint32_t param = gp0_cmd_buf[0] & 0x00FFFFFFu; + set_mask_bit = param & 1; + check_mask_bit = (param >> 1) & 1; +} + +static void gp0_exec_cpu_to_vram(void) { + /* 0xA0 — CPU→VRAM Copy (header: 3 words) + * Word 0: command + * Word 1: destination coords (X bits 0-9, Y bits 16-24) + * Word 2: dimensions (W bits 0-9, H bits 16-24) + * Followed by pixel data words */ + vram_write_x = gp0_cmd_buf[1] & 0x3FFu; + vram_write_y = (gp0_cmd_buf[1] >> 16) & 0x1FFu; + + uint32_t w = gp0_cmd_buf[2] & 0x3FFu; + uint32_t h = (gp0_cmd_buf[2] >> 16) & 0x1FFu; + /* 0 means max dimension */ + vram_write_w = (w == 0) ? 0x400 : (uint16_t)w; + vram_write_h = (h == 0) ? 0x200 : (uint16_t)h; + + vram_write_col = 0; + vram_write_row = 0; + + uint32_t num_pixels = (uint32_t)vram_write_w * (uint32_t)vram_write_h; + vram_write_remaining = (num_pixels + 1) / 2; + + if (vram_write_remaining > 0) + gp0_state = GP0_VRAM_WRITE; +} + +static void gp0_exec_vram_to_cpu(void) { + /* 0xC0 — VRAM→CPU Copy (3 words) + * Word 1: source coords + * Word 2: dimensions + * After this, data is read via GPUREAD */ + vram_read_x = gp0_cmd_buf[1] & 0x3FFu; + vram_read_y = (gp0_cmd_buf[1] >> 16) & 0x1FFu; + + uint32_t w = gp0_cmd_buf[2] & 0x3FFu; + uint32_t h = (gp0_cmd_buf[2] >> 16) & 0x1FFu; + vram_read_w = (w == 0) ? 0x400 : (uint16_t)w; + vram_read_h = (h == 0) ? 0x200 : (uint16_t)h; + + /* DuckStation uses (val-1)&mask+1 for VRAM→CPU, but the effect + * is identical: 0→max. We use ReplaceZero like CPU→VRAM. */ + + vram_read_col = 0; + vram_read_row = 0; + vram_read_active = 1; +} + +/* Determine how many words a GP0 command requires (header only, not counting + * variable-length data for 0xA0). Returns -1 for polylines (terminated by + * sentinel). Returns 0 for unknown commands (will be fatal). */ +static int gp0_command_word_count(uint8_t opcode) { + switch (opcode) { + /* NOP / control */ + case 0x00: return 1; + case 0x01: return 1; /* clear cache */ + case 0x02: return 3; /* fill rect */ + case 0x1F: return 1; /* IRQ request */ + + /* Drawing commands — polygons */ + case 0x20: case 0x21: case 0x22: case 0x23: return 4; /* mono tri */ + case 0x24: case 0x25: case 0x26: case 0x27: return 7; /* textured tri */ + case 0x28: case 0x29: case 0x2A: case 0x2B: return 5; /* mono quad */ + case 0x2C: case 0x2D: case 0x2E: case 0x2F: return 9; /* textured quad */ + case 0x30: case 0x31: case 0x32: case 0x33: return 6; /* shaded tri */ + case 0x34: case 0x35: case 0x36: case 0x37: return 9; /* shaded textured tri */ + case 0x38: case 0x39: case 0x3A: case 0x3B: return 8; /* shaded quad */ + case 0x3C: case 0x3D: case 0x3E: case 0x3F: return 12; /* shaded textured quad */ + + /* Lines */ + case 0x40: case 0x41: case 0x42: case 0x43: + case 0x44: case 0x45: case 0x46: case 0x47: return 3; /* mono line */ + case 0x48: case 0x49: case 0x4A: case 0x4B: + case 0x4C: case 0x4D: case 0x4E: case 0x4F: return -1; /* mono polyline */ + case 0x50: case 0x51: case 0x52: case 0x53: + case 0x54: case 0x55: case 0x56: case 0x57: return 4; /* shaded line */ + case 0x58: case 0x59: case 0x5A: case 0x5B: + case 0x5C: case 0x5D: case 0x5E: case 0x5F: return -1; /* shaded polyline */ + + /* Rectangles */ + case 0x60: case 0x61: case 0x62: case 0x63: return 3; /* variable rect */ + case 0x64: case 0x65: case 0x66: case 0x67: return 4; /* variable textured rect */ + case 0x68: case 0x69: case 0x6A: case 0x6B: return 2; /* 1x1 dot */ + case 0x6C: case 0x6D: case 0x6E: case 0x6F: return 3; /* 1x1 textured */ + case 0x70: case 0x71: case 0x72: case 0x73: return 2; /* 8x8 rect */ + case 0x74: case 0x75: case 0x76: case 0x77: return 3; /* 8x8 textured */ + case 0x78: case 0x79: case 0x7A: case 0x7B: return 2; /* 16x16 rect */ + case 0x7C: case 0x7D: case 0x7E: case 0x7F: return 3; /* 16x16 textured */ + + /* VRAM copy / transfer */ + case 0x80: case 0x81: case 0x82: case 0x83: + case 0x84: case 0x85: case 0x86: case 0x87: + case 0x88: case 0x89: case 0x8A: case 0x8B: + case 0x8C: case 0x8D: case 0x8E: case 0x8F: + case 0x90: case 0x91: case 0x92: case 0x93: + case 0x94: case 0x95: case 0x96: case 0x97: + case 0x98: case 0x99: case 0x9A: case 0x9B: + case 0x9C: case 0x9D: case 0x9E: case 0x9F: return 4; /* VRAM→VRAM */ + + case 0xA0: case 0xA1: case 0xA2: case 0xA3: + case 0xA4: case 0xA5: case 0xA6: case 0xA7: + case 0xA8: case 0xA9: case 0xAA: case 0xAB: + case 0xAC: case 0xAD: case 0xAE: case 0xAF: + case 0xB0: case 0xB1: case 0xB2: case 0xB3: + case 0xB4: case 0xB5: case 0xB6: case 0xB7: + case 0xB8: case 0xB9: case 0xBA: case 0xBB: + case 0xBC: case 0xBD: case 0xBE: case 0xBF: return 3; /* CPU→VRAM (header) */ + + case 0xC0: case 0xC1: case 0xC2: case 0xC3: + case 0xC4: case 0xC5: case 0xC6: case 0xC7: + case 0xC8: case 0xC9: case 0xCA: case 0xCB: + case 0xCC: case 0xCD: case 0xCE: case 0xCF: + case 0xD0: case 0xD1: case 0xD2: case 0xD3: + case 0xD4: case 0xD5: case 0xD6: case 0xD7: + case 0xD8: case 0xD9: case 0xDA: case 0xDB: + case 0xDC: case 0xDD: case 0xDE: case 0xDF: return 3; /* VRAM→CPU (header) */ + + /* Environment */ + case 0xE0: return 1; /* NOP */ + case 0xE1: return 1; /* draw mode */ + case 0xE2: return 1; /* texture window */ + case 0xE3: return 1; /* draw area TL */ + case 0xE4: return 1; /* draw area BR */ + case 0xE5: return 1; /* draw offset */ + case 0xE6: return 1; /* mask bits */ + + default: + /* 0x03-0x1E, 0xE7-0xEF, 0xFF: NOP (1 word) per DuckStation */ + if ((opcode >= 0x03 && opcode <= 0x1E) || + (opcode >= 0xE7 && opcode <= 0xEF) || + opcode == 0xFF) { + return 1; + } + return 0; /* unknown */ + } +} + +/* Execute a fully-collected GP0 command */ +static void gp0_execute_command(void) { + uint8_t opcode = (gp0_cmd_buf[0] >> 24) & 0xFF; + + /* Categorize for diagnostics */ + if (opcode <= 0x01) gp0_nop_count++; + else if (opcode == 0x02) gp0_fill_count++; + else if (opcode >= 0x20 && opcode <= 0x7F) gp0_draw_count++; + else if (opcode >= 0x80 && opcode <= 0xDF) gp0_copy_count++; + else if (opcode >= 0xE1 && opcode <= 0xE6) gp0_env_count++; + + switch (opcode) { + case 0x00: + case 0x01: + gp0_exec_nop(); + break; + + case 0x02: + gp0_exec_fill_rect(); + break; + + case 0xE1: + gp0_exec_draw_mode(); + break; + + case 0xE2: + gp0_exec_texture_window(); + break; + + case 0xE3: + gp0_exec_draw_area_tl(); + break; + + case 0xE4: + gp0_exec_draw_area_br(); + break; + + case 0xE5: + gp0_exec_draw_offset(); + break; + + case 0xE6: + gp0_exec_mask_bit(); + break; + + /* Drawing commands — polygons */ + case 0x20: case 0x21: case 0x22: case 0x23: + gp0_exec_mono_tri(); + break; + case 0x24: case 0x25: case 0x26: case 0x27: + gp0_exec_textured_tri(); + break; + case 0x28: case 0x29: case 0x2A: case 0x2B: + gp0_exec_mono_quad(); + break; + case 0x2C: case 0x2D: case 0x2E: case 0x2F: + gp0_exec_textured_quad(); + break; + case 0x30: case 0x31: case 0x32: case 0x33: + gp0_exec_shaded_tri(); + break; + case 0x34: case 0x35: case 0x36: case 0x37: + gp0_exec_shaded_textured_tri(); + break; + case 0x38: case 0x39: case 0x3A: case 0x3B: + gp0_exec_shaded_quad(); + break; + case 0x3C: case 0x3D: case 0x3E: case 0x3F: + gp0_exec_shaded_textured_quad(); + break; + + /* Lines */ + case 0x40: case 0x41: case 0x42: case 0x43: + case 0x44: case 0x45: case 0x46: case 0x47: + gp0_exec_mono_line(); + break; + case 0x50: case 0x51: case 0x52: case 0x53: + case 0x54: case 0x55: case 0x56: case 0x57: + gp0_exec_shaded_line(); + break; + + /* Rectangles */ + case 0x60: case 0x61: case 0x62: case 0x63: + gp0_exec_mono_rect(); + break; + case 0x64: case 0x65: case 0x66: case 0x67: + gp0_exec_textured_rect(); + break; + case 0x68: case 0x69: case 0x6A: case 0x6B: + gp0_exec_mono_dot(); + 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_dot(); + break; + case 0x7C: case 0x7D: case 0x7E: case 0x7F: + gp0_exec_textured_16x16(); + break; + + case 0xA0: case 0xA1: case 0xA2: case 0xA3: + case 0xA4: case 0xA5: case 0xA6: case 0xA7: + case 0xA8: case 0xA9: case 0xAA: case 0xAB: + case 0xAC: case 0xAD: case 0xAE: case 0xAF: + case 0xB0: case 0xB1: case 0xB2: case 0xB3: + case 0xB4: case 0xB5: case 0xB6: case 0xB7: + case 0xB8: case 0xB9: case 0xBA: case 0xBB: + case 0xBC: case 0xBD: case 0xBE: case 0xBF: + gp0_exec_cpu_to_vram(); + break; + + case 0xC0: case 0xC1: case 0xC2: case 0xC3: + case 0xC4: case 0xC5: case 0xC6: case 0xC7: + case 0xC8: case 0xC9: case 0xCA: case 0xCB: + case 0xCC: case 0xCD: case 0xCE: case 0xCF: + case 0xD0: case 0xD1: case 0xD2: case 0xD3: + case 0xD4: case 0xD5: case 0xD6: case 0xD7: + case 0xD8: case 0xD9: case 0xDA: case 0xDB: + case 0xDC: case 0xDD: case 0xDE: case 0xDF: + gp0_exec_vram_to_cpu(); + break; + + default: + /* NOP range: 0x03-0x1E, 0xE0, 0xE7-0xEF, 0xFF */ + if ((opcode >= 0x03 && opcode <= 0x1E) || + opcode == 0xE0 || + (opcode >= 0xE7 && opcode <= 0xEF) || + opcode == 0xFF) { + break; /* NOP — silently consume */ + } + + /* Any other command (drawing, VRAM-to-VRAM, etc.) is not yet + * implemented. Fatal exit so we know exactly what's needed next. */ + { + FILE* cf = fopen("psx_crash.txt", "w"); + if (cf) { + fprintf(cf, "GPU GP0 unimplemented command 0x%02X (word 0x%08X)\n", + opcode, gp0_cmd_buf[0]); + fclose(cf); + } + } + exit(1); + } +} + +/* ---- GP0 write (0x1F801810 write) — command state machine ---- */ + +uint64_t gpu_get_gp0_count(void) { return gp0_write_count; } + +void gpu_get_gp0_stats(uint64_t* nop, uint64_t* fill, uint64_t* draw, uint64_t* env, uint64_t* copy) { + *nop = gp0_nop_count; *fill = gp0_fill_count; + *draw = gp0_draw_count; *env = gp0_env_count; *copy = gp0_copy_count; +} + +void gpu_get_draw_area(GpuDrawArea* out) { + out->left = draw_area_left; + out->top = draw_area_top; + out->right = draw_area_right; + out->bottom = draw_area_bottom; + out->offset_x = draw_offset_x; + out->offset_y = draw_offset_y; +} + +uint16_t gpu_vram_peek(int x, int y) { + if (x < 0 || x >= 1024 || y < 0 || y >= 512) return 0; + return vram[y * 1024 + x]; +} + +void gpu_write_gp0(uint32_t val) { + gp0_write_count++; + + /* State: consuming pixel data for CPU→VRAM transfer */ + if (gp0_state == GP0_VRAM_WRITE) { + /* Each word contains two 16-bit pixels (low halfword first) */ + for (int i = 0; i < 2; i++) { + uint16_t pixel = (uint16_t)(val >> (i * 16)); + uint16_t wx = (vram_write_x + vram_write_col) % 1024; + uint16_t wy = (vram_write_y + vram_write_row) % 512; + + /* Respect mask bit settings */ + if (check_mask_bit && (vram[wy * 1024 + wx] & 0x8000)) + goto next_pixel; + + if (set_mask_bit) + pixel |= 0x8000; + + vram[wy * 1024 + wx] = pixel; + + next_pixel: + if (++vram_write_col == vram_write_w) { + vram_write_col = 0; + if (++vram_write_row == vram_write_h) { + /* Transfer complete */ + gp0_state = GP0_IDLE; + vram_write_remaining = 0; + return; + } + } + } + + if (--vram_write_remaining == 0) + gp0_state = GP0_IDLE; + + return; + } + + /* State: collecting words for a multi-word command */ + if (gp0_state == GP0_COLLECTING) { + gp0_cmd_buf[gp0_words_collected++] = val; + if (gp0_words_collected >= gp0_words_needed) { + gp0_state = GP0_IDLE; + gp0_execute_command(); + } + return; + } + + /* State: IDLE — this is the first word of a new command */ + uint8_t opcode = (val >> 24) & 0xFF; + int word_count = gp0_command_word_count(opcode); + + if (word_count == 0) { + /* Unknown command — fatal */ + FILE* cf = fopen("psx_crash.txt", "w"); + if (cf) { + fprintf(cf, "GPU GP0 unknown command 0x%02X (word 0x%08X)\n", opcode, val); + fclose(cf); + } + exit(1); + } + + if (word_count < 0) { + /* Polyline — not yet implemented */ + FILE* cf = fopen("psx_crash.txt", "w"); + if (cf) { + fprintf(cf, "GPU GP0 polyline command 0x%02X not implemented\n", opcode); + fclose(cf); + } + exit(1); + } + + gp0_cmd_buf[0] = val; + + if (word_count == 1) { + gp0_words_collected = 1; + gp0_words_needed = 1; + gp0_execute_command(); + } else { + gp0_state = GP0_COLLECTING; + gp0_words_collected = 1; + gp0_words_needed = word_count; + } +} + +/* ---- GP1 write (0x1F801814 write) ---- */ + +static void gp1_reset(void) { + /* GP1(00h): Reset GPU — clears FIFO, resets all state, display off */ + gpu_init(); +} + +static void gp1_reset_command_buffer(void) { + /* GP1(01h): Reset command buffer — clears FIFO, aborts current command */ + gp0_state = GP0_IDLE; + gp0_words_collected = 0; + gp0_words_needed = 0; + vram_write_remaining = 0; +} + +static void gp1_ack_irq1(void) { + /* GP1(02h): Acknowledge IRQ1 */ + irq1_flag = 0; +} + +static void gp1_display_enable(uint32_t val) { + /* GP1(03h): Display enable — bit 0: 0=on, 1=off */ + display_disabled = val & 1; +} + +static void gp1_dma_direction(uint32_t val) { + /* GP1(04h): DMA direction — bits 0-1 */ + dma_direction = val & 3; +} + +static void gp1_display_area_start(uint32_t val) { + /* GP1(05h): Start of display area in VRAM + * bits 0-9: X (in halfwords, 0-1023) + * bits 10-18: Y (0-511) */ + display_area_x = val & 0x3FF; + display_area_y = (val >> 10) & 0x1FF; +} + +static void gp1_h_display_range(uint32_t val) { + /* GP1(06h): Horizontal display range + * bits 0-11: X1 + * bits 12-23: X2 */ + h_display_x1 = val & 0xFFF; + h_display_x2 = (val >> 12) & 0xFFF; +} + +static void gp1_v_display_range(uint32_t val) { + /* GP1(07h): Vertical display range + * bits 0-9: Y1 + * bits 10-19: Y2 */ + v_display_y1 = val & 0x3FF; + v_display_y2 = (val >> 10) & 0x3FF; +} + +static void gp1_display_mode(uint32_t val) { + /* GP1(08h): Display mode + * bit 0-1: horizontal resolution 1 (0=256, 1=320, 2=512, 3=640) + * bit 2: vertical resolution (0=240, 1=480) + * bit 3: video mode (0=NTSC, 1=PAL) + * bit 4: display area color depth (0=15bit, 1=24bit) + * bit 5: vertical interlace (0=off, 1=on) + * bit 6: horizontal resolution 2 (0=normal, 1=368) + * bit 7: "reverseflag" */ + hres1 = val & 3; + vres = (val >> 2) & 1; + video_mode = (val >> 3) & 1; + display_depth = (val >> 4) & 1; + vertical_interlace = (val >> 5) & 1; + hres2 = (val >> 6) & 1; + reverse_flag = (val >> 7) & 1; +} + +static void gp1_get_info(uint32_t val) { + /* GP1(10h): Get GPU info — writes result to GPUREAD latch. + * DuckStation masks subcommand to 3 bits (val & 0x07). */ + uint32_t which = val & 0x07; + switch (which) { + case 0: case 1: case 6: case 7: + /* Leave GPUREAD latch unchanged (per DuckStation) */ + break; + case 2: /* texture window */ + gpuread_latch = texture_window_value; + break; + case 3: /* draw area top-left */ + gpuread_latch = draw_area_left | (draw_area_top << 10); + break; + case 4: /* draw area bottom-right */ + gpuread_latch = draw_area_right | (draw_area_bottom << 10); + break; + case 5: /* draw offset */ + gpuread_latch = ((uint32_t)draw_offset_x & 0x7FFu) | + (((uint32_t)draw_offset_y & 0x7FFu) << 11); + break; + } +} + +void gpu_write_gp1(uint32_t val) { + uint32_t cmd = (val >> 24) & 0x3F; + + switch (cmd) { + case 0x00: gp1_reset(); break; + case 0x01: gp1_reset_command_buffer(); break; + case 0x02: gp1_ack_irq1(); break; + case 0x03: gp1_display_enable(val); break; + case 0x04: gp1_dma_direction(val); break; + case 0x05: gp1_display_area_start(val); break; + case 0x06: gp1_h_display_range(val); break; + case 0x07: gp1_v_display_range(val); break; + case 0x08: gp1_display_mode(val); break; + case 0x10: case 0x11: case 0x12: case 0x13: + case 0x14: case 0x15: case 0x16: case 0x17: + case 0x18: case 0x19: case 0x1A: case 0x1B: + case 0x1C: case 0x1D: case 0x1E: case 0x1F: + gp1_get_info(val); break; + default: + fprintf(stderr, "GPU GP1 unknown command 0x%02X (word 0x%08X)\n", cmd, val); + fflush(stderr); + exit(1); + } +} diff --git a/runtime/src/interrupts.c b/runtime/src/interrupts.c index 1632e37d..b307fb18 100644 --- a/runtime/src/interrupts.c +++ b/runtime/src/interrupts.c @@ -8,13 +8,31 @@ * loop calls psx_check_interrupts() after each function returns. * * Vblank is fired on a dispatch-count schedule to approximate 60 Hz. + * + * ReturnFromException handling: + * On real hardware, ReturnFromException (B0:0x17 or SYSCALL(3)) + * restores the full register context from the TCB and jumps to the + * saved EPC. This effectively "longjmps" out of the exception + * handler, bypassing any remaining chain-walk code. + * + * In our recompiled model the exception handler runs as a nested + * psx_dispatch call. A normal function return would unwind only one + * frame, leaving the chain walker running with corrupted registers. + * We use setjmp/longjmp to model the real hardware behaviour: + * psx_check_interrupts sets a jump point before dispatching the + * handler, and psx_exception_longjmp() (called by the runtime's + * ReturnFromException implementation) longjmps back, unwinding the + * entire handler call tree in one step. */ #include "interrupts.h" +#include "sio.h" #include "timers.h" +#include "gpu.h" #include "cpu_state.h" #include #include +#include /* COP0 register indices */ #define COP0_SR 12 @@ -33,44 +51,58 @@ static uint64_t total_checks; /* Reentrancy guard: prevent interrupt handler from triggering interrupts. */ static int in_exception; +/* setjmp target for ReturnFromException during handler dispatch. */ +static jmp_buf exception_jmpbuf; + +int psx_get_in_exception(void) { return in_exception; } + void interrupts_init(void) { dispatch_count = 0; in_exception = 0; total_checks = 0; } +/* + * Called by the runtime's ReturnFromException implementation (traps.c) + * when the recompiled BIOS handler or a chain callback invokes + * B0:0x17 or SYSCALL(3) during exception handling. + * + * At this point the caller has already: + * - Restored all GPRs from the TCB save area + * - Done RFE on the saved SR + * - Set cpu->pc = saved EPC + * + * We longjmp back to psx_check_interrupts, which will clear + * in_exception and return, effectively letting the interrupted + * code resume at the saved EPC through normal dispatch. + */ +void psx_exception_longjmp(void) { + longjmp(exception_jmpbuf, 1); +} + void psx_check_interrupts(CPUState* cpu) { - /* Periodic vblank + timer tick. */ - dispatch_count++; total_checks++; - /* Dump diagnostic state periodically. */ - if (total_checks % 1000000 == 0) { - FILE* df = fopen("psx_diag.txt", "a"); - if (df) { - uint32_t sr = cpu->cop0[COP0_SR]; - fprintf(df, "total_checks=%llu dispatch_count=%u\n", - (unsigned long long)total_checks, dispatch_count); - fprintf(df, "i_stat=0x%08X i_mask=0x%08X pending=0x%08X\n", - i_stat, i_mask, i_stat & i_mask); - fprintf(df, "COP0_SR=0x%08X (IEc=%d IM2=%d BEV=%d)\n", - sr, sr & 1, (sr >> 10) & 1, (sr >> 22) & 1); - fprintf(df, "COP0_CAUSE=0x%08X COP0_EPC=0x%08X\n", - cpu->cop0[COP0_CAUSE], cpu->cop0[COP0_EPC]); - fprintf(df, "in_exception=%d\n", in_exception); - fprintf(df, "gpr[31](ra)=0x%08X gpr[29](sp)=0x%08X\n", - cpu->gpr[31], cpu->gpr[29]); - /* Check if exception handler is installed at 0x80000080 */ - uint32_t handler_word = cpu->read_word(0x80000080u); - fprintf(df, "handler@80000080=0x%08X\n", handler_word); - fclose(df); - } - } + /* SIO delayed IRQ delivery. */ + sio_tick(); - if (dispatch_count >= VBLANK_INTERVAL) { - dispatch_count = 0; - i_stat |= (1 << IRQ_VBLANK); - timers_tick(33868); /* ~1 NTSC frame worth of cycles */ + /* VBlank / timer tick — only when NOT inside the exception handler. + * + * On real hardware, VBlank is a hardware signal tied to the CRT + * scanline counter, not to instruction count. The handler runs + * for a few hundred cycles at most. In our model, the handler + * runs thousands of block leaders (each calling psx_check_interrupts), + * so dispatch_count can exceed VBLANK_INTERVAL during a single + * handler invocation, causing VBlanks to stack up and starve the + * main code. Gating the tick on !in_exception prevents this. */ + if (!in_exception) { + dispatch_count++; + if (dispatch_count >= VBLANK_INTERVAL) { + dispatch_count = 0; + i_stat |= (1 << IRQ_VBLANK); + gpu_vblank_tick(); /* Toggle LCF (GPUSTAT bit 31) */ + timers_tick(33868); /* ~1 NTSC frame worth of cycles */ + } } /* Check if any interrupts are pending. */ @@ -92,16 +124,76 @@ void psx_check_interrupts(CPUState* cpu) { cpu->cop0[COP0_SR] = (sr & ~0x3F) | ((sr & 0x0F) << 2); /* EPC: set to a sentinel value. The recompiled exception handler reads - * memory at [EPC] to check for COP2 branch delay. We use a RAM address - * that we write a NOP to. */ - uint32_t sentinel = 0x80000040u; + * memory at [EPC] to check for COP2 branch delay. We use a dedicated + * address in the kernel scratch area. Address 0x80000048 is chosen + * because it's between the exception vectors (0x80-0xBF) and the + * kernel data pointer area (0x100+), and not used by the BIOS. */ + uint32_t sentinel = 0x80000048u; cpu->write_word(sentinel, 0x00000000u); /* NOP */ cpu->cop0[COP0_EPC] = sentinel; - /* Dispatch the BIOS exception handler at 0x80000080. - * BEV (SR bit 22) selects between 0x80000080 and 0xBFC00180. */ - uint32_t vector = (sr & 0x00400000u) ? 0xBFC00180u : 0x80000080u; - psx_dispatch(cpu, vector); + /* Save the interrupted code's full register state. + * + * On real hardware, the exception handler saves all GPRs to the + * TCB save area at entry, and ReturnFromException restores them + * before jumping back to EPC. The interrupted code always gets + * its exact pre-exception register values back. + * + * In our model, the recompiled handler runs as a C function and + * its `return;` goes back here — not to EPC. The handler's + * normal exit path (0xBFC10944) restores registers from the + * kernel jmpbuf (intended for longjmp to WaitEvent's caller), + * which corrupts the interrupted code's registers. + * + * We save all GPRs/HI/LO before the handler and restore them + * after, so the interrupted code resumes with its original state + * — matching real hardware behaviour. */ + uint32_t saved_gpr[32]; + uint32_t saved_hi, saved_lo; + for (int i = 0; i < 32; i++) saved_gpr[i] = cpu->gpr[i]; + saved_hi = cpu->hi; + saved_lo = cpu->lo; + + /* Dispatch the BIOS exception handler. + * BEV (SR bit 22) selects between 0x80000080 and 0xBFC00180. + * + * setjmp is placed here so that ReturnFromException (B0:0x17 or + * SYSCALL(3)) can longjmp back, unwinding the entire handler + * call tree — matching real hardware behaviour where RFE+JR $k0 + * abandons the handler and returns to the interrupted code. */ + if (setjmp(exception_jmpbuf) == 0) { + /* Normal path: dispatch the handler. */ + if (sr & 0x00400000u) { + psx_dispatch(cpu, 0xBFC00180u); + } else { + uint32_t w0 = cpu->read_word(0x80000080u); + uint32_t w1 = cpu->read_word(0x80000084u); + uint32_t hi_val = (w0 & 0xFFFF) << 16; + int16_t lo_val = (int16_t)(w1 & 0xFFFF); + uint32_t handler = hi_val + (uint32_t)(int32_t)lo_val; + psx_dispatch(cpu, handler); + } + } + + /* Restore the interrupted code's registers. + * + * The handler has done its work (acknowledged i_stat, delivered + * events, etc.) via MMIO writes and RAM writes — those side + * effects are in memory. We restore GPRs so the interrupted + * code continues with its pre-exception state. + * + * For SR: if the handler did ReturnFromException (RFE already + * applied, IEc restored), we keep that. If the handler exited + * normally (jmpbuf path, no RFE), IEc is still 0 from the + * exception push — we do RFE to pop the SR stack. */ + for (int i = 0; i < 32; i++) cpu->gpr[i] = saved_gpr[i]; + cpu->hi = saved_hi; + cpu->lo = saved_lo; + + if (!(cpu->cop0[COP0_SR] & 0x01)) { + uint32_t sr2 = cpu->cop0[COP0_SR]; + cpu->cop0[COP0_SR] = (sr2 & 0xFFFFFFC0u) | ((sr2 >> 2) & 0x0Fu); + } in_exception = 0; } diff --git a/runtime/src/main.cpp b/runtime/src/main.cpp index 784053c0..289783b3 100644 --- a/runtime/src/main.cpp +++ b/runtime/src/main.cpp @@ -1,17 +1,26 @@ -/* main.cpp — Phase 2 runtime entry point. +/* main.cpp — Phase 3 runtime entry point. * - * Loads BIOS ROM, initializes CPU state, calls into the recompiled - * reset vector. Expects abort at first MMIO access. + * Loads BIOS ROM, initializes CPU state + SDL display, calls into + * the recompiled reset vector. BIOS drives execution; SDL presents + * VRAM at each vblank via callback from gpu_vblank_tick(). */ #include "cpu_state.h" +#include "gpu.h" +#include "sio.h" +#include "memcard.h" +#include "debug_server.h" +#include #include #include -#include #include /* memory.c */ extern "C" void memory_init(const char* bios_path); +extern "C" void memory_set_sr_ptr(const uint32_t *p); + +/* dma.c */ +extern "C" void dma_init(void); /* timers.c */ extern "C" void timers_init(void); @@ -25,6 +34,117 @@ extern "C" void psx_write_half(uint32_t addr, uint16_t val); extern "C" uint8_t psx_read_byte(uint32_t addr); extern "C" void psx_write_byte(uint32_t addr, uint8_t val); +/* ---- SDL state ---- */ +static SDL_Window* sdl_window; +static SDL_Renderer* sdl_renderer; +static SDL_Texture* sdl_texture; +static uint32_t sdl_pixel_buf[640 * 512]; /* ARGB8888 staging buffer */ + +/* Convert PS1 16-bit color (1-5-5-5) to ARGB8888 */ +static inline uint32_t psx16_to_argb(uint16_t c) { + uint32_t r = (c & 0x1F) << 3; + uint32_t g = ((c >> 5) & 0x1F) << 3; + uint32_t b = ((c >> 10) & 0x1F) << 3; + return 0xFF000000u | (r << 16) | (g << 8) | b; +} + +/* PS1 digital pad button bits (active-low: 0=pressed, 1=released). + * Bit 0 = SELECT, Bit 3 = START, Bit 4 = UP, Bit 5 = RIGHT, + * Bit 6 = DOWN, Bit 7 = LEFT, Bit 8 = L2, Bit 9 = R2, + * Bit 10 = L1, Bit 11 = R1, Bit 12 = TRIANGLE, Bit 13 = CIRCLE, + * Bit 14 = CROSS, Bit 15 = SQUARE */ +#define PAD_SELECT (1 << 0) +#define PAD_START (1 << 3) +#define PAD_UP (1 << 4) +#define PAD_RIGHT (1 << 5) +#define PAD_DOWN (1 << 6) +#define PAD_LEFT (1 << 7) +#define PAD_L2 (1 << 8) +#define PAD_R2 (1 << 9) +#define PAD_L1 (1 << 10) +#define PAD_R1 (1 << 11) +#define PAD_TRIANGLE (1 << 12) +#define PAD_CIRCLE (1 << 13) +#define PAD_CROSS (1 << 14) +#define PAD_SQUARE (1 << 15) + +static void update_pad_from_keyboard(void) { + const Uint8* keys = SDL_GetKeyboardState(NULL); + uint16_t buttons = 0xFFFF; /* all released */ + + if (keys[SDL_SCANCODE_UP]) buttons &= ~PAD_UP; + if (keys[SDL_SCANCODE_DOWN]) buttons &= ~PAD_DOWN; + if (keys[SDL_SCANCODE_LEFT]) buttons &= ~PAD_LEFT; + if (keys[SDL_SCANCODE_RIGHT]) buttons &= ~PAD_RIGHT; + if (keys[SDL_SCANCODE_RETURN]) buttons &= ~PAD_START; + if (keys[SDL_SCANCODE_RSHIFT]) buttons &= ~PAD_SELECT; + if (keys[SDL_SCANCODE_X]) buttons &= ~PAD_CROSS; + if (keys[SDL_SCANCODE_Z]) buttons &= ~PAD_SQUARE; + if (keys[SDL_SCANCODE_S]) buttons &= ~PAD_CIRCLE; + if (keys[SDL_SCANCODE_A]) buttons &= ~PAD_TRIANGLE; + if (keys[SDL_SCANCODE_Q]) buttons &= ~PAD_L1; + if (keys[SDL_SCANCODE_W]) buttons &= ~PAD_R1; + if (keys[SDL_SCANCODE_E]) buttons &= ~PAD_L2; + if (keys[SDL_SCANCODE_R]) buttons &= ~PAD_R2; + + sio_set_pad_state(buttons); +} + +/* Called from gpu_vblank_tick() at each simulated vblank. */ +static void sdl_vblank_present(void) { + /* Debug server: pause gate, poll commands, record frame, check watchpoints. */ + debug_server_wait_if_paused(); + debug_server_poll(); + debug_server_record_frame(); + debug_server_check_watchpoints(); + + /* Check debug server input override. */ + int override = debug_server_get_input_override(); + + /* Pump SDL events to prevent window freeze. */ + SDL_Event ev; + while (SDL_PollEvent(&ev)) { + if (ev.type == SDL_QUIT) { + debug_server_shutdown(); + std::exit(0); + } + } + + /* Sample keyboard state and feed into SIO controller. + * Debug server input override takes priority if active. */ + if (override >= 0) { + sio_set_pad_state((uint16_t)override); + } else { + update_pad_from_keyboard(); + } + + GpuDisplayInfo di; + gpu_get_display_info(&di); + + if (di.disabled || di.width == 0 || di.height == 0) return; + + const uint16_t* vram = gpu_get_vram(); + uint32_t w = di.width; + uint32_t h = di.height; + + /* Blit the display area from VRAM into the staging buffer. */ + for (uint32_t y = 0; y < h; y++) { + uint32_t vy = (di.display_y + y) & 511; + for (uint32_t x = 0; x < w; x++) { + uint32_t vx = (di.display_x + x) & 1023; + sdl_pixel_buf[y * w + x] = psx16_to_argb(vram[vy * 1024 + vx]); + } + } + + /* Update texture and present. */ + SDL_UpdateTexture(sdl_texture, NULL, sdl_pixel_buf, (int)(w * sizeof(uint32_t))); + + SDL_Rect dst = { 0, 0, 640, 480 }; + SDL_RenderClear(sdl_renderer); + SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, &dst); + SDL_RenderPresent(sdl_renderer); +} + int main(int argc, char** argv) { /* Force line-buffered output so messages appear even if killed. */ std::setvbuf(stdout, nullptr, _IOLBF, 0); @@ -35,8 +155,55 @@ int main(int argc, char** argv) { std::fprintf(stdout, "psxrecomp-v4 runtime: loading BIOS from %s\n", bios_path); memory_init(bios_path); + gpu_init(); + dma_init(); timers_init(); interrupts_init(); + sio_init(); + sio_connect_pad(0); /* Controller on port 1 */ + memcard_init("."); /* Look for card1.mcd / card2.mcd in working directory */ + debug_server_init(4370); + + /* ---- SDL init ---- */ + if (SDL_Init(SDL_INIT_VIDEO) != 0) { + std::fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError()); + return 1; + } + + sdl_window = SDL_CreateWindow( + "psxrecomp-v4 — BIOS", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + 640, 480, + SDL_WINDOW_SHOWN + ); + if (!sdl_window) { + std::fprintf(stderr, "SDL_CreateWindow failed: %s\n", SDL_GetError()); + return 1; + } + + sdl_renderer = SDL_CreateRenderer(sdl_window, -1, SDL_RENDERER_ACCELERATED); + if (!sdl_renderer) { + /* Fall back to software renderer. */ + sdl_renderer = SDL_CreateRenderer(sdl_window, -1, SDL_RENDERER_SOFTWARE); + } + if (!sdl_renderer) { + std::fprintf(stderr, "SDL_CreateRenderer failed: %s\n", SDL_GetError()); + return 1; + } + + sdl_texture = SDL_CreateTexture( + sdl_renderer, + SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STREAMING, + 640, 512 + ); + if (!sdl_texture) { + std::fprintf(stderr, "SDL_CreateTexture failed: %s\n", SDL_GetError()); + return 1; + } + + /* Register vblank presentation callback. */ + gpu_set_vblank_callback(sdl_vblank_present); /* Initialize CPU state. */ CPUState cpu; @@ -54,11 +221,24 @@ int main(int argc, char** argv) { cpu.pc = 0xBFC00000u; cpu.cop0[12] = 0x00400000u; /* SR: BEV=1 (boot exception vectors) */ + /* Let memory subsystem see SR for cache-isolation checks. */ + memory_set_sr_ptr(&cpu.cop0[12]); + + /* Wire debug server to CPU state for register queries. */ + debug_server_set_cpu(&cpu); + /* Execute. */ std::fprintf(stdout, "psxrecomp-v4 runtime: executing from PC=0x%08X\n", cpu.pc); psx_dispatch(&cpu, cpu.pc); /* If we reach here, all execution completed without MMIO abort. */ std::fprintf(stdout, "psxrecomp-v4 runtime: execution completed, PC=0x%08X\n", cpu.pc); + + debug_server_shutdown(); + SDL_DestroyTexture(sdl_texture); + SDL_DestroyRenderer(sdl_renderer); + SDL_DestroyWindow(sdl_window); + SDL_Quit(); + return 0; } diff --git a/runtime/src/memcard.c b/runtime/src/memcard.c new file mode 100644 index 00000000..6e89a5fa --- /dev/null +++ b/runtime/src/memcard.c @@ -0,0 +1,146 @@ +/* + * memcard.c -- PS1 memory card image I/O + * + * 128KB per card, organized as 1024 sectors of 128 bytes each. + * Stored as raw .mcd files on disk. + * + * Pure hardware simulation. No BIOS state, no HLE, no stubs. + * + * Ported from v3 with audit: + * - Removed all fprintf (CLAUDE.md rule #3) + * - No BIOS manipulation found (clean) + * - No fake events found (clean) + */ + +#include "memcard.h" +#include +#include +#include + +#define MAX_CARDS 2 + +typedef struct { + uint8_t data[MEMCARD_SIZE]; + char filepath[512]; + int present; + int dirty; +} MemCard; + +static MemCard cards[MAX_CARDS]; + +/* XOR checksum of bytes 0x00-0x7E, stored at 0x7F. */ +static uint8_t frame_checksum(const uint8_t *frame) { + uint8_t xor_val = 0; + for (int i = 0; i < 127; i++) + xor_val ^= frame[i]; + return xor_val; +} + +/* Format a 128KB card image to match a real PS1 blank card. + * Layout verified against DuckStation's MemoryCardImage::Format(). */ +static void memcard_format(uint8_t *data) { + memset(data, 0xFF, MEMCARD_SIZE); + + /* Frame 0: Header ("MC" magic) */ + memset(&data[0], 0x00, 128); + data[0] = 'M'; + data[1] = 'C'; + data[0x7F] = frame_checksum(&data[0]); + + /* Frames 1-15: Directory entries (all free) */ + for (int s = 1; s <= 15; s++) { + int off = s * 128; + memset(&data[off], 0x00, 128); + data[off + 0] = 0xA0; /* status: free/available */ + data[off + 8] = 0xFF; /* next block pointer = none */ + data[off + 9] = 0xFF; + data[off + 0x7F] = frame_checksum(&data[off]); + } + + /* Frames 16-35: Broken sector list (no broken sectors) */ + for (int s = 16; s <= 35; s++) { + int off = s * 128; + memset(&data[off], 0x00, 128); + data[off + 0] = 0xFF; + data[off + 1] = 0xFF; + data[off + 2] = 0xFF; + data[off + 3] = 0xFF; + data[off + 8] = 0xFF; + data[off + 9] = 0xFF; + data[off + 0x7F] = frame_checksum(&data[off]); + } + + /* Frames 36-62: Broken sector replacement data + unused */ + for (int s = 36; s <= 62; s++) { + memset(&data[s * 128], 0x00, 128); + } + + /* Frame 63: Write test frame (copy of frame 0) */ + memcpy(&data[63 * 128], &data[0], 128); +} + +void memcard_init(const char* dir) { + memset(cards, 0, sizeof(cards)); + + for (int i = 0; i < MAX_CARDS; i++) { + cards[i].present = 0; + cards[i].dirty = 0; + + if (dir) { + snprintf(cards[i].filepath, sizeof(cards[i].filepath), + "%s/card%d.mcd", dir, i + 1); + + FILE* f = fopen(cards[i].filepath, "rb"); + if (f) { + size_t n = fread(cards[i].data, 1, MEMCARD_SIZE, f); + fclose(f); + if (n == MEMCARD_SIZE) { + cards[i].present = 1; + } + } else { + /* No card file -- create a properly formatted blank card. */ + memcard_format(cards[i].data); + cards[i].present = 1; + cards[i].dirty = 1; + memcard_flush(i); + } + } + } +} + +int memcard_read_sector(int card, int sector, uint8_t* buf) { + if (card < 0 || card >= MAX_CARDS) return -1; + if (!cards[card].present) return -1; + if (sector < 0 || sector >= MEMCARD_SECTORS) return -1; + + memcpy(buf, cards[card].data + sector * MEMCARD_SECTOR_SIZE, MEMCARD_SECTOR_SIZE); + return 0; +} + +int memcard_write_sector(int card, int sector, const uint8_t* buf) { + if (card < 0 || card >= MAX_CARDS) return -1; + if (!cards[card].present) return -1; + if (sector < 0 || sector >= MEMCARD_SECTORS) return -1; + + memcpy(cards[card].data + sector * MEMCARD_SECTOR_SIZE, buf, MEMCARD_SECTOR_SIZE); + cards[card].dirty = 1; + return 0; +} + +void memcard_flush(int card) { + if (card < 0 || card >= MAX_CARDS) return; + if (!cards[card].dirty) return; + if (cards[card].filepath[0] == '\0') return; + + FILE* f = fopen(cards[card].filepath, "wb"); + if (f) { + fwrite(cards[card].data, 1, MEMCARD_SIZE, f); + fclose(f); + cards[card].dirty = 0; + } +} + +int memcard_is_present(int card) { + if (card < 0 || card >= MAX_CARDS) return 0; + return cards[card].present; +} diff --git a/runtime/src/memory.c b/runtime/src/memory.c index e8a27d93..0bd95a23 100644 --- a/runtime/src/memory.c +++ b/runtime/src/memory.c @@ -9,6 +9,9 @@ */ #include "cpu_state.h" +#include "dma.h" +#include "gpu.h" +#include "sio.h" #include "timers.h" #include #include @@ -30,6 +33,12 @@ static uint32_t ram_size_reg; /* 0x1F801060 */ /* Cache control register (KSEG2: 0xFFFE0130). */ static uint32_t cache_ctrl; +/* Pointer to cpu->cop0[12] (SR). Set once at init. + * Used by write functions to check the IsC (Isolate Cache) bit. + * When IsC is set, RAM/scratchpad writes are silently dropped — the + * real R3000A sends them to the data cache only. */ +static const uint32_t *sr_ptr; + /* Interrupt controller — non-static so hardware subsystems can set I_STAT bits. */ uint32_t i_stat; /* 0x1F801070 — interrupt status (AND-acknowledge semantics) */ uint32_t i_mask; /* 0x1F801074 — interrupt enable mask */ @@ -37,6 +46,8 @@ uint32_t i_mask; /* 0x1F801074 — interrupt enable mask */ /* SPU registers: 0x1F801C00..0x1F801FFF — store only, no semantic behavior. */ static uint16_t spu_regs[512]; /* 0x200 halfwords covers 0x400 bytes */ +void memory_set_sr_ptr(const uint32_t *p) { sr_ptr = p; } + void memory_init(const char* bios_path) { memset(ram, 0, sizeof(ram)); memset(scratchpad, 0, sizeof(scratchpad)); @@ -92,8 +103,7 @@ static uint32_t mmio_read32(uint32_t addr) { } /* SIO: 0x1F801040..0x1F80105F */ if (addr >= 0x1F801040u && addr <= 0x1F80105Fu) { - if (addr == 0x1F801044u) return 0x00000005u; /* SIO_STAT: TX ready + TX empty */ - return 0; + return sio_read(addr); } /* RAM size: 0x1F801060 */ if (addr == 0x1F801060u) { @@ -102,10 +112,9 @@ static uint32_t mmio_read32(uint32_t addr) { /* Interrupts: 0x1F801070, 0x1F801074 */ if (addr == 0x1F801070u) return i_stat; if (addr == 0x1F801074u) return i_mask; - /* DMA: 0x1F801080..0x1F8010FF — UNIMPLEMENTED */ + /* DMA: 0x1F801080..0x1F8010FF */ if (addr >= 0x1F801080u && addr <= 0x1F8010FFu) { - mmio_unimplemented(addr, "READ32 (DMA)"); - return 0; + return dma_read(addr); } /* Timers: 0x1F801100..0x1F80112F */ if (addr >= 0x1F801100u && addr <= 0x1F80112Fu) { @@ -115,9 +124,9 @@ static uint32_t mmio_read32(uint32_t addr) { if (addr >= 0x1F801800u && addr <= 0x1F801803u) { return 0; } - /* GPU: 0x1F801810, 0x1F801814 — UNIMPLEMENTED */ - if (addr == 0x1F801810u) { mmio_unimplemented(addr, "READ32 (GPUREAD)"); return 0; } - if (addr == 0x1F801814u) { mmio_unimplemented(addr, "READ32 (GPUSTAT)"); return 0; } + /* GPU: 0x1F801810 (GPUREAD), 0x1F801814 (GPUSTAT) */ + if (addr == 0x1F801810u) return gpu_read_gpuread(); + if (addr == 0x1F801814u) return gpu_read_gpustat(); /* MDEC: 0x1F801820, 0x1F801824 */ if (addr == 0x1F801820u || addr == 0x1F801824u) return 0; /* SPU: 0x1F801C00..0x1F801FFF */ @@ -141,7 +150,8 @@ static void mmio_write32(uint32_t addr, uint32_t val) { } /* SIO: 0x1F801040..0x1F80105F */ if (addr >= 0x1F801040u && addr <= 0x1F80105Fu) { - return; /* acknowledge */ + sio_write(addr, val); + return; } /* RAM size: 0x1F801060 */ if (addr == 0x1F801060u) { @@ -151,9 +161,9 @@ static void mmio_write32(uint32_t addr, uint32_t val) { /* Interrupts: 0x1F801070, 0x1F801074 */ if (addr == 0x1F801070u) { i_stat &= val; return; } /* AND-acknowledge */ if (addr == 0x1F801074u) { i_mask = val & 0x7FFu; return; } - /* DMA: 0x1F801080..0x1F8010FF — UNIMPLEMENTED */ + /* DMA: 0x1F801080..0x1F8010FF */ if (addr >= 0x1F801080u && addr <= 0x1F8010FFu) { - mmio_unimplemented(addr, "WRITE32 (DMA)"); + dma_write(addr, val); return; } /* Timers: 0x1F801100..0x1F80112F */ @@ -165,9 +175,9 @@ static void mmio_write32(uint32_t addr, uint32_t val) { if (addr >= 0x1F801800u && addr <= 0x1F801803u) { return; } - /* GPU GP0: 0x1F801810, GP1: 0x1F801814 — UNIMPLEMENTED */ - if (addr == 0x1F801810u) { mmio_unimplemented(addr, "WRITE32 (GP0)"); return; } - if (addr == 0x1F801814u) { mmio_unimplemented(addr, "WRITE32 (GP1)"); return; } + /* GPU GP0: 0x1F801810, GP1: 0x1F801814 */ + if (addr == 0x1F801810u) { gpu_write_gp0(val); return; } + if (addr == 0x1F801814u) { gpu_write_gp1(val); return; } /* MDEC: 0x1F801820, 0x1F801824 */ if (addr == 0x1F801820u || addr == 0x1F801824u) return; /* SPU: 0x1F801C00..0x1F801FFF */ @@ -187,8 +197,7 @@ static void mmio_write32(uint32_t addr, uint32_t val) { static uint16_t mmio_read16(uint32_t addr) { /* SIO: 0x1F801040..0x1F80105F */ if (addr >= 0x1F801040u && addr <= 0x1F80105Fu) { - if (addr == 0x1F801044u) return 0x0005u; /* SIO_STAT low half */ - return 0; + return (uint16_t)sio_read(addr); } /* Interrupts */ if (addr == 0x1F801070u) return (uint16_t)i_stat; @@ -208,6 +217,7 @@ static uint16_t mmio_read16(uint32_t addr) { static void mmio_write16(uint32_t addr, uint16_t val) { /* SIO: 0x1F801040..0x1F80105F */ if (addr >= 0x1F801040u && addr <= 0x1F80105Fu) { + sio_write(addr, val); return; } /* Interrupts */ @@ -294,6 +304,10 @@ void psx_write_word(uint32_t addr, uint32_t val) { /* KSEG2 cache control — before physical translation. */ if (addr == 0xFFFE0130u) { cache_ctrl = val; return; } + /* IsC (Isolate Cache): when set, writes go to D-cache only. + * We have no cache model, so silently discard RAM/scratchpad writes. */ + if (sr_ptr && (*sr_ptr & 0x10000u)) return; + uint32_t phys = addr & 0x1FFFFFFFu; if (phys < RAM_SIZE) { @@ -347,6 +361,8 @@ uint16_t psx_read_half(uint32_t addr) { } void psx_write_half(uint32_t addr, uint16_t val) { + if (sr_ptr && (*sr_ptr & 0x10000u)) return; + uint32_t phys = addr & 0x1FFFFFFFu; if (phys < RAM_SIZE) { @@ -392,6 +408,8 @@ uint8_t psx_read_byte(uint32_t addr) { } void psx_write_byte(uint32_t addr, uint8_t val) { + if (sr_ptr && (*sr_ptr & 0x10000u)) return; + uint32_t phys = addr & 0x1FFFFFFFu; if (phys < RAM_SIZE) { diff --git a/runtime/src/sio.c b/runtime/src/sio.c new file mode 100644 index 00000000..38762fc4 --- /dev/null +++ b/runtime/src/sio.c @@ -0,0 +1,527 @@ +/* + * sio.c -- PS1 Serial I/O (SIO0) controller + * + * Handles controller (pad) and memory card communication. + * SIO0 registers at 0x1F801040-0x1F80104E. + * + * Pure hardware simulation. No BIOS state, no HLE, no stubs. + * + * Ported from v3 with audit: + * - Removed psx_runtime.h dependency (unused) + * - Removed all fprintf (CLAUDE.md rule #3) + * - IRQ delivery via i_stat bit-set (same as timers/dma) + */ + +#include "sio.h" +#include "memcard.h" +#include + +/* I_STAT is owned by memory.c */ +extern uint32_t i_stat; + +/* IRQ bit for SIO0 */ +#define IRQ_SIO0 7 + +/* SIO registers */ +static uint8_t sio_tx_data; +static uint8_t sio_rx_data; +static uint16_t sio_stat; +static uint16_t sio_mode; +static uint16_t sio_ctrl; +static uint16_t sio_baud; + +/* Pad state: 0=pressed, 1=released (PS1 convention) */ +static uint16_t pad_buttons = 0xFFFF; /* all released */ + +/* Which slots have devices connected */ +static uint8_t pad_connected = 0; + +/* Pad communication state machine */ +typedef enum { + PAD_IDLE, + PAD_WAIT_ACCESS, /* received 0x01 (pad access) */ + PAD_SEND_ID_LO, /* sending pad ID low byte (0x41 = digital) */ + PAD_SEND_ID_HI, /* sending pad ID high byte (0x5A) */ + PAD_SEND_BTN_LO, /* sending button low byte */ + PAD_SEND_BTN_HI, /* sending button high byte */ +} PadState; + +static PadState pad_state = PAD_IDLE; +static int selected_slot = 0; + +/* Memory card SIO state machine */ +typedef enum { + MC_IDLE, + MC_CMD, + MC_ID1, + MC_ID2, + MC_ADDR_MSB, + MC_ADDR_LSB, + /* Read states */ + MC_READ_ACK1, + MC_READ_ACK2, + MC_READ_DATA, + MC_READ_CHK, + MC_READ_END, + /* Write states */ + MC_WRITE_DATA, + MC_WRITE_CHK, + MC_WRITE_ACK1, + MC_WRITE_ACK2, + MC_WRITE_END, + /* Get ID states */ + MC_GETID_1, + MC_GETID_2, + MC_GETID_3, + MC_GETID_4, +} McState; + +static McState mc_state = MC_IDLE; +static int mc_slot = 0; +static uint8_t mc_cmd = 0; +static uint16_t mc_sector = 0; +static uint8_t mc_sector_msb = 0; +static uint8_t mc_sector_lsb = 0; +static uint8_t mc_data[128]; +static int mc_data_idx = 0; +static uint8_t mc_checksum = 0; +static uint8_t mc_flag = 0x08; /* 0x08=new data, 0x00=normal */ + +typedef enum { + DEV_NONE, + DEV_PAD, + DEV_MEMCARD, +} ActiveDevice; + +static ActiveDevice active_device = DEV_NONE; + +/* Delayed IRQ mechanism. + * + * On real PS1, each SIO byte transfer takes BAUD*8 cycles (~1088 for memcard) + * and the ACK fires ~170 cycles later. The BIOS card detection sequence + * depends on this timing: + * 1. Write TX byte + * 2. Delay loop (~50-100 instructions) + * 3. Clear JOY_STAT.INTR and I_STAT.IRQ7 + * 4. Check if IRQ7 was re-set -> if yes, device present + * + * If we fire IRQ7 instantly on step 1, step 3 clears it, and step 4 sees + * nothing -> BIOS thinks no device is connected. + * + * Fix: process the byte immediately (RX data available) but delay the ACK + * and IRQ7 by SIO_IRQ_DELAY ticks. */ +/* In v4, this counts SIO register accesses (not interpreter steps). + * The BIOS card detection does: TX write, STAT read, RX read, CTRL + * write (clear IRQ), then checks I_STAT. We need the IRQ to fire + * AFTER the CTRL clear. 4 accesses covers the typical sequence. */ +#define SIO_IRQ_DELAY 4 +static int sio_irq_pending = 0; +static int sio_irq_countdown = 0; + +/* SIO status register bits */ +#define SIO_STAT_TX_RDY (1 << 0) +#define SIO_STAT_RX_RDY (1 << 1) +#define SIO_STAT_TX_EMPTY (1 << 2) +#define SIO_STAT_ACK (1 << 7) +#define SIO_STAT_IRQ (1 << 9) + +/* SIO control register bits */ +#define SIO_CTRL_TX_EN (1 << 0) +#define SIO_CTRL_SELECT (1 << 1) +#define SIO_CTRL_RX_EN (1 << 2) +#define SIO_CTRL_ACK (1 << 4) +#define SIO_CTRL_RESET (1 << 6) +#define SIO_CTRL_RX_IRQ_EN (1 << 11) +#define SIO_CTRL_ACK_IRQ_EN (1 << 12) +#define SIO_CTRL_SLOT (1 << 13) + +void sio_init(void) { + sio_tx_data = 0; + sio_rx_data = 0xFF; + sio_stat = SIO_STAT_TX_RDY | SIO_STAT_TX_EMPTY; + sio_mode = 0; + sio_ctrl = 0; + sio_baud = 0; + pad_state = PAD_IDLE; + pad_buttons = 0xFFFF; + pad_connected = 0; + mc_state = MC_IDLE; + active_device = DEV_NONE; + sio_irq_pending = 0; + sio_irq_countdown = 0; +} + +void sio_connect_pad(int slot) { + if (slot >= 0 && slot <= 1) + pad_connected |= (1 << slot); +} + +void sio_set_pad_state(uint16_t buttons) { + pad_buttons = buttons; +} + +static void pad_process_byte(uint8_t tx_byte) { + switch (pad_state) { + case PAD_IDLE: + if (pad_connected & (1 << selected_slot)) { + pad_state = PAD_WAIT_ACCESS; + sio_rx_data = 0xFF; + sio_stat |= SIO_STAT_ACK; + } else { + sio_rx_data = 0xFF; + } + break; + + case PAD_WAIT_ACCESS: + if (tx_byte == 0x42) { + pad_state = PAD_SEND_ID_LO; + sio_rx_data = 0x41; /* Digital pad type */ + sio_stat |= SIO_STAT_ACK; + } else { + pad_state = PAD_IDLE; + sio_rx_data = 0xFF; + } + break; + + case PAD_SEND_ID_LO: + pad_state = PAD_SEND_ID_HI; + sio_rx_data = 0x5A; + sio_stat |= SIO_STAT_ACK; + break; + + case PAD_SEND_ID_HI: + pad_state = PAD_SEND_BTN_LO; + sio_rx_data = (uint8_t)(pad_buttons & 0xFF); + sio_stat |= SIO_STAT_ACK; + break; + + case PAD_SEND_BTN_LO: + pad_state = PAD_IDLE; + sio_rx_data = (uint8_t)(pad_buttons >> 8); + /* No ACK after last byte */ + break; + + default: + pad_state = PAD_IDLE; + sio_rx_data = 0xFF; + break; + } + + sio_stat |= SIO_STAT_RX_RDY; + sio_stat |= SIO_STAT_TX_RDY | SIO_STAT_TX_EMPTY; +} + +static void mc_process_byte(uint8_t tx_byte) { + switch (mc_state) { + case MC_IDLE: + mc_slot = selected_slot; + if (memcard_is_present(mc_slot)) { + mc_state = MC_CMD; + sio_rx_data = 0xFF; + sio_stat |= SIO_STAT_ACK; + } else { + sio_rx_data = 0xFF; + } + break; + + case MC_CMD: + mc_cmd = tx_byte; + if (tx_byte == 0x52 || tx_byte == 0x57 || tx_byte == 0x53) { + mc_state = MC_ID1; + sio_rx_data = mc_flag; + sio_stat |= SIO_STAT_ACK; + } else { + mc_state = MC_IDLE; + sio_rx_data = 0xFF; + } + break; + + case MC_ID1: + mc_state = MC_ID2; + sio_rx_data = 0x5A; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_ID2: + if (mc_cmd == 0x53) { + mc_state = MC_GETID_1; + sio_rx_data = 0x5D; + sio_stat |= SIO_STAT_ACK; + } else { + mc_state = MC_ADDR_MSB; + sio_rx_data = 0x5D; + sio_stat |= SIO_STAT_ACK; + } + break; + + case MC_GETID_1: + mc_state = MC_GETID_2; + sio_rx_data = 0x04; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_GETID_2: + mc_state = MC_GETID_3; + sio_rx_data = 0x00; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_GETID_3: + mc_state = MC_GETID_4; + sio_rx_data = 0x00; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_GETID_4: + mc_state = MC_IDLE; + sio_rx_data = 0x80; + break; + + case MC_ADDR_MSB: + mc_sector_msb = tx_byte; + mc_state = MC_ADDR_LSB; + sio_rx_data = 0x00; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_ADDR_LSB: + mc_sector_lsb = tx_byte; + mc_sector = ((uint16_t)mc_sector_msb << 8) | mc_sector_lsb; + + if (mc_cmd == 0x52) { + if (mc_sector < MEMCARD_SECTORS) { + memcard_read_sector(mc_slot, mc_sector, mc_data); + } else { + memset(mc_data, 0xFF, 128); + } + mc_data_idx = 0; + mc_checksum = mc_sector_msb ^ mc_sector_lsb; + for (int i = 0; i < 128; i++) + mc_checksum ^= mc_data[i]; + mc_state = MC_READ_ACK1; + } else { + mc_data_idx = 0; + mc_state = MC_WRITE_DATA; + } + sio_rx_data = 0x00; + sio_stat |= SIO_STAT_ACK; + break; + + /* ---- READ states ---- */ + case MC_READ_ACK1: + mc_state = MC_READ_ACK2; + sio_rx_data = 0x5C; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_READ_ACK2: + mc_state = MC_READ_DATA; + mc_data_idx = 0; + sio_rx_data = 0x5D; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_READ_DATA: + sio_rx_data = mc_data[mc_data_idx++]; + if (mc_data_idx >= 128) { + mc_state = MC_READ_CHK; + } + sio_stat |= SIO_STAT_ACK; + break; + + case MC_READ_CHK: + mc_state = MC_READ_END; + sio_rx_data = mc_checksum; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_READ_END: + mc_state = MC_IDLE; + if (mc_sector < MEMCARD_SECTORS) { + sio_rx_data = 0x47; /* 'G' = Good */ + } else { + sio_rx_data = 0xFF; + } + break; + + /* ---- WRITE states ---- */ + case MC_WRITE_DATA: + mc_data[mc_data_idx++] = tx_byte; + sio_rx_data = 0x00; + if (mc_data_idx >= 128) { + mc_state = MC_WRITE_CHK; + } + sio_stat |= SIO_STAT_ACK; + break; + + case MC_WRITE_CHK: { + uint8_t expected = mc_sector_msb ^ mc_sector_lsb; + for (int i = 0; i < 128; i++) + expected ^= mc_data[i]; + + mc_state = MC_WRITE_ACK1; + sio_rx_data = 0x00; + sio_stat |= SIO_STAT_ACK; + + if (tx_byte == expected && mc_sector < MEMCARD_SECTORS) { + memcard_write_sector(mc_slot, mc_sector, mc_data); + memcard_flush(mc_slot); + mc_checksum = 0x47; /* Good */ + } else if (mc_sector >= MEMCARD_SECTORS) { + mc_checksum = 0xFF; /* Bad sector */ + } else { + mc_checksum = 0x4E; /* 'N' = bad checksum */ + } + break; + } + + case MC_WRITE_ACK1: + mc_state = MC_WRITE_ACK2; + sio_rx_data = 0x5C; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_WRITE_ACK2: + mc_state = MC_WRITE_END; + sio_rx_data = 0x5D; + sio_stat |= SIO_STAT_ACK; + break; + + case MC_WRITE_END: + mc_state = MC_IDLE; + sio_rx_data = mc_checksum; + mc_flag = 0x00; /* Clear "new data" flag after first write */ + break; + + default: + mc_state = MC_IDLE; + sio_rx_data = 0xFF; + break; + } + + sio_stat |= SIO_STAT_RX_RDY; + sio_stat |= SIO_STAT_TX_RDY | SIO_STAT_TX_EMPTY; +} + +static void sio_process_byte(uint8_t tx_byte) { + if (active_device == DEV_NONE) { + selected_slot = (sio_ctrl & SIO_CTRL_SLOT) ? 1 : 0; + if (tx_byte == 0x01) { + active_device = DEV_PAD; + pad_process_byte(tx_byte); + } else if (tx_byte == 0x81) { + active_device = DEV_MEMCARD; + mc_process_byte(tx_byte); + } else { + sio_rx_data = 0xFF; + sio_stat |= SIO_STAT_TX_RDY | SIO_STAT_TX_EMPTY; + } + } else if (active_device == DEV_PAD) { + pad_process_byte(tx_byte); + } else if (active_device == DEV_MEMCARD) { + mc_process_byte(tx_byte); + } +} + +uint32_t sio_read(uint32_t addr) { + /* Advance delayed IRQ on every SIO register access. + * In v4, recompiled functions run as native C without per-instruction + * stepping. sio_tick() from the dispatch loop won't advance during + * a tight BIOS polling loop within a single function. Advancing on + * register access ensures the IRQ fires in time for the BIOS's + * "clear, delay, check" card detection sequence. */ + sio_tick(); + + switch (addr) { + case 0x1F801040: /* SIO_RX_DATA */ + sio_stat &= ~SIO_STAT_RX_RDY; + return sio_rx_data; + + case 0x1F801044: /* SIO_STAT */ + return sio_stat; + + case 0x1F801048: /* SIO_MODE */ + return sio_mode; + + case 0x1F80104A: /* SIO_CTRL */ + return sio_ctrl; + + case 0x1F80104E: /* SIO_BAUD */ + return sio_baud; + + default: + return 0; + } +} + +void sio_write(uint32_t addr, uint32_t value) { + /* Advance delayed IRQ AFTER write processing (not before). + * Ticking before a CTRL ACK write would fire the pending IRQ + * right before the CTRL clears it — wrong order. */ + + switch (addr) { + case 0x1F801040: /* SIO_TX_DATA */ + sio_tx_data = (uint8_t)value; + if (sio_ctrl & SIO_CTRL_TX_EN) { + sio_process_byte(sio_tx_data); + if ((sio_stat & SIO_STAT_ACK) && (sio_ctrl & SIO_CTRL_ACK_IRQ_EN)) { + sio_stat &= ~SIO_STAT_ACK; + sio_irq_pending = 1; + sio_irq_countdown = SIO_IRQ_DELAY; + } + } + break; + + case 0x1F801048: /* SIO_MODE */ + sio_mode = (uint16_t)value; + break; + + case 0x1F80104A: /* SIO_CTRL */ + sio_ctrl = (uint16_t)value; + if (value & SIO_CTRL_ACK) { + sio_stat &= ~SIO_STAT_IRQ; + sio_stat &= ~SIO_STAT_ACK; + } + if (value & SIO_CTRL_RESET) { + sio_stat = SIO_STAT_TX_RDY | SIO_STAT_TX_EMPTY; + sio_mode = 0; + sio_ctrl = 0; + sio_baud = 0; + pad_state = PAD_IDLE; + mc_state = MC_IDLE; + active_device = DEV_NONE; + sio_irq_pending = 0; + sio_irq_countdown = 0; + } + if (!(value & SIO_CTRL_SELECT)) { + pad_state = PAD_IDLE; + mc_state = MC_IDLE; + active_device = DEV_NONE; + } + break; + + case 0x1F80104E: /* SIO_BAUD */ + sio_baud = (uint16_t)value; + break; + + default: + break; + } + + /* Advance delayed IRQ after write processing (not before). + * This ensures CTRL ACK writes clear the old IRQ before the + * pending one fires. */ + sio_tick(); +} + +void sio_tick(void) { + if (sio_irq_pending && sio_irq_countdown > 0) { + sio_irq_countdown--; + if (sio_irq_countdown == 0) { + sio_irq_pending = 0; + sio_stat |= SIO_STAT_ACK; + sio_stat |= SIO_STAT_IRQ; + i_stat |= (1 << IRQ_SIO0); + } + } +} diff --git a/runtime/src/traps.c b/runtime/src/traps.c index 8d9d54a8..2558f85f 100644 --- a/runtime/src/traps.c +++ b/runtime/src/traps.c @@ -7,67 +7,111 @@ #include "cpu_state.h" #include #include +#include + +/* Forward declarations from interrupts.c */ +int psx_get_in_exception(void); +void psx_exception_longjmp(void); + +static void trap_crash(const char* msg) { + FILE* cf = fopen("psx_crash.txt", "w"); + if (cf) { fprintf(cf, "%s\n", msg); fclose(cf); } +} void psx_syscall(CPUState* cpu, uint32_t code) { /* * PS1 BIOS SYSCALL convention: * $a0 = 1: EnterCriticalSection — disable interrupts, return old SR * $a0 = 2: ExitCriticalSection — enable interrupts, return old SR - * $a0 = 3: ReturnFromException — RFE + return to EPC + * $a0 = 3: ReturnFromException — restore full TCB state + RFE * - * These are the only three SYSCALLs the PS1 BIOS defines. We handle - * them directly because the BIOS calls EnterCriticalSection during - * early init before its exception chain infrastructure is ready. - * Once chains are set up, the recompiled BIOS exception handler - * could handle these too, but direct handling is correct for all phases. + * Syscalls 1 and 2 are always handled directly — they only touch IEc + * in SR and don't need the full exception mechanism. + * + * Syscall 3 and unknown numbers route through the real BIOS exception + * handler once it's installed, because ReturnFromException must restore + * the full register state from the current thread's TCB (including the + * saved SR which carries IM[2]). */ uint32_t func = cpu->gpr[4]; /* $a0 = syscall function number */ uint32_t sr = cpu->cop0[12]; switch (func) { case 1: /* EnterCriticalSection: disable interrupts */ - cpu->cop0[12] = sr & ~0x0404u; /* clear IEc and IEp */ - cpu->gpr[2] = (sr & 0x0404u) ? 1 : 0; /* return whether interrupts were enabled */ - cpu->pc = 0; /* don't tail-call — return to caller */ + cpu->cop0[12] = sr & ~1u; /* clear IEc (bit 0) */ + cpu->gpr[2] = sr & 1u; /* return old IEc */ + cpu->pc = 0; return; case 2: /* ExitCriticalSection: enable interrupts */ - cpu->cop0[12] = sr | 0x0404u; /* set IEc and IEp */ + cpu->cop0[12] = sr | 0x0401u; /* set IEc (bit 0) + IM[2] (bit 10) */ cpu->gpr[2] = 0; - cpu->pc = 0; /* don't tail-call — return to caller */ + cpu->pc = 0; return; - case 3: /* ReturnFromException: RFE + return to EPC */ - /* Pop SR exception stack */ + case 3: { /* ReturnFromException: restore from TCB + RFE */ + uint32_t tcb_ptr_addr = cpu->read_word(0x00000108u); + if (tcb_ptr_addr != 0) { + uint32_t save_area = cpu->read_word(tcb_ptr_addr); + if (save_area != 0) { + save_area += 8; /* handler adds 8 before saving */ + uint32_t saved_epc = cpu->read_word(save_area + 128); + uint32_t saved_sr = cpu->read_word(save_area + 140); + /* Restore ALL GPRs from TCB save area. + * Layout: offset 0 = $zero (skip), 4 = $at, ... 124 = $ra, + * 128 = EPC, 132 = HI, 136 = LO, 140 = SR. */ + for (int i = 1; i < 32; i++) { + cpu->gpr[i] = cpu->read_word(save_area + i * 4); + } + cpu->hi = cpu->read_word(save_area + 132); + cpu->lo = cpu->read_word(save_area + 136); + /* RFE pop on saved SR (clears bits [5:0], shifts [5:2]→[3:0]). */ + cpu->cop0[12] = (saved_sr & 0xFFFFFFC0u) | ((saved_sr >> 2) & 0x0Fu); + cpu->pc = saved_epc; + if (psx_get_in_exception()) { + psx_exception_longjmp(); /* unwind handler */ + } + return; + } + } + /* Fallback: simple RFE on current SR. */ cpu->cop0[12] = (sr & ~0x0Fu) | ((sr >> 2) & 0x0Fu); - /* Dispatch to EPC */ cpu->pc = cpu->cop0[14]; return; + } default: break; } - /* For unknown syscall numbers, fall through to full exception dispatch. - * This path is taken once the BIOS has set up its exception chains. */ + /* Unknown syscalls: route through the real BIOS exception handler. */ + uint32_t handler_word = cpu->read_word(0x80000080u); + if (handler_word != 0) { + /* Route through the real BIOS exception handler. */ + cpu->cop0[14] = cpu->pc; /* EPC */ + cpu->cop0[13] = (cpu->cop0[13] & ~0x7Cu) | (0x08u << 2); /* Cause: Syscall */ + cpu->cop0[12] = (sr & ~0x3Fu) | ((sr & 0x0Fu) << 2); /* SR push */ + uint32_t vector = (sr & 0x00400000u) ? 0xBFC00180u : 0x80000080u; + psx_dispatch(cpu, vector); + return; + } - /* EPC = PC of the syscall instruction (set by generated code before call) */ - cpu->cop0[14] = cpu->pc; /* EPC */ + /* Early boot fallback for syscall 3. */ + if (func == 3) { + cpu->cop0[12] = (sr & ~0x0Fu) | ((sr >> 2) & 0x0Fu); + cpu->pc = cpu->cop0[14]; + return; + } - /* Cause: preserve existing bits, set ExcCode = 0x08 (syscall) */ - cpu->cop0[13] = (cpu->cop0[13] & ~0x7Cu) | (0x08u << 2); - - /* SR interrupt stack push: bits [5:0] shift left by 2 */ - cpu->cop0[12] = (sr & ~0x3Fu) | ((sr & 0x0Fu) << 2); - - /* Jump to exception vector. */ - uint32_t vector = (sr & 0x00400000u) ? 0xBFC00180u : 0x80000080u; - psx_dispatch(cpu, vector); -} - -static void trap_crash(const char* msg) { - FILE* cf = fopen("psx_crash.txt", "w"); - if (cf) { fprintf(cf, "%s\n", msg); fclose(cf); } + /* Unknown syscall number and no handler — fatal. */ + { + char buf[128]; + snprintf(buf, sizeof(buf), "SYSCALL %u with no handler @ PC=0x%08X", + func, cpu->pc); + trap_crash(buf); + fprintf(stderr, "%s\n", buf); fflush(stderr); + exit(1); + } } void psx_break(CPUState* cpu, uint32_t code, uint32_t pc) { @@ -87,14 +131,66 @@ void psx_arith_overflow(CPUState* cpu) { } void psx_unaligned_access(CPUState* cpu, uint32_t addr, uint32_t pc) { - char buf[128]; - snprintf(buf, sizeof(buf), "UNALIGNED @ addr=0x%08X, PC=0x%08X", addr, pc); + char buf[512]; + snprintf(buf, sizeof(buf), + "UNALIGNED @ addr=0x%08X, PC=0x%08X\n" + " $s3=0x%08X $s6=0x%08X $s4=0x%08X\n" + " $k0=0x%08X $sp=0x%08X $ra=0x%08X\n" + " RAM[0x100]=0x%08X RAM[0x108]=0x%08X\n" + " SR=0x%08X Cause=0x%08X EPC=0x%08X\n" + " in_exception=%d", + addr, pc, + cpu->gpr[19], cpu->gpr[22], cpu->gpr[20], + cpu->gpr[26], cpu->gpr[29], cpu->gpr[31], + cpu->read_word(0x100), cpu->read_word(0x108), + cpu->cop0[12], cpu->cop0[13], cpu->cop0[14], + psx_get_in_exception()); trap_crash(buf); fprintf(stderr, "%s\n", buf); fflush(stderr); exit(1); } void psx_unknown_dispatch(CPUState* cpu, uint32_t addr, uint32_t phys) { + /* Detect ReturnFromException: when the recompiled B0:0x17 function + * (or handler epilogue) has already restored all registers from the + * TCB and done RFE, it sets cpu->pc = saved_epc = our sentinel + * 0x80000048. The dispatch loop tail-calls here. If we're inside + * the exception handler, longjmp back to psx_check_interrupts to + * properly unwind the handler call tree. */ + if (addr == 0x80000048u && psx_get_in_exception()) { + cpu->pc = 0; + psx_exception_longjmp(); /* does not return */ + } + + /* Reject non-word-aligned targets — corrupt function pointer. Hard fail. */ + if (addr & 3) { + char buf[512]; + snprintf(buf, sizeof(buf), + "DISPATCH FATAL: misaligned target 0x%08X\n" + " aligned form: 0x%08X\n" + " physical: 0x%08X\n" + " cpu->pc: 0x%08X\n" + " $ra: 0x%08X\n" + " $t9: 0x%08X\n" + " $v0: 0x%08X\n" + " $a0: 0x%08X\n" + " $a1: 0x%08X\n" + " $a2: 0x%08X\n" + " $a3: 0x%08X\n" + " COP0_EPC: 0x%08X\n" + " COP0_SR: 0x%08X\n" + " COP0_Cause: 0x%08X\n", + addr, addr & ~3u, phys, + cpu->pc, cpu->gpr[31], cpu->gpr[25], + cpu->gpr[2], cpu->gpr[4], cpu->gpr[5], + cpu->gpr[6], cpu->gpr[7], + cpu->cop0[14], cpu->cop0[12], cpu->cop0[13]); + trap_crash(buf); + fprintf(stderr, "%s", buf); + fflush(stderr); + exit(1); + } + /* * The BIOS writes small jump trampolines into RAM at runtime * (e.g., at 0xA0, 0xB0, 0xC0 for the A0/B0/C0 vectors). @@ -154,27 +250,38 @@ void psx_unknown_dispatch(CPUState* cpu, uint32_t addr, uint32_t phys) { } } - /* Pattern 4: lui rN, hi / addiu rN, rN, lo / jr rN */ + /* Pattern 4: lui rN, hi / addiu|ori rN, rN, lo / jr rN / nop + * All three instructions must be present. Without the jr check, + * any function prologue that loads a constant via lui+ori would + * be misidentified as a trampoline (see 0xBFC3DF90 incident). */ if (op0 == 0x0F) { /* LUI */ uint32_t rt0 = (w0 >> 16) & 0x1F; uint32_t hi_val = (w0 & 0xFFFF) << 16; + uint32_t computed = 0; + int have_target = 0; if (op1 == 0x09) { /* ADDIU */ uint32_t rs1 = (w1 >> 21) & 0x1F; uint32_t rt1 = (w1 >> 16) & 0x1F; if (rs1 == rt0 && rt1 == rt0) { int16_t lo_val = (int16_t)(w1 & 0xFFFF); - uint32_t target = hi_val + (uint32_t)(int32_t)lo_val; - cpu->pc = target; - return; + computed = hi_val + (uint32_t)(int32_t)lo_val; + have_target = 1; } } - if (op1 == 0x0D) { /* ORI */ + if (!have_target && op1 == 0x0D) { /* ORI */ uint32_t rs1 = (w1 >> 21) & 0x1F; uint32_t rt1 = (w1 >> 16) & 0x1F; if (rs1 == rt0 && rt1 == rt0) { - uint32_t target = hi_val | (w1 & 0xFFFF); - cpu->pc = target; + computed = hi_val | (w1 & 0xFFFF); + have_target = 1; + } + } + /* Only resolve if w2 is jr rN targeting the same register. */ + if (have_target && (w2 & 0xFC1FFFFF) == 0x00000008) { + uint32_t jr_rs = (w2 >> 21) & 0x1F; + if (jr_rs == rt0) { + cpu->pc = computed; return; } } diff --git a/tools/gen_phase2_seeds.py b/tools/gen_phase2_seeds.py new file mode 100644 index 00000000..f34f73d4 --- /dev/null +++ b/tools/gen_phase2_seeds.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Generate phase2_ghidra_seeds.json from Ghidra function starts + Phase 1c seeds + supplemental seeds. + +This script MERGES sources. If phase2_ghidra_seeds.json already exists, any seeds +in it that don't come from the current Ghidra export are preserved (they were added +manually in prior sessions). +""" +import json +import os + +root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +with open(os.path.join(root, "generated", "ghidra_function_starts.json")) as f: + data = json.load(f) + +seeds = [] +existing = set() + +# Load existing seed file to preserve manually-added seeds +out_path = os.path.join(root, "recompiler", "seeds", "phase2_ghidra_seeds.json") +old_seeds = {} +if os.path.exists(out_path): + with open(out_path) as f: + old_data = json.load(f) + for s in old_data.get("seeds", []): + addr_int = int(s["address"], 16) + old_seeds[addr_int] = s + +# Add the two original Phase 1c seeds first +for addr, label, rat in [ + ("0xBFC00000", "reset_vector", "MIPS R3000A reset vector"), + ("0xBFC00180", "general_exception_bev1", "BEV=1 general exception vector"), +]: + seeds.append({"address": addr, "label": label, "rationale": rat}) + existing.add(int(addr, 16)) + +# Add all Ghidra function starts +for addr_str in data["function_starts"]: + addr_int = int(addr_str, 16) + if addr_int not in existing: + label = "ghidra_{:08X}".format(addr_int) + seeds.append({"address": "0x{:08X}".format(addr_int), "label": label, "rationale": "Ghidra function start"}) + existing.add(addr_int) + +# Add dispatch-miss seeds (functions only reachable via indirect calls) +dm_path = os.path.join(root, "recompiler", "seeds", "dispatch_miss_seeds.json") +if os.path.exists(dm_path): + with open(dm_path) as f: + dm_data = json.load(f) + for s in dm_data.get("seeds", []): + addr_int = int(s["address"], 16) + if addr_int not in existing: + label = "dmiss_{:08X}".format(addr_int) + seeds.append({"address": "0x{:08X}".format(addr_int), "label": label, "rationale": s.get("rationale", "dispatch miss")}) + existing.add(addr_int) + +# Preserve manually-added seeds from the previous file +preserved = 0 +for addr_int, s in sorted(old_seeds.items()): + if addr_int not in existing: + seeds.append(s) + existing.add(addr_int) + preserved += 1 + +result = { + "schema": "psxrecomp-v4 phase2 seeds", + "source": "generated/ghidra_function_starts.json + phase1c seeds + dispatch_miss_seeds + preserved manual", + "seed_count": len(seeds), + "seeds": seeds, + "excluded": [ + {"address": "0xBFC00100", "label": "utlb_miss_bev1", + "rationale": "R3000 UTLB-miss vector; PS1 has no TLB; never executed"} + ], +} + +with open(out_path, "w") as f: + json.dump(result, f, indent=2) + +print("Written {} seeds to {} ({} preserved from previous)".format(len(seeds), out_path, preserved))