;;; InGame/Demo ;;; { 0800DD24 (T) push r4,r14 0800DD26 (T) bl InGame_SetV-Blank 0800DD2A (T) mov r4,0h 0800DD2C (T) ldr r0,=SubGameMode2 ;\ 0800DD2E (T) mov r1,0h ;| 0800DD30 (T) ldsh r0,[r0,r1] ;| 0800DD32 (T) cmp r0,6h ;| 0800DD34 (T) bls 800DD38h ;| 0800DD36 (T) b 800DEB8h ;| ;} Execute sub-game mode 2 dependant code 0800DD38 (T) lsl r0,r0,2h ;| 0800DD3A (T) ldr r1,=800DD4Ch ;| 0800DD3C (T) add r0,r0,r1 ;| 0800DD3E (T) ldr r0,[r0] ;| 0800DD40 (T) mov r15,r0 ;/ 0800DD42 dw 00000h 0800DD44 dd 003000BE0h,00800DD4Ch,00800DD68h,00800DDA0h 0800DD54 dd 00800DDD8h,00800DE5Eh,00800DE94h,00800DE9Ah 0800DD64 dd 00800DEB0h ; Sub-game mode 2 == 0 0800DD68 (T) ldr r0,=3000BE3h 0800DD6A (T) ldrb r0,[r0] 0800DD6C (T) lsl r0,r0,18h 0800DD6E (T) asr r0,r0,18h 0800DD70 (T) cmp r0,0h 0800DD72 (T) bne 800DD78h 0800DD74 (T) bl 800CB4Ch 0800DD78 (T) ldr r0,=3001242h 0800DD7A (T) ldrb r0,[r0] 0800DD7C (T) cmp r0,2h 0800DD7E (T) bne 800DD84h 0800DD80 (T) bl 800CB18h 0800DD84 (T) bl 800E420h 0800DD88 (T) ldr r1,=300147Ch 0800DD8A (T) ldrb r0,[r1,2h] 0800DD8C (T) cmp r0,0h 0800DD8E (T) bne 800DDC8h 0800DD90 (T) strb r0,[r1] 0800DD92 (T) b 800DDC8h 0800DD94 dd 003000BE3h,003001242h,00300147Ch ; Sub-game mode 2 == 1 0800DDA0 (T) bl 80686E0h 0800DDA4 (T) bl 806E3C0h 0800DDA8 (T) cmp r0,0h 0800DDAA (T) bne 800DDAEh 0800DDAC (T) b 800DEB8h 0800DDAE (T) ldr r0,=300147Ch 0800DDB0 (T) ldrb r0,[r0,2h] 0800DDB2 (T) cmp r0,0h 0800DDB4 (T) beq 800DDC8h 0800DDB6 (T) ldr r1,=SubGameMode2 0800DDB8 (T) mov r0,4h 0800DDBA (T) strh r0,[r1] 0800DDBC (T) b 800DEB8h 0800DDBE dw 00000h 0800DDC0 dd 00300147Ch,003000BE0h 0800DDC8 (T) ldr r1,=SubGameMode2 0800DDCA (T) ldrh r0,[r1] 0800DDCC (T) add r0,1h 0800DDCE (T) strh r0,[r1] 0800DDD0 (T) b 800DEB8h 0800DDD2 dw 00000h 0800DDD4 dd 003000BE0h ; Sub-game mode 2 == 2 (in-game) 0800DDD8 (T) bl Play/RecordDemo 0800DDDC (T) bl 80686E0h ; Updates window, blend, update palettes and level data 0800DDE0 (T) ldr r0,=ChangedInput ;\ 0800DDE2 (T) ldr r1,=StartButton ;| 0800DDE4 (T) ldrh r2,[r0] ;| 0800DDE6 (T) ldrh r0,[r1,6h] ;} If pressed start: 0800DDE8 (T) and r0,r2 ;| 0800DDEA (T) cmp r0,0h ;| 0800DDEC (T) beq 800DE04h ;/ 0800DDEE (T) bl 8068870h ; 0800DDF2 (T) cmp r0,0h ; 0800DDF4 (T) beq 800DE04h ; 0800DDF6 (T) ldr r1,=SubGameMode2 ;\ 0800DDF8 (T) ldrh r0,[r1] ;| 0800DDFA (T) add r0,1h ;| 0800DDFC (T) strh r0,[r1] ;} 0800DDFE (T) ldr r1,=SubGameModeB84 ;| 0800DE00 (T) mov r0,2h ;| 0800DE02 (T) strb r0,[r1] ;/ 0800DE04 (T) ldr r0,=SubGameMode2 0800DE06 (T) mov r1,0h 0800DE08 (T) ldsh r0,[r0,r1] 0800DE0A (T) cmp r0,2h 0800DE0C (T) bne 800DE54h 0800DE0E (T) ldr r0,=ButtonInput ;\ 0800DE10 (T) ldrh r1,[r0] ;| 0800DE12 (T) mov r0,40h ;| 0800DE14 (T) and r0,r1 ;} If not pressing up: 0800DE16 (T) cmp r0,0h ;| 0800DE18 (T) bne 800DE20h ;/ 0800DE1A (T) ldr r1,=3004D1Ch ;\ 0800DE1C (T) mov r0,1h ;} 3004D1C = 1 0800DE1E (T) strb r0,[r1] ;/ 0800DE20 (T) ldr r1,=3001348h 0800DE22 (T) ldrh r0,[r1] 0800DE24 (T) cmp r0,0h 0800DE26 (T) beq 800DE4Ch 0800DE28 (T) sub r0,1h 0800DE2A (T) strh r0,[r1] 0800DE2C (T) b 800DE54h 0800DE2E dw 00000h 0800DE30 dd 0030011ECh,003001450h,003000BE0h,003000B84h 0800DE40 dd 0030011E8h,003004D1Ch,003001348h 0800DE4C (T) bl 8004E68h 0800DE50 (T) bl 8004FECh 0800DE54 (T) bl 8068660h 0800DE58 (T) bl 80659A0h 0800DE5C (T) b 800DEB8h ; Sub-game mode 2 == 3 0800DE5E (T) bl 8068790h 0800DE62 (T) bl 806E4BCh 0800DE66 (T) cmp r0,0h 0800DE68 (T) beq 800DEB8h 0800DE6A (T) ldr r1,=SubGameMode2 0800DE6C (T) mov r0,0h 0800DE6E (T) strh r0,[r1] 0800DE70 (T) ldr r0,=SubGameModeB84 0800DE72 (T) ldrb r0,[r0] 0800DE74 (T) lsl r0,r0,18h 0800DE76 (T) asr r0,r0,18h 0800DE78 (T) cmp r0,0h 0800DE7A (T) bne 800DE84h 0800DE7C (T) ldr r0,=3000BDCh 0800DE7E (T) ldrb r0,[r0] 0800DE80 (T) cmp r0,0h 0800DE82 (T) beq 800DEB8h 0800DE84 (T) mov r4,1h 0800DE86 (T) b 800DEB8h 0800DE88 dd 003000BE0h,003000B84h,003000BDCh ; Sub-game mode 2 == 4 0800DE94 (T) bl 800D638h 0800DE98 (T) b 800DEB8h ; Sub-game mode 2 == 5 0800DE9A (T) bl 80686E0h 0800DE9E (T) bl 8004E68h 0800DEA2 (T) bl 800C594h 0800DEA6 (T) bl 80050A4h 0800DEAA (T) bl 80659A0h 0800DEAE (T) b 800DEB8h ; Sub-game mode 2 == 6 0800DEB0 (T) bl 800E684h 0800DEB4 (T) bl 80659A0h ; Sub-game mode 2 independant code 0800DEB8 (T) ldr r0,=SubGameMode2 0800DEBA (T) ldrh r1,[r0] 0800DEBC (T) sub r0,r1,4 0800DEBE (T) lsl r0,r0,10h 0800DEC0 (T) lsr r0,r0,10h 0800DEC2 (T) cmp r0,1h 0800DEC4 (T) bls 800DECEh 0800DEC6 (T) ldr r0,=300147Ch 0800DEC8 (T) ldrb r0,[r0] 0800DECA (T) cmp r0,0h 0800DECC (T) beq 800DEE0h 0800DECE (T) bl ResetFreeOAM 0800DED2 (T) bl 8065C48h 0800DED6 (T) b 800DF48h 0800DED8 dd 003000BE0h,00300147Ch 0800DEE0 (T) lsl r0,r1,10h 0800DEE2 (T) cmp r0,0h 0800DEE4 (T) beq 800DF48h 0800DEE6 (T) bl 8065B0Ch 0800DEEA (T) bl 800E7E8h 0800DEEE (T) ldr r0,=300134Ah 0800DEF0 (T) ldrb r0,[r0] 0800DEF2 (T) cmp r0,0h 0800DEF4 (T) bne 800DF04h 0800DEF6 (T) bl 8069ED0h 0800DEFA (T) bl 80050A4h 0800DEFE (T) b 800DF10h 0800DF00 dd 00300134Ah 0800DF04 (T) ldr r0,=3000021h 0800DF06 (T) ldrb r0,[r0] 0800DF08 (T) cmp r0,2h 0800DF0A (T) bne 800DF10h 0800DF0C (T) bl 8069ED0h 0800DF10 (T) bl 80812F0h 0800DF14 (T) bl 8072768h 0800DF18 (T) bl 800EB04h 0800DF1C (T) bl 8073000h 0800DF20 (T) bl 80819A0h 0800DF24 (T) bl 800EBA0h 0800DF28 (T) ldr r0,=300134Ah 0800DF2A (T) ldrb r0,[r0] 0800DF2C (T) cmp r0,0h 0800DF2E (T) bne 800DF34h 0800DF30 (T) bl 800C594h 0800DF34 (T) bl 800EC38h 0800DF38 (T) bl 80819ECh 0800DF3C (T) bl ResetFreeOAM 0800DF40 (T) bl 8065C48h 0800DF44 (T) bl 80050E8h 0800DF48 (T) mov r0,r4 0800DF4A (T) pop r4 0800DF4C (T) pop r1 0800DF4E (T) bx r1 0800DF50 dd 003000021h,00300134Ah } ;;; InGame_SetV-Blank ;;; { 0800DF58 (T) push r14 0800DF5A (T) ldr r0,=SubGameMode2 ;\ 0800DF5C (T) mov r1,0h ;| 0800DF5E (T) ldsh r0,[r0,r1] ;| 0800DF60 (T) cmp r0,2h ;| 0800DF62 (T) beq 800DF84h ;| 0800DF64 (T) cmp r0,2h ;| 0800DF66 (T) bgt 800DF74h ;| 0800DF68 (T) cmp r0,0h ;| 0800DF6A (T) blt 800DF84h ;} Execute sub-game mode 2 dependant code 0800DF6C (T) b 800DF78h ;| ;| 0800DF6E dw 00000h ;| 0800DF70 dd 003000BE0h ;| ;| 0800DF74 (T) cmp r0,3h ;| 0800DF76 (T) bne 800DF84h ;/ ; 0, 1 or 3 (door transitioning) 0800DF78 (T) ldr r0,=800E11Dh ; InGame_V-Blank_BLDCNT 0800DF7A (T) bl SetVBlankCode 0800DF7E (T) b 800DF8Ah 0800DF80 dd 00800E11Dh ; Else 0800DF84 (T) ldr r0,=800E2E9h ; InGame_V-Blank_MOSAIC 0800DF86 (T) bl SetVBlankCode 0800DF8A (T) pop r0 0800DF8C (T) bx r0 0800DF8E dw 00000h 0800DF90 dd 00800E2E9h } ;;; InGame_V-Blank_BLDCNT ;;; { 0800E11C (T) push r4-r7,r14 0800E11E (T) add sp,-4h 0800E120 (T) ldr r3,=40000D4h ;\ 0800E122 (T) ldr r0,=OAMData ;| 0800E124 (T) str r0,[r3] ;| 0800E126 (T) mov r0,0E0h ;| 0800E128 (T) lsl r0,r0,13h ;} Update OAM 0800E12A (T) str r0,[r3,4h] ;| 0800E12C (T) ldr r0,=84000100h ;| 0800E12E (T) str r0,[r3,8h] ;| 0800E130 (T) ldr r0,[r3,8h] ;/ 0800E132 (T) ldr r6,=3000068h ;\ 0800E134 (T) ldrb r1,[r6,7h] ;| 0800E136 (T) mov r0,80h ;| 0800E138 (T) and r0,r1 ;} If [300006F] & 80h: 0800E13A (T) cmp r0,0h ;| 0800E13C (T) beq 800E1BCh ;/ 0800E13E (T) ldr r2,=40000B0h ;\ 0800E140 (T) ldr r7,=2024000h ;| 0800E142 (T) str r7,[r2] ;| 0800E144 (T) ldr r5,[r6] ;| 0800E146 (T) str r5,[r2,4h] ;| 0800E148 (T) ldrb r0,[r6,6h] ;} DMA [300006E] colours from 2024000 to [3000068] 0800E14A (T) lsr r0,r0,1h ;| 0800E14C (T) ldr r1,=80600000h ;| 0800E14E (T) orr r0,r1 ;| 0800E150 (T) str r0,[r2,8h] ;| 0800E152 (T) ldr r0,[r2,8h] ;/ 0800E154 (T) mov r0,r13 ;\ 0800E156 (T) mov r4,0h ;| 0800E158 (T) strb r4,[r0] ;| 0800E15A (T) strb r4,[r0] ;| 0800E15C (T) strb r4,[r0] ;| 0800E15E (T) strb r4,[r0] ;| 0800E160 (T) str r7,[r2] ;| 0800E162 (T) str r5,[r2,4h] ;| 0800E164 (T) ldrb r0,[r6,6h] ;} Nothing. Bizarre... 0800E166 (T) lsr r0,r0,1h ;| 0800E168 (T) mov r1,0C0h ;| 0800E16A (T) lsl r1,r1,0Fh ;| 0800E16C (T) orr r0,r1 ;| 0800E16E (T) str r0,[r2,8h] ;| 0800E170 (T) ldr r0,[r2,8h] ;| 0800E172 (T) mov r0,r13 ;| 0800E174 (T) strb r4,[r0] ;/ 0800E176 (T) ldr r0,=VBlankRequestFlag ;\ 0800E178 (T) ldrh r0,[r0] ;| 0800E17A (T) mov r1,1h ;| 0800E17C (T) and r1,r0 ;| 0800E17E (T) ldrb r0,[r6,6h] ;} If V-blank request flag not set: 0800E180 (T) mov r12,r0 ;| 0800E182 (T) cmp r1,0h ;| 0800E184 (T) bne 800E1A8h ;/ 0800E186 (T) mov r0,r13 0800E188 (T) strb r1,[r0] 0800E18A (T) ldr r0,=2024A00h ;\ 0800E18C (T) str r0,[r3] ;| 0800E18E (T) str r7,[r3,4h] ;| 0800E190 (T) ldrh r0,[r6,4h] ;| 0800E192 (T) lsr r0,r0,1h ;| 0800E194 (T) mov r1,80h ;} DMA [300006C] colours from 2024A00 to 2024000 0800E196 (T) lsl r1,r1,18h ;| 0800E198 (T) orr r0,r1 ;| 0800E19A (T) str r0,[r3,8h] ;| 0800E19C (T) ldr r0,[r3,8h] ;/ 0800E19E (T) mov r1,0A0h ;\ 0800E1A0 (T) lsl r1,r1,13h ;| 0800E1A2 (T) ldr r0,=TransparentColour ;} Update transparent colour 0800E1A4 (T) ldrh r0,[r0] ;| 0800E1A6 (T) strh r0,[r1] ;/ 0800E1A8 (T) mov r0,r13 0800E1AA (T) strb r4,[r0] 0800E1AC (T) str r7,[r2] ;\ 0800E1AE (T) str r5,[r2,4h] ;| 0800E1B0 (T) mov r1,r12 ;| 0800E1B2 (T) lsr r0,r1,1h ;| 0800E1B4 (T) ldr r1,=0A2600000h ;} HDMA [300006E] colours from 2024000 to [3000068] 0800E1B6 (T) orr r0,r1 ;| 0800E1B8 (T) str r0,[r2,8h] ;| 0800E1BA (T) ldr r0,[r2,8h] ;/ 0800E1BC (T) mov r0,0h ;\ 0800E1BE (T) bl 800DF94h ;} Update Samus and SA-X sprite tiles 0800E1C2 (T) ldr r2,=BLDCNT ;\ 0800E1C4 (T) ldrh r1,[r2] ;| 0800E1C6 (T) cmp r1,0h ;} If WRAM BLDCNT: 0800E1C8 (T) beq 800E1D2h ;/ 0800E1CA (T) ldr r0,=4000050h ;\ 0800E1CC (T) strh r1,[r0] ;} Update IO BLDCNT 0800E1CE (T) mov r0,0h ;\ 0800E1D0 (T) strh r0,[r2] ;} Clear WRAM BLDCNT 0800E1D2 (T) ldr r1,=4000054h ;\ 0800E1D4 (T) ldr r0,=BLDY ;| 0800E1D6 (T) ldrh r0,[r0] ;} Update BLDY 0800E1D8 (T) strh r0,[r1] ;/ 0800E1DA (T) sub r1,44h ;\ 0800E1DC (T) ldr r2,=Bg0XPosition ;| 0800E1DE (T) ldrh r0,[r2] ;} Update BG0 X position 0800E1E0 (T) strh r0,[r1] ;/ 0800E1E2 (T) add r1,2h ;\ 0800E1E4 (T) ldrh r0,[r2,2h] ;} Update BG0 Y position 0800E1E6 (T) strh r0,[r1] ;/ 0800E1E8 (T) add r1,2h ;\ 0800E1EA (T) ldrh r0,[r2,4h] ;} Update BG1 X position 0800E1EC (T) strh r0,[r1] ;/ 0800E1EE (T) add r1,2h ;\ 0800E1F0 (T) ldrh r0,[r2,6h] ;} Update BG1 Y position 0800E1F2 (T) strh r0,[r1] ;/ 0800E1F4 (T) add r1,2h ;\ 0800E1F6 (T) ldrh r0,[r2,8h] ;} Update BG2 X position 0800E1F8 (T) strh r0,[r1] ;/ 0800E1FA (T) add r1,2h ;\ 0800E1FC (T) ldrh r0,[r2,0Ah] ;} Update BG2 Y position 0800E1FE (T) strh r0,[r1] ;/ 0800E200 (T) ldr r3,=400001Ch ;\ 0800E202 (T) ldr r1,=BG3OFSBackgroundLayer 0800E204 (T) ldrb r0,[r1] ;| 0800E206 (T) lsl r0,r0,2h ;} Update BG3 X position 0800E208 (T) add r0,r0,r2 ;| 0800E20A (T) ldrh r0,[r0] ;| 0800E20C (T) strh r0,[r3] ;/ 0800E20E (T) add r3,2h ;\ 0800E210 (T) ldrb r0,[r1] ;| 0800E212 (T) lsl r0,r0,2h ;| 0800E214 (T) add r0,r0,r2 ;} Update BG3 Y position 0800E216 (T) ldrh r0,[r0,2h] ;| 0800E218 (T) strh r0,[r3] ;/ 0800E21A (T) add sp,4h 0800E21C (T) pop r4-r7 0800E21E (T) pop r0 0800E220 (T) bx r0 0800E222 dw 00000h 0800E224 dd 0040000D4h,003000DE8h,084000100h,003000068h 0800E234 dd 0040000B0h,002024000h,080600000h,003000BE6h 0800E244 dd 002024A00h,00300000Eh,0A2600000h,003000006h 0800E254 dd 004000050h,004000054h,00300121Eh,0030000C8h 0800E264 dd 00400001Ch,003000019h } ;;; InGame_V-Blank_MOSAIC ;;; { 0800E2E8 (T) push r4-r7,r14 0800E2EA (T) add sp,-4h 0800E2EC (T) ldr r3,=40000D4h ;\ 0800E2EE (T) ldr r0,=OAMData ;| 0800E2F0 (T) str r0,[r3] ;| 0800E2F2 (T) mov r0,0E0h ;| 0800E2F4 (T) lsl r0,r0,13h ;} Update OAM 0800E2F6 (T) str r0,[r3,4h] ;| 0800E2F8 (T) ldr r0,=84000100h ;| 0800E2FA (T) str r0,[r3,8h] ;| 0800E2FC (T) ldr r0,[r3,8h] ;/ 0800E2FE (T) ldr r6,=3000068h ;\ 0800E300 (T) ldrb r1,[r6,7h] ;| 0800E302 (T) mov r0,80h ;| 0800E304 (T) and r0,r1 ;} If [300006F] & 80h: 0800E306 (T) cmp r0,0h ;| 0800E308 (T) beq 800E388h ;/ 0800E30A (T) ldr r2,=40000B0h ;\ 0800E30C (T) ldr r7,=2024000h ;| 0800E30E (T) str r7,[r2] ;| 0800E310 (T) ldr r5,[r6] ;| 0800E312 (T) str r5,[r2,4h] ;| 0800E314 (T) ldrb r0,[r6,6h] ;} DMA [300006E] colours from 2024000 to [3000068] 0800E316 (T) lsr r0,r0,1h ;| 0800E318 (T) ldr r1,=80600000h ;| 0800E31A (T) orr r0,r1 ;| 0800E31C (T) str r0,[r2,8h] ;| 0800E31E (T) ldr r0,[r2,8h] ;/ 0800E320 (T) mov r0,r13 ;\ 0800E322 (T) mov r4,0h ;| 0800E324 (T) strb r4,[r0] ;| 0800E326 (T) strb r4,[r0] ;| 0800E328 (T) strb r4,[r0] ;| 0800E32A (T) strb r4,[r0] ;| 0800E32C (T) str r7,[r2] ;| 0800E32E (T) str r5,[r2,4h] ;| 0800E330 (T) ldrb r0,[r6,6h] ;} Nothing. Bizarre... 0800E332 (T) lsr r0,r0,1h ;| 0800E334 (T) mov r1,0C0h ;| 0800E336 (T) lsl r1,r1,0Fh ;| 0800E338 (T) orr r0,r1 ;| 0800E33A (T) str r0,[r2,8h] ;| 0800E33C (T) ldr r0,[r2,8h] ;| 0800E33E (T) mov r0,r13 ;| 0800E340 (T) strb r4,[r0] ;/ 0800E342 (T) ldr r0,=VBlankRequestFlag ;\ 0800E344 (T) ldrh r0,[r0] ;| 0800E346 (T) mov r1,1h ;| 0800E348 (T) and r1,r0 ;| 0800E34A (T) ldrb r0,[r6,6h] ;} If V-blank request flag not set: 0800E34C (T) mov r12,r0 ;| 0800E34E (T) cmp r1,0h ;| 0800E350 (T) bne 800E374h ;/ 0800E352 (T) mov r0,r13 0800E354 (T) strb r1,[r0] 0800E356 (T) ldr r0,=2024A00h ;\ 0800E358 (T) str r0,[r3] ;| 0800E35A (T) str r7,[r3,4h] ;| 0800E35C (T) ldrh r0,[r6,4h] ;| 0800E35E (T) lsr r0,r0,1h ;| 0800E360 (T) mov r1,80h ;} DMA [300006C] colours from 2024A00 to 2024000 0800E362 (T) lsl r1,r1,18h ;| 0800E364 (T) orr r0,r1 ;| 0800E366 (T) str r0,[r3,8h] ;| 0800E368 (T) ldr r0,[r3,8h] ;/ 0800E36A (T) mov r1,0A0h ;\ 0800E36C (T) lsl r1,r1,13h ;| 0800E36E (T) ldr r0,=TransparentColour ;} Update transparent colour 0800E370 (T) ldrh r0,[r0] ;| 0800E372 (T) strh r0,[r1] ;/ 0800E374 (T) mov r0,r13 0800E376 (T) strb r4,[r0] 0800E378 (T) str r7,[r2] ;\ 0800E37A (T) str r5,[r2,4h] ;| 0800E37C (T) mov r1,r12 ;| 0800E37E (T) lsr r0,r1,1h ;| 0800E380 (T) ldr r1,=0A2600000h ;} HDMA [300006E] colours from 2024000 to [3000068] 0800E382 (T) orr r0,r1 ;| 0800E384 (T) str r0,[r2,8h] ;| 0800E386 (T) ldr r0,[r2,8h] ;/ 0800E388 (T) mov r0,1h ;\ 0800E38A (T) bl 800DF94h ;} Update Samus and SA-X sprite tiles and palettes 0800E38E (T) ldr r2,=400004Ch ;\ 0800E390 (T) ldr r0,=MOSAIC_4..F ;| 0800E392 (T) ldrh r0,[r0] ;| 0800E394 (T) lsl r0,r0,4h ;| 0800E396 (T) ldr r1,=MOSAIC ;} Update mosaic size 0800E398 (T) ldrh r1,[r1] ;| 0800E39A (T) orr r0,r1 ;| 0800E39C (T) strh r0,[r2] ;/ 0800E39E (T) sub r2,3Ch ;\ 0800E3A0 (T) ldr r1,=Bg0XPosition ;| 0800E3A2 (T) ldrh r0,[r1] ;} Update BG0 X position 0800E3A4 (T) strh r0,[r2] ;/ 0800E3A6 (T) add r2,2h ;\ 0800E3A8 (T) ldrh r0,[r1,2h] ;} Update BG0 Y position 0800E3AA (T) strh r0,[r2] ;/ 0800E3AC (T) add r2,2h ;\ 0800E3AE (T) ldrh r0,[r1,4h] ;} Update BG1 X position 0800E3B0 (T) strh r0,[r2] ;/ 0800E3B2 (T) add r2,2h ;\ 0800E3B4 (T) ldrh r0,[r1,6h] ;} Update BG1 Y position 0800E3B6 (T) strh r0,[r2] ;/ 0800E3B8 (T) add r2,2h ;\ 0800E3BA (T) ldrh r0,[r1,8h] ;} Update BG2 X position 0800E3BC (T) strh r0,[r2] ;/ 0800E3BE (T) add r2,2h ;\ 0800E3C0 (T) ldrh r0,[r1,0Ah] ;} Update BG2 Y position 0800E3C2 (T) strh r0,[r2] ;/ 0800E3C4 (T) add r2,2h ;\ 0800E3C6 (T) ldrh r0,[r1,0Ch] ;} Update BG3 X position 0800E3C8 (T) strh r0,[r2] ;/ 0800E3CA (T) add r2,2h ;\ 0800E3CC (T) ldrh r0,[r1,0Eh] ;} Update BG3 Y position 0800E3CE (T) strh r0,[r2] ;/ 0800E3D0 (T) add sp,4h 0800E3D2 (T) pop r4-r7 0800E3D4 (T) pop r0 0800E3D6 (T) bx r0 0800E3D8 dd 0040000D4h,003000DE8h,084000100h,003000068h 0800E3E8 dd 0040000B0h,002024000h,080600000h,003000BE6h 0800E3F8 dd 002024A00h,00300000Eh,0A2600000h,00400004Ch 0800E408 dd 00300120Ch,00300120Eh,0030000C8h } ;;; InGame_V-Blank_UpdateSamusSA-XTiles ;;; { ; Takes parameter r0: palette update flag 0800DF94 (T) push r4,r14 0800DF96 (T) mov r4,r0 ; r4 = r0 parameter 0800DF98 (T) ldr r0,=300134Ah ;\ 0800DF9A (T) ldrb r0,[r0] ;| 0800DF9C (T) cmp r0,0h ;} If [300134A]: branch to 800E074 0800DF9E (T) bne 800E074h ;/ 0800DFA0 (T) ldr r3,=300129Ch ;\ 0800DFA2 (T) ldrh r0,[r3,8h] ;| 0800DFA4 (T) cmp r0,0h ;} If [30012A4]: 0800DFA6 (T) beq 800DFC0h ;/ 0800DFA8 (T) ldr r2,=40000D4h ;\ 0800DFAA (T) ldr r0,[r3,4h] ;| 0800DFAC (T) str r0,[r2] ;| 0800DFAE (T) ldr r0,=SpriteTiles ;| 0800DFB0 (T) str r0,[r2,4h] ;| 0800DFB2 (T) ldrh r0,[r3,8h] ;| 0800DFB4 (T) lsr r0,r0,1h ;} Update [30012A4] pixels from [30012A0] to sprite tile 0 (Samus' head) 0800DFB6 (T) mov r1,80h ;| 0800DFB8 (T) lsl r1,r1,18h ;| 0800DFBA (T) orr r0,r1 ;| 0800DFBC (T) str r0,[r2,8h] ;| 0800DFBE (T) ldr r0,[r2,8h] ;/ 0800DFC0 (T) ldrh r0,[r3,10h] ;\ 0800DFC2 (T) cmp r0,0h ;} If [30012AC]: 0800DFC4 (T) beq 800DFDEh ;/ 0800DFC6 (T) ldr r2,=40000D4h ;\ 0800DFC8 (T) ldr r0,[r3,0Ch] ;| 0800DFCA (T) str r0,[r2] ;| 0800DFCC (T) ldr r0,=6010400h ;| 0800DFCE (T) str r0,[r2,4h] ;| 0800DFD0 (T) ldrh r0,[r3,10h] ;| 0800DFD2 (T) lsr r0,r0,1h ;} Update [30012AC] pixels from [30012A8] to sprite tile 20h (Samus' arms) 0800DFD4 (T) mov r1,80h ;| 0800DFD6 (T) lsl r1,r1,18h ;| 0800DFD8 (T) orr r0,r1 ;| 0800DFDA (T) str r0,[r2,8h] ;| 0800DFDC (T) ldr r0,[r2,8h] ;/ 0800DFDE (T) ldrh r0,[r3,18h] ;\ 0800DFE0 (T) cmp r0,0h ;} If [30012B4]: 0800DFE2 (T) beq 800DFFCh ;/ 0800DFE4 (T) ldr r2,=40000D4h ;\ 0800DFE6 (T) ldr r0,[r3,14h] ;| 0800DFE8 (T) str r0,[r2] ;| 0800DFEA (T) ldr r0,=6010280h ;| 0800DFEC (T) str r0,[r2,4h] ;| 0800DFEE (T) ldrh r0,[r3,18h] ;| 0800DFF0 (T) lsr r0,r0,1h ;} Update [30012B4] pixels from [30012B0] to sprite tile 14h (Samus' legs) 0800DFF2 (T) mov r1,80h ;| 0800DFF4 (T) lsl r1,r1,18h ;| 0800DFF6 (T) orr r0,r1 ;| 0800DFF8 (T) str r0,[r2,8h] ;| 0800DFFA (T) ldr r0,[r2,8h] ;/ 0800DFFC (T) ldrh r0,[r3,20h] ;\ 0800DFFE (T) cmp r0,0h ;} If [30012BC]: 0800E000 (T) beq 800E01Ah ;/ 0800E002 (T) ldr r2,=40000D4h ;\ 0800E004 (T) ldr r0,[r3,1Ch] ;| 0800E006 (T) str r0,[r2] ;| 0800E008 (T) ldr r0,=6010680h ;| 0800E00A (T) str r0,[r2,4h] ;| 0800E00C (T) ldrh r0,[r3,20h] ;| 0800E00E (T) lsr r0,r0,1h ;} Update [30012BC] pixels from [30012B8] to sprite tile 34h (Samus' feet) 0800E010 (T) mov r1,80h ;| 0800E012 (T) lsl r1,r1,18h ;| 0800E014 (T) orr r0,r1 ;| 0800E016 (T) str r0,[r2,8h] ;| 0800E018 (T) ldr r0,[r2,8h] ;/ 0800E01A (T) ldrh r0,[r3,30h] ;\ 0800E01C (T) cmp r0,0h ;} If [30012CC]: 0800E01E (T) beq 800E038h ;/ 0800E020 (T) ldr r2,=40000D4h ;\ 0800E022 (T) ldr r0,[r3,2Ch] ;| 0800E024 (T) str r0,[r2] ;| 0800E026 (T) ldr r0,=6010800h ;| 0800E028 (T) str r0,[r2,4h] ;| 0800E02A (T) ldrh r0,[r3,30h] ;| 0800E02C (T) lsr r0,r0,1h ;} Update [30012CC] pixels from [30012C8] to 6010800 (left of Samus' head) 0800E02E (T) mov r1,80h ;| 0800E030 (T) lsl r1,r1,18h ;| 0800E032 (T) orr r0,r1 ;| 0800E034 (T) str r0,[r2,8h] ;| 0800E036 (T) ldr r0,[r2,8h] ;/ 0800E038 (T) ldrh r0,[r3,38h] ;\ 0800E03A (T) cmp r0,0h ;} If [30012D4]: 0800E03C (T) beq 800E056h ;/ 0800E03E (T) ldr r2,=40000D4h ;\ 0800E040 (T) ldr r0,[r3,34h] ;| 0800E042 (T) str r0,[r2] ;| 0800E044 (T) ldr r0,=6010C00h ;| 0800E046 (T) str r0,[r2,4h] ;| 0800E048 (T) ldrh r0,[r3,38h] ;| 0800E04A (T) lsr r0,r0,1h ;} Update [30012D4] pixels from [30012D0] to 6010C00 (left of Samus' arms) 0800E04C (T) mov r1,80h ;| 0800E04E (T) lsl r1,r1,18h ;| 0800E050 (T) orr r0,r1 ;| 0800E052 (T) str r0,[r2,8h] ;| 0800E054 (T) ldr r0,[r2,8h] ;/ 0800E056 (T) cmp r4,0h ;\ 0800E058 (T) beq 800E074h ;} If r0 parameter: 0800E05A (T) ldr r2,=40000D4h ;\ 0800E05C (T) ldr r0,=SuitColour ;| 0800E05E (T) str r0,[r2] ;| 0800E060 (T) ldr r0,=5000200h ;| 0800E062 (T) str r0,[r2,4h] ;| 0800E064 (T) ldr r0,=3004D88h ;| 0800E066 (T) ldrh r0,[r0] ;} Update Samus' palette 0800E068 (T) lsr r0,r0,1h ;| 0800E06A (T) mov r1,80h ;| 0800E06C (T) lsl r1,r1,18h ;| 0800E06E (T) orr r0,r1 ;| 0800E070 (T) str r0,[r2,8h] ;| 0800E072 (T) ldr r0,[r2,8h] ;/ 0800E074 (T) ldr r3,=3001458h ;\ 0800E076 (T) ldrb r0,[r3] ;| 0800E078 (T) cmp r0,1h ;} If [3001458] <= 1: return 0800E07A (T) bls 800E0CCh ;/ 0800E07C (T) ldrh r0,[r3,1Ch] ;\ 0800E07E (T) cmp r0,0h ;} If [3001474]: 0800E080 (T) beq 800E09Ah ;/ 0800E082 (T) ldr r2,=40000D4h ;\ 0800E084 (T) ldr r0,[r3,14h] ;| 0800E086 (T) str r0,[r2] ;| 0800E088 (T) ldr r0,=6014000h ;| 0800E08A (T) str r0,[r2,4h] ;| 0800E08C (T) ldrh r0,[r3,1Ch] ;| 0800E08E (T) lsr r0,r0,1h ;} Update [3001474] pixels from [300146C] to 6014000 (SA-X's head) 0800E090 (T) mov r1,80h ;| 0800E092 (T) lsl r1,r1,18h ;| 0800E094 (T) orr r0,r1 ;| 0800E096 (T) str r0,[r2,8h] ;| 0800E098 (T) ldr r0,[r2,8h] ;/ 0800E09A (T) ldrh r0,[r3,1Eh] ;\ 0800E09C (T) cmp r0,0h ;} If [3001476]: 0800E09E (T) beq 800E0B8h ;/ 0800E0A0 (T) ldr r2,=40000D4h ;\ 0800E0A2 (T) ldr r0,[r3,18h] ;| 0800E0A4 (T) str r0,[r2] ;| 0800E0A6 (T) ldr r0,=6014400h ;| 0800E0A8 (T) str r0,[r2,4h] ;| 0800E0AA (T) ldrh r0,[r3,1Eh] ;| 0800E0AC (T) lsr r0,r0,1h ;} Update [3001476] pixels from [3001468] to 6014000 (SA-X's arms) 0800E0AE (T) mov r1,80h ;| 0800E0B0 (T) lsl r1,r1,18h ;| 0800E0B2 (T) orr r0,r1 ;| 0800E0B4 (T) str r0,[r2,8h] ;| 0800E0B6 (T) ldr r0,[r2,8h] ;/ 0800E0B8 (T) cmp r4,0h ;\ 0800E0BA (T) beq 800E0CCh ;} If r0 parameter: 0800E0BC (T) ldr r1,=40000D4h ;\ 0800E0BE (T) ldr r0,=SAXSuitColour ;| 0800E0C0 (T) str r0,[r1] ;| 0800E0C2 (T) ldr r0,=5000300h ;| 0800E0C4 (T) str r0,[r1,4h] ;} Update SA-X's palette 0800E0C6 (T) ldr r0,=80000010h ;| 0800E0C8 (T) str r0,[r1,8h] ;| 0800E0CA (T) ldr r0,[r1,8h] ;/ 0800E0CC (T) pop r4 0800E0CE (T) pop r0 0800E0D0 (T) bx r0 0800E0D2 dw 00000h 0800E0D4 dd 00300134Ah,00300129Ch,0040000D4h,006010000h 0800E0E4 dd 006010400h,006010280h,006010680h,006010800h 0800E0F4 dd 006010C00h,003004D28h,005000200h,003004D88h 0800E104 dd 003001458h,006014000h,006014400h,003004D90h 0800E114 dd 005000300h,080000010h } ;;; Play/RecordDemo ;;; { 0800C9E0 (T) push r14 0800C9E2 (T) ldr r0,=3001242h ;\ 0800C9E4 (T) ldrb r0,[r0] ;| 0800C9E6 (T) cmp r0,1h ;} If demo control == 1: 0800C9E8 (T) bne 800C9F4h ;/ 0800C9EA (T) bl RecordDemo ; Record demo 0800C9EE (T) b 800C9FCh ; Return 0800C9F0 dd 003001242h 0800C9F4 (T) cmp r0,2h ;\ 0800C9F6 (T) bne 800C9FCh ;} If demo control == 2: 0800C9F8 (T) bl PlayDemo ; Play demo 0800C9FC (T) pop r0 0800C9FE (T) bx r0 } ;;; RecordDemo ;;; { 0800CA00 (T) push r4-r7,r14 0800CA02 (T) ldr r3,=3004C12h ;\ 0800CA04 (T) ldrh r0,[r3] ;| 0800CA06 (T) cmp r0,0FDh ;} If input index > FDh: 0800CA08 (T) bls 800CA1Ch ;/ 0800CA0A (T) ldr r1,=ChangedInput ;\ 0800CA0C (T) mov r0,8h ;} Changed input = start 0800CA0E (T) strh r0,[r1] ;/ 0800CA10 (T) b 800CA7Ch ; Return 0800CA12 dw 00000h 0800CA14 dd 003004C12h,0030011ECh 0800CA1C (T) ldr r1,=ButtonInput ;\ 0800CA1E (T) ldr r6,=3004812h ;| 0800CA20 (T) ldrh r2,[r3] ;| 0800CA22 (T) lsl r5,r2,1h ;| 0800CA24 (T) add r0,r5,r6 ;} If button input == button pressed[input index]: 0800CA26 (T) ldrh r4,[r1] ;| 0800CA28 (T) ldrh r0,[r0] ;| 0800CA2A (T) cmp r4,r0 ;| 0800CA2C (T) bne 800CA64h ;/ 0800CA2E (T) ldr r7,=3004A12h ;\ 0800CA30 (T) add r0,r5,r7 ;| 0800CA32 (T) ldrh r1,[r0] ;| 0800CA34 (T) ldr r0,=0FFFFh ;} If frames pressed[input index] == -1: 0800CA36 (T) cmp r1,r0 ;| 0800CA38 (T) bne 800CA46h ;/ 0800CA3A (T) add r0,r2,1 ;\ 0800CA3C (T) strh r0,[r3] ;} ++Input index 0800CA3E (T) ldrh r0,[r3] ;\ 0800CA40 (T) lsl r0,r0,1h ;| 0800CA42 (T) add r0,r0,r6 ;} button pressed[input index] = ButtonInput 0800CA44 (T) strh r4,[r0] ;/ 0800CA46 (T) ldrh r1,[r3] ;\ 0800CA48 (T) lsl r1,r1,1h ;| 0800CA4A (T) add r1,r1,r7 ;| 0800CA4C (T) ldrh r0,[r1] ;} ++Frames pressed[input index] 0800CA4E (T) add r0,1h ;| 0800CA50 (T) strh r0,[r1] ;/ 0800CA52 (T) b 800CA7Ch ; Return 0800CA54 dd 0030011E8h,003004812h,003004A12h,00000FFFFh 0800CA64 (T) add r0,r2,1 ;\ 0800CA66 (T) strh r0,[r3] ;} ++Input index 0800CA68 (T) ldrh r0,[r3] ;\ 0800CA6A (T) lsl r0,r0,1h ;| 0800CA6C (T) add r0,r0,r6 ;} Button pressed[input index] = ButtonInput 0800CA6E (T) strh r4,[r0] ;/ 0800CA70 (T) ldr r1,=3004A12h ;\ 0800CA72 (T) ldrh r0,[r3] ;| 0800CA74 (T) lsl r0,r0,1h ;| 0800CA76 (T) add r0,r0,r1 ;} Frames pressed[input index] = 1 0800CA78 (T) mov r1,1h ;| 0800CA7A (T) strh r1,[r0] ;/ 0800CA7C (T) pop r4-r7 0800CA7E (T) pop r0 0800CA80 (T) bx r0 0800CA82 dw 00000h 0800CA84 dd 003004A12h } ;;; PlayDemo ;;; { 0800CA88 (T) push r4-r6,r14 0800CA8A (T) ldr r3,=3004C12h ;\ 0800CA8C (T) ldrh r5,[r3] ;| 0800CA8E (T) ldr r6,=ButtonInput ;} Nothing 0800CA90 (T) cmp r5,0FDh ;| 0800CA92 (T) bhi 800CAA6h ;/ 0800CA94 (T) ldr r4,=3004C14h ;\ 0800CA96 (T) ldrh r1,[r4] ;| 0800CA98 (T) ldr r0,=0FFFFh ;} If demo timer == -1 0800CA9A (T) cmp r1,r0 ;| 0800CA9C (T) beq 800CAA6h ;/ 0800CA9E (T) mov r2,r6 ;\ 0800CAA0 (T) ldrh r0,[r2] ;| 0800CAA2 (T) cmp r0,0h ;} or button input != 0: 0800CAA4 (T) beq 800CACCh ;/ 0800CAA6 (T) ldr r0,=ChangedInput ;\ 0800CAA8 (T) mov r1,8h ;} Changed input = start 0800CAAA (T) strh r1,[r0] ;/ 0800CAAC (T) ldrh r0,[r6] ;\ 0800CAAE (T) cmp r0,0h ;} Nothing 0800CAB0 (T) beq 800CB00h ;/ 0800CAB2 (T) mov r0,0h ;\ 0800CAB4 (T) strh r0,[r6] ;} Button input = 0 and return 0800CAB6 (T) b 800CB00h ;/ 0800CAB8 dd 003004C12h,0030011E8h,003004C14h,00000FFFFh 0800CAC8 dd 0030011ECh 0800CACC (T) cmp r1,0h ;\ 0800CACE (T) bne 800CAE0h ;} If demo timer == 0: 0800CAD0 (T) add r0,r5,1 ;\ 0800CAD2 (T) strh r0,[r3] ;} ++Input index 0800CAD4 (T) ldr r1,=3004A12h ;\ 0800CAD6 (T) ldrh r0,[r3] ;| 0800CAD8 (T) lsl r0,r0,1h ;| 0800CADA (T) add r0,r0,r1 ;} 3004C14 = frames pressed[input index] 0800CADC (T) ldrh r0,[r0] ;| 0800CADE (T) strh r0,[r4] ;/ 0800CAE0 (T) ldr r1,=3004812h ;\ 0800CAE2 (T) ldrh r0,[r3] ;| 0800CAE4 (T) lsl r0,r0,1h ;| 0800CAE6 (T) add r0,r0,r1 ;} Button input = button pressed[input index] 0800CAE8 (T) ldrh r1,[r0] ;| 0800CAEA (T) strh r1,[r2] ;/ 0800CAEC (T) ldr r3,=ChangedInput ;\ 0800CAEE (T) ldr r2,=3004C16h ;| 0800CAF0 (T) ldrh r0,[r2] ;| 0800CAF2 (T) eor r0,r1 ;} Changed input = ![3004C16] & button input 0800CAF4 (T) and r0,r1 ;| 0800CAF6 (T) strh r0,[r3] ;/ 0800CAF8 (T) strh r1,[r2] ; Nothing 0800CAFA (T) ldrh r0,[r4] ;\ 0800CAFC (T) sub r0,1h ;} --Demo timer 0800CAFE (T) strh r0,[r4] ;/ 0800CB00 (T) pop r4-r6 0800CB02 (T) pop r0 0800CB04 (T) bx r0 0800CB06 dw 00000h 0800CB08 dd 003004A12h,003004812h,0030011ECh,003004C16h } ;;; ;;; ; Update window, blend, update palettes and level data { 080686E0 (T) push r4,r14 080686E2 (T) ldr r2,=DISPCNT 080686E4 (T) ldrh r1,[r2] 080686E6 (T) cmp r1,0h 080686E8 (T) beq 80686F4h 080686EA (T) mov r0,80h 080686EC (T) lsl r0,r0,13h 080686EE (T) strh r1,[r0] 080686F0 (T) mov r0,0h 080686F2 (T) strh r0,[r2] 080686F4 (T) ldr r2,=BLDALPHA 080686F6 (T) ldrh r1,[r2] 080686F8 (T) cmp r1,0h 080686FA (T) beq 8068704h 080686FC (T) ldr r0,=4000052h 080686FE (T) strh r1,[r0] 08068700 (T) mov r0,0h 08068702 (T) strh r0,[r2] 08068704 (T) ldr r2,=WININ-high 08068706 (T) ldrb r1,[r2] 08068708 (T) cmp r1,0h 0806870A (T) beq 8068714h 0806870C (T) ldr r0,=4000049h 0806870E (T) strb r1,[r0] 08068710 (T) mov r0,0h 08068712 (T) strb r0,[r2] 08068714 (T) ldr r2,=WINOUT-low 08068716 (T) ldrb r1,[r2] 08068718 (T) cmp r1,0h 0806871A (T) beq 8068724h 0806871C (T) ldr r0,=400004A 0806871E (T) strb r1,[r0] 08068720 (T) mov r0,0h 08068722 (T) strb r0,[r2] 08068724 (T) ldr r3,=3004DD4h 08068726 (T) ldr r4,=3004DD6h 08068728 (T) ldrh r1,[r3] 0806872A (T) ldrh r2,[r4] 0806872C (T) mov r0,r2 0806872E (T) orr r0,r1 08068730 (T) cmp r0,0h 08068732 (T) beq 8068742h 08068734 (T) ldr r0,=4000042h 08068736 (T) strh r1,[r0] 08068738 (T) add r0,4h 0806873A (T) strh r2,[r0] 0806873C (T) mov r0,0h 0806873E (T) strh r0,[r3] 08068740 (T) strh r0,[r4] 08068742 (T) ldr r2,=3004DD8h 08068744 (T) ldrh r1,[r2] 08068746 (T) cmp r1,0h 08068748 (T) beq 8068752h 0806874A (T) ldr r0,=4000050h 0806874C (T) strh r1,[r0] 0806874E (T) mov r0,0h 08068750 (T) strh r0,[r2] 08068752 (T) bl 806D15Ch ; Updates palettes 08068756 (T) bl 80695B4h ; Updates level data 0806875A (T) pop r4 0806875C (T) pop r0 0806875E (T) bx r0 08068760 dd 003000008h,003000004h,004000052h,00300000Ch 08068770 dd 004000049h,00300000Dh,00400004Ah,003004DD4h 08068780 dd 003004DD6h,004000042h,003004DD8h,004000050h } ;;; ;;; { 08068870 (T) push r4,r14 08068872 (T) mov r4,1h ; Return value = 1 08068874 (T) ldr r0,=3001348h ;\ 08068876 (T) ldrh r0,[r0] ;| 08068878 (T) cmp r0,0h ;} If [3001348] 0806887A (T) bne 8068894h ;/ 0806887C (T) ldr r0,=3000110h ;\ 0806887E (T) ldrb r1,[r0] ;| 08068880 (T) ldrb r0,[r0,10h] ;| 08068882 (T) orr r0,r1 ;} or a power bomb is active 08068884 (T) cmp r0,0h ;| 08068886 (T) bne 8068894h ;/ 08068888 (T) ldr r0,=300002Bh ;\ 0806888A (T) ldrb r0,[r0] ;| 0806888C (T) lsl r0,r0,18h ;| 0806888E (T) asr r0,r0,18h ;} or [300002B]: 08068890 (T) cmp r0,0h ;| 08068892 (T) beq 8068896h ;/ 08068894 (T) mov r4,0h ; Return value = 0 08068896 (T) ldr r0,=SamusData ;\ 08068898 (T) ldrb r0,[r0,1h] ;| 0806889A (T) sub r0,20h ;| 0806889C (T) cmp r0,1Eh ;| 0806889E (T) bhi 806893Eh ;| 080688A0 (T) lsl r0,r0,2h ;} Execute Samus pose dependant code 080688A2 (T) ldr r1,=80688C0h ;| 080688A4 (T) add r0,r0,r1 ;| 080688A6 (T) ldr r0,[r0] ;| 080688A8 (T) mov r15,r0 ;/ 080688AA dw 00000h 080688AC dd 003001348h,003000110h,00300002Bh,003001244h 080688BC dd 0080688C0h,00806893Ch,00806893Ch,00806893Ch 080688CC dd 00806893Eh,00806893Eh,00806893Eh,00806893Eh 080688DC dd 00806893Eh,00806893Eh,00806893Eh,00806893Eh 080688EC dd 00806893Eh,00806893Eh,00806893Eh,00806893Eh 080688FC dd 00806893Eh,00806893Eh,00806893Eh,00806893Eh 0806890C dd 00806893Eh,00806893Ch,00806893Ch,00806893Ch 0806891C dd 00806893Ch,00806893Eh,00806893Eh,00806893Eh 0806892C dd 00806893Ch,00806893Eh,00806893Ch,00806893Ch ; On a save pad, on a recharge/security pad, turning around to be recharged, ; unlocking security, saving/loading game, on a navigation pad, downloading an ability, ; unlocking the habitations deck, being loaded by the gunship, dying 0806893C (T) mov r4,0h ; Return value = 0 0806893E (T) cmp r4,1h ;\ 08068940 (T) bne 806896Ch ;} If return value = 1: return 08068942 (T) ldr r0,=DemoControl ;\ 08068944 (T) ldrb r0,[r0] ;| 08068946 (T) cmp r0,0h ;} If in demo: 08068948 (T) beq 8068960h ;/ 0806894A (T) ldr r0,=ButtonInput ;\ 0806894C (T) ldrh r0,[r0] ;| 0806894E (T) mov r1,10h ;} If not pressing a button, r1 = 10h 08068950 (T) cmp r0,0h ;| 08068952 (T) beq 8068966h ;/ 08068954 (T) mov r1,0Eh ;\ 08068956 (T) b 8068966h ;} Else r1 = 0Eh 08068958 dd 003001242h,0030011E8h 08068960 (T) bl 80716D0h ;\ Else (not in demo): Execute subroutine 80716D0 (audio stuff) 08068964 (T) mov r1,2h ; r1 = 2 08068966 (T) mov r0,r1 ; r0 parameter = r1 08068968 (T) bl 806E108h ; Execute subroutine 806E108 0806896C (T) mov r0,r4 0806896E (T) pop r4 08068970 (T) pop r1 08068972 (T) bx r1 } ;;; ;;; { 0806E108 (T) ldr r1,=3004E58h ;\ 0806E10A (T) mov r2,0h ;} 3004E58 = r0 parameter 0806E10C (T) strb r0,[r1] ;/ 0806E10E (T) strb r2,[r1,1h] ;\ 0806E110 (T) strb r2,[r1,2h] ;| 0806E112 (T) strb r2,[r1,3h] ;} Clear 3004E59..3004E5C 0806E114 (T) strb r2,[r1,4h] ;/ 0806E116 (T) bx r14 0806E118 dd 003004E58h }