From 04105baf4e8f4f1238a76061d6096f1514527913 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Sun, 28 Jun 2009 16:23:40 +0000 Subject: [PATCH] DSPLLE: sort of semi-working breakpoints and stepping, if you flip an #ifdef. more work to do, for some reason it gets very slow when you enable it atm git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3573 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DSPCore/Src/DSPCore.cpp | 60 + Source/Core/DSPCore/Src/DSPCore.h | 53 +- Source/Core/DSPCore/Src/DSPHWInterface.cpp | 6 +- Source/Core/DSPCore/Src/DSPHWInterface.h | 20 - Source/Core/DSPCore/Src/DSPHost.h | 1 + Source/Core/DSPCore/Src/DSPIntCCUtil.cpp | 81 +- Source/Core/DSPCore/Src/DSPIntUtil.h | 1 - Source/Core/DSPCore/Src/DSPInterpreter.cpp | 54 +- Source/Core/DSPCore/Src/DSPInterpreter.h | 8 +- Source/Core/DSPCore/Src/DSPStacks.cpp | 8 +- Source/Core/DSPCore/Src/DSPStacks.h | 4 +- Source/Core/DSPCore/Src/DSPTables.cpp | 8 +- Source/DSPTool/Src/main.cpp | 1 + Source/Plugins/Plugin_DSP_LLE/Src/DSPHost.cpp | 12 +- .../Plugin_DSP_LLE/Src/Debugger/Debugger.cpp | 69 +- .../Plugin_DSP_LLE/Src/Debugger/Debugger.h | 12 - Source/Plugins/Plugin_DSP_LLE/Src/main.cpp | 19 +- docs/DSP/DSP_UC_AX1.txt | 1132 +++++++++-------- docs/DSP/DSP_UC_Zelda.txt | 66 +- 19 files changed, 841 insertions(+), 774 deletions(-) diff --git a/Source/Core/DSPCore/Src/DSPCore.cpp b/Source/Core/DSPCore/Src/DSPCore.cpp index 2b0e43ae81..8824916db9 100644 --- a/Source/Core/DSPCore/Src/DSPCore.cpp +++ b/Source/Core/DSPCore/Src/DSPCore.cpp @@ -24,7 +24,9 @@ ====================================================================*/ #include "Common.h" +#include "Thread.h" #include "DSPCore.h" +#include "DSPHost.h" #include "DSPAnalyzer.h" #include "MemoryUtil.h" @@ -33,6 +35,8 @@ SDSP g_dsp; BreakPoints dsp_breakpoints; +DSPCoreState core_state = DSPCORE_RUNNING; +Common::Event step_event; static bool LoadRom(const char *fname, int size_in_words, u16 *rom) { @@ -118,11 +122,13 @@ bool DSPCore_Init(const char *irom_filename, const char *coef_filename) WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false); DSPAnalyzer::Analyze(); + step_event.Init(); return true; } void DSPCore_Shutdown() { + step_event.Shutdown(); FreeMemoryPages(g_dsp.irom, DSP_IROM_BYTE_SIZE); FreeMemoryPages(g_dsp.iram, DSP_IRAM_BYTE_SIZE); FreeMemoryPages(g_dsp.dram, DSP_DRAM_BYTE_SIZE); @@ -184,3 +190,57 @@ void DSPCore_CheckExceptions() } } } + +// Delegate to JIT (when it is written) or interpreter as appropriate. +// Handle state changes and stepping. +int DSPCore_RunCycles(int cycles) +{ + while (cycles > 0) { + reswitch: + switch (core_state) + { + case DSPCORE_RUNNING: +#if 0 // Set to 1 to enable stepping + // Enable breakpoints + cycles = DSPInterpreter::RunCyclesDebug(cycles); +#else + //1: enter a fast runloop + cycles = DSPInterpreter::RunCycles(cycles); +#endif + break; + + case DSPCORE_STEPPING: + step_event.Wait(); + if (core_state != DSPCORE_STEPPING) + goto reswitch; + + DSPInterpreter::Step(); + cycles--; + + DSPHost_UpdateDebugger(); + break; + } + } + return cycles; +} + +void DSPCore_SetState(DSPCoreState new_state) +{ + core_state = new_state; + // kick the event, in case we are waiting + if (new_state == DSPCORE_RUNNING) + step_event.Set(); + // Sleep(10); + DSPHost_UpdateDebugger(); +} + +DSPCoreState DSPCore_GetState() +{ + return core_state; +} + +void DSPCore_Step() +{ + if (core_state == DSPCORE_STEPPING) + step_event.Set(); +} diff --git a/Source/Core/DSPCore/Src/DSPCore.h b/Source/Core/DSPCore/Src/DSPCore.h index 34a5740e88..a0c574ca1a 100644 --- a/Source/Core/DSPCore/Src/DSPCore.h +++ b/Source/Core/DSPCore/Src/DSPCore.h @@ -101,17 +101,35 @@ // Hardware registers address -#define DSP_REG_DSCR 0xffc9 // DSP DMA Control Reg -#define DSP_REG_DSBL 0xffcb // DSP DMA Block Length -#define DSP_REG_DSPA 0xffcd // DSP DMA DMEM Address -#define DSP_REG_DSMAH 0xffce // DSP DMA Mem Address H -#define DSP_REG_DSMAL 0xffcf // DSP DMA Mem Address L +#define DSP_COEF_A1_0 0xa0 -#define DSP_REG_DIRQ 0xfffb // DSP Irq Rest -#define DSP_REG_DMBH 0xfffc // DSP Mailbox H -#define DSP_REG_DMBL 0xfffd // DSP Mailbox L -#define DSP_REG_CMBH 0xfffe // CPU Mailbox H -#define DSP_REG_CMBL 0xffff // CPU Mailbox L +#define DSP_DSMAH 0xce +#define DSP_DSMAL 0xcf +#define DSP_DSCR 0xc9 // DSP DMA Control Reg +#define DSP_DSPA 0xcd // DSP DMA Block Length +#define DSP_DSBL 0xcb // DSP DMA DMEM Address +#define DSP_DSMAH 0xce // DSP DMA Mem Address H +#define DSP_DSMAL 0xcf // DSP DMA Mem Address L + +#define DSP_FORMAT 0xd1 +#define DSP_ACDATA1 0xd3 // used only by Zelda ucodes +#define DSP_ACSAH 0xd4 +#define DSP_ACSAL 0xd5 +#define DSP_ACEAH 0xd6 +#define DSP_ACEAL 0xd7 +#define DSP_ACCAH 0xd8 +#define DSP_ACCAL 0xd9 +#define DSP_PRED_SCALE 0xda +#define DSP_YN1 0xdb +#define DSP_YN2 0xdc +#define DSP_ACCELERATOR 0xdd // ADPCM accelerator read. Used by AX. +#define DSP_GAIN 0xde + +#define DSP_DIRQ 0xfb // DSP Irq Rest +#define DSP_DMBH 0xfc // DSP Mailbox H +#define DSP_DMBL 0xfd // DSP Mailbox L +#define DSP_CMBH 0xfe // CPU Mailbox H +#define DSP_CMBL 0xff // CPU Mailbox L #define DMA_TO_DSP 0 #define DMA_TO_CPU 1 @@ -125,6 +143,7 @@ #define CR_HALT 0x0004 #define CR_EXTERNAL_INT 0x0002 + // SR bits #define SR_CARRY 0x0001 #define SR_2 0x0002 // overflow??? @@ -194,4 +213,18 @@ void DSPCore_CheckExceptions(); // sets a flag in the pending exception register. void DSPCore_SetException(u8 level); +enum DSPCoreState +{ + DSPCORE_RUNNING = 0, + DSPCORE_STEPPING = 1, +}; + +int DSPCore_RunCycles(int cycles); + +// These are meant to be called from the UI thread. +void DSPCore_SetState(DSPCoreState new_state); +DSPCoreState DSPCore_GetState(); + +void DSPCore_Step(); + #endif // _DSPCORE_H diff --git a/Source/Core/DSPCore/Src/DSPHWInterface.cpp b/Source/Core/DSPCore/Src/DSPHWInterface.cpp index 1b11387c55..9c0d631aeb 100644 --- a/Source/Core/DSPCore/Src/DSPHWInterface.cpp +++ b/Source/Core/DSPCore/Src/DSPHWInterface.cpp @@ -36,7 +36,7 @@ #include "DSPInterpreter.h" #include "DSPHWInterface.h" -void gdsp_dma(); +void gdsp_do_dma(); Common::CriticalSection g_CriticalSection; @@ -137,7 +137,7 @@ void gdsp_ifx_write(u16 addr, u16 val) case 0xcb: // DSBL gdsp_ifx_regs[addr & 0xFF] = val; - gdsp_dma(); + gdsp_do_dma(); gdsp_ifx_regs[DSP_DSCR] &= ~0x0004; break; @@ -274,7 +274,7 @@ void gdsp_ddma_out(u16 dsp_addr, u32 addr, u32 size) INFO_LOG(DSPLLE, "*** ddma_out DRAM_DSP (0x%04x) -> RAM (0x%08x) : size (0x%08x)\n", dsp_addr / 2, addr, size); } -void gdsp_dma() +void gdsp_do_dma() { u16 ctl; u32 addr; diff --git a/Source/Core/DSPCore/Src/DSPHWInterface.h b/Source/Core/DSPCore/Src/DSPHWInterface.h index 80b429b849..13a4bd402c 100644 --- a/Source/Core/DSPCore/Src/DSPHWInterface.h +++ b/Source/Core/DSPCore/Src/DSPHWInterface.h @@ -30,26 +30,6 @@ #define GDSP_MBOX_CPU 0 #define GDSP_MBOX_DSP 1 -#define DSP_DSMAH 0xce -#define DSP_DSMAL 0xcf -#define DSP_DSCR 0xc9 -#define DSP_DSPA 0xcd -#define DSP_DSBL 0xcb -#define DSP_ACSAH 0xd4 -#define DSP_ACSAL 0xd5 -#define DSP_ACEAH 0xd6 -#define DSP_ACEAL 0xd7 -#define DSP_ACCAH 0xd8 -#define DSP_ACCAL 0xd9 - -#define DSP_COEF_A1_0 0xa0 -#define DSP_FORMAT 0xd1 -#define DSP_PRED_SCALE 0xda -#define DSP_YN1 0xdb -#define DSP_YN2 0xdc -#define DSP_ARAM 0xdd -#define DSP_GAIN 0xde - extern u16 gdsp_ifx_regs[256]; u32 gdsp_mbox_peek(u8 mbx); diff --git a/Source/Core/DSPCore/Src/DSPHost.h b/Source/Core/DSPCore/Src/DSPHost.h index 631620e6fb..a414500500 100644 --- a/Source/Core/DSPCore/Src/DSPHost.h +++ b/Source/Core/DSPCore/Src/DSPHost.h @@ -29,5 +29,6 @@ bool DSPHost_OnThread(); bool DSPHost_Running(); void DSPHost_InterruptRequest(); u32 DSPHost_CodeLoaded(const u8 *ptr, int size); +void DSPHost_UpdateDebugger(); #endif diff --git a/Source/Core/DSPCore/Src/DSPIntCCUtil.cpp b/Source/Core/DSPCore/Src/DSPIntCCUtil.cpp index ecf49189ca..bb391a4a91 100644 --- a/Source/Core/DSPCore/Src/DSPIntCCUtil.cpp +++ b/Source/Core/DSPCore/Src/DSPIntCCUtil.cpp @@ -32,12 +32,12 @@ void Update_SR_Register64(s64 _Value) if (_Value < 0) { - g_dsp.r[DSP_REG_SR] |= 0x8; + g_dsp.r[DSP_REG_SR] |= SR_SIGN; } if (_Value == 0) { - g_dsp.r[DSP_REG_SR] |= 0x4; + g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO; } // weird @@ -53,12 +53,12 @@ void Update_SR_Register16(s16 _Value) if (_Value < 0) { - g_dsp.r[DSP_REG_SR] |= 0x8; + g_dsp.r[DSP_REG_SR] |= SR_SIGN; } if (_Value == 0) { - g_dsp.r[DSP_REG_SR] |= 0x4; + g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO; } // weird @@ -90,92 +90,51 @@ int GetMultiplyModifier() } inline bool isCarry() { - return (g_dsp.r[DSP_REG_SR] & 0x01) ? true : false; + return (g_dsp.r[DSP_REG_SR] & SR_CARRY) ? true : false; } inline bool isSign() { - return ((g_dsp.r[DSP_REG_SR] & 0x02) != (g_dsp.r[DSP_REG_SR] & 0x08)); + return ((g_dsp.r[DSP_REG_SR] & SR_2) != (g_dsp.r[DSP_REG_SR] & SR_SIGN)); } - inline bool isZero() { - return (g_dsp.r[DSP_REG_SR] & 0x04) ? true : false; + return (g_dsp.r[DSP_REG_SR] & SR_ARITH_ZERO) ? true : false; } - - //see gdsp_registers.h for flags bool CheckCondition(u8 _Condition) { - bool taken = false; switch (_Condition & 0xf) { case 0x0: //NS - NOT SIGN - if (! isSign()) - taken = true; - break; - + return !isSign(); case 0x1: // S - SIGN - if (isSign()) - taken = true; - break; - + return isSign(); case 0x2: // G - GREATER - if (! isSign() && !isZero()) - taken = true; - break; - + return !isSign() && !isZero(); case 0x3: // LE - LESS EQUAL - if (isSign() || isZero()) - taken = true; - break; - + return isSign() || isZero(); case 0x4: // NZ - NOT ZERO - - if (!isZero()) - taken = true; - break; - + return !isZero(); case 0x5: // Z - ZERO - - if (isZero()) - taken = true; - break; - + return isZero(); case 0x6: // L - LESS // Should be that once we set 0x01 - if (!isCarry()) + return !isCarry(); // if (isSign()) - taken = true; - break; - case 0x7: // GE - GREATER EQUAL // Should be that once we set 0x01 - if (isCarry()) + return isCarry(); // if (! isSign() || isZero()) - taken = true; - break; - case 0xc: // LNZ - LOGIC NOT ZERO - - if (!(g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO)) - taken = true; - break; - + return !(g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO); case 0xd: // LZ - LOGIC ZERO + return (g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO) != 0; - if (g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO) - taken = true; - break; - - case 0xf: // Empty - taken = true; - break; - + case 0xf: // Empty - always true. + return true; default: ERROR_LOG(DSPLLE, "Unknown condition check: 0x%04x\n", _Condition & 0xf); - break; + return false; } - - return taken; } } // namespace diff --git a/Source/Core/DSPCore/Src/DSPIntUtil.h b/Source/Core/DSPCore/Src/DSPIntUtil.h index 5678baa46b..203450b20f 100644 --- a/Source/Core/DSPCore/Src/DSPIntUtil.h +++ b/Source/Core/DSPCore/Src/DSPIntUtil.h @@ -32,7 +32,6 @@ #include "DSPCore.h" #include "DSPMemoryMap.h" #include "DSPStacks.h" -// #include "DSPIntExtOps.h" // --------------------------------------------------------------------------------------- // --- SR diff --git a/Source/Core/DSPCore/Src/DSPInterpreter.cpp b/Source/Core/DSPCore/Src/DSPInterpreter.cpp index c205641b27..d1f98995e9 100644 --- a/Source/Core/DSPCore/Src/DSPInterpreter.cpp +++ b/Source/Core/DSPCore/Src/DSPInterpreter.cpp @@ -71,8 +71,6 @@ u16 ReadCR() return g_dsp.cr; } - - void HandleLoop() { // Handle looping hardware. @@ -85,6 +83,7 @@ void HandleLoop() // This does not always work correctly! // The loop end tends to point to the second part of // two-byte instructions! + // 0179 1104 019f bloopi #0x04, 0x019f in zelda, for example if (g_dsp.pc == (rLoopAddress + 1)) { rLoopCounter--; @@ -150,31 +149,62 @@ void Run() gdsp_running = false; } -// Used by non-thread mode. -void RunCycles(int cycles) +// This one has basic idle skipping, and checks breakpoints. +int RunCyclesDebug(int cycles) +{ + // First, let's run a few cycles with no idle skipping so that things can progress a bit. + for (int i = 0; i < 8; i++) + { + if (g_dsp.cr & CR_HALT) + return 0; + Step(); + cycles--; + } + + while (cycles > 0) + { + if (g_dsp.cr & CR_HALT) { + return 0; + } + if (dsp_breakpoints.IsAddressBreakPoint(g_dsp.pc)) + { + DSPCore_SetState(DSPCORE_STEPPING); + return cycles; + } + DSPCore_CheckExternalInterrupt(); + Step(); + cycles--; + + // Idle skipping. + if (DSPAnalyzer::code_flags[g_dsp.pc] & DSPAnalyzer::CODE_IDLE_SKIP) + return 0; + } +} + +// Used by non-thread mode. Meant to be efficient. +int RunCycles(int cycles) { if (cycles < 18) { for (int i = 0; i < cycles; i++) { if (g_dsp.cr & CR_HALT) - return; + return 0; if (DSPAnalyzer::code_flags[g_dsp.pc] & DSPAnalyzer::CODE_IDLE_SKIP) - return; + return 0; Step(); cycles--; } - return; + return cycles; } - DSPCore_CheckExternalInterrupt(); // First, let's run a few cycles with no idle skipping so that things can progress a bit. for (int i = 0; i < 8; i++) { if (g_dsp.cr & CR_HALT) - return; + return 0; Step(); cycles--; } @@ -183,9 +213,9 @@ void RunCycles(int cycles) for (int i = 0; i < 8; i++) { if (g_dsp.cr & CR_HALT) - return; + return 0; if (DSPAnalyzer::code_flags[g_dsp.pc] & DSPAnalyzer::CODE_IDLE_SKIP) - return; + return 0; Step(); cycles--; } @@ -199,6 +229,8 @@ void RunCycles(int cycles) // We don't bother directly supporting pause - if the main emu pauses, // it just won't call this function anymore. } + + return cycles; } void Stop() diff --git a/Source/Core/DSPCore/Src/DSPInterpreter.h b/Source/Core/DSPCore/Src/DSPInterpreter.h index 64bb65e062..4fc879c1c7 100644 --- a/Source/Core/DSPCore/Src/DSPInterpreter.h +++ b/Source/Core/DSPCore/Src/DSPInterpreter.h @@ -27,7 +27,13 @@ namespace DSPInterpreter { void Step(); void Run(); -void RunCycles(int cycles); + +// If these simply return the same number of cycles as was passed into them, +// chances are that the DSP is halted. +// The difference between them is that the debug one obeys breakpoints. +int RunCycles(int cycles); +int RunCyclesDebug(int cycles); + void Stop(); void WriteCR(u16 val); diff --git a/Source/Core/DSPCore/Src/DSPStacks.cpp b/Source/Core/DSPCore/Src/DSPStacks.cpp index 7c69e63732..2581b1f0ae 100644 --- a/Source/Core/DSPCore/Src/DSPStacks.cpp +++ b/Source/Core/DSPCore/Src/DSPStacks.cpp @@ -30,27 +30,27 @@ // Stacks. The stacks are outside the DSP RAM, in dedicated hardware. -void dsp_reg_stack_push(u8 stack_reg) +void dsp_reg_stack_push(int stack_reg) { g_dsp.reg_stack_ptr[stack_reg]++; g_dsp.reg_stack_ptr[stack_reg] &= DSP_STACK_MASK; g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]] = g_dsp.r[DSP_REG_ST0 + stack_reg]; } -void dsp_reg_stack_pop(u8 stack_reg) +void dsp_reg_stack_pop(int stack_reg) { g_dsp.r[DSP_REG_ST0 + stack_reg] = g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]]; g_dsp.reg_stack_ptr[stack_reg]--; g_dsp.reg_stack_ptr[stack_reg] &= DSP_STACK_MASK; } -void dsp_reg_store_stack(u8 stack_reg, u16 val) +void dsp_reg_store_stack(int stack_reg, u16 val) { dsp_reg_stack_push(stack_reg); g_dsp.r[DSP_REG_ST0 + stack_reg] = val; } -u16 dsp_reg_load_stack(u8 stack_reg) +u16 dsp_reg_load_stack(int stack_reg) { u16 val = g_dsp.r[DSP_REG_ST0 + stack_reg]; dsp_reg_stack_pop(stack_reg); diff --git a/Source/Core/DSPCore/Src/DSPStacks.h b/Source/Core/DSPCore/Src/DSPStacks.h index 9459badde5..1a5b9e872c 100644 --- a/Source/Core/DSPCore/Src/DSPStacks.h +++ b/Source/Core/DSPCore/Src/DSPStacks.h @@ -28,7 +28,7 @@ #include "Common.h" -void dsp_reg_store_stack(u8 stack_reg, u16 val); -u16 dsp_reg_load_stack(u8 stack_reg); +void dsp_reg_store_stack(int stack_reg, u16 val); +u16 dsp_reg_load_stack(int stack_reg); #endif diff --git a/Source/Core/DSPCore/Src/DSPTables.cpp b/Source/Core/DSPCore/Src/DSPTables.cpp index 9e7a17df0d..45ca3d4f7d 100644 --- a/Source/Core/DSPCore/Src/DSPTables.cpp +++ b/Source/Core/DSPCore/Src/DSPTables.cpp @@ -252,8 +252,7 @@ const DSPOPCTemplate opcodes[] = {"CLRL", 0xfc00, 0xffff, DSPInterpreter::clrl, nop, 1 | P_EXT, 1, {{P_ACCL, 1, 0, 11, 0x0800}}, dsp_op_ext_ops_pro, dsp_op_ext_ops_epi}, // clear acl0 {"CLR", 0x8100, 0xf7ff, DSPInterpreter::clr, nop, 1 | P_EXT, 1, {{P_ACC, 1, 0, 11, 0x0800}}, dsp_op_ext_ops_pro, dsp_op_ext_ops_epi}, // clear acc0 {"CLRP", 0x8400, 0xffff, DSPInterpreter::clrp, nop, 1 | P_EXT, 0, {}, }, - - + {"MOV", 0x6c00, 0xfeff, DSPInterpreter::mov, nop, 1 | P_EXT, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_ACC_D, 1, 0, 8, 0x0100}}, dsp_op_ext_ops_pro, dsp_op_ext_ops_epi}, {"MOVAX", 0x6800, 0xfcff, DSPInterpreter::movax, nop, 1 | P_EXT, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_REG18, 1, 0, 9, 0x0200}}, dsp_op_ext_ops_pro, dsp_op_ext_ops_epi}, {"MOVR", 0x6000, 0xf8ff, DSPInterpreter::movr, nop, 1 | P_EXT, 2, {{P_ACC, 1, 0, 8, 0x0100}, {P_REG18, 1, 0, 9, 0x0600}}, dsp_op_ext_ops_pro, dsp_op_ext_ops_epi}, @@ -368,6 +367,7 @@ const pdlabel_t pdlabels[] = {0xffad, "COEF_A2_6", "COEF_A2_6",}, {0xffae, "COEF_A1_7", "COEF_A1_7",}, {0xffaf, "COEF_A2_7", "COEF_A2_7",}, + {0xffb0, 0, 0,}, {0xffb1, 0, 0,}, {0xffb2, 0, 0,}, @@ -384,6 +384,7 @@ const pdlabel_t pdlabels[] = {0xffbd, 0, 0,}, {0xffbe, 0, 0,}, {0xffbf, 0, 0,}, + {0xffc0, 0, 0,}, {0xffc1, 0, 0,}, {0xffc2, 0, 0,}, @@ -400,6 +401,7 @@ const pdlabel_t pdlabels[] = {0xffcd, "DSPA", "DSP DMA DMEM Address",}, {0xffce, "DSMAH", "DSP DMA Mem Address H",}, {0xffcf, "DSMAL", "DSP DMA Mem Address L",}, + {0xffd0, 0,0,}, {0xffd1, "SampleFormat", "SampleFormat",}, {0xffd2, 0,0,}, @@ -416,6 +418,7 @@ const pdlabel_t pdlabels[] = {0xffdd, "ARAM", "Direct Read from ARAM (uses ADPCM)",}, {0xffde, "GAIN", "Gain",}, {0xffdf, 0,0,}, + {0xffe0, 0,0,}, {0xffe1, 0,0,}, {0xffe2, 0,0,}, @@ -432,6 +435,7 @@ const pdlabel_t pdlabels[] = {0xffed, 0,0,}, {0xffee, 0,0,}, {0xffef, "AMDM", "ARAM DMA Request Mask",}, + {0xfff0, 0,0,}, {0xfff1, 0,0,}, {0xfff2, 0,0,}, diff --git a/Source/DSPTool/Src/main.cpp b/Source/DSPTool/Src/main.cpp index 582ccdf5ed..d86bf4cced 100644 --- a/Source/DSPTool/Src/main.cpp +++ b/Source/DSPTool/Src/main.cpp @@ -26,6 +26,7 @@ bool DSPHost_OnThread() { return false; } bool DSPHost_Running() { return true; } u32 DSPHost_CodeLoaded(const u8 *ptr, int size) {return 0x1337c0de;} void DSPHost_InterruptRequest() {} +void DSPHost_UpdateDebugger() {} // This test goes from text ASM to binary to text ASM and once again back to binary. // Then the two binaries are compared. diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/DSPHost.cpp b/Source/Plugins/Plugin_DSP_LLE/Src/DSPHost.cpp index 5122f88d73..96c3c36943 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/DSPHost.cpp +++ b/Source/Plugins/Plugin_DSP_LLE/Src/DSPHost.cpp @@ -69,7 +69,7 @@ u32 DSPHost_CodeLoaded(const u8 *ptr, int size) // this crc is comparable with the HLE plugin u32 ector_crc = 0; - for (u32 i = 0; i < size; i++) + for (int i = 0; i < size; i++) { ector_crc ^= ptr[i]; //let's rol @@ -85,7 +85,8 @@ u32 DSPHost_CodeLoaded(const u8 *ptr, int size) DSPSymbols::Clear(); bool success = false; - switch (ector_crc) { + switch (ector_crc) + { case 0x86840740: success = DSPSymbols::ReadAnnotatedAssembly("../../Docs/DSP/DSP_UC_Zelda.txt"); break; case 0x42f64ac4: success = DSPSymbols::ReadAnnotatedAssembly("../../Docs/DSP/DSP_UC_Luigi.txt"); break; case 0x4e8a8b21: success = DSPSymbols::ReadAnnotatedAssembly("../../Docs/DSP/DSP_UC_AX1.txt"); break; @@ -101,4 +102,9 @@ u32 DSPHost_CodeLoaded(const u8 *ptr, int size) m_DebuggerFrame->Refresh(); return crc; -} \ No newline at end of file +} + +void DSPHost_UpdateDebugger() +{ + m_DebuggerFrame->Refresh(); +} diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.cpp b/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.cpp index 8ea21b0680..9646997ac9 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.cpp +++ b/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.cpp @@ -39,8 +39,6 @@ DSPDebuggerLLE::DSPDebuggerLLE(wxWindow *parent, wxWindowID id, const wxString & const wxPoint &position, const wxSize& size, long style) : wxFrame(parent, id, title, position, size, style) , m_CachedStepCounter(-1) - , m_CachedCR(-1) - , m_State(RUN) { CreateGUIControls(); } @@ -87,6 +85,8 @@ void DSPDebuggerLLE::CreateGUIControls() this->SetSizer(sMain); this->Layout(); + + UpdateState(); } void DSPDebuggerLLE::OnClose(wxCloseEvent& event) @@ -99,15 +99,17 @@ void DSPDebuggerLLE::OnChangeState(wxCommandEvent& event) switch (event.GetId()) { case ID_RUNTOOL: - if ((m_State == RUN) || (m_State == RUN_START)) - m_State = PAUSE; + if (DSPCore_GetState() == DSPCORE_RUNNING) + DSPCore_SetState(DSPCORE_STEPPING); else - m_State = RUN_START; + DSPCore_SetState(DSPCORE_RUNNING); break; case ID_STEPTOOL: - m_State = STEP; + if (DSPCore_GetState() == DSPCORE_STEPPING) + DSPCore_Step(); break; + case ID_SHOWPCTOOL: FocusOnPC(); break; @@ -137,10 +139,14 @@ void DSPDebuggerLLE::FocusOnPC() void DSPDebuggerLLE::UpdateState() { - if ((m_State == RUN) || (m_State == RUN_START)) + if (DSPCore_GetState() == DSPCORE_RUNNING) { m_Toolbar->FindById(ID_RUNTOOL)->SetLabel(wxT("Pause")); - else + m_Toolbar->FindById(ID_STEPTOOL)->Enable(false); + } + else { m_Toolbar->FindById(ID_RUNTOOL)->SetLabel(wxT("Run")); + m_Toolbar->FindById(ID_STEPTOOL)->Enable(true); + } m_Toolbar->Realize(); } @@ -188,54 +194,7 @@ void DSPDebuggerLLE::OnSymbolListChange(wxCommandEvent& event) void DSPDebuggerLLE::UpdateRegisterFlags() { - if (m_CachedCR == g_dsp.cr) - return; - // m_Toolbar->ToggleTool(ID_CHECK_ASSERTINT, g_dsp.cr & 0x02 ? true : false); - // m_Toolbar->ToggleTool(ID_CHECK_HALT, g_dsp.cr & 0x04 ? true : false); - // m_Toolbar->ToggleTool(ID_CHECK_INIT, g_dsp.cr & 0x800 ? true : false); - - m_CachedCR = g_dsp.cr; -} - -bool DSPDebuggerLLE::CanDoStep() -{ - // update the symbols all the time because they're script cmds like bps - UpdateSymbolMap(); - - switch (m_State) - { - case RUN_START: - m_State = RUN; - return true; - - case RUN: - /* - if (IsBreakPoint(g_dsp.pc)) - { - Refresh(); - m_State = PAUSE; - return false; - }*/ - - return true; - - case PAUSE: - Refresh(); - return false; - - case STEP: - Refresh(); - m_State = PAUSE; - return true; - } - - return false; -} - -void DSPDebuggerLLE::DebugBreak() -{ - m_State = PAUSE; } void DSPDebuggerLLE::OnAddrBoxChange(wxCommandEvent& event) diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.h b/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.h index b154f42d40..f68ca8b020 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.h +++ b/Source/Plugins/Plugin_DSP_LLE/Src/Debugger/Debugger.h @@ -54,8 +54,6 @@ public: virtual ~DSPDebuggerLLE(); - bool CanDoStep(); - void DebugBreak(); void Refresh(); private: @@ -95,18 +93,8 @@ private: COLUMN_PARAM, }; - enum EState - { - PAUSE, - STEP, - RUN, - RUN_START // ignores breakpoints and switches after one step to RUN - }; - EState m_State; - DSPDebugInterface debug_interface; u64 m_CachedStepCounter; - u16 m_CachedCR; // GUI updaters void UpdateDisAsmListView(); diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp b/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp index 8037236463..884b00b606 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp +++ b/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp @@ -45,17 +45,12 @@ DSPDebuggerLLE* m_DebuggerFrame = NULL; PLUGIN_GLOBALS* globals = NULL; DSPInitialize g_dspInitialize; Common::Thread *g_hDSPThread = NULL; - SoundStream *soundStream = NULL; -#define GDSP_MBOX_CPU 0 -#define GDSP_MBOX_DSP 1 - -bool bCanWork = false; bool bIsRunning = false; ////////////////////////////////////////////////////////////////////////// -// UGLY wxw stuff, TODO fix up +// UGLY WxW stuff, TODO fix up // wxWidgets: Create the wxApp #if defined(HAVE_WX) && HAVE_WX class wxDLLApp : public wxApp @@ -188,14 +183,14 @@ THREAD_RETURN dsp_thread(void* lpParameter) void DSP_DebugBreak() { #if defined(HAVE_WX) && HAVE_WX - if(m_DebuggerFrame) - m_DebuggerFrame->DebugBreak(); + // if (m_DebuggerFrame) + // m_DebuggerFrame->DebugBreak(); #endif } void Initialize(void *init) { - bCanWork = true; + bool bCanWork = true; g_dspInitialize = *(DSPInitialize*)init; g_Config.Load(); @@ -324,7 +319,7 @@ void DSP_Update(int cycles) // If we're not on a thread, run cycles here. if (!g_dspInitialize.bOnThread) { - DSPInterpreter::RunCycles(cycles); + DSPCore_RunCycles(cycles); } } @@ -347,8 +342,8 @@ void DSP_SendAIBuffer(unsigned int address, int sample_rate) // so each sample now triggers the sound stream) // TODO: think about this. - //static int counter = 0; - //counter++; + // static int counter = 0; + // counter++; if (/*(counter & 31) == 0 &&*/ soundStream) soundStream->Update(); } diff --git a/docs/DSP/DSP_UC_AX1.txt b/docs/DSP/DSP_UC_AX1.txt index dde2586f56..65d2f2452f 100644 --- a/docs/DSP/DSP_UC_AX1.txt +++ b/docs/DSP/DSP_UC_AX1.txt @@ -1000,42 +1000,54 @@ void 047a_JumpTable_F() { 04ed 1b5f srri @$AR2, $AC1.M 04ee 1b5d srri @$AR2, $AC1.L 04ef 1c05 mrr $AR0, $IX1 - 04f0 02df ret -} + 04f0 02df ret +} // Only called by jumptable_1 void 04f1_Unk() { 04f1 8e00 set16 04f2 009b 0e44 lri $AX1.H, #0x0e44 04f4 009d 00c0 lri $AC1.L, #0x00c0 - 04f6 02bf 0541 call 0x0541 + // 04f6 02bf 0541 call 0x0541 + 0541_DMA_Transfer(); + 04f8 4900 addax $ACC1, $AX0.L 04f9 00ff 0e1d sr @0x0e1d, $AC1.M 04fb 00fd 0e1e sr @0x0e1e, $AC1.L 04fd 8900 clr $ACC1 - 04fe 02bf 055c call 0x055c + // 04fe 02bf 055c call 0x055c + WaitDMA(); + 0500 1104 052c bloopi #0x04, 0x052c 0502 00da 0e1d lr $AX0.H, @0x0e1d 0504 00d8 0e1e lr $AX0.L, @0x0e1e 0506 009b 0ea4 lri $AX1.H, #0x0ea4 0508 009d 00c0 lri $AC1.L, #0x00c0 - 050a 02bf 0541 call 0x0541 + // 050a 02bf 0541 call 0x0541 + 0541_DMA_Transfer(); + 050c 4900 addax $ACC1, $AX0.L 050d 00ff 0e1d sr @0x0e1d, $AC1.M 050f 00fd 0e1e sr @0x0e1e, $AC1.L 0511 0083 0e44 lri $AR3, #0x0e44 - 0513 02bf 054c call 0x054c + // 0513 02bf 054c call 0x054c + 054c_UnknownMulBuffer(); + 0515 8900 clr $ACC1 0516 00da 0e1d lr $AX0.H, @0x0e1d 0518 00d8 0e1e lr $AX0.L, @0x0e1e 051a 009b 0e44 lri $AX1.H, #0x0e44 051c 009d 00c0 lri $AC1.L, #0x00c0 - 051e 02bf 0541 call 0x0541 + // 051e 02bf 0541 call 0x0541 + 0541_DMA_Transfer(); + 0520 4900 addax $ACC1, $AX0.L 0521 00ff 0e1d sr @0x0e1d, $AC1.M 0523 00fd 0e1e sr @0x0e1e, $AC1.L 0525 0083 0ea4 lri $AR3, #0x0ea4 - 0527 02bf 054c call 0x054c + // 0527 02bf 054c call 0x054c + 054c_UnknownMulBuffer(); + 0529 0000 nop 052a 0000 nop 052b 8e00 set16 @@ -1044,14 +1056,20 @@ void 04f1_Unk() { 052f 00d8 0e1e lr $AX0.L, @0x0e1e 0531 009b 0ea4 lri $AX1.H, #0x0ea4 0533 009d 00c0 lri $AC1.L, #0x00c0 - 0535 02bf 0541 call 0x0541 + // 0535 02bf 0541 call 0x0541 + 0541_DMA_Transfer(); + 0537 4900 addax $ACC1, $AX0.L 0538 0083 0e44 lri $AR3, #0x0e44 - 053a 02bf 054c call 0x054c + // 053a 02bf 054c call 0x054c + 054c_UnknownMulBuffer(); + 053c 0083 0ea4 lri $AR3, #0x0ea4 - 053e 02bf 054c call 0x054c - 0540 02df ret -} + // 053e 02bf 054c call 0x054c + 054c_UnknownMulBuffer(); + + 0540 02df ret +} void 0541_DMA_Transfer() { 0541 8e00 set16 @@ -1060,8 +1078,8 @@ void 0541_DMA_Transfer() { 0546 00fb ffcd sr @DSPA, $AX1.H 0548 16c9 0000 si @DSCR, #0x0000 054a 2dcb srs @DSBL, $AC1.L - 054b 02df ret -} + 054b 02df ret +} void 054c_UnknownMulBuffer() { 054c 8f00 set40 @@ -1078,37 +1096,37 @@ void 054c_UnknownMulBuffer() { 0558 4d43 add'l $ACC1, $AC0.L : $AX0.L, @$AR3 0559 a039 mulx's $AX0.L, $AX1.L : @$AR1, $AC1.M 055a b629 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR1, $AC1.L - 055b 02df ret -} - + 055b 02df ret +} + void 055c_WaitDMA() { 055c 26c9 lrs $AC0.M, @DSCR 055d 02a0 0004 andf $AC0.M, #0x0004 055f 029c 055c jlnz 0x055c - 0561 02df ret -} + 0561 02df ret +} void 0562_WaitForMail1() { 0562 26fe lrs $AC0.M, @CMBH 0563 02c0 8000 andcf $AC0.M, #0x8000 0565 029c 0562 jlnz 0x0562 - 0567 02df ret -} + 0567 02df ret +} void 0568_WaitForMail2() { 0568 26fc lrs $AC0.M, @DMBH 0569 02a0 8000 andf $AC0.M, #0x8000 056b 029c 0568 jlnz 0x0568 - 056d 02df ret -} + 056d 02df ret +} void 056e_WaitForMail3() { 056e 26fc lrs $AC0.M, @DMBH 056f 02a0 8000 andf $AC0.M, #0x8000 0571 029c 056e jlnz 0x056e - 0573 02df ret -} - + 0573 02df ret +} + void 0574_JumpTable_7() { 0574 8100 clr $ACC0 0575 8970 clr'l $ACC1 : $AC0.M, @$AR0 @@ -1315,8 +1333,8 @@ void void 058a_SetupAcceleratorFromPB() { 0658 4e00 addp $ACC0 0659 1b3e srri @$AR1, $AC0.M 065a 00e1 0e42 sr @0x0e42, $AR1 - 065c 02df ret -} + 065c 02df ret +} void 065d_Unk() { 065d 0082 0bb8 lri $AR2, #0x0bb8 @@ -1473,8 +1491,8 @@ void 065d_Unk() { 0702 fb00 addpaxz $ACC1, $AX1.H 0703 8139 clr's $ACC0 : @$AR1, $AC1.M 0704 00e1 0e42 sr @0x0e42, $AR1 - 0706 02df ret -} + 0706 02df ret +} void 0707_SetupAccelerator() { 0707 0082 0bb8 lri $AR2, #0x0bb8 @@ -1562,8 +1580,8 @@ void 0707_SetupAccelerator() { 0762 00ff 0bbe sr @0x0bbe, $AC1.M 0764 27d8 lrs $AC1.M, @ACCAH 0765 00ff 0bbd sr @0x0bbd, $AC1.M - 0767 02df ret -} + 0767 02df ret +} void 0768_JumpTable_12() { 0768 00c0 0e40 lr $AR0, @0x0e40 @@ -1575,8 +1593,8 @@ void 0768_JumpTable_12() { 0773 02bf 80e7 call 0x80e7 0775 00f8 0ba9 sr @0x0ba9, $AX0.L 0777 00fb 0bac sr @0x0bac, $AX1.H - 0779 02df ret -} + 0779 02df ret +} void 077a_Unk() { 077a 00c0 0e40 lr $AR0, @0x0e40 @@ -1597,8 +1615,8 @@ void 077a_Unk() { 0796 02bf 80e7 call 0x80e7 0798 00f8 0baa sr @0x0baa, $AX0.L 079a 00fb 0bad sr @0x0bad, $AX1.H - 079c 02df ret -} + 079c 02df ret +} void 079d_Unk() { 079d 00c0 0e40 lr $AR0, @0x0e40 @@ -1619,483 +1637,501 @@ void 079d_Unk() { 07b9 02bf 80e7 call 0x80e7 07bb 00f8 0bab sr @0x0bab, $AX0.L 07bd 00fb 0bae sr @0x0bae, $AX1.H - 07bf 02df ret -} + 07bf 02df ret +} -07c0 00c0 0e40 lr $AR0, @0x0e40 -07c2 0081 0b89 lri $AR1, #0x0b89 -07c4 00c2 0e08 lr $AR2, @0x0e08 -07c6 1c62 mrr $AR3, $AR2 -07c7 00c4 0e41 lr $IX0, @0x0e41 -07c9 00c5 0e09 lr $IX1, @0x0e09 -07cb 02bf 80e7 call 0x80e7 -07cd 00f8 0ba9 sr @0x0ba9, $AX0.L -07cf 00fb 0bac sr @0x0bac, $AX1.H -07d1 00c0 0e40 lr $AR0, @0x0e40 -07d3 0081 0b8d lri $AR1, #0x0b8d -07d5 00c2 0e0b lr $AR2, @0x0e0b -07d7 1c62 mrr $AR3, $AR2 -07d8 00c4 0e41 lr $IX0, @0x0e41 -07da 00c5 0e0c lr $IX1, @0x0e0c -07dc 02bf 80e7 call 0x80e7 -07de 00f8 0baa sr @0x0baa, $AX0.L -07e0 00fb 0bad sr @0x0bad, $AX1.H -07e2 00c0 0e40 lr $AR0, @0x0e40 -07e4 0081 0b91 lri $AR1, #0x0b91 -07e6 00c2 0e0e lr $AR2, @0x0e0e -07e8 1c62 mrr $AR3, $AR2 -07e9 00c4 0e41 lr $IX0, @0x0e41 -07eb 00c5 0e0f lr $IX1, @0x0e0f -07ed 02bf 80e7 call 0x80e7 -07ef 00f8 0bab sr @0x0bab, $AX0.L -07f1 00fb 0bae sr @0x0bae, $AX1.H -07f3 02df ret - +void 07c0_Unk() { + 07c0 00c0 0e40 lr $AR0, @0x0e40 + 07c2 0081 0b89 lri $AR1, #0x0b89 + 07c4 00c2 0e08 lr $AR2, @0x0e08 + 07c6 1c62 mrr $AR3, $AR2 + 07c7 00c4 0e41 lr $IX0, @0x0e41 + 07c9 00c5 0e09 lr $IX1, @0x0e09 + 07cb 02bf 80e7 call 0x80e7 + 07cd 00f8 0ba9 sr @0x0ba9, $AX0.L + 07cf 00fb 0bac sr @0x0bac, $AX1.H + 07d1 00c0 0e40 lr $AR0, @0x0e40 + 07d3 0081 0b8d lri $AR1, #0x0b8d + 07d5 00c2 0e0b lr $AR2, @0x0e0b + 07d7 1c62 mrr $AR3, $AR2 + 07d8 00c4 0e41 lr $IX0, @0x0e41 + 07da 00c5 0e0c lr $IX1, @0x0e0c + 07dc 02bf 80e7 call 0x80e7 + 07de 00f8 0baa sr @0x0baa, $AX0.L + 07e0 00fb 0bad sr @0x0bad, $AX1.H + 07e2 00c0 0e40 lr $AR0, @0x0e40 + 07e4 0081 0b91 lri $AR1, #0x0b91 + 07e6 00c2 0e0e lr $AR2, @0x0e0e + 07e8 1c62 mrr $AR3, $AR2 + 07e9 00c4 0e41 lr $IX0, @0x0e41 + 07eb 00c5 0e0f lr $IX1, @0x0e0f + 07ed 02bf 80e7 call 0x80e7 + 07ef 00f8 0bab sr @0x0bab, $AX0.L + 07f1 00fb 0bae sr @0x0bae, $AX1.H + 07f3 02df ret +} -07f4 00c0 0e40 lr $AR0, @0x0e40 -07f6 0081 0b89 lri $AR1, #0x0b89 -07f8 00c2 0e08 lr $AR2, @0x0e08 -07fa 1c62 mrr $AR3, $AR2 -07fb 00c4 0e41 lr $IX0, @0x0e41 -07fd 00c5 0e09 lr $IX1, @0x0e09 -07ff 02bf 80e7 call 0x80e7 -0801 00f8 0ba9 sr @0x0ba9, $AX0.L -0803 00fb 0bac sr @0x0bac, $AX1.H -0805 00c0 0e43 lr $AR0, @0x0e43 -0807 0081 0b97 lri $AR1, #0x0b97 -0809 00c2 0e0a lr $AR2, @0x0e0a -080b 1c62 mrr $AR3, $AR2 -080c 02bf 81f9 call 0x81f9 -080e 00f8 0baf sr @0x0baf, $AX0.L -0810 02df ret - +void 07f4_Unk() { + 07f4 00c0 0e40 lr $AR0, @0x0e40 + 07f6 0081 0b89 lri $AR1, #0x0b89 + 07f8 00c2 0e08 lr $AR2, @0x0e08 + 07fa 1c62 mrr $AR3, $AR2 + 07fb 00c4 0e41 lr $IX0, @0x0e41 + 07fd 00c5 0e09 lr $IX1, @0x0e09 + 07ff 02bf 80e7 call 0x80e7 + 0801 00f8 0ba9 sr @0x0ba9, $AX0.L + 0803 00fb 0bac sr @0x0bac, $AX1.H + 0805 00c0 0e43 lr $AR0, @0x0e43 + 0807 0081 0b97 lri $AR1, #0x0b97 + 0809 00c2 0e0a lr $AR2, @0x0e0a + 080b 1c62 mrr $AR3, $AR2 + 080c 02bf 81f9 call 0x81f9 + 080e 00f8 0baf sr @0x0baf, $AX0.L + 0810 02df ret +} -0811 00c0 0e40 lr $AR0, @0x0e40 -0813 0081 0b89 lri $AR1, #0x0b89 -0815 00c2 0e08 lr $AR2, @0x0e08 -0817 1c62 mrr $AR3, $AR2 -0818 00c4 0e41 lr $IX0, @0x0e41 -081a 00c5 0e09 lr $IX1, @0x0e09 -081c 02bf 80e7 call 0x80e7 -081e 00f8 0ba9 sr @0x0ba9, $AX0.L -0820 00fb 0bac sr @0x0bac, $AX1.H -0822 00c0 0e40 lr $AR0, @0x0e40 -0824 0081 0b8d lri $AR1, #0x0b8d -0826 00c2 0e0b lr $AR2, @0x0e0b -0828 1c62 mrr $AR3, $AR2 -0829 00c4 0e41 lr $IX0, @0x0e41 -082b 00c5 0e0c lr $IX1, @0x0e0c -082d 02bf 80e7 call 0x80e7 -082f 00f8 0baa sr @0x0baa, $AX0.L -0831 00fb 0bad sr @0x0bad, $AX1.H -0833 00c0 0e43 lr $AR0, @0x0e43 -0835 0081 0b97 lri $AR1, #0x0b97 -0837 00c2 0e0a lr $AR2, @0x0e0a -0839 1c62 mrr $AR3, $AR2 -083a 1c80 mrr $IX0, $AR0 -083b 00c5 0e0d lr $IX1, @0x0e0d -083d 02bf 80e7 call 0x80e7 -083f 00f8 0baf sr @0x0baf, $AX0.L -0841 00fb 0bb0 sr @0x0bb0, $AX1.H -0843 02df ret - +void 0811_Unk() { + 0811 00c0 0e40 lr $AR0, @0x0e40 + 0813 0081 0b89 lri $AR1, #0x0b89 + 0815 00c2 0e08 lr $AR2, @0x0e08 + 0817 1c62 mrr $AR3, $AR2 + 0818 00c4 0e41 lr $IX0, @0x0e41 + 081a 00c5 0e09 lr $IX1, @0x0e09 + 081c 02bf 80e7 call 0x80e7 + 081e 00f8 0ba9 sr @0x0ba9, $AX0.L + 0820 00fb 0bac sr @0x0bac, $AX1.H + 0822 00c0 0e40 lr $AR0, @0x0e40 + 0824 0081 0b8d lri $AR1, #0x0b8d + 0826 00c2 0e0b lr $AR2, @0x0e0b + 0828 1c62 mrr $AR3, $AR2 + 0829 00c4 0e41 lr $IX0, @0x0e41 + 082b 00c5 0e0c lr $IX1, @0x0e0c + 082d 02bf 80e7 call 0x80e7 + 082f 00f8 0baa sr @0x0baa, $AX0.L + 0831 00fb 0bad sr @0x0bad, $AX1.H + 0833 00c0 0e43 lr $AR0, @0x0e43 + 0835 0081 0b97 lri $AR1, #0x0b97 + 0837 00c2 0e0a lr $AR2, @0x0e0a + 0839 1c62 mrr $AR3, $AR2 + 083a 1c80 mrr $IX0, $AR0 + 083b 00c5 0e0d lr $IX1, @0x0e0d + 083d 02bf 80e7 call 0x80e7 + 083f 00f8 0baf sr @0x0baf, $AX0.L + 0841 00fb 0bb0 sr @0x0bb0, $AX1.H + 0843 02df ret +} -0844 00c0 0e40 lr $AR0, @0x0e40 -0846 0081 0b89 lri $AR1, #0x0b89 -0848 00c2 0e08 lr $AR2, @0x0e08 -084a 1c62 mrr $AR3, $AR2 -084b 00c4 0e41 lr $IX0, @0x0e41 -084d 00c5 0e09 lr $IX1, @0x0e09 -084f 02bf 80e7 call 0x80e7 -0851 00f8 0ba9 sr @0x0ba9, $AX0.L -0853 00fb 0bac sr @0x0bac, $AX1.H -0855 00c0 0e40 lr $AR0, @0x0e40 -0857 0081 0b91 lri $AR1, #0x0b91 -0859 00c2 0e0e lr $AR2, @0x0e0e -085b 1c62 mrr $AR3, $AR2 -085c 00c4 0e41 lr $IX0, @0x0e41 -085e 00c5 0e0f lr $IX1, @0x0e0f -0860 02bf 80e7 call 0x80e7 -0862 00f8 0bab sr @0x0bab, $AX0.L -0864 00fb 0bae sr @0x0bae, $AX1.H -0866 00c0 0e43 lr $AR0, @0x0e43 -0868 0081 0b95 lri $AR1, #0x0b95 -086a 00c2 0e10 lr $AR2, @0x0e10 -086c 1c62 mrr $AR3, $AR2 -086d 1c80 mrr $IX0, $AR0 -086e 00c5 0e0a lr $IX1, @0x0e0a -0870 02bf 80e7 call 0x80e7 -0872 00f8 0bb1 sr @0x0bb1, $AX0.L -0874 00fb 0baf sr @0x0baf, $AX1.H -0876 02df ret - +void 0844_Unk() { + 0844 00c0 0e40 lr $AR0, @0x0e40 + 0846 0081 0b89 lri $AR1, #0x0b89 + 0848 00c2 0e08 lr $AR2, @0x0e08 + 084a 1c62 mrr $AR3, $AR2 + 084b 00c4 0e41 lr $IX0, @0x0e41 + 084d 00c5 0e09 lr $IX1, @0x0e09 + 084f 02bf 80e7 call 0x80e7 + 0851 00f8 0ba9 sr @0x0ba9, $AX0.L + 0853 00fb 0bac sr @0x0bac, $AX1.H + 0855 00c0 0e40 lr $AR0, @0x0e40 + 0857 0081 0b91 lri $AR1, #0x0b91 + 0859 00c2 0e0e lr $AR2, @0x0e0e + 085b 1c62 mrr $AR3, $AR2 + 085c 00c4 0e41 lr $IX0, @0x0e41 + 085e 00c5 0e0f lr $IX1, @0x0e0f + 0860 02bf 80e7 call 0x80e7 + 0862 00f8 0bab sr @0x0bab, $AX0.L + 0864 00fb 0bae sr @0x0bae, $AX1.H + 0866 00c0 0e43 lr $AR0, @0x0e43 + 0868 0081 0b95 lri $AR1, #0x0b95 + 086a 00c2 0e10 lr $AR2, @0x0e10 + 086c 1c62 mrr $AR3, $AR2 + 086d 1c80 mrr $IX0, $AR0 + 086e 00c5 0e0a lr $IX1, @0x0e0a + 0870 02bf 80e7 call 0x80e7 + 0872 00f8 0bb1 sr @0x0bb1, $AX0.L + 0874 00fb 0baf sr @0x0baf, $AX1.H + 0876 02df ret +} -0877 00c0 0e40 lr $AR0, @0x0e40 -0879 0081 0b89 lri $AR1, #0x0b89 -087b 00c2 0e08 lr $AR2, @0x0e08 -087d 1c62 mrr $AR3, $AR2 -087e 00c4 0e41 lr $IX0, @0x0e41 -0880 00c5 0e09 lr $IX1, @0x0e09 -0882 02bf 80e7 call 0x80e7 -0884 00f8 0ba9 sr @0x0ba9, $AX0.L -0886 00fb 0bac sr @0x0bac, $AX1.H -0888 00c0 0e40 lr $AR0, @0x0e40 -088a 0081 0b8d lri $AR1, #0x0b8d -088c 00c2 0e0b lr $AR2, @0x0e0b -088e 1c62 mrr $AR3, $AR2 -088f 00c4 0e41 lr $IX0, @0x0e41 -0891 00c5 0e0c lr $IX1, @0x0e0c -0893 02bf 80e7 call 0x80e7 -0895 00f8 0baa sr @0x0baa, $AX0.L -0897 00fb 0bad sr @0x0bad, $AX1.H -0899 00c0 0e40 lr $AR0, @0x0e40 -089b 0081 0b91 lri $AR1, #0x0b91 -089d 00c2 0e0e lr $AR2, @0x0e0e -089f 1c62 mrr $AR3, $AR2 -08a0 00c4 0e41 lr $IX0, @0x0e41 -08a2 00c5 0e0f lr $IX1, @0x0e0f -08a4 02bf 80e7 call 0x80e7 -08a6 00f8 0bab sr @0x0bab, $AX0.L -08a8 00fb 0bae sr @0x0bae, $AX1.H -08aa 00c0 0e43 lr $AR0, @0x0e43 -08ac 0081 0b97 lri $AR1, #0x0b97 -08ae 00c2 0e0a lr $AR2, @0x0e0a -08b0 1c62 mrr $AR3, $AR2 -08b1 1c80 mrr $IX0, $AR0 -08b2 00c5 0e0d lr $IX1, @0x0e0d -08b4 02bf 80e7 call 0x80e7 -08b6 00f8 0baf sr @0x0baf, $AX0.L -08b8 00fb 0bb0 sr @0x0bb0, $AX1.H -08ba 00c0 0e43 lr $AR0, @0x0e43 -08bc 0081 0b95 lri $AR1, #0x0b95 -08be 00c2 0e10 lr $AR2, @0x0e10 -08c0 1c62 mrr $AR3, $AR2 -08c1 02bf 81f9 call 0x81f9 -08c3 00f8 0bb1 sr @0x0bb1, $AX0.L -08c5 02df ret - +void 0877_Unk() { + 0877 00c0 0e40 lr $AR0, @0x0e40 + 0879 0081 0b89 lri $AR1, #0x0b89 + 087b 00c2 0e08 lr $AR2, @0x0e08 + 087d 1c62 mrr $AR3, $AR2 + 087e 00c4 0e41 lr $IX0, @0x0e41 + 0880 00c5 0e09 lr $IX1, @0x0e09 + 0882 02bf 80e7 call 0x80e7 + 0884 00f8 0ba9 sr @0x0ba9, $AX0.L + 0886 00fb 0bac sr @0x0bac, $AX1.H + 0888 00c0 0e40 lr $AR0, @0x0e40 + 088a 0081 0b8d lri $AR1, #0x0b8d + 088c 00c2 0e0b lr $AR2, @0x0e0b + 088e 1c62 mrr $AR3, $AR2 + 088f 00c4 0e41 lr $IX0, @0x0e41 + 0891 00c5 0e0c lr $IX1, @0x0e0c + 0893 02bf 80e7 call 0x80e7 + 0895 00f8 0baa sr @0x0baa, $AX0.L + 0897 00fb 0bad sr @0x0bad, $AX1.H + 0899 00c0 0e40 lr $AR0, @0x0e40 + 089b 0081 0b91 lri $AR1, #0x0b91 + 089d 00c2 0e0e lr $AR2, @0x0e0e + 089f 1c62 mrr $AR3, $AR2 + 08a0 00c4 0e41 lr $IX0, @0x0e41 + 08a2 00c5 0e0f lr $IX1, @0x0e0f + 08a4 02bf 80e7 call 0x80e7 + 08a6 00f8 0bab sr @0x0bab, $AX0.L + 08a8 00fb 0bae sr @0x0bae, $AX1.H + 08aa 00c0 0e43 lr $AR0, @0x0e43 + 08ac 0081 0b97 lri $AR1, #0x0b97 + 08ae 00c2 0e0a lr $AR2, @0x0e0a + 08b0 1c62 mrr $AR3, $AR2 + 08b1 1c80 mrr $IX0, $AR0 + 08b2 00c5 0e0d lr $IX1, @0x0e0d + 08b4 02bf 80e7 call 0x80e7 + 08b6 00f8 0baf sr @0x0baf, $AX0.L + 08b8 00fb 0bb0 sr @0x0bb0, $AX1.H + 08ba 00c0 0e43 lr $AR0, @0x0e43 + 08bc 0081 0b95 lri $AR1, #0x0b95 + 08be 00c2 0e10 lr $AR2, @0x0e10 + 08c0 1c62 mrr $AR3, $AR2 + 08c1 02bf 81f9 call 0x81f9 + 08c3 00f8 0bb1 sr @0x0bb1, $AX0.L + 08c5 02df ret +} -08c6 00c0 0e40 lr $AR0, @0x0e40 -08c8 0081 0b89 lri $AR1, #0x0b89 -08ca 00c2 0e08 lr $AR2, @0x0e08 -08cc 0083 0e44 lri $AR3, #0x0e44 -08ce 00c4 0e41 lr $IX0, @0x0e41 -08d0 00c5 0e09 lr $IX1, @0x0e09 -08d2 02bf 8282 call 0x8282 -08d4 00f8 0ba9 sr @0x0ba9, $AX0.L -08d6 00fb 0bac sr @0x0bac, $AX1.H -08d8 02df ret - +void 08c6_Unk() { + 08c6 00c0 0e40 lr $AR0, @0x0e40 + 08c8 0081 0b89 lri $AR1, #0x0b89 + 08ca 00c2 0e08 lr $AR2, @0x0e08 + 08cc 0083 0e44 lri $AR3, #0x0e44 + 08ce 00c4 0e41 lr $IX0, @0x0e41 + 08d0 00c5 0e09 lr $IX1, @0x0e09 + 08d2 02bf 8282 call 0x8282 + 08d4 00f8 0ba9 sr @0x0ba9, $AX0.L + 08d6 00fb 0bac sr @0x0bac, $AX1.H + 08d8 02df ret +} -08d9 00c0 0e40 lr $AR0, @0x0e40 -08db 0081 0b89 lri $AR1, #0x0b89 -08dd 00c2 0e08 lr $AR2, @0x0e08 -08df 0083 0e44 lri $AR3, #0x0e44 -08e1 00c4 0e41 lr $IX0, @0x0e41 -08e3 00c5 0e09 lr $IX1, @0x0e09 -08e5 02bf 8282 call 0x8282 -08e7 00f8 0ba9 sr @0x0ba9, $AX0.L -08e9 00fb 0bac sr @0x0bac, $AX1.H -08eb 00c0 0e40 lr $AR0, @0x0e40 -08ed 0081 0b8d lri $AR1, #0x0b8d -08ef 00c2 0e0b lr $AR2, @0x0e0b -08f1 0083 0e44 lri $AR3, #0x0e44 -08f3 00c4 0e41 lr $IX0, @0x0e41 -08f5 00c5 0e0c lr $IX1, @0x0e0c -08f7 02bf 8282 call 0x8282 -08f9 00f8 0baa sr @0x0baa, $AX0.L -08fb 00fb 0bad sr @0x0bad, $AX1.H -08fd 02df ret - +void 08d9_Unk() { + 08d9 00c0 0e40 lr $AR0, @0x0e40 + 08db 0081 0b89 lri $AR1, #0x0b89 + 08dd 00c2 0e08 lr $AR2, @0x0e08 + 08df 0083 0e44 lri $AR3, #0x0e44 + 08e1 00c4 0e41 lr $IX0, @0x0e41 + 08e3 00c5 0e09 lr $IX1, @0x0e09 + 08e5 02bf 8282 call 0x8282 + 08e7 00f8 0ba9 sr @0x0ba9, $AX0.L + 08e9 00fb 0bac sr @0x0bac, $AX1.H + 08eb 00c0 0e40 lr $AR0, @0x0e40 + 08ed 0081 0b8d lri $AR1, #0x0b8d + 08ef 00c2 0e0b lr $AR2, @0x0e0b + 08f1 0083 0e44 lri $AR3, #0x0e44 + 08f3 00c4 0e41 lr $IX0, @0x0e41 + 08f5 00c5 0e0c lr $IX1, @0x0e0c + 08f7 02bf 8282 call 0x8282 + 08f9 00f8 0baa sr @0x0baa, $AX0.L + 08fb 00fb 0bad sr @0x0bad, $AX1.H + 08fd 02df ret +} -08fe 00c0 0e40 lr $AR0, @0x0e40 -0900 0081 0b89 lri $AR1, #0x0b89 -0902 00c2 0e08 lr $AR2, @0x0e08 -0904 0083 0e44 lri $AR3, #0x0e44 -0906 00c4 0e41 lr $IX0, @0x0e41 -0908 00c5 0e09 lr $IX1, @0x0e09 -090a 02bf 8282 call 0x8282 -090c 00f8 0ba9 sr @0x0ba9, $AX0.L -090e 00fb 0bac sr @0x0bac, $AX1.H -0910 00c0 0e40 lr $AR0, @0x0e40 -0912 0081 0b91 lri $AR1, #0x0b91 -0914 00c2 0e0e lr $AR2, @0x0e0e -0916 0083 0e44 lri $AR3, #0x0e44 -0918 00c4 0e41 lr $IX0, @0x0e41 -091a 00c5 0e0f lr $IX1, @0x0e0f -091c 02bf 8282 call 0x8282 -091e 00f8 0bab sr @0x0bab, $AX0.L -0920 00fb 0bae sr @0x0bae, $AX1.H -0922 02df ret - +void 08fe_Unk() { + 08fe 00c0 0e40 lr $AR0, @0x0e40 + 0900 0081 0b89 lri $AR1, #0x0b89 + 0902 00c2 0e08 lr $AR2, @0x0e08 + 0904 0083 0e44 lri $AR3, #0x0e44 + 0906 00c4 0e41 lr $IX0, @0x0e41 + 0908 00c5 0e09 lr $IX1, @0x0e09 + 090a 02bf 8282 call 0x8282 + 090c 00f8 0ba9 sr @0x0ba9, $AX0.L + 090e 00fb 0bac sr @0x0bac, $AX1.H + 0910 00c0 0e40 lr $AR0, @0x0e40 + 0912 0081 0b91 lri $AR1, #0x0b91 + 0914 00c2 0e0e lr $AR2, @0x0e0e + 0916 0083 0e44 lri $AR3, #0x0e44 + 0918 00c4 0e41 lr $IX0, @0x0e41 + 091a 00c5 0e0f lr $IX1, @0x0e0f + 091c 02bf 8282 call 0x8282 + 091e 00f8 0bab sr @0x0bab, $AX0.L + 0920 00fb 0bae sr @0x0bae, $AX1.H + 0922 02df ret +} -0923 00c0 0e40 lr $AR0, @0x0e40 -0925 0081 0b89 lri $AR1, #0x0b89 -0927 00c2 0e08 lr $AR2, @0x0e08 -0929 0083 0e44 lri $AR3, #0x0e44 -092b 00c4 0e41 lr $IX0, @0x0e41 -092d 00c5 0e09 lr $IX1, @0x0e09 -092f 02bf 8282 call 0x8282 -0931 00f8 0ba9 sr @0x0ba9, $AX0.L -0933 00fb 0bac sr @0x0bac, $AX1.H -0935 00c0 0e40 lr $AR0, @0x0e40 -0937 0081 0b8d lri $AR1, #0x0b8d -0939 00c2 0e0b lr $AR2, @0x0e0b -093b 0083 0e44 lri $AR3, #0x0e44 -093d 00c4 0e41 lr $IX0, @0x0e41 -093f 00c5 0e0c lr $IX1, @0x0e0c -0941 02bf 8282 call 0x8282 -0943 00f8 0baa sr @0x0baa, $AX0.L -0945 00fb 0bad sr @0x0bad, $AX1.H -0947 00c0 0e40 lr $AR0, @0x0e40 -0949 0081 0b91 lri $AR1, #0x0b91 -094b 00c2 0e0e lr $AR2, @0x0e0e -094d 0083 0e44 lri $AR3, #0x0e44 -094f 00c4 0e41 lr $IX0, @0x0e41 -0951 00c5 0e0f lr $IX1, @0x0e0f -0953 02bf 8282 call 0x8282 -0955 00f8 0bab sr @0x0bab, $AX0.L -0957 00fb 0bae sr @0x0bae, $AX1.H -0959 02df ret - +void 0923_Unk() { + 0923 00c0 0e40 lr $AR0, @0x0e40 + 0925 0081 0b89 lri $AR1, #0x0b89 + 0927 00c2 0e08 lr $AR2, @0x0e08 + 0929 0083 0e44 lri $AR3, #0x0e44 + 092b 00c4 0e41 lr $IX0, @0x0e41 + 092d 00c5 0e09 lr $IX1, @0x0e09 + 092f 02bf 8282 call 0x8282 + 0931 00f8 0ba9 sr @0x0ba9, $AX0.L + 0933 00fb 0bac sr @0x0bac, $AX1.H + 0935 00c0 0e40 lr $AR0, @0x0e40 + 0937 0081 0b8d lri $AR1, #0x0b8d + 0939 00c2 0e0b lr $AR2, @0x0e0b + 093b 0083 0e44 lri $AR3, #0x0e44 + 093d 00c4 0e41 lr $IX0, @0x0e41 + 093f 00c5 0e0c lr $IX1, @0x0e0c + 0941 02bf 8282 call 0x8282 + 0943 00f8 0baa sr @0x0baa, $AX0.L + 0945 00fb 0bad sr @0x0bad, $AX1.H + 0947 00c0 0e40 lr $AR0, @0x0e40 + 0949 0081 0b91 lri $AR1, #0x0b91 + 094b 00c2 0e0e lr $AR2, @0x0e0e + 094d 0083 0e44 lri $AR3, #0x0e44 + 094f 00c4 0e41 lr $IX0, @0x0e41 + 0951 00c5 0e0f lr $IX1, @0x0e0f + 0953 02bf 8282 call 0x8282 + 0955 00f8 0bab sr @0x0bab, $AX0.L + 0957 00fb 0bae sr @0x0bae, $AX1.H + 0959 02df ret +} -095a 00c0 0e40 lr $AR0, @0x0e40 -095c 0081 0b89 lri $AR1, #0x0b89 -095e 00c2 0e08 lr $AR2, @0x0e08 -0960 0083 0e44 lri $AR3, #0x0e44 -0962 00c4 0e41 lr $IX0, @0x0e41 -0964 00c5 0e09 lr $IX1, @0x0e09 -0966 02bf 8282 call 0x8282 -0968 00f8 0ba9 sr @0x0ba9, $AX0.L -096a 00fb 0bac sr @0x0bac, $AX1.H -096c 00c0 0e43 lr $AR0, @0x0e43 -096e 0081 0b97 lri $AR1, #0x0b97 -0970 00c2 0e0a lr $AR2, @0x0e0a -0972 0083 0e44 lri $AR3, #0x0e44 -0974 02bf 845d call 0x845d -0976 00f8 0baf sr @0x0baf, $AX0.L -0978 02df ret - +void 095a_Unk() { + 095a 00c0 0e40 lr $AR0, @0x0e40 + 095c 0081 0b89 lri $AR1, #0x0b89 + 095e 00c2 0e08 lr $AR2, @0x0e08 + 0960 0083 0e44 lri $AR3, #0x0e44 + 0962 00c4 0e41 lr $IX0, @0x0e41 + 0964 00c5 0e09 lr $IX1, @0x0e09 + 0966 02bf 8282 call 0x8282 + 0968 00f8 0ba9 sr @0x0ba9, $AX0.L + 096a 00fb 0bac sr @0x0bac, $AX1.H + 096c 00c0 0e43 lr $AR0, @0x0e43 + 096e 0081 0b97 lri $AR1, #0x0b97 + 0970 00c2 0e0a lr $AR2, @0x0e0a + 0972 0083 0e44 lri $AR3, #0x0e44 + 0974 02bf 845d call 0x845d + 0976 00f8 0baf sr @0x0baf, $AX0.L + 0978 02df ret +} -0979 00c0 0e40 lr $AR0, @0x0e40 -097b 0081 0b89 lri $AR1, #0x0b89 -097d 00c2 0e08 lr $AR2, @0x0e08 -097f 0083 0e44 lri $AR3, #0x0e44 -0981 00c4 0e41 lr $IX0, @0x0e41 -0983 00c5 0e09 lr $IX1, @0x0e09 -0985 02bf 8282 call 0x8282 -0987 00f8 0ba9 sr @0x0ba9, $AX0.L -0989 00fb 0bac sr @0x0bac, $AX1.H -098b 00c0 0e40 lr $AR0, @0x0e40 -098d 0081 0b8d lri $AR1, #0x0b8d -098f 00c2 0e0b lr $AR2, @0x0e0b -0991 0083 0e44 lri $AR3, #0x0e44 -0993 00c4 0e41 lr $IX0, @0x0e41 -0995 00c5 0e0c lr $IX1, @0x0e0c -0997 02bf 8282 call 0x8282 -0999 00f8 0baa sr @0x0baa, $AX0.L -099b 00fb 0bad sr @0x0bad, $AX1.H -099d 00c0 0e43 lr $AR0, @0x0e43 -099f 0081 0b97 lri $AR1, #0x0b97 -09a1 00c2 0e0a lr $AR2, @0x0e0a -09a3 0083 0e44 lri $AR3, #0x0e44 -09a5 1c80 mrr $IX0, $AR0 -09a6 00c5 0e0d lr $IX1, @0x0e0d -09a8 02bf 8282 call 0x8282 -09aa 00f8 0baf sr @0x0baf, $AX0.L -09ac 00fb 0bb0 sr @0x0bb0, $AX1.H -09ae 02df ret - +void 0979_Unk() { + 0979 00c0 0e40 lr $AR0, @0x0e40 + 097b 0081 0b89 lri $AR1, #0x0b89 + 097d 00c2 0e08 lr $AR2, @0x0e08 + 097f 0083 0e44 lri $AR3, #0x0e44 + 0981 00c4 0e41 lr $IX0, @0x0e41 + 0983 00c5 0e09 lr $IX1, @0x0e09 + 0985 02bf 8282 call 0x8282 + 0987 00f8 0ba9 sr @0x0ba9, $AX0.L + 0989 00fb 0bac sr @0x0bac, $AX1.H + 098b 00c0 0e40 lr $AR0, @0x0e40 + 098d 0081 0b8d lri $AR1, #0x0b8d + 098f 00c2 0e0b lr $AR2, @0x0e0b + 0991 0083 0e44 lri $AR3, #0x0e44 + 0993 00c4 0e41 lr $IX0, @0x0e41 + 0995 00c5 0e0c lr $IX1, @0x0e0c + 0997 02bf 8282 call 0x8282 + 0999 00f8 0baa sr @0x0baa, $AX0.L + 099b 00fb 0bad sr @0x0bad, $AX1.H + 099d 00c0 0e43 lr $AR0, @0x0e43 + 099f 0081 0b97 lri $AR1, #0x0b97 + 09a1 00c2 0e0a lr $AR2, @0x0e0a + 09a3 0083 0e44 lri $AR3, #0x0e44 + 09a5 1c80 mrr $IX0, $AR0 + 09a6 00c5 0e0d lr $IX1, @0x0e0d + 09a8 02bf 8282 call 0x8282 + 09aa 00f8 0baf sr @0x0baf, $AX0.L + 09ac 00fb 0bb0 sr @0x0bb0, $AX1.H + 09ae 02df ret +} -09af 00c0 0e40 lr $AR0, @0x0e40 -09b1 0081 0b89 lri $AR1, #0x0b89 -09b3 00c2 0e08 lr $AR2, @0x0e08 -09b5 0083 0e44 lri $AR3, #0x0e44 -09b7 00c4 0e41 lr $IX0, @0x0e41 -09b9 00c5 0e09 lr $IX1, @0x0e09 -09bb 02bf 8282 call 0x8282 -09bd 00f8 0ba9 sr @0x0ba9, $AX0.L -09bf 00fb 0bac sr @0x0bac, $AX1.H -09c1 00c0 0e40 lr $AR0, @0x0e40 -09c3 0081 0b91 lri $AR1, #0x0b91 -09c5 00c2 0e0e lr $AR2, @0x0e0e -09c7 0083 0e44 lri $AR3, #0x0e44 -09c9 00c4 0e41 lr $IX0, @0x0e41 -09cb 00c5 0e0f lr $IX1, @0x0e0f -09cd 02bf 8282 call 0x8282 -09cf 00f8 0bab sr @0x0bab, $AX0.L -09d1 00fb 0bae sr @0x0bae, $AX1.H -09d3 00c0 0e43 lr $AR0, @0x0e43 -09d5 0081 0b95 lri $AR1, #0x0b95 -09d7 00c2 0e10 lr $AR2, @0x0e10 -09d9 0083 0e44 lri $AR3, #0x0e44 -09db 1c80 mrr $IX0, $AR0 -09dc 00c5 0e0a lr $IX1, @0x0e0a -09de 02bf 8282 call 0x8282 -09e0 00f8 0bb1 sr @0x0bb1, $AX0.L -09e2 00fb 0baf sr @0x0baf, $AX1.H -09e4 02df ret - +void 09af_Unk() { + 09af 00c0 0e40 lr $AR0, @0x0e40 + 09b1 0081 0b89 lri $AR1, #0x0b89 + 09b3 00c2 0e08 lr $AR2, @0x0e08 + 09b5 0083 0e44 lri $AR3, #0x0e44 + 09b7 00c4 0e41 lr $IX0, @0x0e41 + 09b9 00c5 0e09 lr $IX1, @0x0e09 + 09bb 02bf 8282 call 0x8282 + 09bd 00f8 0ba9 sr @0x0ba9, $AX0.L + 09bf 00fb 0bac sr @0x0bac, $AX1.H + 09c1 00c0 0e40 lr $AR0, @0x0e40 + 09c3 0081 0b91 lri $AR1, #0x0b91 + 09c5 00c2 0e0e lr $AR2, @0x0e0e + 09c7 0083 0e44 lri $AR3, #0x0e44 + 09c9 00c4 0e41 lr $IX0, @0x0e41 + 09cb 00c5 0e0f lr $IX1, @0x0e0f + 09cd 02bf 8282 call 0x8282 + 09cf 00f8 0bab sr @0x0bab, $AX0.L + 09d1 00fb 0bae sr @0x0bae, $AX1.H + 09d3 00c0 0e43 lr $AR0, @0x0e43 + 09d5 0081 0b95 lri $AR1, #0x0b95 + 09d7 00c2 0e10 lr $AR2, @0x0e10 + 09d9 0083 0e44 lri $AR3, #0x0e44 + 09db 1c80 mrr $IX0, $AR0 + 09dc 00c5 0e0a lr $IX1, @0x0e0a + 09de 02bf 8282 call 0x8282 + 09e0 00f8 0bb1 sr @0x0bb1, $AX0.L + 09e2 00fb 0baf sr @0x0baf, $AX1.H + 09e4 02df ret +} -09e5 00c0 0e40 lr $AR0, @0x0e40 -09e7 0081 0b89 lri $AR1, #0x0b89 -09e9 00c2 0e08 lr $AR2, @0x0e08 -09eb 0083 0e44 lri $AR3, #0x0e44 -09ed 00c4 0e41 lr $IX0, @0x0e41 -09ef 00c5 0e09 lr $IX1, @0x0e09 -09f1 02bf 8282 call 0x8282 -09f3 00f8 0ba9 sr @0x0ba9, $AX0.L -09f5 00fb 0bac sr @0x0bac, $AX1.H -09f7 00c0 0e40 lr $AR0, @0x0e40 -09f9 0081 0b8d lri $AR1, #0x0b8d -09fb 00c2 0e0b lr $AR2, @0x0e0b -09fd 0083 0e44 lri $AR3, #0x0e44 -09ff 00c0 0e41 lr $AR0, @0x0e41 -0a01 00c5 0e0c lr $IX1, @0x0e0c -0a03 02bf 8282 call 0x8282 -0a05 00f8 0baa sr @0x0baa, $AX0.L -0a07 00fb 0bad sr @0x0bad, $AX1.H -0a09 00c0 0e40 lr $AR0, @0x0e40 -0a0b 0081 0b91 lri $AR1, #0x0b91 -0a0d 00c2 0e0e lr $AR2, @0x0e0e -0a0f 0083 0e44 lri $AR3, #0x0e44 -0a11 00c4 0e41 lr $IX0, @0x0e41 -0a13 00c5 0e0f lr $IX1, @0x0e0f -0a15 02bf 8282 call 0x8282 -0a17 00f8 0bab sr @0x0bab, $AX0.L -0a19 00fb 0bae sr @0x0bae, $AX1.H -0a1b 00c0 0e43 lr $AR0, @0x0e43 -0a1d 0081 0b97 lri $AR1, #0x0b97 -0a1f 00c2 0e0a lr $AR2, @0x0e0a -0a21 0083 0e44 lri $AR3, #0x0e44 -0a23 1c80 mrr $IX0, $AR0 -0a24 00c5 0e0d lr $IX1, @0x0e0d -0a26 02bf 8282 call 0x8282 -0a28 00f8 0baf sr @0x0baf, $AX0.L -0a2a 00fb 0bb0 sr @0x0bb0, $AX1.H -0a2c 00c0 0e43 lr $AR0, @0x0e43 -0a2e 0081 0b95 lri $AR1, #0x0b95 -0a30 00c2 0e10 lr $AR2, @0x0e10 -0a32 0083 0e44 lri $AR3, #0x0e44 -0a34 02bf 845d call 0x845d -0a36 00f8 0bb1 sr @0x0bb1, $AX0.L -0a38 02df ret - +void 09e5_Unk() { + 09e5 00c0 0e40 lr $AR0, @0x0e40 + 09e7 0081 0b89 lri $AR1, #0x0b89 + 09e9 00c2 0e08 lr $AR2, @0x0e08 + 09eb 0083 0e44 lri $AR3, #0x0e44 + 09ed 00c4 0e41 lr $IX0, @0x0e41 + 09ef 00c5 0e09 lr $IX1, @0x0e09 + 09f1 02bf 8282 call 0x8282 + 09f3 00f8 0ba9 sr @0x0ba9, $AX0.L + 09f5 00fb 0bac sr @0x0bac, $AX1.H + 09f7 00c0 0e40 lr $AR0, @0x0e40 + 09f9 0081 0b8d lri $AR1, #0x0b8d + 09fb 00c2 0e0b lr $AR2, @0x0e0b + 09fd 0083 0e44 lri $AR3, #0x0e44 + 09ff 00c0 0e41 lr $AR0, @0x0e41 + 0a01 00c5 0e0c lr $IX1, @0x0e0c + 0a03 02bf 8282 call 0x8282 + 0a05 00f8 0baa sr @0x0baa, $AX0.L + 0a07 00fb 0bad sr @0x0bad, $AX1.H + 0a09 00c0 0e40 lr $AR0, @0x0e40 + 0a0b 0081 0b91 lri $AR1, #0x0b91 + 0a0d 00c2 0e0e lr $AR2, @0x0e0e + 0a0f 0083 0e44 lri $AR3, #0x0e44 + 0a11 00c4 0e41 lr $IX0, @0x0e41 + 0a13 00c5 0e0f lr $IX1, @0x0e0f + 0a15 02bf 8282 call 0x8282 + 0a17 00f8 0bab sr @0x0bab, $AX0.L + 0a19 00fb 0bae sr @0x0bae, $AX1.H + 0a1b 00c0 0e43 lr $AR0, @0x0e43 + 0a1d 0081 0b97 lri $AR1, #0x0b97 + 0a1f 00c2 0e0a lr $AR2, @0x0e0a + 0a21 0083 0e44 lri $AR3, #0x0e44 + 0a23 1c80 mrr $IX0, $AR0 + 0a24 00c5 0e0d lr $IX1, @0x0e0d + 0a26 02bf 8282 call 0x8282 + 0a28 00f8 0baf sr @0x0baf, $AX0.L + 0a2a 00fb 0bb0 sr @0x0bb0, $AX1.H + 0a2c 00c0 0e43 lr $AR0, @0x0e43 + 0a2e 0081 0b95 lri $AR1, #0x0b95 + 0a30 00c2 0e10 lr $AR2, @0x0e10 + 0a32 0083 0e44 lri $AR3, #0x0e44 + 0a34 02bf 845d call 0x845d + 0a36 00f8 0bb1 sr @0x0bb1, $AX0.L + 0a38 02df ret +} -0a39 00c0 0e40 lr $AR0, @0x0e40 -0a3b 0081 0b89 lri $AR1, #0x0b89 -0a3d 00c2 0e08 lr $AR2, @0x0e08 -0a3f 1c62 mrr $AR3, $AR2 -0a40 00c4 0e41 lr $IX0, @0x0e41 -0a42 00c5 0e09 lr $IX1, @0x0e09 -0a44 02bf 80e7 call 0x80e7 -0a46 00f8 0ba9 sr @0x0ba9, $AX0.L -0a48 00fb 0bac sr @0x0bac, $AX1.H -0a4a 00c0 0e43 lr $AR0, @0x0e43 -0a4c 0081 0b91 lri $AR1, #0x0b91 -0a4e 00c2 0e0e lr $AR2, @0x0e0e -0a50 1c62 mrr $AR3, $AR2 -0a51 1c80 mrr $IX0, $AR0 -0a52 00c5 0e0f lr $IX1, @0x0e0f -0a54 02bf 80e7 call 0x80e7 -0a56 00f8 0bab sr @0x0bab, $AX0.L -0a58 00fb 0bae sr @0x0bae, $AX1.H -0a5a 02df ret - +void 0a39_Unk() { + 0a39 00c0 0e40 lr $AR0, @0x0e40 + 0a3b 0081 0b89 lri $AR1, #0x0b89 + 0a3d 00c2 0e08 lr $AR2, @0x0e08 + 0a3f 1c62 mrr $AR3, $AR2 + 0a40 00c4 0e41 lr $IX0, @0x0e41 + 0a42 00c5 0e09 lr $IX1, @0x0e09 + 0a44 02bf 80e7 call 0x80e7 + 0a46 00f8 0ba9 sr @0x0ba9, $AX0.L + 0a48 00fb 0bac sr @0x0bac, $AX1.H + 0a4a 00c0 0e43 lr $AR0, @0x0e43 + 0a4c 0081 0b91 lri $AR1, #0x0b91 + 0a4e 00c2 0e0e lr $AR2, @0x0e0e + 0a50 1c62 mrr $AR3, $AR2 + 0a51 1c80 mrr $IX0, $AR0 + 0a52 00c5 0e0f lr $IX1, @0x0e0f + 0a54 02bf 80e7 call 0x80e7 + 0a56 00f8 0bab sr @0x0bab, $AX0.L + 0a58 00fb 0bae sr @0x0bae, $AX1.H + 0a5a 02df ret +} -0a5b 00c0 0e40 lr $AR0, @0x0e40 -0a5d 0081 0b89 lri $AR1, #0x0b89 -0a5f 00c2 0e08 lr $AR2, @0x0e08 -0a61 1c62 mrr $AR3, $AR2 -0a62 00c4 0e41 lr $IX0, @0x0e41 -0a64 00c5 0e09 lr $IX1, @0x0e09 -0a66 02bf 80e7 call 0x80e7 -0a68 00f8 0ba9 sr @0x0ba9, $AX0.L -0a6a 00fb 0bac sr @0x0bac, $AX1.H -0a6c 00c0 0e43 lr $AR0, @0x0e43 -0a6e 0081 0b91 lri $AR1, #0x0b91 -0a70 00c2 0e0e lr $AR2, @0x0e0e -0a72 1c62 mrr $AR3, $AR2 -0a73 1c80 mrr $IX0, $AR0 -0a74 00c5 0e0f lr $IX1, @0x0e0f -0a76 02bf 80e7 call 0x80e7 -0a78 00f8 0bab sr @0x0bab, $AX0.L -0a7a 00fb 0bae sr @0x0bae, $AX1.H -0a7c 00c0 0e40 lr $AR0, @0x0e40 -0a7e 0081 0b8d lri $AR1, #0x0b8d -0a80 00c2 0e0b lr $AR2, @0x0e0b -0a82 1c62 mrr $AR3, $AR2 -0a83 00c4 0e41 lr $IX0, @0x0e41 -0a85 00c5 0e0c lr $IX1, @0x0e0c -0a87 02bf 80e7 call 0x80e7 -0a89 00f8 0baa sr @0x0baa, $AX0.L -0a8b 00fb 0bad sr @0x0bad, $AX1.H -0a8d 00c0 0e43 lr $AR0, @0x0e43 -0a8f 0081 0b99 lri $AR1, #0x0b99 -0a91 00c2 0e0d lr $AR2, @0x0e0d -0a93 1c62 mrr $AR3, $AR2 -0a94 02bf 81f9 call 0x81f9 -0a96 00f8 0bb0 sr @0x0bb0, $AX0.L -0a98 02df ret - +void 0a5b_Unk() { + 0a5b 00c0 0e40 lr $AR0, @0x0e40 + 0a5d 0081 0b89 lri $AR1, #0x0b89 + 0a5f 00c2 0e08 lr $AR2, @0x0e08 + 0a61 1c62 mrr $AR3, $AR2 + 0a62 00c4 0e41 lr $IX0, @0x0e41 + 0a64 00c5 0e09 lr $IX1, @0x0e09 + 0a66 02bf 80e7 call 0x80e7 + 0a68 00f8 0ba9 sr @0x0ba9, $AX0.L + 0a6a 00fb 0bac sr @0x0bac, $AX1.H + 0a6c 00c0 0e43 lr $AR0, @0x0e43 + 0a6e 0081 0b91 lri $AR1, #0x0b91 + 0a70 00c2 0e0e lr $AR2, @0x0e0e + 0a72 1c62 mrr $AR3, $AR2 + 0a73 1c80 mrr $IX0, $AR0 + 0a74 00c5 0e0f lr $IX1, @0x0e0f + 0a76 02bf 80e7 call 0x80e7 + 0a78 00f8 0bab sr @0x0bab, $AX0.L + 0a7a 00fb 0bae sr @0x0bae, $AX1.H + 0a7c 00c0 0e40 lr $AR0, @0x0e40 + 0a7e 0081 0b8d lri $AR1, #0x0b8d + 0a80 00c2 0e0b lr $AR2, @0x0e0b + 0a82 1c62 mrr $AR3, $AR2 + 0a83 00c4 0e41 lr $IX0, @0x0e41 + 0a85 00c5 0e0c lr $IX1, @0x0e0c + 0a87 02bf 80e7 call 0x80e7 + 0a89 00f8 0baa sr @0x0baa, $AX0.L + 0a8b 00fb 0bad sr @0x0bad, $AX1.H + 0a8d 00c0 0e43 lr $AR0, @0x0e43 + 0a8f 0081 0b99 lri $AR1, #0x0b99 + 0a91 00c2 0e0d lr $AR2, @0x0e0d + 0a93 1c62 mrr $AR3, $AR2 + 0a94 02bf 81f9 call 0x81f9 + 0a96 00f8 0bb0 sr @0x0bb0, $AX0.L + 0a98 02df ret +} -0a99 00c0 0e40 lr $AR0, @0x0e40 -0a9b 0081 0b89 lri $AR1, #0x0b89 -0a9d 00c2 0e08 lr $AR2, @0x0e08 -0a9f 0083 0e44 lri $AR3, #0x0e44 -0aa1 00c4 0e41 lr $IX0, @0x0e41 -0aa3 00c5 0e09 lr $IX1, @0x0e09 -0aa5 02bf 8282 call 0x8282 -0aa7 00f8 0ba9 sr @0x0ba9, $AX0.L -0aa9 00fb 0bac sr @0x0bac, $AX1.H -0aab 00c0 0e43 lr $AR0, @0x0e43 -0aad 0081 0b91 lri $AR1, #0x0b91 -0aaf 00c2 0e0e lr $AR2, @0x0e0e -0ab1 0083 0e44 lri $AR3, #0x0e44 -0ab3 1c80 mrr $IX0, $AR0 -0ab4 00c5 0e0f lr $IX1, @0x0e0f -0ab6 02bf 8282 call 0x8282 -0ab8 00f8 0bab sr @0x0bab, $AX0.L -0aba 00fb 0bae sr @0x0bae, $AX1.H -0abc 02df ret - +void 0a99_Unk() { + 0a99 00c0 0e40 lr $AR0, @0x0e40 + 0a9b 0081 0b89 lri $AR1, #0x0b89 + 0a9d 00c2 0e08 lr $AR2, @0x0e08 + 0a9f 0083 0e44 lri $AR3, #0x0e44 + 0aa1 00c4 0e41 lr $IX0, @0x0e41 + 0aa3 00c5 0e09 lr $IX1, @0x0e09 + 0aa5 02bf 8282 call 0x8282 + 0aa7 00f8 0ba9 sr @0x0ba9, $AX0.L + 0aa9 00fb 0bac sr @0x0bac, $AX1.H + 0aab 00c0 0e43 lr $AR0, @0x0e43 + 0aad 0081 0b91 lri $AR1, #0x0b91 + 0aaf 00c2 0e0e lr $AR2, @0x0e0e + 0ab1 0083 0e44 lri $AR3, #0x0e44 + 0ab3 1c80 mrr $IX0, $AR0 + 0ab4 00c5 0e0f lr $IX1, @0x0e0f + 0ab6 02bf 8282 call 0x8282 + 0ab8 00f8 0bab sr @0x0bab, $AX0.L + 0aba 00fb 0bae sr @0x0bae, $AX1.H + 0abc 02df ret +} -0abd 00c0 0e40 lr $AR0, @0x0e40 -0abf 0081 0b89 lri $AR1, #0x0b89 -0ac1 00c2 0e08 lr $AR2, @0x0e08 -0ac3 0083 0e44 lri $AR3, #0x0e44 -0ac5 00c4 0e41 lr $IX0, @0x0e41 -0ac7 00c5 0e09 lr $IX1, @0x0e09 -0ac9 02bf 8282 call 0x8282 -0acb 00f8 0ba9 sr @0x0ba9, $AX0.L -0acd 00fb 0bac sr @0x0bac, $AX1.H -0acf 00c0 0e43 lr $AR0, @0x0e43 -0ad1 0081 0b91 lri $AR1, #0x0b91 -0ad3 00c2 0e0e lr $AR2, @0x0e0e -0ad5 0083 0e44 lri $AR3, #0x0e44 -0ad7 1c80 mrr $IX0, $AR0 -0ad8 00c5 0e0f lr $IX1, @0x0e0f -0ada 02bf 8282 call 0x8282 -0adc 00f8 0bab sr @0x0bab, $AX0.L -0ade 00fb 0bae sr @0x0bae, $AX1.H -0ae0 00c0 0e40 lr $AR0, @0x0e40 -0ae2 0081 0b8d lri $AR1, #0x0b8d -0ae4 00c2 0e0b lr $AR2, @0x0e0b -0ae6 0083 0e44 lri $AR3, #0x0e44 -0ae8 00c4 0e41 lr $IX0, @0x0e41 -0aea 00c5 0e0c lr $IX1, @0x0e0c -0aec 02bf 8282 call 0x8282 -0aee 00f8 0baa sr @0x0baa, $AX0.L -0af0 00fb 0bad sr @0x0bad, $AX1.H -0af2 00c0 0e43 lr $AR0, @0x0e43 -0af4 0081 0b99 lri $AR1, #0x0b99 -0af6 00c2 0e0d lr $AR2, @0x0e0d -0af8 0083 0e44 lri $AR3, #0x0e44 -0afa 02bf 845d call 0x845d -0afc 00f8 0bb0 sr @0x0bb0, $AX0.L -0afe 02df ret - -# This looks like a jump table. +void 0abd_Unk() { + 0abd 00c0 0e40 lr $AR0, @0x0e40 + 0abf 0081 0b89 lri $AR1, #0x0b89 + 0ac1 00c2 0e08 lr $AR2, @0x0e08 + 0ac3 0083 0e44 lri $AR3, #0x0e44 + 0ac5 00c4 0e41 lr $IX0, @0x0e41 + 0ac7 00c5 0e09 lr $IX1, @0x0e09 + 0ac9 02bf 8282 call 0x8282 + 0acb 00f8 0ba9 sr @0x0ba9, $AX0.L + 0acd 00fb 0bac sr @0x0bac, $AX1.H + 0acf 00c0 0e43 lr $AR0, @0x0e43 + 0ad1 0081 0b91 lri $AR1, #0x0b91 + 0ad3 00c2 0e0e lr $AR2, @0x0e0e + 0ad5 0083 0e44 lri $AR3, #0x0e44 + 0ad7 1c80 mrr $IX0, $AR0 + 0ad8 00c5 0e0f lr $IX1, @0x0e0f + 0ada 02bf 8282 call 0x8282 + 0adc 00f8 0bab sr @0x0bab, $AX0.L + 0ade 00fb 0bae sr @0x0bae, $AX1.H + 0ae0 00c0 0e40 lr $AR0, @0x0e40 + 0ae2 0081 0b8d lri $AR1, #0x0b8d + 0ae4 00c2 0e0b lr $AR2, @0x0e0b + 0ae6 0083 0e44 lri $AR3, #0x0e44 + 0ae8 00c4 0e41 lr $IX0, @0x0e41 + 0aea 00c5 0e0c lr $IX1, @0x0e0c + 0aec 02bf 8282 call 0x8282 + 0aee 00f8 0baa sr @0x0baa, $AX0.L + 0af0 00fb 0bad sr @0x0bad, $AX1.H + 0af2 00c0 0e43 lr $AR0, @0x0e43 + 0af4 0081 0b99 lri $AR1, #0x0b99 + 0af6 00c2 0e0d lr $AR2, @0x0e0d + 0af8 0083 0e44 lri $AR3, #0x0e44 + 0afa 02bf 845d call 0x845d + 0afc 00f8 0bb0 sr @0x0bb0, $AX0.L + 0afe 02df ret +} + +# This is a jump table. 0aff 0082 // Jump 0 0b00 013e // Jump 1 0b01 01bc // Jump 2 @@ -2114,45 +2150,53 @@ void 079d_Unk() { 0b0e 047a // Jump f 0b0f 0bb1 // Jump 10 0b10 0175 // Jump 11 -0b11 0768 // Jump 12 -0b12 077a cmpis $ACC1, #0x7a -0b13 079d cmpis $ACC1, #0x9d -0b14 07c0 cmpis $ACC1, #0xc0 -0b15 07f4 cmpis $ACC1, #0xf4 -0b16 0811 lris $AX0.L, #0x11 -0b17 0844 lris $AX0.L, #0x44 -0b18 0877 lris $AX0.L, #0x77 -0b19 08c6 lris $AX0.L, #0xc6 -0b1a 08d9 lris $AX0.L, #0xd9 -0b1b 08fe lris $AX0.L, #0xfe -0b1c 0923 lris $AX1.L, #0x23 -0b1d 095a lris $AX1.L, #0x5a -0b1e 0979 lris $AX1.L, #0x79 -0b1f 09af lris $AX1.L, #0xaf -0b20 09e5 lris $AX1.L, #0xe5 -0b21 0a39 lris $AX0.H, #0x39 -0b22 0a5b lris $AX0.H, #0x5b -0b23 0768 cmpis $ACC1, #0x68 -0b24 0768 cmpis $ACC1, #0x68 -0b25 0768 cmpis $ACC1, #0x68 -0b26 0768 cmpis $ACC1, #0x68 -0b27 0768 cmpis $ACC1, #0x68 -0b28 0768 cmpis $ACC1, #0x68 -0b29 0a99 lris $AX0.H, #0x99 -0b2a 0abd lris $AX0.H, #0xbd -0b2b 0768 cmpis $ACC1, #0x68 -0b2c 0768 cmpis $ACC1, #0x68 -0b2d 0768 cmpis $ACC1, #0x68 -0b2e 0768 cmpis $ACC1, #0x68 -0b2f 0768 cmpis $ACC1, #0x68 -0b30 0768 cmpis $ACC1, #0x68 -0b31 05a8 addis $ACC1, #0xa8 -0b32 065d cmpis $ACC0, #0x5d -0b33 0707 cmpis $ACC1, #0x07 -0b34 1000 loopi #0x00 -0b35 1200 sbclr #0x00 -0b36 1400 lsl $ACC0, #0 -# End of noise + +# Another one here - choose from a number of mixers? +0b11 0768 // Jump3 0 +0b12 077a // Jump3 1 +0b13 079d // Jump3 2 +0b14 07c0 // Jump3 3 +0b15 07f4 // Jump3 4 +0b16 0811 // Jump3 5 +0b17 0844 // Jump3 6 +0b18 0877 // Jump3 7 +0b19 08c6 // Jump3 8 +0b1a 08d9 // Jump3 9 +0b1b 08fe // Jump3 a +0b1c 0923 // Jump3 b +0b1d 095a // Jump3 c +0b1e 0979 // Jump3 d +0b1f 09af // Jump3 e +0b20 09e5 // Jump3 f + +0b21 0a39 // Jump3 10 +0b22 0a5b // Jump3 11 +0b23 0768 // Jump3 12 +0b24 0768 // Jump3 13 +0b25 0768 // Jump3 14 +0b26 0768 // Jump3 15 +0b27 0768 // Jump3 16 +0b28 0768 // Jump3 17 +0b29 0a99 // Jump3 18 +0b2a 0abd // Jump3 19 +0b2b 0768 // Jump3 1a +0b2c 0768 // Jump3 1b +0b2d 0768 // Jump3 1c +0b2e 0768 // Jump3 1d +0b2f 0768 // Jump3 1e +0b30 0768 // Jump3 1f + +# And another LUT starts here. +0b31 05a8 // Jump4 0 +0b32 065d // Jump4 1 +0b33 0707 // Jump4 2 + +# And yet another one starts here. +0b34 1000 +0b35 1200 +0b36 1400 + +# End of noise - back to code. void 0b37_JumpTable_8() { 0b37 8e00 set16 @@ -2463,10 +2507,10 @@ void 0c88_Int7_Handler() { } // Jump table for the next function. -0c8d 0c9f -0c8e 0ca2 -0c8f 0cda -0c90 0cdd +0c8d 0c9f // Jump2 0 +0c8e 0ca2 // Jump2 1 +0c8f 0cda // Jump2 2 +0c90 0cdd // Jump2 3 void 0c91_JumpThroughTable2() { 0c91 8e00 set16 @@ -2550,14 +2594,14 @@ void 0cdd_JumpTable2_3() { 0ce0 26fe lrs $AC0.M, @CMBH 0ce1 02c0 8000 andcf $AC0.M, #0x8000 0ce3 029c 0ce0 jlnz 0x0ce0 -0ce5 02df ret - +0ce5 02df ret + void 0ce6_Unk() { 0ce6 27fe lrs $AC1.M, @CMBH 0ce7 03c0 8000 andcf $AC1.M, #0x8000 0ce9 029c 0ce6 jlnz 0x0ce6 - 0ceb 02df ret -} + 0ceb 02df ret +} 0cec 0000 nop 0ced 0000 nop diff --git a/docs/DSP/DSP_UC_Zelda.txt b/docs/DSP/DSP_UC_Zelda.txt index 733b922793..cc03d26483 100644 --- a/docs/DSP/DSP_UC_Zelda.txt +++ b/docs/DSP/DSP_UC_Zelda.txt @@ -11,7 +11,6 @@ BIG Questions: - Why is a PB-Transfer from RAM to DMEM 0xC0 shorts long but DMEM to RAM just 0x80 DSP functionality to test: - - CR - Interrupts (7) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */ @@ -354,8 +353,8 @@ void 0067_CopyCommand(_destAddr($AR0), _loopCount($AC0.M)) // 0072 02df ret } - /* - + +/* 0073 029f 0043 jmp 0x0043 0075 029f 0043 jmp 0x0043 0077 029f 0095 jmp 0x0095 @@ -1752,7 +1751,7 @@ void 0561_SetupAcceleratorForMysteryAccess(ARAMAddress(ACC0), DestBuffer(AC1.M), 0569 2ed7 srs @ACEAL, $AC0.M 056a 1fda mrr $AC0.M, $AX0.H 056b 1f98 mrr $AC0.L, $AX0.L - // Multiply "current" address by 2 since it's in nibbles? (love these negative shifts :/) + // Divide "current" address by 2. 056c 147f lsr $ACC0, #-1 056d 2ed8 srs @ACCAH, $AC0.M // Current address 056e 2cd9 srs @ACCAL, $AC0.L @@ -1844,8 +1843,7 @@ void 05ad_SetupAccelerator(_acceleratorH(AC0.M), _accleratorL(AC0.L), _format(AC // 05b7 02df ret } -void 05b8_NewMail() - { +void 05b8_NewMail() { # 05b8 1205 sbclr #0x05 # 05b9 8e00 set16 @@ -1861,7 +1859,7 @@ void 05b8_NewMail() */ *0x03fd = AC0.H - *0x03fF = AC0.L + *0x03ff = AC0.L ACC0 >>= 16 *0x03fe = AC0.L *0x03fa = AX0.H @@ -1871,7 +1869,7 @@ void 05b8_NewMail() // 05c8 029c 06b9 jlnz 0x06b9 if (@CMBH & 0x8000 > 0) { - !MISSING! + !MISSING! } // 05ca 00da ffff lr $AX0.H, @CMBL @@ -2000,8 +1998,8 @@ void 0603_Unk(_returnAddr($AR0)) } - 0616 0021 halt - 0617 0021 halt +0616 0021 halt +0617 0021 halt void 0618_Unk() { 0618 009a 0002 lri $AX0.H, #0x0002 @@ -3124,6 +3122,7 @@ void Decoder0x08() { 09a7 2605 lrs $AC0.M, @0x0005 09a8 b100 tst $ACC0 09a9 0295 09be jz 0x09be + 09ab 8100 clr $ACC0 09ac 2e05 srs @0x0005, $AC0.M 09ad 2281 lrs $AX0.H, @0xff81 @@ -3162,6 +3161,7 @@ void Decoder0x08() { 09d4 0a01 lris $AX0.H, #0x01 09d5 00fa 0405 sr @0x0405, $AX0.H 09d7 029f 09ab jmp 0x09ab + 09d9 1f5f mrr $AX0.H, $AC1.M 09da 02bf 0a0a call 0x0a0a 09dc 00fa 0362 sr @0x0362, $AX0.H @@ -3174,7 +3174,7 @@ void Decoder0x08() { 09e5 5c00 sub $ACC0, $AC1.L 09e6 b100 tst $ACC0 09e7 0275 ifz - 09e8 1a3a srr @$AR1, $AX0.H + 09e8 1a3a srr @$AR1, $AX0.H 09e9 2e3a srs @0x003a, $AC0.M 09ea 2c3b srs @0x003b, $AC0.L 09eb 2638 lrs $AC0.M, @0x0038 @@ -3263,28 +3263,28 @@ void Decoder_0x10() { 0a2e 0295 0a43 jz 0x0a43 if (*0x405) { - retry_0a30: - 0a30 8100 clr $ACC0 - 0a31 2e05 srs @0x0005, $AC0.M - 0a32 2281 lrs $AX0.H, @0xff81 - 0a33 8600 tstaxh $AX0.H - 0a34 0294 0a3d jnz 0x0a3d - if (!*401) { - 0a36 8100 clr $ACC0 - 0a37 005f loop $AC1.M - 0a38 1b7e srri @$AR3, $AC0.M - 0a39 7400 incm $AC0.M - 0a3a 2e01 srs @0x0001, $AC0.M - 0a3b 029f 0a78 jmp 0x0a78 - } else { - // Copy [88,89] to [34,35] - 0a3d 2688 lrs $AC0.M, @0xff88 - 0a3e 2489 lrs $AC0.L, @0xff89 - 0a3f 2e34 srs @0x0034, $AC0.M - 0a40 2c35 srs @0x0035, $AC0.L - 0a41 02bf 0a7f call 0x0a7f - 0a7f_UpdateSampleCounters10() - } + retry_0a30: + 0a30 8100 clr $ACC0 + 0a31 2e05 srs @0x0005, $AC0.M + 0a32 2281 lrs $AX0.H, @0xff81 + 0a33 8600 tstaxh $AX0.H + 0a34 0294 0a3d jnz 0x0a3d + if (!*401) { + 0a36 8100 clr $ACC0 + 0a37 005f loop $AC1.M + 0a38 1b7e srri @$AR3, $AC0.M + 0a39 7400 incm $AC0.M + 0a3a 2e01 srs @0x0001, $AC0.M + 0a3b 029f 0a78 jmp 0x0a78 + } else { + // Copy [88,89] to [34,35] + 0a3d 2688 lrs $AC0.M, @0xff88 + 0a3e 2489 lrs $AC0.L, @0xff89 + 0a3f 2e34 srs @0x0034, $AC0.M + 0a40 2c35 srs @0x0035, $AC0.L + 0a41 02bf 0a7f call 0x0a7f + 0a7f_UpdateSampleCounters10() + } } 0a43: