Mother2GbaTranslation/notes/m2-title-long.txt

1170 lines
36 KiB
Plaintext

// Full title screen
// ----
// Jump table:
// $80113F5
// $80115A9
// $8011499
// $8011495
// 0x2E0 struct: (2028028)
// Offset Length Description Value for long title screen
// ------------------------------------------------------------------------------------------------------------
// 0 4 Palette A pointer (WRAM) -- background? x3 0x2011400
// 4 4 Palette B pointer (WRAM) -- text or orb? x5 0x2011600
// 8 4 Palette C pointer (WRAM) -- copyright or bg? x4 0x2011800
// C 4 Palette D pointer (WRAM) -- text or orb? x4 0x2011A00
// 10 4 Palette E pointer (WRAM) -- buffer? 0x2011C00
// Sequences:
// ##: [dur] [dur]
// M2GBA EBGBA
// ----- -----
// 00: start-up (play sound, etc.)
// 01: [ 48] earth fade-in [] B fade-in
// 02: [ 45] pause [] pause
// 03: [104] text flies in [] text flies in
// 04: [ 1] pause [] pause
// 05: [] flash text [] flash text
// 06: [] pause [] pause
// 07: [] text moves up [] do nothing
// 08: [] pause [] pause
// 09: [] background fade-in [] copyright fade-in
// 0A: [] pause [] pause
// 0B: [] flash all [] glow
// 0C: [] pause [] pause
// 0D: [] long pause [] do nothing
// 0E: [] flash all [] do nothing
// 0F: [] pause [] do nothing
// 10: [] long pause [] do nothing
// 11: [] quick fade-out all [] quick fade-out all
//=============================================================================
// $80113F5: (Start)
080113F4 (T) push r4,r5,r14
080113F6 (T) add sp,-4h
// malloc 0x2E0 bytes
080113F8 (T) movs r0,0B8h
080113FA (T) lsls r0,r0,2h
080113FC (T) bl 8005B9Ch
08011400 (T) adds r4,r0,0
08011402 (T) ldr r0,=3000370h
08011404 (T) ldr r0,[r0]
08011406 (T) str r4,[r0,14h]
// Initialize struct
// Five palette buffers
08011408 (T) ldr r0,=2011400h
0801140A (T) str r0,[r4]
0801140C (T) ldr r0,=2011600h
0801140E (T) str r0,[r4,4h]
08011410 (T) ldr r1,=2011800h
08011412 (T) str r1,[r4,8h]
08011414 (T) ldr r0,=2011A00h
08011416 (T) str r0,[r4,0Ch]
08011418 (T) ldr r0,=2011C00h
0801141A (T) str r0,[r4,10h]
// Load first four palettes into buffers
0801141C (T) ldr r0,=8712754h
0801141E (T) movs r5,80h
08011420 (T) lsls r5,r5,2h
08011422 (T) adds r2,r5,0
08011424 (T) bl 8005D34h
08011428 (T) ldr r0,=8712868h
0801142A (T) ldr r1,[r4,0Ch]
0801142C (T) adds r2,r5,0
0801142E (T) bl 8005D34h
08011432 (T) ldr r0,=87126CCh
08011434 (T) ldr r1,[r4]
08011436 (T) adds r2,r5,0
08011438 (T) bl 8005D34h
0801143C (T) ldr r0,=87127E8h
0801143E (T) ldr r1,[r4,4h]
08011440 (T) adds r2,r5,0
08011442 (T) bl 8005D34h
// Zero out fifth buffer
08011446 (T) movs r0,0h
08011448 (T) str r0,[sp]
0801144A (T) ldr r1,=40000D4h
0801144C (T) mov r0,r13
0801144E (T) str r0,[r1]
08011450 (T) ldr r0,[r4,10h]
08011452 (T) str r0,[r1,4h]
08011454 (T) ldr r0,=85000080h
08011456 (T) str r0,[r1,8h]
08011458 (T) ldr r0,[r1,8h]
// Return 0
0801145A (T) movs r0,0h
0801145C (T) add sp,4h
0801145E (T) pop r4,r5
08011460 (T) pop r1
08011462 (T) bx r1
//=============================================================================
// $80115A9: (Setup)
// Load a bunch of constants to the stack ([80FCB74..80FCBFF] to [sp..sp+8B])
080115A8 (T) push r4-r7,r14
080115AA (T) mov r7,r10
080115AC (T) mov r6,r9
080115AE (T) mov r5,r8
080115B0 (T) push r5-r7
080115B2 (T) add sp,-94h // damn...
080115B4 (T) mov r1,r13
080115B6 (T) ldr r0,=80FCB74h
080115B8 (T) ldmia [r0]!,r2-r4
080115BA (T) stmia [r1]!,r2-r4
080115BC (T) add r7,sp,0Ch
080115BE (T) mov r8,r7
080115C0 (T) mov r1,r8
080115C2 (T) ldr r0,=80FCB80h
080115C4 (T) ldmia [r0]!,r2-r4
080115C6 (T) stmia [r1]!,r2-r4
080115C8 (T) ldmia [r0]!,r2,r3,r7
080115CA (T) stmia [r1]!,r2,r3,r7
080115CC (T) ldmia [r0]!,r4,r7
080115CE (T) stmia [r1]!,r4,r7
080115D0 (T) add r6,sp,2Ch
080115D2 (T) mov r1,r6
080115D4 (T) ldr r0,=80FCBA0h
080115D6 (T) ldmia [r0]!,r2-r4
080115D8 (T) stmia [r1]!,r2-r4
080115DA (T) ldmia [r0]!,r2,r3,r7
080115DC (T) stmia [r1]!,r2,r3,r7
080115DE (T) ldmia [r0]!,r4,r7
080115E0 (T) stmia [r1]!,r4,r7
080115E2 (T) add r5,sp,4Ch
080115E4 (T) mov r1,r5
080115E6 (T) ldr r0,=80FCBC0h
080115E8 (T) ldmia [r0]!,r2-r4
080115EA (T) stmia [r1]!,r2-r4
080115EC (T) ldmia [r0]!,r2,r3,r7
080115EE (T) stmia [r1]!,r2,r3,r7
080115F0 (T) ldmia [r0]!,r4,r7
080115F2 (T) stmia [r1]!,r4,r7
080115F4 (T) add r4,sp,6Ch
080115F6 (T) mov r1,r4
080115F8 (T) ldr r0,=80FCBE0h
080115FA (T) ldmia [r0]!,r2,r3,r7
080115FC (T) stmia [r1]!,r2,r3,r7
080115FE (T) ldmia [r0]!,r2,r3,r7
08011600 (T) stmia [r1]!,r2,r3,r7
08011602 (T) ldmia [r0]!,r2,r3
08011604 (T) stmia [r1]!,r2,r3
08011606 (T) ldr r3,=3000370h
08011608 (T) ldr r7,[r3]
0801160A (T) mov r12,r7 // r7 = r12 = 2028008
0801160C (T) mov r0,r12
0801160E (T) ldr r0,[r0,14h]
08011610 (T) mov r9,r0
08011612 (T) mov r7,r9 // r7 = r9 = 2028028
08011614 (T) add r7,14h
08011616 (T) ldr r0,=3002570h
08011618 (T) ldr r1,[r0] // seems to always be 2?
0801161A (T) ldr r0,=3002A30h
0801161C (T) ldr r2,[r0]
0801161E (T) lsl r0,r1,1h
08011620 (T) add r0,r0,r1
08011622 (T) lsl r0,r0,4h
08011624 (T) add r0,r0,r2
08011626 (T) ldrb r1,[r0,8h] // appears to be a has-this-been-run-yet flag
08011628 (T) cmp r1,0h
0801162A (T) beq 801162Eh
0801162C (T) b 8011730h
// If this is the first run:
// Set sequence index to 0
0801162E (T) mov r0,r9 // 2028028
08011630 (T) add r0,84h
08011632 (T) str r1,[r0]
08011634 (T) mov r1,0A2h
08011636 (T) lsl r1,r1,2h
08011638 (T) add r1,r9
0801163A (T) mov r0,88h
0801163C (T) lsl r0,r0,4h
0801163E (T) str r0,[r1] // [20282B0] = 0x00000880
08011640 (T) mov r2,0B2h
08011642 (T) lsl r2,r2,2h
08011644 (T) add r2,r9
08011646 (T) ldr r1,[sp,54h] // r1 = 0x68 (X coordinate of the R)
08011648 (T) mov r0,0F0h
0801164A (T) sub r0,r0,r1
0801164C (T) str r0,[r2] // [20282F0] = 0xF0 - 0x68 = 0x88
0801164E (T) mov r1,0AEh
08011650 (T) lsl r1,r1,2h
08011652 (T) add r1,r9
08011654 (T) mov r0,0C0h
08011656 (T) lsl r0,r0,0Ah
08011658 (T) str r0,[r1] // [20282E0] = 0x30000
0801165A (T) mov r6,1h
0801165C (T) mov r7,0B2h
0801165E (T) lsl r7,r7,2h
08011660 (T) add r7,r9 // r7 = 20282F0
08011662 (T) mov r5,0B3h
08011664 (T) lsl r5,r5,2h
08011666 (T) add r5,r9 // r5 = 20282F4
// Looks like sp+58 and sp+78 are important variables; store their
// locations to sp+8C and sp+90. Let's call them X and Y respectively.
// sp+58: pointer to end X coordinate of T
// sp+78: pointer to start X coordinate of T
08011668 (T) mov r1,r13
0801166A (T) add r1,58h
0801166C (T) str r1,[sp,8Ch]
0801166E (T) mov r2,r13
08011670 (T) add r2,78h
08011672 (T) str r2,[sp,90h]
08011674 (T) mov r3,0A2h
08011676 (T) lsl r3,r3,2h
08011678 (T) add r3,r9
0801167A (T) mov r10,r3 // r3 = r10 = 20282B0
0801167C (T) mov r4,0A3h
0801167E (T) lsl r4,r4,2h
08011680 (T) add r4,r9
08011682 (T) mov r8,r4 // r4 = r8 = 20282B4
// So:
// r3 = 20282B0
// r4 = 20282B4
// r5 = 20282F4
// r6 = loop index
// r7 = 20282F0
// r8 = 20282B4
// r9 = 2028028
// r10 = 20282B0
// For r6 = 1 to 3:
// Load Y into r1 and increment Y
08011684 (T) lsl r4,r6,2h
08011686 (T) ldr r0,[sp,90h]
08011688 (T) ldmia [r0]!,r1
0801168A (T) str r0,[sp,90h]
// Load X into r0 and increment X
0801168C (T) ldr r2,[sp,8Ch]
0801168E (T) ldmia [r2]!,r0
08011690 (T) str r2,[sp,8Ch]
08011692 (T) sub r1,r1,r0
08011694 (T) str r1,[r5] // delta between start and end X coordinates of the T
08011696 (T) mov r0,0AEh
08011698 (T) lsl r0,r0,2h
0801169A (T) add r0,r9
0801169C (T) add r4,r0,r4
0801169E (T) ldr r0,[r0]
080116A0 (T) mul r0,r1
080116A2 (T) ldr r1,[r7]
080116A4 (T) bl m2_div
080116A8 (T) str r0,[r4] // r0 = increment per frame?
080116AA (T) ldmia [r5]!,r1 // r1 = delta
080116AC (T) mov r3,r10
080116AE (T) ldr r0,[r3]
080116B0 (T) mul r0,r1
080116B2 (T) ldr r1,[r7]
080116B4 (T) bl m2_div
080116B8 (T) mov r4,r8
080116BA (T) add r4,4h
080116BC (T) mov r8,r4
080116BE (T) sub r4,4h
080116C0 (T) stmia [r4]!,r0
080116C2 (T) add r6,1h
080116C4 (T) cmp r6,3h
080116C6 (T) ble 8011684h
080116C8 (T) mov r6,0h
080116CA (T) mov r10,r6
080116CC (T) add r7,sp,2Ch
080116CE (T) mov r8,r7
080116D0 (T) add r7,sp,6Ch
080116D2 (T) mov r5,r9
080116D4 (T) add r5,0A8h
080116D6 (T) mov r4,r9
080116D8 (T) add r4,88h
080116DA (T) mov r0,r4
080116DC (T) ldr r1,=8712FB0h
080116DE (T) bl 80088E0h
080116E2 (T) strb r6,[r5]
080116E4 (T) mov r0,r4
080116E6 (T) bl 8008A28h
080116EA (T) mov r0,r10
080116EC (T) strb r0,[r5,0Eh]
080116EE (T) ldmia [r7]!,r0
080116F0 (T) str r0,[r5,4h]
080116F2 (T) mov r1,r8
080116F4 (T) add r1,4h
080116F6 (T) mov r8,r1
080116F8 (T) sub r1,4h
080116FA (T) ldmia [r1]!,r0
080116FC (T) str r0,[r5,8h]
080116FE (T) add r5,40h
08011700 (T) add r4,40h
08011702 (T) add r6,1h
08011704 (T) cmp r6,7h
08011706 (T) ble 80116DAh
08011708 (T) b 8011BE4h
0801170A (T) lsl r0,r0,0h
0801170C (T) ldmia [r3]!,r2,r4-r6
0801170E (T) lsr r7,r1,20h
08011710 (T) ldmia [r3]!,r7
08011712 (T) lsr r7,r1,20h
08011714 (T) ldmia [r3]!,r5,r7
08011716 (T) lsr r7,r1,20h
08011718 (T) ldmia [r3]!,r6,r7
0801171A (T) lsr r7,r1,20h
0801171C (T) ldmia [r3]!,r5-r7
0801171E (T) lsr r7,r1,20h
08011720 (T) lsl r0,r6,0Dh
08011722 (T) lsl r0,r0,0Ch
08011724 (T) mov r5,70h
08011726 (T) lsl r0,r0,0Ch
08011728 (T) cmp r2,30h
0801172A (T) lsl r0,r0,0Ch
0801172C (T) cmp r7,0B0h
0801172E (T) lsr r1,r6,1h
08011730 (T) ldrb r0,[r0,0Bh] // appears to be an are-we-on-the-last-run flag
08011732 (T) cmp r0,1h
08011734 (T) bne 801173Ch
// If this is the last run:
08011736 (T) bl 8000C28h // tear-down
0801173A (T) b 8011BE4h
// Else: check for input
0801173C (T) ldr r0,=3002500h
0801173E (T) ldrh r1,[r0] // pad input
08011740 (T) mov r0,9h
08011742 (T) and r0,r1
08011744 (T) cmp r0,0h
08011746 (T) beq 8011774h
// A/Start is pressed
08011748 (T) mov r0,r9
0801174A (T) add r0,84h
0801174C (T) ldr r0,[r0]
0801174E (T) cmp r0,0Ah
08011750 (T) ble 8011764h
// If we're on the final sequence:
08011752 (T) ldr r1,=30012D0h
08011754 (T) ldr r0,=8001825h
08011756 (T) b 8011B7Ah // store r0 to [r1] and return -1
08011758 (T) mov r5,0h
0801175A (T) lsl r0,r0,0Ch
0801175C (T) asr r0,r2,0Bh
0801175E (T) lsl r0,r0,0Ch
08011760 (T) add r5,r4,r0
08011762 (T) lsr r0,r0,20h
// If we're not on the final sequence:
08011764 (T) ldr r1,=30012D0h
08011766 (T) ldr r0,=8010F95h
08011768 (T) b 8011B7Ah // same
0801176A (T) lsl r0,r0,0h
0801176C (T) asr r0,r2,0Bh
0801176E (T) lsl r0,r0,0Ch
08011770 (T) lsr r5,r2,1Eh
08011772 (T) lsr r1,r0,20h
// Increment frame counter
08011774 (T) mov r2,r12
08011776 (T) ldr r0,[r2,4h]
08011778 (T) add r0,1h
0801177A (T) str r0,[r2,4h]
// Check sequence number
0801177C (T) mov r0,r9
0801177E (T) add r0,84h
08011780 (T) ldr r1,[r0]
08011782 (T) mov r10,r0
08011784 (T) cmp r1,11h
08011786 (T) bls 801178Ah
08011788 (T) b 8011B8Ch
// Should always end up here (sequence number only goes up to 11)
// Jump table!
// [00]: 080117E0
// [01]: 08011802
// [02]: 0801182A
// [03]: 08011858
// [04]: 080118FA
// [05]: 080118FE
// [06]: 0801195C
// [07]: 08011972
// [08]: 080119BA
// [09]: 080119DE
// [0A]: 08011A02
// [0B]: 08011A1A
// [0C]: 08011A80
// [0D]: 08011A8A
// [0E]: 08011AAA
// [0F]: 08011B58
// [10]: 08011B66
// [11]: 08011B76
0801178A (T) lsl r0,r1,2h
0801178C (T) ldr r1,=8011798h
0801178E (T) add r0,r0,r1
08011790 (T) ldr r0,[r0]
08011792 (T) mov r15,r0
08011794 (T) asr r0,r3,1Eh
08011796 (T) lsr r1,r0,20h
08011798 (T) asr r0,r4,1Fh
0801179A (T) lsr r1,r0,20h
0801179C (T) add r2,r0,r0
0801179E (T) lsr r1,r0,20h
080117A0 (T) add r2,r5,r0
080117A2 (T) lsr r1,r0,20h
080117A4 (T) add r0,r3,r1
080117A6 (T) lsr r1,r0,20h
080117A8 (T) add r2,r7,r3
080117AA (T) lsr r1,r0,20h
080117AC (T) add r6,r7,r3
080117AE (T) lsr r1,r0,20h
080117B0 (T) add r4,r3,r5
080117B2 (T) lsr r1,r0,20h
080117B4 (T) add r2,r6,r5
080117B6 (T) lsr r1,r0,20h
080117B8 (T) add r2,r7,r6
080117BA (T) lsr r1,r0,20h
080117BC (T) add r6,r3,r7
080117BE (T) lsr r1,r0,20h
080117C0 (T) sub r2,r0,r0
080117C2 (T) lsr r1,r0,20h
080117C4 (T) sub r2,r3,r0
080117C6 (T) lsr r1,r0,20h
080117C8 (T) sub r0,r0,r2
080117CA (T) lsr r1,r0,20h
080117CC (T) sub r2,r1,r2
080117CE (T) lsr r1,r0,20h
080117D0 (T) sub r2,r5,r2
080117D2 (T) lsr r1,r0,20h
080117D4 (T) sub r0,r3,r5
080117D6 (T) lsr r1,r0,20h
080117D8 (T) sub r6,r4,r5
080117DA (T) lsr r1,r0,20h
080117DC (T) sub r6,r6,r5
080117DE (T) lsr r1,r0,20h
// --------------------------------------------------------
// Sequence 00
080117E0 (T) mov r1,r9
080117E2 (T) add r1,7Ah
080117E4 (T) mov r2,0h
080117E6 (T) mov r0,0D0h // BLDCNT
080117E8 (T) strh r0,[r1]
080117EA (T) add r1,2h
080117EC (T) mov r0,10h // BLDY
080117EE (T) strh r0,[r1]
080117F0 (T) ldr r0,[r3]
080117F2 (T) str r2,[r0,4h] // reset frame index
080117F4 (T) mov r0,1h
080117F6 (T) mov r3,r10
080117F8 (T) str r0,[r3] // move to next sequence
080117FA (T) mov r0,0AFh
080117FC (T) bl m2_soundeffect // play title music
08011800 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 01
08011802 (T) ldr r3,[r3]
08011804 (T) ldr r0,[r3,4h]
08011806 (T) cmp r0,2h // Every 3 frames, bump the brightness
08011808 (T) bgt 801180Ch
0801180A (T) b 8011B8Ch
0801180C (T) mov r1,r9
0801180E (T) add r1,7Ch
08011810 (T) ldrh r0,[r1]
08011812 (T) sub r0,1h
08011814 (T) mov r2,0h
08011816 (T) strh r0,[r1]
08011818 (T) str r2,[r3,4h]
0801181A (T) ldrh r0,[r1]
0801181C (T) cmp r0,0h
0801181E (T) beq 8011822h
08011820 (T) b 8011B8Ch
08011822 (T) mov r0,2h
08011824 (T) mov r4,r10
08011826 (T) str r0,[r4]
08011828 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 02
0801182A (T) ldr r3,[r3]
0801182C (T) ldr r0,[r3,4h]
0801182E (T) cmp r0,2Ch
08011830 (T) bgt 8011834h
08011832 (T) b 8011B8Ch
08011834 (T) mov r0,0h
08011836 (T) str r0,[r3,4h]
08011838 (T) mov r1,0A6h
0801183A (T) lsl r1,r1,2h
0801183C (T) add r1,r9
0801183E (T) mov r2,0h
08011840 (T) mov r6,3h
08011842 (T) ldr r0,[r1,20h]
08011844 (T) str r0,[r1]
08011846 (T) str r2,[r1,10h]
08011848 (T) add r1,4h
0801184A (T) sub r6,1h
0801184C (T) cmp r6,0h
0801184E (T) bge 8011842h
08011850 (T) mov r0,3h
08011852 (T) mov r7,r10
08011854 (T) str r0,[r7]
08011856 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 03
08011858 (T) mov r6,0h
0801185A (T) mov r7,r13
0801185C (T) sub r7,4h
0801185E (T) mov r8,r9
08011860 (T) mov r3,0A2h
08011862 (T) lsl r3,r3,2h
08011864 (T) add r3,r9
08011866 (T) mov r5,r9
08011868 (T) add r5,88h
0801186A (T) ldr r0,[r3,10h]
0801186C (T) ldr r1,[r3]
0801186E (T) sub r0,r0,r1
08011870 (T) str r0,[r3,10h]
08011872 (T) ldr r1,=2FFFh
08011874 (T) cmp r0,r1
08011876 (T) bgt 801187Eh
08011878 (T) mov r0,0C0h
0801187A (T) lsl r0,r0,6h
0801187C (T) str r0,[r3,10h]
0801187E (T) ldr r1,[r3,20h]
08011880 (T) ldr r0,[r3,10h]
08011882 (T) add r1,r1,r0
08011884 (T) asr r2,r1,10h
08011886 (T) ldr r0,=0FFFFh
08011888 (T) and r1,r0
0801188A (T) str r1,[r3,20h]
0801188C (T) mov r4,84h
0801188E (T) lsl r4,r4,1h
08011890 (T) add r4,r8
08011892 (T) ldr r0,[r4,24h]
08011894 (T) sub r1,r0,r2
08011896 (T) str r1,[r4,24h]
08011898 (T) cmp r6,0h
0801189A (T) bne 80118ACh
0801189C (T) ldr r0,[r5,24h]
0801189E (T) add r0,r0,r2
080118A0 (T) str r0,[r5,24h]
080118A2 (T) b 80118C0h
080118A4 (T) cmp r7,0FFh
080118A6 (T) lsl r0,r0,0h
080118A8 (T) bl lr+0FFEh
080118AA (T) lsl r0,r0,0h
080118AC (T) mov r0,84h
080118AE (T) lsl r0,r0,1h
080118B0 (T) add r0,r9
080118B2 (T) ldr r2,[r0,24h]
080118B4 (T) sub r0,r1,r2
080118B6 (T) ldr r1,[r7]
080118B8 (T) cmp r0,r1
080118BA (T) bgt 80118C0h
080118BC (T) add r0,r2,r1
080118BE (T) str r0,[r4,24h]
080118C0 (T) add r7,4h
080118C2 (T) mov r0,40h
080118C4 (T) add r8,r0
080118C6 (T) add r3,4h
080118C8 (T) add r6,1h
080118CA (T) cmp r6,3h
080118CC (T) ble 801186Ah
080118CE (T) add r0,0C8h
080118D0 (T) add r0,r9
080118D2 (T) ldr r1,[r0,24h]
080118D4 (T) ldr r0,[sp,54h]
080118D6 (T) cmp r1,r0
080118D8 (T) blt 80118DCh
080118DA (T) b 8011B8Ch
080118DC (T) add r2,sp,2Ch
080118DE (T) mov r1,r9
080118E0 (T) add r1,0ACh
080118E2 (T) add r5,sp,4Ch
080118E4 (T) mov r6,7h
080118E6 (T) ldmia [r5]!,r0
080118E8 (T) str r0,[r1]
080118EA (T) ldmia [r2]!,r0
080118EC (T) str r0,[r1,4h]
080118EE (T) add r1,40h
080118F0 (T) sub r6,1h
080118F2 (T) cmp r6,0h
080118F4 (T) bge 80118E6h
080118F6 (T) mov r0,4h
080118F8 (T) b 80119D8h
// --------------------------------------------------------
// Sequence 04
080118FA (T) mov r0,5h
080118FC (T) b 8011B60h
// --------------------------------------------------------
// Sequence 05
080118FE (T) ldr r3,[r3]
08011900 (T) ldr r0,[r3,4h]
08011902 (T) cmp r0,3h
08011904 (T) bgt 8011908h
08011906 (T) b 8011B8Ch
08011908 (T) mov r0,0h
0801190A (T) str r0,[r3,4h]
0801190C (T) mov r2,r9
0801190E (T) add r2,7Eh
08011910 (T) ldrh r0,[r2]
08011912 (T) add r1,r0,1
08011914 (T) strh r1,[r2]
08011916 (T) lsl r0,r1,10h
08011918 (T) asr r0,r0,10h
0801191A (T) cmp r0,7h
0801191C (T) ble 801193Ch
0801191E (T) mov r0,6h
08011920 (T) mov r3,r10
08011922 (T) str r0,[r3]
08011924 (T) mov r4,r9
08011926 (T) ldr r0,[r4,4h]
08011928 (T) str r0,[r7,8h]
0801192A (T) ldr r0,=5000200h
0801192C (T) str r0,[r7,0Ch]
0801192E (T) mov r0,20h
08011930 (T) str r0,[r7,10h]
08011932 (T) mov r0,1h
08011934 (T) str r0,[r7,4h]
08011936 (T) b 8011B4Ch
08011938 (T) lsl r0,r0,8h
0801193A (T) lsl r0,r0,14h
0801193C (T) mov r0,3h
0801193E (T) and r1,r0
08011940 (T) lsl r1,r1,5h
08011942 (T) mov r2,r9
08011944 (T) ldr r0,[r2,0Ch]
08011946 (T) add r0,r0,r1
08011948 (T) str r0,[r7,8h]
0801194A (T) ldr r0,=5000200h
0801194C (T) str r0,[r7,0Ch]
0801194E (T) mov r0,20h
08011950 (T) str r0,[r7,10h]
08011952 (T) mov r0,1h
08011954 (T) str r0,[r7,4h]
08011956 (T) b 8011B4Ch
08011958 (T) lsl r0,r0,8h
0801195A (T) lsl r0,r0,14h
// --------------------------------------------------------
// Sequence 06
0801195C (T) ldr r3,[r3]
0801195E (T) ldr r0,[r3,4h]
08011960 (T) cmp r0,2Ch
08011962 (T) bgt 8011966h
08011964 (T) b 8011B8Ch
08011966 (T) mov r0,7h
08011968 (T) mov r4,r10
0801196A (T) str r0,[r4]
0801196C (T) mov r0,0h
0801196E (T) str r0,[r3,4h]
08011970 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 07
08011972 (T) ldr r0,[r3]
08011974 (T) ldr r0,[r0,4h]
08011976 (T) cmp r0,1h
08011978 (T) bgt 801197Ch
0801197A (T) b 8011B8Ch
0801197C (T) mov r2,r9
0801197E (T) add r2,88h
08011980 (T) mov r1,r9
08011982 (T) add r1,0B0h
08011984 (T) mov r6,7h
08011986 (T) ldr r0,[r1]
08011988 (T) sub r0,1h
0801198A (T) str r0,[r1]
0801198C (T) add r1,40h
0801198E (T) sub r6,1h
08011990 (T) cmp r6,0h
08011992 (T) bge 8011986h
08011994 (T) ldr r1,[r2,28h]
08011996 (T) ldr r0,[sp,0Ch]
08011998 (T) cmp r1,r0
0801199A (T) ble 801199Eh
0801199C (T) b 8011B8Ch
0801199E (T) mov r2,r8
080119A0 (T) mov r1,r9
080119A2 (T) add r1,88h
080119A4 (T) mov r6,7h
080119A6 (T) ldmia [r2]!,r0
080119A8 (T) str r0,[r1,28h]
080119AA (T) add r1,40h
080119AC (T) sub r6,1h
080119AE (T) cmp r6,0h
080119B0 (T) bge 80119A6h
080119B2 (T) mov r6,8h
080119B4 (T) mov r7,r10
080119B6 (T) str r6,[r7]
080119B8 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 08
// Clear BLDCNT
080119BA (T) mov r1,r9
080119BC (T) add r1,7Ah
080119BE (T) mov r2,0h
080119C0 (T) mov r0,0C3h
080119C2 (T) strh r0,[r1]
// Enable BG0/OBJ
080119C4 (T) sub r1,2h
080119C6 (T) mov r0,88h
080119C8 (T) lsl r0,r0,5h
080119CA (T) strh r0,[r1]
080119CC (T) add r1,4h
080119CE (T) mov r0,10h
080119D0 (T) strh r0,[r1]
080119D2 (T) ldr r0,[r3]
080119D4 (T) str r2,[r0,4h]
080119D6 (T) mov r0,9h
080119D8 (T) mov r1,r10
080119DA (T) str r0,[r1]
080119DC (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 09
080119DE (T) ldr r3,[r3]
080119E0 (T) ldr r0,[r3,4h]
080119E2 (T) cmp r0,9h
080119E4 (T) bgt 80119E8h
080119E6 (T) b 8011B8Ch
080119E8 (T) mov r1,r9
080119EA (T) add r1,7Ch
080119EC (T) ldrh r0,[r1]
080119EE (T) sub r0,1h
080119F0 (T) mov r2,0h
080119F2 (T) strh r0,[r1]
080119F4 (T) str r2,[r3,4h]
080119F6 (T) ldrh r0,[r1]
080119F8 (T) cmp r0,0h
080119FA (T) beq 80119FEh
080119FC (T) b 8011B8Ch
080119FE (T) mov r0,0Ah
08011A00 (T) b 8011B60h
// --------------------------------------------------------
// Sequence 0A
08011A02 (T) mov r0,0Bh
08011A04 (T) mov r4,r10
08011A06 (T) str r0,[r4]
08011A08 (T) mov r0,r9
08011A0A (T) add r0,7Eh
08011A0C (T) mov r1,0h
08011A0E (T) strh r1,[r0]
08011A10 (T) add r0,2h
08011A12 (T) strh r1,[r0]
08011A14 (T) ldr r0,[r3]
08011A16 (T) str r1,[r0,4h]
08011A18 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 0B
08011A1A (T) ldr r3,[r3]
08011A1C (T) ldr r0,[r3,4h]
08011A1E (T) cmp r0,3h
08011A20 (T) bgt 8011A24h
08011A22 (T) b 8011B8Ch
08011A24 (T) mov r0,0h
08011A26 (T) str r0,[r3,4h]
08011A28 (T) mov r0,7Eh
08011A2A (T) add r0,r9
08011A2C (T) mov r8,r0
08011A2E (T) ldrh r0,[r0]
08011A30 (T) add r0,1h
08011A32 (T) mov r1,r8
08011A34 (T) strh r0,[r1]
08011A36 (T) mov r1,r9
08011A38 (T) add r1,80h
08011A3A (T) ldrh r0,[r1]
08011A3C (T) add r2,r0,1
08011A3E (T) strh r2,[r1]
08011A40 (T) mov r3,r8
08011A42 (T) mov r4,0h
08011A44 (T) ldsh r0,[r3,r4]
08011A46 (T) cmp r0,7h
08011A48 (T) ble 8011B10h
08011A4A (T) mov r0,0Ch
08011A4C (T) mov r1,r10
08011A4E (T) str r0,[r1]
08011A50 (T) mov r2,r9
08011A52 (T) ldr r0,[r2]
08011A54 (T) str r0,[r7,8h]
08011A56 (T) mov r0,0A0h
08011A58 (T) lsl r0,r0,13h
08011A5A (T) str r0,[r7,0Ch]
08011A5C (T) mov r5,20h
08011A5E (T) str r5,[r7,10h]
08011A60 (T) mov r4,1h
08011A62 (T) str r4,[r7,4h]
08011A64 (T) mov r0,r7
08011A66 (T) bl 8005D5Ch
08011A6A (T) add r7,14h
08011A6C (T) mov r3,r9
08011A6E (T) ldr r0,[r3,4h]
08011A70 (T) str r0,[r7,8h]
08011A72 (T) ldr r0,=5000200h
08011A74 (T) str r0,[r7,0Ch]
08011A76 (T) str r5,[r7,10h]
08011A78 (T) str r4,[r7,4h]
08011A7A (T) b 8011B4Ch
08011A7C (T) lsl r0,r0,8h
08011A7E (T) lsl r0,r0,14h
// --------------------------------------------------------
// Sequence 0C
08011A80 (T) ldr r0,[r3]
08011A82 (T) mov r1,0h
08011A84 (T) str r1,[r0,4h]
08011A86 (T) mov r0,0Dh
08011A88 (T) b 8011B60h
// --------------------------------------------------------
// Sequence 0D
08011A8A (T) ldr r3,[r3]
08011A8C (T) ldr r0,[r3,4h]
08011A8E (T) cmp r0,0EFh
08011A90 (T) bgt 8011A94h
08011A92 (T) b 8011B8Ch
08011A94 (T) mov r0,0Eh
08011A96 (T) mov r4,r10
08011A98 (T) str r0,[r4]
08011A9A (T) mov r1,r9
08011A9C (T) add r1,7Eh
08011A9E (T) mov r0,0h
08011AA0 (T) strh r0,[r1]
08011AA2 (T) add r1,2h
08011AA4 (T) strh r0,[r1]
08011AA6 (T) str r0,[r3,4h]
08011AA8 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 0E
08011AAA (T) ldr r3,[r3]
08011AAC (T) ldr r0,[r3,4h]
08011AAE (T) cmp r0,3h
08011AB0 (T) ble 8011B8Ch
08011AB2 (T) mov r0,0h
08011AB4 (T) str r0,[r3,4h]
08011AB6 (T) mov r0,7Eh
08011AB8 (T) add r0,r9
08011ABA (T) mov r8,r0
08011ABC (T) ldrh r0,[r0]
08011ABE (T) add r0,1h
08011AC0 (T) mov r1,r8
08011AC2 (T) strh r0,[r1]
08011AC4 (T) mov r1,r9
08011AC6 (T) add r1,80h
08011AC8 (T) ldrh r0,[r1]
08011ACA (T) add r2,r0,1
08011ACC (T) strh r2,[r1]
08011ACE (T) mov r3,r8
08011AD0 (T) mov r4,0h
08011AD2 (T) ldsh r0,[r3,r4]
08011AD4 (T) cmp r0,7h
08011AD6 (T) ble 8011B10h
08011AD8 (T) mov r0,0Fh
08011ADA (T) mov r1,r10
08011ADC (T) str r0,[r1]
08011ADE (T) mov r2,r9
08011AE0 (T) ldr r0,[r2]
08011AE2 (T) str r0,[r7,8h]
08011AE4 (T) mov r0,0A0h
08011AE6 (T) lsl r0,r0,13h
08011AE8 (T) str r0,[r7,0Ch]
08011AEA (T) mov r5,20h
08011AEC (T) str r5,[r7,10h]
08011AEE (T) mov r4,1h
08011AF0 (T) str r4,[r7,4h]
08011AF2 (T) mov r0,r7
08011AF4 (T) bl 8005D5Ch
08011AF8 (T) add r7,14h
08011AFA (T) mov r3,r9
08011AFC (T) ldr r0,[r3,4h]
08011AFE (T) str r0,[r7,8h]
08011B00 (T) ldr r0,=5000200h
08011B02 (T) str r0,[r7,0Ch]
08011B04 (T) str r5,[r7,10h]
08011B06 (T) str r4,[r7,4h]
08011B08 (T) b 8011B4Ch
08011B0A (T) lsl r0,r0,0h
08011B0C (T) lsl r0,r0,8h
08011B0E (T) lsl r0,r0,14h
08011B10 (T) mov r4,3h
08011B12 (T) and r2,r4
08011B14 (T) lsl r1,r2,5h
08011B16 (T) mov r2,r9
08011B18 (T) ldr r0,[r2,8h]
08011B1A (T) add r0,r0,r1
08011B1C (T) str r0,[r7,8h]
08011B1E (T) mov r0,0A0h
08011B20 (T) lsl r0,r0,13h
08011B22 (T) str r0,[r7,0Ch]
08011B24 (T) mov r6,20h
08011B26 (T) str r6,[r7,10h]
08011B28 (T) mov r5,1h
08011B2A (T) str r5,[r7,4h]
08011B2C (T) mov r0,r7
08011B2E (T) bl 8005D5Ch
08011B32 (T) add r7,14h
08011B34 (T) mov r3,r8
08011B36 (T) ldrh r0,[r3]
08011B38 (T) and r4,r0
08011B3A (T) lsl r4,r4,5h
08011B3C (T) mov r1,r9
08011B3E (T) ldr r0,[r1,0Ch]
08011B40 (T) add r0,r0,r4
08011B42 (T) str r0,[r7,8h]
08011B44 (T) ldr r0,=5000200h
08011B46 (T) str r0,[r7,0Ch]
08011B48 (T) str r6,[r7,10h]
08011B4A (T) str r5,[r7,4h]
08011B4C (T) mov r0,r7
08011B4E (T) bl 8005D5Ch
08011B52 (T) b 8011B8Ch
08011B54 (T) lsl r0,r0,8h
08011B56 (T) lsl r0,r0,14h
// --------------------------------------------------------
// Sequence 0F
08011B58 (T) ldr r0,[r3]
08011B5A (T) mov r1,0h
08011B5C (T) str r1,[r0,4h]
08011B5E (T) mov r0,10h
08011B60 (T) mov r2,r10
08011B62 (T) str r0,[r2]
08011B64 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 10
08011B66 (T) ldr r0,[r3]
08011B68 (T) ldr r0,[r0,4h]
08011B6A (T) cmp r0,63h
08011B6C (T) ble 8011B8Ch
08011B6E (T) mov r0,11h
08011B70 (T) mov r3,r10
08011B72 (T) str r0,[r3]
08011B74 (T) b 8011B8Ch
// --------------------------------------------------------
// Sequence 11
08011B76 (T) ldr r1,=30012D0h
08011B78 (T) ldr r0,=80B6F81h
08011B7A (T) str r0,[r1]
08011B7C (T) mov r0,1h
08011B7E (T) neg r0,r0
08011B80 (T) b 8011BE6h
08011B82 (T) lsl r0,r0,0h
08011B84 (T) asr r0,r2,0Bh
08011B86 (T) lsl r0,r0,0Ch
08011B88 (T) ldr r1,[r0,78h]
08011B8A (T) lsr r3,r1,20h
08011B8C (T) mov r5,r9
08011B8E (T) add r5,7Ch
08011B90 (T) mov r4,r9
08011B92 (T) add r4,88h
08011B94 (T) mov r6,5h
08011B96 (T) mov r0,r4
08011B98 (T) bl 8008BB0h
08011B9C (T) mov r0,r4
08011B9E (T) mov r1,0h
08011BA0 (T) bl 8008C54h
08011BA4 (T) add r4,40h
08011BA6 (T) sub r6,1h
08011BA8 (T) cmp r6,0h
08011BAA (T) bge 8011B96h
08011BAC (T) mov r4,r10
08011BAE (T) ldr r0,[r4]
08011BB0 (T) cmp r0,9h
08011BB2 (T) ble 8011BDCh
08011BB4 (T) mov r4,82h
08011BB6 (T) lsl r4,r4,2h
08011BB8 (T) add r4,r9
08011BBA (T) mov r0,r4
08011BBC (T) bl 8008BB0h
08011BC0 (T) mov r0,r4
08011BC2 (T) mov r1,0h
08011BC4 (T) bl 8008C54h
08011BC8 (T) mov r4,92h
08011BCA (T) lsl r4,r4,2h
08011BCC (T) add r4,r9
08011BCE (T) mov r0,r4
08011BD0 (T) bl 8008BB0h
08011BD4 (T) mov r0,r4
08011BD6 (T) mov r1,0h
08011BD8 (T) bl 8008C54h
08011BDC (T) ldr r0,=3000370h
08011BDE (T) ldr r1,[r0]
08011BE0 (T) ldrh r0,[r5]
08011BE2 (T) str r0,[r1,0Ch]
08011BE4 (T) mov r0,0h
08011BE6 (T) add sp,94h
08011BE8 (T) pop r3-r5
08011BEA (T) mov r8,r3
08011BEC (T) mov r9,r4
08011BEE (T) mov r10,r5
08011BF0 (T) pop r4-r7
08011BF2 (T) pop r1
08011BF4 (T) bx r1
//=============================================================================
// $8011499: (Commit)
08011498 (T) push r4,r14
0801149A (T) add sp,-4h
0801149C (T) ldr r0,=3000370h
0801149E (T) ldr r0,[r0]
080114A0 (T) ldr r4,[r0,14h]
080114A2 (T) ldr r0,=3002570h
080114A4 (T) ldr r1,[r0]
080114A6 (T) ldr r0,=3002A30h
080114A8 (T) ldr r2,[r0]
080114AA (T) lsl r0,r1,1h
080114AC (T) add r0,r0,r1
080114AE (T) lsl r0,r0,4h
080114B0 (T) add r1,r0,r2
080114B2 (T) ldrb r0,[r1,8h] // already-executed flag
080114B4 (T) cmp r0,0h
080114B6 (T) bne 80114D0h
// If first run:
080114B8 (T) bl 8000454h // check pad input
080114BC (T) bl 8005D50h // clears some flag
080114C0 (T) b 801156Eh // return
080114C2 (T) lsl r0,r0,0h
080114C4 (T) lsl r0,r6,0Dh
080114C6 (T) lsl r0,r0,0Ch
080114C8 (T) mov r5,70h
080114CA (T) lsl r0,r0,0Ch
080114CC (T) cmp r2,30h
080114CE (T) lsl r0,r0,0Ch
// If not the first run:
080114D0 (T) ldrb r0,[r1,0Bh]
080114D2 (T) cmp r0,1h
080114D4 (T) bne 80114DCh
// If last run:
080114D6 (T) bl 8000C28h // tear-down
080114DA (T) b 801156Eh // return
// If neither first nor last run:
080114DC (T) bl 80F47E4h // wait for vblank
// Set BG0 and BG1 scrolling offsets
080114E0 (T) ldr r1,=4000010h
080114E2 (T) ldr r0,=3001B20h
080114E4 (T) ldrh r0,[r0]
080114E6 (T) strh r0,[r1] // BG0OFSa
080114E8 (T) add r1,2h
080114EA (T) ldr r0,=30012DCh
080114EC (T) ldrh r0,[r0]
080114EE (T) strh r0,[r1] // BG0OFSb
080114F0 (T) add r1,2h
080114F2 (T) ldr r0,=3001D30h
080114F4 (T) ldrh r0,[r0]
080114F6 (T) strh r0,[r1] // BG1OFSa
080114F8 (T) add r1,2h
080114FA (T) ldr r0,=30012E8h
080114FC (T) ldrh r0,[r0]
080114FE (T) strh r0,[r1] // BG1OFSb
08011500 (T) mov r0,r4
08011502 (T) add r0,84h // r0 = 0x20280AC
08011504 (T) ldr r0,[r0] // sequence number
08011506 (T) cmp r0,1h
08011508 (T) blt 8011536h
0801150A (T) cmp r0,2h
0801150C (T) ble 8011522h
0801150E (T) cmp r0,0Ah
08011510 (T) bgt 8011536h
08011512 (T) cmp r0,9h
08011514 (T) blt 8011536h
// If on sequence 9-A:
// Copy DISPCNT
08011516 (T) mov r1,80h
08011518 (T) lsl r1,r1,13h // r1 = 0x4000000 (DISPCNT)
0801151A (T) mov r0,r4
0801151C (T) add r0,78h // r0 = 0x20280A0
0801151E (T) ldrh r0,[r0]
08011520 (T) strh r0,[r1]
// If on sequence 1-2 or 9-A:
// Copy BLDCNT and BLDY
08011522 (T) ldr r1,=4000050h // BLDCNT (special effects)
08011524 (T) mov r0,r4
08011526 (T) add r0,7Ah // r0 = 0x20280A2
08011528 (T) ldrh r0,[r0]
0801152A (T) strh r0,[r1]
0801152C (T) add r1,4h // BLDY (brightness amount)
0801152E (T) mov r0,r4
08011530 (T) add r0,7Ch // r0 = 0x20280A4
08011532 (T) ldrh r0,[r0]
08011534 (T) strh r0,[r1]
// For all sequences:
// Copy OAM data
08011536 (T) ldr r1,=40000D4h
08011538 (T) ldr r2,=30033A0h // OAM buffer
0801153A (T) str r2,[r1]
0801153C (T) mov r0,0E0h
0801153E (T) lsl r0,r0,13h // r0 = 0x7000000
08011540 (T) str r0,[r1,4h]
08011542 (T) ldr r0,=84000100h
08011544 (T) str r0,[r1,8h]
08011546 (T) ldr r0,[r1,8h]
// Blank out OAM data
08011548 (T) mov r0,0A0h
0801154A (T) str r0,[sp]
0801154C (T) mov r0,r13
0801154E (T) str r0,[r1]
08011550 (T) str r2,[r1,4h]
08011552 (T) ldr r0,=85000100h
08011554 (T) str r0,[r1,8h]
08011556 (T) ldr r0,[r1,8h]
// ?
08011558 (T) ldr r0,=3003390h
0801155A (T) mov r1,0h
0801155C (T) str r1,[r0]
0801155E (T) ldr r0,=3003394h
08011560 (T) str r1,[r0]
08011562 (T) bl 8005D6Ch // perform DMAs
08011566 (T) bl 800E5E4h // something with input
0801156A (T) bl 8000454h // something else with input
0801156E (T) mov r0,0h
08011570 (T) add sp,4h
08011572 (T) pop r4
08011574 (T) pop r1
08011576 (T) bx r1
//=============================================================================
// $8011495: (End)
08011494 (T) movs r0,0h
08011496 (T) bx r14