pokefirered/asm/berry_fix_program.s
2018-10-05 18:01:51 -04:00

345 lines
6.1 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_815F6E0
sub_815F6E0: @ 815F6E0
push {r4-r6,lr}
movs r6, 0x80
lsls r6, 19
movs r2, 0
strh r2, [r6]
ldr r1, _0815F73C @ =0x04000010
strh r2, [r1]
adds r1, 0x2
strh r2, [r1]
adds r1, 0x3E
strh r2, [r1]
ldr r5, _0815F740 @ =gUnknown_847A890
lsls r4, r0, 1
adds r4, r0
lsls r4, 2
adds r0, r4, r5
ldr r0, [r0]
movs r1, 0xC0
lsls r1, 19
bl LZ77UnCompVram
adds r0, r5, 0x4
adds r0, r4, r0
ldr r0, [r0]
ldr r1, _0815F744 @ =0x0600f800
bl LZ77UnCompVram
adds r5, 0x8
adds r4, r5
ldr r0, [r4]
movs r1, 0xA0
lsls r1, 19
movs r4, 0x80
lsls r4, 1
adds r2, r4, 0
bl CpuSet
ldr r1, _0815F748 @ =0x04000008
movs r2, 0xF8
lsls r2, 5
adds r0, r2, 0
strh r0, [r1]
strh r4, [r6]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0815F73C: .4byte 0x04000010
_0815F740: .4byte gUnknown_847A890
_0815F744: .4byte 0x0600f800
_0815F748: .4byte 0x04000008
thumb_func_end sub_815F6E0
thumb_func_start sub_815F74C
sub_815F74C: @ 815F74C
push {r4,lr}
sub sp, 0x4
ldr r0, _0815F7C4 @ =0x0000ffff
bl DisableInterrupts
movs r0, 0x1
bl EnableInterrupts
bl m4aSoundVSyncOff
movs r0, 0
bl SetVBlankCallback
movs r4, 0
str r4, [sp]
ldr r0, _0815F7C8 @ =0x040000d4
mov r1, sp
str r1, [r0]
movs r1, 0xC0
lsls r1, 19
str r1, [r0, 0x4]
ldr r1, _0815F7CC @ =0x85006000
str r1, [r0, 0x8]
ldr r1, [r0, 0x8]
str r4, [sp]
mov r1, sp
str r1, [r0]
movs r1, 0xA0
lsls r1, 19
str r1, [r0, 0x4]
ldr r1, _0815F7D0 @ =0x85000100
str r1, [r0, 0x8]
ldr r0, [r0, 0x8]
bl ResetSpriteData
bl ResetTasks
bl remove_some_task
ldr r0, _0815F7D4 @ =gUnknown_3005ECC
strb r4, [r0]
ldr r0, _0815F7D8 @ =sub_815F7F0
movs r1, 0
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _0815F7DC @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
strh r4, [r1, 0x8]
ldr r0, _0815F7E0 @ =sub_815F7E4
bl SetMainCallback2
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815F7C4: .4byte 0x0000ffff
_0815F7C8: .4byte 0x040000d4
_0815F7CC: .4byte 0x85006000
_0815F7D0: .4byte 0x85000100
_0815F7D4: .4byte gUnknown_3005ECC
_0815F7D8: .4byte sub_815F7F0
_0815F7DC: .4byte gTasks
_0815F7E0: .4byte sub_815F7E4
thumb_func_end sub_815F74C
thumb_func_start sub_815F7E4
sub_815F7E4: @ 815F7E4
push {lr}
bl RunTasks
pop {r0}
bx r0
thumb_func_end sub_815F7E4
thumb_func_start sub_815F7F0
sub_815F7F0: @ 815F7F0
push {r4-r6,lr}
sub sp, 0x4
lsls r0, 24
lsrs r2, r0, 24
lsls r0, r2, 2
adds r0, r2
lsls r0, 3
ldr r1, _0815F818 @ =gTasks+0x8
adds r5, r0, r1
movs r1, 0
ldrsh r0, [r5, r1]
cmp r0, 0xA
bls _0815F80C
b _0815F9A6
_0815F80C:
lsls r0, 2
ldr r1, _0815F81C @ =_0815F820
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0815F818: .4byte gTasks+0x8
_0815F81C: .4byte _0815F820
.align 2, 0
_0815F820:
.4byte _0815F84C
.4byte _0815F856
.4byte _0815F874
.4byte _0815F9A6
.4byte _0815F890
.4byte _0815F8C8
.4byte _0815F934
.4byte _0815F96A
.4byte _0815F96E
.4byte _0815F98C
.4byte _0815F996
_0815F84C:
movs r0, 0x5
bl sub_815F6E0
movs r0, 0x1
b _0815F9A4
_0815F856:
ldr r0, _0815F870 @ =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _0815F864
b _0815F9A6
_0815F864:
movs r0, 0
bl sub_815F6E0
movs r0, 0x2
b _0815F9A4
.align 2, 0
_0815F870: .4byte gMain
_0815F874:
ldr r0, _0815F88C @ =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _0815F882
b _0815F9A6
_0815F882:
movs r0, 0x1
bl sub_815F6E0
movs r0, 0x4
b _0815F9A4
.align 2, 0
_0815F88C: .4byte gMain
_0815F890:
ldr r0, _0815F8B4 @ =gUnknown_3005EF0
ldr r1, _0815F8B8 @ =gMultiBootProgram_BerryGlitchFix_Start
str r1, [r0]
ldr r2, _0815F8BC @ =gUnknown_3005EF8
ldr r0, _0815F8C0 @ =gMultiBootProgram_BerryGlitchFix_End
subs r0, r1
str r0, [r2]
ldr r0, _0815F8C4 @ =gUnknown_3005F00
str r1, [r0, 0x28]
adds r1, r0, 0
adds r1, 0x4B
movs r4, 0
strb r4, [r1]
bl MultiBootInit
strh r4, [r5, 0x2]
movs r0, 0x5
b _0815F9A4
.align 2, 0
_0815F8B4: .4byte gUnknown_3005EF0
_0815F8B8: .4byte gMultiBootProgram_BerryGlitchFix_Start
_0815F8BC: .4byte gUnknown_3005EF8
_0815F8C0: .4byte gMultiBootProgram_BerryGlitchFix_End
_0815F8C4: .4byte gUnknown_3005F00
_0815F8C8:
ldr r0, _0815F910 @ =gUnknown_3005F00
ldrb r6, [r0, 0x18]
adds r4, r0, 0
cmp r6, 0
bne _0815F920
ldr r0, [r4, 0x1C]
ldr r1, _0815F914 @ =0x00020200
ands r0, r1
cmp r0, r1
bne _0815F920
ldrh r0, [r5, 0x2]
adds r0, 0x1
strh r0, [r5, 0x2]
lsls r0, 16
asrs r0, 16
cmp r0, 0xB4
ble _0815F924
movs r0, 0x2
bl sub_815F6E0
ldr r0, _0815F918 @ =gUnknown_3005EF0
ldr r1, [r0]
adds r1, 0xC0
ldr r0, _0815F91C @ =gUnknown_3005EF8
ldr r2, [r0]
subs r2, 0xC0
movs r0, 0x1
str r0, [sp]
adds r0, r4, 0
movs r3, 0x4
bl MultiBootStartMaster
strh r6, [r5, 0x2]
movs r0, 0x6
b _0815F9A4
.align 2, 0
_0815F910: .4byte gUnknown_3005F00
_0815F914: .4byte 0x00020200
_0815F918: .4byte gUnknown_3005EF0
_0815F91C: .4byte gUnknown_3005EF8
_0815F920:
movs r0, 0
strh r0, [r5, 0x2]
_0815F924:
adds r0, r4, 0
bl MultiBootMain
ldr r1, _0815F930 @ =gUnknown_3005EF4
str r0, [r1]
b _0815F9A6
.align 2, 0
_0815F930: .4byte gUnknown_3005EF4
_0815F934:
ldr r4, _0815F954 @ =gUnknown_3005F00
adds r0, r4, 0
bl MultiBootMain
ldr r1, _0815F958 @ =gUnknown_3005EF4
str r0, [r1]
adds r0, r4, 0
bl MultiBootCheckComplete
cmp r0, 0
beq _0815F95C
movs r0, 0x3
bl sub_815F6E0
movs r0, 0x7
b _0815F9A4
.align 2, 0
_0815F954: .4byte gUnknown_3005F00
_0815F958: .4byte gUnknown_3005EF4
_0815F95C:
ldrb r1, [r4, 0x1E]
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _0815F9A6
movs r0, 0x9
b _0815F9A4
_0815F96A:
movs r0, 0x8
b _0815F9A4
_0815F96E:
ldr r0, _0815F988 @ =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _0815F9A6
adds r0, r2, 0
bl DestroyTask
bl DoSoftReset
b _0815F9A6
.align 2, 0
_0815F988: .4byte gMain
_0815F98C:
movs r0, 0x4
bl sub_815F6E0
movs r0, 0xA
b _0815F9A4
_0815F996:
ldr r0, _0815F9B0 @ =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _0815F9A6
movs r0, 0
_0815F9A4:
strh r0, [r5]
_0815F9A6:
add sp, 0x4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0815F9B0: .4byte gMain
thumb_func_end sub_815F7F0
.align 2, 0 @ Don't pad with nop.