extern int Physics_MemCopyFast(int,int,int);
extern int Sub_0800B9A0(int);
extern int Sub_080102F0(int);
extern int Sound_WriteEnvelope(int,int);
extern int Sound_PlayChannelPattern(int,int,int);
extern int Math_FixedDiv(int,int);
extern int Math_Log2(int);
extern int Sound_CmpNoteIndex(int,int);
void Sub_0800BA30(int a) __attribute__((naked));
void Sub_0800BA30(int a)
{
  (void)a;
  __asm__ volatile(
  ".syntax unified\n"
  ".thumb\n"
  "Sec_%=:\n"
  "push {r4, r5, r6, r7, lr}\n"
  "mov r7, sl\n"
  "mov r6, r9\n"
  "mov r5, r8\n"
  "push {r5, r6, r7}\n"
  "sub sp, #204\n"
  "adds r7, r0, #0\n"
  "ldr	r0, .LpQ800BDDC\n"
  "ldr r0, [r0, #0]\n"
  "mov r9, r0\n"
  "add r5, sp, #36\n"
  "ldr	r1, .LpQ800BDE0\n"
  "adds r0, r5, #0\n"
  "movs r2, #112\n"
  "bl Physics_MemCopyFast\n"
  "add r4, sp, #148\n"
  "ldr	r1, .LpQ800BDE4\n"
  "adds r0, r4, #0\n"
  "movs r2, #56\n"
  "bl Physics_MemCopyFast\n"
  "ldr r0, [r7, #84]\n"
  "movs r1, #1\n"
  "eors r0, r1\n"
  "ands r0, r1\n"
  "mov sl, r5\n"
  "cmp r0, #0\n"
  "beq QQL800BA78_%=\n"
  "adds r1, r7, #0\n"
  "adds r1, #44\n"
  "ldr r2, [r7, #48]\n"
  "adds r0, r7, #0\n"
  "movs r3, #1\n"
  "bl Sub_0800B9A0\n"
  "QQL800BA78_%=:\n"
  "ldr r0, [sp, #36]\n"
  "mov r2, sl\n"
  "ldr r1, [r2, #4]\n"
  "ldr r2, [r2, #8]\n"
  "mov r4, sl\n"
  "ldr r3, [r4, #12]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r5, #161\n"
  "lsls r5, r5, #5\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r5, .LpQ800BDE8\n"
  "ldr r3, [r7, #44]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "adds r2, r5, #0\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #148]\n"
  "ldr r1, [sp, #152]\n"
  "lsls r1, r1, #6\n"
  "movs r6, #161\n"
  "lsls r6, r6, #5\n"
  "adds r1, r1, r6\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "beq QQL800BACE_%=\n"
  "b QQL800BE32_%=\n"
  "QQL800BACE_%=:\n"
  "ldr r1, [r7, #84]\n"
  "adds r0, r1, #0\n"
  "ands r0, r4\n"
  "cmp r0, #0\n"
  "beq QQL800BB34_%=\n"
  "movs r0, #2\n"
  "ands r1, r0\n"
  "cmp r1, #0\n"
  "bne QQL800BAEE_%=\n"
  "adds r1, r7, #0\n"
  "adds r1, #52\n"
  "ldr r2, [r7, #56]\n"
  "adds r0, r7, #0\n"
  "movs r3, #2\n"
  "bl Sub_0800B9A0\n"
  "QQL800BAEE_%=:\n"
  "mov r1, sl\n"
  "ldr r0, [r1, #16]\n"
  "ldr r1, [r1, #20]\n"
  "mov r3, sl\n"
  "ldr r2, [r3, #24]\n"
  "ldr r3, [r3, #28]\n"
  "lsls r1, r1, #6\n"
  "movs r6, #161\n"
  "lsls r6, r6, #5\n"
  "adds r1, r1, r6\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr r3, [r7, #52]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "adds r2, r5, #0\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #156]\n"
  "ldr r1, [sp, #160]\n"
  "lsls r1, r1, #6\n"
  "adds r1, r1, r6\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BB34_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "beq QQL800BB3C_%=\n"
  "b QQL800BE32_%=\n"
  "QQL800BB3C_%=:\n"
  "ldr r1, [r7, #84]\n"
  "movs r0, #2\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800BBD8_%=\n"
  "movs r2, #4\n"
  "adds r0, r1, #0\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "bne QQL800BB58_%=\n"
  "orrs r1, r2\n"
  "str r1, [r7, #84]\n"
  "movs r0, #50\n"
  "str r0, [r7, #40]\n"
  "QQL800BB58_%=:\n"
  "mov r1, sl\n"
  "ldr r0, [r1, #32]\n"
  "ldr r1, [r1, #36]\n"
  "mov r3, sl\n"
  "ldr r2, [r3, #40]\n"
  "ldr r3, [r3, #44]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r5, #161\n"
  "lsls r5, r5, #5\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r6, .LpQ800BDEC\n"
  "adds r5, r7, r6\n"
  "ldr r0, [r5, #0]\n"
  "ldr r0, [r0, #20]\n"
  "ldr	r6, .LpQ800BDF0\n"
  "adds r1, r6, #0\n"
  "bl Math_FixedDiv\n"
  "movs r4, #225\n"
  "lsls r4, r4, #4\n"
  "adds r1, r4, #0\n"
  "bl Math_Log2\n"
  "mov r8, r0\n"
  "ldr r0, [r5, #0]\n"
  "ldr r0, [r0, #20]\n"
  "adds r1, r6, #0\n"
  "bl Math_FixedDiv\n"
  "adds r1, r4, #0\n"
  "bl Math_FixedDiv\n"
  "movs r1, #60\n"
  "bl Math_Log2\n"
  "ldr	r2, .LpQ800BDF4\n"
  "str r0, [sp, #0]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "mov r3, r8\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #164]\n"
  "ldr r1, [sp, #168]\n"
  "lsls r1, r1, #6\n"
  "movs r2, #161\n"
  "lsls r2, r2, #5\n"
  "adds r1, r1, r2\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BBD8_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "beq QQL800BBE0_%=\n"
  "b QQL800BE32_%=\n"
  "QQL800BBE0_%=:\n"
  "ldr r1, [r7, #84]\n"
  "movs r0, #4\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800BC76_%=\n"
  "movs r2, #8\n"
  "adds r0, r1, #0\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "bne QQL800BBFC_%=\n"
  "orrs r1, r2\n"
  "str r1, [r7, #84]\n"
  "movs r0, #50\n"
  "str r0, [r7, #40]\n"
  "QQL800BBFC_%=:\n"
  "mov r3, sl\n"
  "ldr r0, [r3, #48]\n"
  "ldr r1, [r3, #52]\n"
  "ldr r2, [r3, #56]\n"
  "ldr r3, [r3, #60]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r5, #161\n"
  "lsls r5, r5, #5\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r6, .LpQ800BDF8\n"
  "adds r5, r7, r6\n"
  "ldr r0, [r5, #0]\n"
  "ldr	r6, .LpQ800BDF0\n"
  "adds r1, r6, #0\n"
  "bl Math_FixedDiv\n"
  "movs r4, #225\n"
  "lsls r4, r4, #4\n"
  "adds r1, r4, #0\n"
  "bl Math_Log2\n"
  "mov r8, r0\n"
  "ldr r0, [r5, #0]\n"
  "adds r1, r6, #0\n"
  "bl Math_FixedDiv\n"
  "adds r1, r4, #0\n"
  "bl Math_FixedDiv\n"
  "movs r1, #60\n"
  "bl Math_Log2\n"
  "ldr	r2, .LpQ800BDFC\n"
  "str r0, [sp, #0]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "mov r3, r8\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #172]\n"
  "ldr r1, [sp, #176]\n"
  "lsls r1, r1, #6\n"
  "movs r2, #161\n"
  "lsls r2, r2, #5\n"
  "adds r1, r1, r2\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BC76_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "beq QQL800BC7E_%=\n"
  "b QQL800BE32_%=\n"
  "QQL800BC7E_%=:\n"
  "ldr r1, [r7, #84]\n"
  "movs r0, #8\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800BCE4_%=\n"
  "movs r0, #16\n"
  "ands r1, r0\n"
  "cmp r1, #0\n"
  "bne QQL800BC9E_%=\n"
  "adds r1, r7, #0\n"
  "adds r1, #60\n"
  "ldr r2, [r7, #64]\n"
  "adds r0, r7, #0\n"
  "movs r3, #16\n"
  "bl Sub_0800B9A0\n"
  "QQL800BC9E_%=:\n"
  "mov r3, sl\n"
  "ldr r0, [r3, #64]\n"
  "ldr r1, [r3, #68]\n"
  "ldr r2, [r3, #72]\n"
  "ldr r3, [r3, #76]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r5, #161\n"
  "lsls r5, r5, #5\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r2, .LpQ800BDE8\n"
  "ldr r3, [r7, #60]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #180]\n"
  "ldr r1, [sp, #184]\n"
  "lsls r1, r1, #6\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BCE4_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "beq QQL800BCEC_%=\n"
  "b QQL800BE32_%=\n"
  "QQL800BCEC_%=:\n"
  "ldr r1, [r7, #84]\n"
  "movs r0, #16\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800BD52_%=\n"
  "movs r0, #32\n"
  "ands r1, r0\n"
  "cmp r1, #0\n"
  "bne QQL800BD0C_%=\n"
  "adds r1, r7, #0\n"
  "adds r1, #68\n"
  "ldr r2, [r7, #72]\n"
  "adds r0, r7, #0\n"
  "movs r3, #32\n"
  "bl Sub_0800B9A0\n"
  "QQL800BD0C_%=:\n"
  "mov r6, sl\n"
  "ldr r0, [r6, #80]\n"
  "ldr r1, [r6, #84]\n"
  "ldr r2, [r6, #88]\n"
  "ldr r3, [r6, #92]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r5, #161\n"
  "lsls r5, r5, #5\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r2, .LpQ800BDE8\n"
  "ldr r3, [r7, #68]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r0, [sp, #188]\n"
  "ldr r1, [sp, #192]\n"
  "lsls r1, r1, #6\n"
  "adds r1, r1, r5\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BD52_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "bne QQL800BE32_%=\n"
  "ldr r1, [r7, #84]\n"
  "movs r0, #32\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800BE32_%=\n"
  "movs r0, #64\n"
  "ands r1, r0\n"
  "cmp r1, #0\n"
  "bne QQL800BD78_%=\n"
  "adds r1, r7, #0\n"
  "adds r1, #76\n"
  "ldr r2, [r7, #80]\n"
  "adds r0, r7, #0\n"
  "movs r3, #64\n"
  "bl Sub_0800B9A0\n"
  "QQL800BD78_%=:\n"
  "ldr r0, [r7, #36]\n"
  "movs r5, #32\n"
  "cmp r0, #0\n"
  "beq QQL800BD82_%=\n"
  "movs r5, #64\n"
  "QQL800BD82_%=:\n"
  "mov r6, sl\n"
  "ldr r0, [r6, #96]\n"
  "ldr r1, [r6, #100]\n"
  "ldr r2, [r6, #104]\n"
  "ldr r3, [r6, #108]\n"
  "movs r4, #1\n"
  "lsls r1, r1, #6\n"
  "movs r6, #161\n"
  "lsls r6, r6, #5\n"
  "adds r1, r1, r6\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "str r4, [sp, #0]\n"
  "mov r0, r9\n"
  "bl Sub_080102F0\n"
  "ldr	r2, .LpQ800BE00\n"
  "ldr r3, [r7, #76]\n"
  "str r5, [sp, #0]\n"
  "mov r0, r9\n"
  "add r1, sp, #4\n"
  "bl Sound_WriteEnvelope\n"
  "ldr r2, [r7, #76]\n"
  "ldr r0, [r7, #80]\n"
  "cmp r2, r0\n"
  "bne QQL800BE16_%=\n"
  "ldr	r0, .LpQ800BE04\n"
  "add r0, r9\n"
  "ldr r1, [r0, #0]\n"
  "mov r0, r9\n"
  "bl Sound_CmpNoteIndex\n"
  "lsls r0, r0, #24\n"
  "cmp r0, #0\n"
  "beq QQL800BE16_%=\n"
  "ldr r0, [sp, #196]\n"
  "ldr r1, [sp, #200]\n"
  "lsls r1, r1, #6\n"
  "adds r1, r1, r6\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "b QQL800BE08_%=\n"
  "movs r0, r0\n"
  ".LpQ800BDDC: .word 0x02000134\n"
  ".LpQ800BDE0: .word 0x0802A128\n"
  ".LpQ800BDE4: .word 0x0802A198\n"
  ".LpQ800BDE8: .word 0x0802A1D0\n"
  ".LpQ800BDEC: .word 0x0000252C\n"
  ".LpQ800BDF0: .word 0x00034BC0\n"
  ".LpQ800BDF4: .word 0x0802A1D4\n"
  ".LpQ800BDF8: .word 0x00002564\n"
  ".LpQ800BDFC: .word 0x0802A1E0\n"
  ".LpQ800BE00: .word 0x0802A1EC\n"
  ".LpQ800BE04: .word 0x00001C38\n"
  "QQL800BE08_%=:\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #2\n"
  "bl Sound_PlayChannelPattern\n"
  "b QQL800BE32_%=\n"
  "QQL800BE16_%=:\n"
  "ldr r0, [sp, #196]\n"
  "ldr r1, [sp, #200]\n"
  "lsls r1, r1, #6\n"
  "movs r2, #161\n"
  "lsls r2, r2, #5\n"
  "adds r1, r1, r2\n"
  "add r1, r9\n"
  "lsls r0, r0, #1\n"
  "adds r1, r1, r0\n"
  "mov r0, r9\n"
  "add r2, sp, #4\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800BE32_%=:\n"
  "ldr r0, [r7, #40]\n"
  "cmp r0, #0\n"
  "ble QQL800BE3C_%=\n"
  "subs r0, #1\n"
  "str r0, [r7, #40]\n"
  "QQL800BE3C_%=:\n"
  "add sp, #204\n"
  "pop {r3, r4, r5}\n"
  "mov r8, r3\n"
  "mov r9, r4\n"
  "mov sl, r5\n"
  "pop {r4, r5, r6, r7}\n"
  "pop {r0}\n"
  "bx r0\n"
  ::: "r0","r1","r2","r3","memory");
}
