diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-02 16:43:21 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-02 16:43:21 -0800 |
commit | 6c4a8ac10ef7af3c05e32c9ca293556f2d9b6509 (patch) | |
tree | 8cfd796a597eb50e837ae9bfcf338d4ce3f3bd92 | |
parent | f4cf909d52fbad53b0256ef92501fddf1379a23f (diff) | |
parent | 9483552fe14086073aaee0c128ff9f2af6b52a7c (diff) |
Merge pull request #149 from marijnvdwerf/decompile/bard_music
Decompile bard_music
-rw-r--r-- | asm/bard_music.s | 115 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/bard_music.c | 158 |
3 files changed, 159 insertions, 116 deletions
diff --git a/asm/bard_music.s b/asm/bard_music.s deleted file mode 100644 index f0a05321c..000000000 --- a/asm/bard_music.s +++ /dev/null @@ -1,115 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_814A2B8 -sub_814A2B8: @ 814A2B8 - ldr r2, _0814A2CC @ =gUnknown_08417068 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - lsls r1, 1 - adds r1, r0 - movs r2, 0 - ldrsh r0, [r1, r2] - bx lr - .align 2, 0 -_0814A2CC: .4byte gUnknown_08417068 - thumb_func_end sub_814A2B8 - - thumb_func_start sub_814A2D0 -sub_814A2D0: @ 814A2D0 - lsls r0, 16 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _0814A2E8 @ =gBardMusicTable - lsrs r0, 14 - adds r0, r2 - ldr r0, [r0] - lsls r2, r1, 1 - adds r2, r1 - lsls r2, 4 - adds r0, r2 - bx lr - .align 2, 0 -_0814A2E8: .4byte gBardMusicTable - thumb_func_end sub_814A2D0 - - thumb_func_start sub_814A2EC -sub_814A2EC: @ 814A2EC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - lsls r2, 16 - lsrs r2, 16 - mov r9, r2 - ldr r4, _0814A370 @ =gUnknown_084170F4 - adds r2, r1, 0 - adds r3, r6, 0 - adds r3, 0x18 - movs r7, 0x5 -_0814A306: - ldrb r0, [r2] - strh r0, [r3] - ldrb r0, [r2] - cmp r0, 0xFF - beq _0814A328 - movs r1, 0x1 - ldrsb r1, [r2, r1] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - adds r1, r0 - strh r1, [r3, 0x2] - ldrh r0, [r2, 0x4] - strh r0, [r3, 0x6] - ldrh r0, [r6, 0x4] - adds r0, r1 - strh r0, [r6, 0x4] -_0814A328: - adds r2, 0x8 - adds r3, 0x8 - subs r7, 0x1 - cmp r7, 0 - bge _0814A306 - movs r7, 0x6 - movs r5, 0 - movs r0, 0x1E - mov r8, r0 - adds r4, r6, 0 -_0814A33C: - mov r0, r8 - add r0, r9 - adds r1, r5, 0 - bl sub_814A2B8 - adds r1, r0, 0 - strh r1, [r4, 0x1C] - adds r4, 0x8 - adds r5, 0x1 - cmp r5, r7 - blt _0814A33C - ldrb r1, [r6] - adds r1, 0x1 - movs r2, 0 - strb r1, [r6] - strb r2, [r6, 0x1] - strb r2, [r6, 0x2] - strb r2, [r6, 0x3] - strh r2, [r6, 0xA] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0814A370: .4byte gUnknown_084170F4 - thumb_func_end sub_814A2EC - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 8dd35b213..ad9cd02a3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -224,7 +224,7 @@ SECTIONS { src/clear_save_data_menu.o(.text); asm/intro_credits_graphics.o(.text); asm/evolution_graphics.o(.text); - asm/bard_music.o(.text); + src/bard_music.o(.text); asm/fldeff_teleport.o(.text); asm/unknown_debug_menu.o(.text); asm/name_string_util.o(.text); diff --git a/src/bard_music.c b/src/bard_music.c new file mode 100644 index 000000000..4cca0c068 --- /dev/null +++ b/src/bard_music.c @@ -0,0 +1,158 @@ +#include "global.h" +#include "asm.h" + +typedef struct BardSound { + u8 pad_00[48]; +} BardSound; + +typedef struct UnkBard { + /* 0x00 */ u8 var00; + /* 0x01 */ s8 var01; + /* 0x02 */ u16 var02; + /* 0x04 */ u16 var04; + /* 0x06 */ u16 var06; +} UnkBard; + +typedef struct UnkBard3 { + /* 0x00 */ u16 var00; + /* 0x02 */ u16 var02; + /* 0x04 */ s16 var04; + /* 0x06 */ u16 var06; +} UnkBard3; + +typedef struct UnkBard2 { + /* 0x00 */ u8 var00; + /* 0x01 */ u8 var01; + /* 0x02 */ u8 var02; + /* 0x03 */ u8 var03; + /* 0x04 */ u16 var04; + u8 pad06[4]; + /* 0x0A */ u16 var0A; + u8 pad0C[18]; + /* 0x18 */ UnkBard3 var18[7]; // The size of this array likely is wrong +} UnkBard2; + +extern BardSound *gBardMusicTable[]; +extern s16 *gUnknown_08417068[]; +extern u32 gUnknown_084170F4[]; + +s16 sub_814A2B8(u32 arg0, u32 arg1) { + return gUnknown_08417068[arg0][arg1]; +} + +BardSound *sub_814A2D0(u16 arg0, u16 arg1) { + BardSound *sounds; + + sounds = gBardMusicTable[arg0]; + + return &sounds[arg1]; +} + +#ifdef NONMATCHING +void sub_814A2EC(UnkBard2 *dest, UnkBard (*src)[], u16 arg2) { + u32 i; + s32 n; + + for (i = 0; i < 5; i++) { + s8 var01; + u32 i1; + + dest->var18[i].var00 = src[i]->var00; + if (src[i]->var00 == 0xFF) { + continue; + } + + var01 = src[i]->var01; + i1 = gUnknown_084170F4[src[i]->var00]; + dest->var18[i].var02 = i1 + var01; + dest->var18[i].var06 = src[i]->var04; + dest->var04 += 1; + } + + + for (n = 0; n < 6; n++) { + dest->var18[n + 1].var04 = sub_814A2B8(30 + arg2, n); + } + + dest->var00 += 1; + dest->var01 = 0; + dest->var02 = 0; + dest->var03 = 0; + dest->var0A = 0; +} +#else +__attribute__((naked)) +void sub_814A2EC(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r6, r0, 0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + mov r9, r2\n\ + ldr r4, _0814A370 @ =gUnknown_084170F4\n\ + adds r2, r1, 0\n\ + adds r3, r6, 0\n\ + adds r3, 0x18\n\ + movs r7, 0x5\n\ +_0814A306:\n\ + ldrb r0, [r2]\n\ + strh r0, [r3]\n\ + ldrb r0, [r2]\n\ + cmp r0, 0xFF\n\ + beq _0814A328\n\ + movs r1, 0x1\n\ + ldrsb r1, [r2, r1]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + strh r1, [r3, 0x2]\n\ + ldrh r0, [r2, 0x4]\n\ + strh r0, [r3, 0x6]\n\ + ldrh r0, [r6, 0x4]\n\ + adds r0, r1\n\ + strh r0, [r6, 0x4]\n\ +_0814A328:\n\ + adds r2, 0x8\n\ + adds r3, 0x8\n\ + subs r7, 0x1\n\ + cmp r7, 0\n\ + bge _0814A306\n\ + movs r7, 0x6\n\ + movs r5, 0\n\ + movs r0, 0x1E\n\ + mov r8, r0\n\ + adds r4, r6, 0\n\ +_0814A33C:\n\ + mov r0, r8\n\ + add r0, r9\n\ + adds r1, r5, 0\n\ + bl sub_814A2B8\n\ + adds r1, r0, 0\n\ + strh r1, [r4, 0x1C]\n\ + adds r4, 0x8\n\ + adds r5, 0x1\n\ + cmp r5, r7\n\ + blt _0814A33C\n\ + ldrb r1, [r6]\n\ + adds r1, 0x1\n\ + movs r2, 0\n\ + strb r1, [r6]\n\ + strb r2, [r6, 0x1]\n\ + strb r2, [r6, 0x2]\n\ + strb r2, [r6, 0x3]\n\ + strh r2, [r6, 0xA]\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_0814A370: .4byte gUnknown_084170F4\n\ + .syntax divided\n"); +} +#endif |