extern int Sound_GetNoteIndex(int);
extern int Sound_GetFlag(int);
extern int Math_FixedDiv(int,int);
extern int Math_Log2(int);
extern int Sound_ClearChannel(int);
extern int Image_DrawBitmap(int,int,int);
extern int Sound_CheckFlag(int);
extern int Sound_WriteEnvelope(int,int);
extern int Sound_PlayChannelPattern(int,int,int);
extern int Sub_0800102F0(int);
extern int Sub_0800E5F8(int);
extern int Sub_0800E43C(int);
void Sub_0800DA80(int a) __attribute__((naked));
void Sub_0800DA80(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, #52\n"
  "adds r6, r0, #0\n"
  "ldr	r0, .LpQ800DB08\n"
  "ldr r7, [r0, #0]\n"
  "movs r0, #20\n"
  "adds r0, r0, r6\n"
  "mov r8, r0\n"
  "ldr	r1, .LpQ800DB0C\n"
  "adds r4, r6, r1\n"
  "ldr r1, [r4, #0]\n"
  "adds r0, r7, #0\n"
  "bl Sound_GetNoteIndex\n"
  "str r0, [sp, #40]\n"
  "ldr r1, [r4, #0]\n"
  "adds r0, r7, #0\n"
  "bl Sound_GetFlag\n"
  "mov sl, r0\n"
  "ldr	r1, .LpQ800DB10\n"
  "bl Math_FixedDiv\n"
  "adds r4, r0, #0\n"
  "movs r5, #225\n"
  "lsls r5, r5, #4\n"
  "adds r1, r5, #0\n"
  "bl Math_Log2\n"
  "str r0, [sp, #44]\n"
  "adds r0, r4, #0\n"
  "adds r1, r5, #0\n"
  "bl Math_FixedDiv\n"
  "movs r1, #60\n"
  "bl Math_Log2\n"
  "str r0, [sp, #48]\n"
  "ldr r5, [r6, #16]\n"
  "cmp r5, #0\n"
  "bne QQL800DB20_%=\n"
  "adds r0, r7, #0\n"
  "bl Sound_ClearChannel\n"
  "movs r3, #63\n"
  "movs r4, #128\n"
  "lsls r4, r4, #5\n"
  "movs r2, #128\n"
  "lsls r2, r2, #1\n"
  "ldr	r0, .LpQ800DB14\n"
  "adds r1, r7, r0\n"
  "movs r0, #3\n"
  "str r0, [r1, #0]\n"
  "ldr	r1, .LpQ800DB18\n"
  "adds r0, r7, r1\n"
  "str r3, [r0, #12]\n"
  "str r2, [r0, #8]\n"
  "str r5, [r0, #0]\n"
  "str r4, [r0, #4]\n"
  "ldr	r2, .LpQ800DB1C\n"
  "adds r2, r2, r7\n"
  "mov r9, r2\n"
  "b QQL800DD66_%=\n"
  "movs r0, r0\n"
  ".LpQ800DB08: .word 0x02000134\n"
  ".LpQ800DB0C: .word 0x00000874\n"
  ".LpQ800DB10: .word 0x00034BC0\n"
  ".LpQ800DB14: .word 0x00000A34\n"
  ".LpQ800DB18: .word 0x00000A38\n"
  ".LpQ800DB1C: .word 0x00001676\n"
  "QQL800DB20_%=:\n"
  "ldr	r3, .LpQ800DB3C\n"
  "adds r0, r7, r3\n"
  "ldr r0, [r0, #0]\n"
  "cmp r0, #1\n"
  "beq QQL800DB44_%=\n"
  "cmp r0, #1\n"
  "ble QQL800DB6C_%=\n"
  "cmp r0, #3\n"
  "bgt QQL800DB6C_%=\n"
  "ldr	r5, .LpQ800DB40\n"
  "adds r0, r7, r5\n"
  "movs r2, #0\n"
  "b QQL800DB56_%=\n"
  "movs r0, r0\n"
  ".LpQ800DB3C: .word 0x00000A34\n"
  ".LpQ800DB40: .word 0x00000A38\n"
  "QQL800DB44_%=:\n"
  "movs r2, #0\n"
  "ldr	r1, .LpQ800DB64\n"
  "adds r0, r7, r1\n"
  "ldr r1, [r0, #0]\n"
  "ldr r0, [r0, #4]\n"
  "cmp r1, r0\n"
  "bne QQL800DB60_%=\n"
  "ldr	r3, .LpQ800DB68\n"
  "adds r0, r7, r3\n"
  "QQL800DB56_%=:\n"
  "ldr r1, [r0, #0]\n"
  "ldr r0, [r0, #4]\n"
  "cmp r1, r0\n"
  "bne QQL800DB60_%=\n"
  "movs r2, #1\n"
  "QQL800DB60_%=:\n"
  "adds r0, r2, #0\n"
  "b QQL800DB6E_%=\n"
  ".LpQ800DB64: .word 0x00000A38\n"
  ".LpQ800DB68: .word 0x00000A48\n"
  "QQL800DB6C_%=:\n"
  "movs r0, #1\n"
  "QQL800DB6E_%=:\n"
  "lsls r0, r0, #24\n"
  "ldr	r5, .LpQ800DBDC\n"
  "adds r5, r5, r7\n"
  "mov r9, r5\n"
  "cmp r0, #0\n"
  "bne QQL800DB7C_%=\n"
  "b QQL800DD66_%=\n"
  "QQL800DB7C_%=:\n"
  "ldr	r1, .LpQ800DBE0\n"
  "ldr r0, [r1, #0]\n"
  "ldrh r2, [r0, #6]\n"
  "movs r0, #240\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "bne QQL800DB8C_%=\n"
  "b QQL800DD24_%=\n"
  "QQL800DB8C_%=:\n"
  "movs r0, #64\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "beq QQL800DBF4_%=\n"
  "ldr	r4, .LpQ800DBE4\n"
  "movs r1, #130\n"
  "lsls r1, r1, #4\n"
  "adds r0, r6, r1\n"
  "ldr r0, [r0, #0]\n"
  "lsls r0, r0, #4\n"
  "adds r0, r0, r4\n"
  "ldr r2, [r0, #0]\n"
  "ldr	r3, .LpQ800DBE8\n"
  "adds r0, r6, r3\n"
  "ldr r1, [r0, #0]\n"
  "lsls r0, r1, #2\n"
  "adds r3, r0, r1\n"
  "adds r0, r2, r3\n"
  "ldr	r5, .LpQ800DBEC\n"
  "adds r1, r6, r5\n"
  "adds r0, r1, r0\n"
  "ldrb r0, [r0, #0]\n"
  "mov ip, r0\n"
  "ldr	r0, .LpQ800DBF0\n"
  "adds r5, r7, r0\n"
  "mov r0, ip\n"
  "cmp r0, #0\n"
  "bne QQL800DBD4_%=\n"
  "QQL800DBC4_%=:\n"
  "lsls r0, r2, #4\n"
  "adds r0, r0, r4\n"
  "ldr r2, [r0, #0]\n"
  "adds r0, r2, r3\n"
  "adds r0, r1, r0\n"
  "ldrb r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "beq QQL800DBC4_%=\n"
  "QQL800DBD4_%=:\n"
  "movs r1, #130\n"
  "lsls r1, r1, #4\n"
  "adds r0, r6, r1\n"
  "b QQL800DCF8_%=\n"
  ".LpQ800DBDC: .word 0x00001676\n"
  ".LpQ800DBE0: .word 0x02000150\n"
  ".LpQ800DBE4: .word 0x0802A4B0\n"
  ".LpQ800DBE8: .word 0x0000081C\n"
  ".LpQ800DBEC: .word 0x0000082E\n"
  ".LpQ800DBF0: .word 0x000009A4\n"
  "QQL800DBF4_%=:\n"
  "movs r0, #128\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "beq QQL800DC50_%=\n"
  "ldr	r1, .LpQ800DC40\n"
  "movs r2, #130\n"
  "lsls r2, r2, #4\n"
  "adds r0, r6, r2\n"
  "ldr r0, [r0, #0]\n"
  "lsls r0, r0, #4\n"
  "adds r1, #4\n"
  "mov ip, r1\n"
  "add r0, ip\n"
  "ldr r2, [r0, #0]\n"
  "ldr	r3, .LpQ800DC44\n"
  "adds r0, r6, r3\n"
  "ldr r1, [r0, #0]\n"
  "lsls r0, r1, #2\n"
  "adds r4, r0, r1\n"
  "adds r0, r2, r4\n"
  "ldr	r5, .LpQ800DC48\n"
  "adds r3, r6, r5\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "ldr	r1, .LpQ800DC4C\n"
  "adds r5, r7, r1\n"
  "cmp r0, #0\n"
  "bne QQL800DCF2_%=\n"
  "mov r1, ip\n"
  "QQL800DC2E_%=:\n"
  "lsls r0, r2, #4\n"
  "adds r0, r0, r1\n"
  "ldr r2, [r0, #0]\n"
  "adds r0, r2, r4\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "beq QQL800DC2E_%=\n"
  "b QQL800DCF2_%=\n"
  ".LpQ800DC40: .word 0x0802A4B0\n"
  ".LpQ800DC44: .word 0x0000081C\n"
  ".LpQ800DC48: .word 0x0000082E\n"
  ".LpQ800DC4C: .word 0x000009A4\n"
  "QQL800DC50_%=:\n"
  "movs r0, #32\n"
  "ands r0, r2\n"
  "cmp r0, #0\n"
  "beq QQL800DCA8_%=\n"
  "ldr	r1, .LpQ800DC9C\n"
  "movs r5, #130\n"
  "lsls r5, r5, #4\n"
  "adds r0, r6, r5\n"
  "ldr r0, [r0, #0]\n"
  "lsls r0, r0, #4\n"
  "adds r1, #8\n"
  "mov ip, r1\n"
  "add r0, ip\n"
  "ldr r2, [r0, #0]\n"
  "ldr	r1, .LpQ800DCA0\n"
  "adds r0, r6, r1\n"
  "ldr r1, [r0, #0]\n"
  "lsls r0, r1, #2\n"
  "adds r4, r0, r1\n"
  "adds r0, r2, r4\n"
  "adds r5, #14\n"
  "adds r3, r6, r5\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "ldr	r1, .LpQ800DCA4\n"
  "adds r5, r7, r1\n"
  "cmp r0, #0\n"
  "bne QQL800DCF2_%=\n"
  "mov r1, ip\n"
  "QQL800DC8A_%=:\n"
  "lsls r0, r2, #4\n"
  "adds r0, r0, r1\n"
  "ldr r2, [r0, #0]\n"
  "adds r0, r2, r4\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "beq QQL800DC8A_%=\n"
  "b QQL800DCF2_%=\n"
  ".LpQ800DC9C: .word 0x0802A4B0\n"
  ".LpQ800DCA0: .word 0x0000081C\n"
  ".LpQ800DCA4: .word 0x000009A4\n"
  "QQL800DCA8_%=:\n"
  "movs r0, #16\n"
  "ands r2, r0\n"
  "ldr	r0, .LpQ800DD80\n"
  "adds r5, r7, r0\n"
  "cmp r2, #0\n"
  "beq QQL800DCFA_%=\n"
  "ldr	r1, .LpQ800DD84\n"
  "movs r2, #130\n"
  "lsls r2, r2, #4\n"
  "adds r0, r6, r2\n"
  "ldr r0, [r0, #0]\n"
  "lsls r0, r0, #4\n"
  "adds r1, #12\n"
  "mov ip, r1\n"
  "add r0, ip\n"
  "ldr r2, [r0, #0]\n"
  "ldr	r3, .LpQ800DD88\n"
  "adds r0, r6, r3\n"
  "ldr r1, [r0, #0]\n"
  "lsls r0, r1, #2\n"
  "adds r4, r0, r1\n"
  "adds r0, r2, r4\n"
  "ldr	r1, .LpQ800DD8C\n"
  "adds r3, r6, r1\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "bne QQL800DCF2_%=\n"
  "mov r1, ip\n"
  "QQL800DCE2_%=:\n"
  "lsls r0, r2, #4\n"
  "adds r0, r0, r1\n"
  "ldr r2, [r0, #0]\n"
  "adds r0, r2, r4\n"
  "adds r0, r3, r0\n"
  "ldrb r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "beq QQL800DCE2_%=\n"
  "QQL800DCF2_%=:\n"
  "movs r3, #130\n"
  "lsls r3, r3, #4\n"
  "adds r0, r6, r3\n"
  "QQL800DCF8_%=:\n"
  "str r2, [r0, #0]\n"
  "QQL800DCFA_%=:\n"
  "ldr	r0, .LpQ800DD90\n"
  "adds r2, r6, r0\n"
  "ldr	r1, .LpQ800DD88\n"
  "adds r0, r6, r1\n"
  "ldr r1, [r0, #0]\n"
  "lsls r0, r1, #2\n"
  "adds r0, r0, r1\n"
  "movs r3, #130\n"
  "lsls r3, r3, #4\n"
  "adds r1, r6, r3\n"
  "ldr r1, [r1, #0]\n"
  "adds r0, r0, r1\n"
  "str r0, [r2, #0]\n"
  "ldr	r0, .LpQ800DD94\n"
  "adds r1, r6, r0\n"
  "movs r0, #0\n"
  "str r0, [r1, #0]\n"
  "movs r1, #2\n"
  "ldr r0, [r5, #0]\n"
  "orrs r0, r1\n"
  "str r0, [r5, #0]\n"
  "QQL800DD24_%=:\n"
  "ldr	r1, .LpQ800DD98\n"
  "ldr r0, [r1, #0]\n"
  "ldrh r0, [r0, #2]\n"
  "movs r1, #9\n"
  "ands r0, r1\n"
  "cmp r0, #0\n"
  "beq QQL800DD46_%=\n"
  "ldr	r3, .LpQ800DD80\n"
  "adds r2, r7, r3\n"
  "movs r1, #4\n"
  "ldr r0, [r2, #0]\n"
  "orrs r0, r1\n"
  "str r0, [r2, #0]\n"
  "movs r0, #6\n"
  "subs r1, #5\n"
  "str r0, [r6, #8]\n"
  "str r1, [r6, #12]\n"
  "QQL800DD46_%=:\n"
  "ldr	r5, .LpQ800DD98\n"
  "ldr r0, [r5, #0]\n"
  "ldrh r0, [r0, #2]\n"
  "movs r3, #2\n"
  "ands r0, r3\n"
  "cmp r0, #0\n"
  "beq QQL800DD66_%=\n"
  "ldr	r0, .LpQ800DD80\n"
  "adds r2, r7, r0\n"
  "movs r1, #8\n"
  "ldr r0, [r2, #0]\n"
  "orrs r0, r1\n"
  "str r0, [r2, #0]\n"
  "movs r0, #4\n"
  "str r0, [r6, #8]\n"
  "str r3, [r6, #12]\n"
  "QQL800DD66_%=:\n"
  "ldr	r1, .LpQ800DD90\n"
  "adds r0, r6, r1\n"
  "ldr r1, [r0, #0]\n"
  "cmp r1, #0\n"
  "bge QQL800DD76_%=\n"
  "ldr	r2, .LpQ800DD9C\n"
  "adds r0, r7, r2\n"
  "ldr r1, [r0, #0]\n"
  "QQL800DD76_%=:\n"
  "cmp r1, #29\n"
  "bhi QQL800DDA4_%=\n"
  "ldr	r5, .LpQ800DDA0\n"
  "b QQL800DDD0_%=\n"
  "movs r0, r0\n"
  ".LpQ800DD80: .word 0x000009A4\n"
  ".LpQ800DD84: .word 0x0802A4B0\n"
  ".LpQ800DD88: .word 0x0000081C\n"
  ".LpQ800DD8C: .word 0x0000082E\n"
  ".LpQ800DD90: .word 0x00000874\n"
  ".LpQ800DD94: .word 0x00000864\n"
  ".LpQ800DD98: .word 0x02000150\n"
  ".LpQ800DD9C: .word 0x00001C38\n"
  ".LpQ800DDA0: .word 0x0802A318\n"
  "QQL800DDA4_%=:\n"
  "adds r0, r1, #0\n"
  "subs r0, #30\n"
  "cmp r0, #4\n"
  "bhi QQL800DDB4_%=\n"
  "ldr	r5, .LpQ800DDB0\n"
  "b QQL800DDD0_%=\n"
  ".LpQ800DDB0: .word 0x0802A320\n"
  "QQL800DDB4_%=:\n"
  "adds r0, r1, #0\n"
  "subs r0, #35\n"
  "cmp r0, #4\n"
  "bhi QQL800DDC4_%=\n"
  "ldr	r5, .LpQ800DDC0\n"
  "b QQL800DDD0_%=\n"
  ".LpQ800DDC0: .word 0x0802A328\n"
  "QQL800DDC4_%=:\n"
  "ldr	r0, .LpQ800DDF0\n"
  "ldr	r1, .LpQ800DDF4\n"
  "ldr	r2, .LpQ800DDF8\n"
  "bl Image_DrawBitmap\n"
  "movs r5, #0\n"
  "QQL800DDD0_%=:\n"
  "ldr	r3, .LpQ800DDFC\n"
  "adds r0, r6, r3\n"
  "ldr r0, [r0, #0]\n"
  "cmp r0, #0\n"
  "bge QQL800DDE0_%=\n"
  "ldr	r1, .LpQ800DE00\n"
  "adds r0, r7, r1\n"
  "ldr r0, [r0, #0]\n"
  "QQL800DDE0_%=:\n"
  "cmp r0, #29\n"
  "bls QQL800DE18_%=\n"
  "adds r1, r0, #0\n"
  "subs r1, #30\n"
  "cmp r1, #4\n"
  "bhi QQL800DE04_%=\n"
  "adds r0, r1, #0\n"
  "b QQL800DE18_%=\n"
  ".LpQ800DDF0: .word 0x0802A330\n"
  ".LpQ800DDF4: .word 0x0802A340\n"
  ".LpQ800DDF8: .word 0x0000010B\n"
  ".LpQ800DDFC: .word 0x00000874\n"
  ".LpQ800DE00: .word 0x00001C38\n"
  "QQL800DE04_%=:\n"
  "subs r0, #35\n"
  "cmp r0, #4\n"
  "bls QQL800DE18_%=\n"
  "ldr	r0, .LpQ800DEBC\n"
  "ldr	r1, .LpQ800DEC0\n"
  "movs r2, #141\n"
  "lsls r2, r2, #1\n"
  "bl Image_DrawBitmap\n"
  "movs r0, #0\n"
  "QQL800DE18_%=:\n"
  "adds r4, r0, #1\n"
  "ldr	r2, .LpQ800DEC4\n"
  "adds r0, r6, r2\n"
  "ldr r1, [r0, #0]\n"
  "cmp r1, #0\n"
  "bge QQL800DE2A_%=\n"
  "ldr	r3, .LpQ800DEC8\n"
  "adds r0, r7, r3\n"
  "ldr r1, [r0, #0]\n"
  "QQL800DE2A_%=:\n"
  "adds r0, r7, #0\n"
  "bl Sound_CheckFlag\n"
  "lsls r0, r0, #24\n"
  "movs r1, #32\n"
  "cmp r0, #0\n"
  "beq QQL800DE3A_%=\n"
  "movs r1, #64\n"
  "QQL800DE3A_%=:\n"
  "ldr	r2, .LpQ800DECC\n"
  "str r4, [sp, #0]\n"
  "str r1, [sp, #4]\n"
  "adds r0, r7, #0\n"
  "add r1, sp, #8\n"
  "adds r3, r5, #0\n"
  "bl Sound_WriteEnvelope\n"
  "adds r0, r7, #0\n"
  "mov r1, r9\n"
  "add r2, sp, #8\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "movs r1, #146\n"
  "lsls r1, r1, #2\n"
  "add r1, r8\n"
  "ldr	r2, .LpQ800DED0\n"
  "adds r0, r7, #0\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "ldr	r2, .LpQ800DED4\n"
  "adds r0, r7, #0\n"
  "add r1, sp, #8\n"
  "ldr r3, [sp, #40]\n"
  "bl Sound_WriteEnvelope\n"
  "ldr	r1, .LpQ800DED8\n"
  "add r1, r8\n"
  "adds r0, r7, #0\n"
  "add r2, sp, #8\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "ldr	r1, .LpQ800DEDC\n"
  "add r1, r8\n"
  "movs r0, #1\n"
  "str r0, [sp, #0]\n"
  "adds r0, r7, #0\n"
  "movs r2, #103\n"
  "movs r3, #8\n"
  "bl Sub_080102F0\n"
  "mov r5, sl\n"
  "cmp r5, #0\n"
  "blt QQL800DEE4_%=\n"
  "ldr	r2, .LpQ800DEE0\n"
  "ldr r0, [sp, #48]\n"
  "str r0, [sp, #0]\n"
  "adds r0, r7, #0\n"
  "add r1, sp, #8\n"
  "ldr r3, [sp, #44]\n"
  "bl Sound_WriteEnvelope\n"
  "movs r1, #171\n"
  "lsls r1, r1, #2\n"
  "add r1, r8\n"
  "adds r0, r7, #0\n"
  "add r2, sp, #8\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "b QQL800DEF4_%=\n"
  "movs r0, r0\n"
  ".LpQ800DEBC: .word 0x0802A330\n"
  ".LpQ800DEC0: .word 0x0802A340\n"
  ".LpQ800DEC4: .word 0x00000874\n"
  ".LpQ800DEC8: .word 0x00001C38\n"
  ".LpQ800DECC: .word 0x0802A544\n"
  ".LpQ800DED0: .word 0x0802A550\n"
  ".LpQ800DED4: .word 0x0802A558\n"
  ".LpQ800DED8: .word 0x0000026A\n"
  ".LpQ800DEDC: .word 0x00000296\n"
  ".LpQ800DEE0: .word 0x0802A55C\n"
  "QQL800DEE4_%=:\n"
  "movs r1, #171\n"
  "lsls r1, r1, #2\n"
  "add r1, r8\n"
  "ldr	r2, .LpQ800DF10\n"
  "adds r0, r7, #0\n"
  "movs r3, #1\n"
  "bl Sound_PlayChannelPattern\n"
  "QQL800DEF4_%=:\n"
  "adds r0, r6, #0\n"
  "bl Sub_0800E5F8\n"
  "adds r0, r6, #0\n"
  "bl Sub_0800E43C\n"
  "add sp, #52\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"
  ".LpQ800DF10: .word 0x0802A568\n"
  ::: "r0","r1","r2","r3","memory");
}
