mirror of
https://github.com/pret/pmd-sky.git
synced 2026-07-01 01:00:43 -05:00
Decompile FileInit + RNG, get a bunch of assembly-only functions out of the way
This commit is contained in:
parent
7f2a12c3e6
commit
2bc531caa3
|
|
@ -1,22 +1,31 @@
|
|||
#pragma once
|
||||
.public ARM9_UNKNOWN_TABLE__NA_20AE924
|
||||
.public ArrayCopy16
|
||||
.public ArrayCopy32
|
||||
.public ArrayFill32
|
||||
.public AtomicExchange
|
||||
.public ClearIrqFlag
|
||||
.public DTCM_BSS
|
||||
.public DseMem_Free
|
||||
.public EnableIrqFiqFlags
|
||||
.public EnableIrqFlag
|
||||
.public FX_AtanIdxTable_
|
||||
.public GXi_DmaId
|
||||
.public GXi_VRamLockId
|
||||
.public GetProcessorMode
|
||||
.public OS_IRQTable
|
||||
.public SDK_MAIN_ARENA_LO
|
||||
.public SDK_SECTION_ARENA_DTCM_START
|
||||
.public SDK_SECTION_ARENA_EX_START
|
||||
.public SDK_SECTION_ARENA_ITCM_START
|
||||
.public SVC_WaitByLoop
|
||||
.public SetIrqFiqFlags
|
||||
.public SetIrqFlag
|
||||
.public WaitForInterrupt
|
||||
.public WaitForever2
|
||||
.public _0200002B
|
||||
.public _0207AD0C
|
||||
.public _020AEBF8
|
||||
.public _020B2B9C
|
||||
.public _020B2BAC
|
||||
.public _020B2BB0
|
||||
.public _022B9208
|
||||
.public _022B958E
|
||||
.public _022B9590
|
||||
|
|
@ -51,27 +60,8 @@
|
|||
.public _022B991C
|
||||
.public _022B999C
|
||||
.public _022B99A0
|
||||
.public _022B99A8
|
||||
.public _022B99B0
|
||||
.public _022B99BC
|
||||
.public _022B99D0
|
||||
.public _022B99D4
|
||||
.public _022B99D8
|
||||
.public _022B99EC
|
||||
.public _022B99F0
|
||||
.public _022B9A20
|
||||
.public _022B9A44
|
||||
.public _022B9A80
|
||||
.public _022B9D00
|
||||
.public _022BAA20
|
||||
.public _022BB4E8
|
||||
.public _022BB500
|
||||
.public _022BB560
|
||||
.public _022BB564
|
||||
.public _022BB568
|
||||
.public _022BB5E8
|
||||
.public _022BB5EC
|
||||
.public _022BB5F8
|
||||
.public _ll_sdiv
|
||||
.public _ll_udiv
|
||||
.public _s32_div_f
|
||||
|
|
@ -83,20 +73,23 @@
|
|||
.public sSubBGExtPltt
|
||||
.public sTexPlttStartAddrTable
|
||||
.public sTexStartAddrTable
|
||||
.public sub_01FF97CC
|
||||
.public sub_01FF9A68
|
||||
.public sub_01FF9AA8
|
||||
.public sub_01FF9B18
|
||||
.public sub_01FF9B3C
|
||||
.public sub_0206F808
|
||||
.public sub_0206FD88
|
||||
.public sub_0206FDE0
|
||||
.public sub_0207F818
|
||||
.public sub_0207F9DC
|
||||
.public sub_0207B87C
|
||||
.public sub_0207BA94
|
||||
.public sub_0207BAC8
|
||||
.public sub_0207BC4C
|
||||
.public sub_0207BCCC
|
||||
.public sub_0207BD3C
|
||||
.public sub_0207BDA8
|
||||
.public sub_0207BE6C
|
||||
.public sub_0207C0FC
|
||||
.public sub_0207C7C4
|
||||
.public sub_0207D9A4
|
||||
.public sub_02080EF0
|
||||
.public sub_02080F30
|
||||
.public sub_02081AC4
|
||||
.public sub_02083434
|
||||
.public sub_02084304
|
||||
.public sub_02084A4C
|
||||
.public sub_02085BD4
|
||||
|
|
|
|||
23
asm/include/main_0207B854.inc
Normal file
23
asm/include/main_0207B854.inc
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
.public ArrayCopy16
|
||||
.public EnableIrqFlag
|
||||
.public GetTimer0Control
|
||||
.public MemcpyFast
|
||||
.public OS_GetLockID
|
||||
.public SVC_WaitByLoop
|
||||
.public SetIrqFlag
|
||||
.public WaitForever2
|
||||
.public _022B99A8
|
||||
.public _022B99D0
|
||||
.public _022B99D4
|
||||
.public _022B99D8
|
||||
.public sub_01FF97CC
|
||||
.public sub_02078900
|
||||
.public sub_02078C3C
|
||||
.public sub_02078CC8
|
||||
.public sub_0207C164
|
||||
.public sub_0207D9A4
|
||||
.public sub_0207DAB0
|
||||
.public sub_0207DAFC
|
||||
.public sub_0207DB20
|
||||
.public sub_02083434
|
||||
44
asm/include/main_0207BC3C.inc
Normal file
44
asm/include/main_0207BC3C.inc
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
#pragma once
|
||||
.public ARM9_UNKNOWN_TABLE__NA_20AE924
|
||||
.public EnableIrqFlag
|
||||
.public FileInit
|
||||
.public SetIrqFlag
|
||||
.public WaitForever2
|
||||
.public _020AEBF8
|
||||
.public _020B2BB0
|
||||
.public _022B99EC
|
||||
.public _022B99F0
|
||||
.public _022B9A20
|
||||
.public _022B9A44
|
||||
.public _022B9A80
|
||||
.public _022B9D00
|
||||
.public _022BAA20
|
||||
.public _022BB4E8
|
||||
.public _022BB500
|
||||
.public _022BB560
|
||||
.public _022BB564
|
||||
.public _022BB568
|
||||
.public _022BB5E8
|
||||
.public _022BB5F8
|
||||
.public sub_01FF9A68
|
||||
.public sub_01FF9AA8
|
||||
.public sub_01FF9B18
|
||||
.public sub_01FF9B3C
|
||||
.public sub_02078A98
|
||||
.public sub_02078BAC
|
||||
.public sub_02078C68
|
||||
.public sub_02078CC8
|
||||
.public sub_02079888
|
||||
.public sub_020798D8
|
||||
.public sub_02079D98
|
||||
.public sub_0207A030
|
||||
.public sub_0207A048
|
||||
.public sub_0207A0CC
|
||||
.public sub_0207A2A4
|
||||
.public sub_0207A2C0
|
||||
.public sub_0207A2DC
|
||||
.public sub_0207B854
|
||||
.public sub_0207F60C
|
||||
.public sub_0207F70C
|
||||
.public sub_0207F818
|
||||
.public sub_0207F9DC
|
||||
9
asm/include/main_0207F40C.inc
Normal file
9
asm/include/main_0207F40C.inc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
.public EnableIrqFlag
|
||||
.public FileInit
|
||||
.public SetIrqFlag
|
||||
.public _022BB5EC
|
||||
.public sub_02079888
|
||||
.public sub_0207EBA0
|
||||
.public sub_0207EBE4
|
||||
.public sub_0207EDB4
|
||||
|
|
@ -1,16 +1,14 @@
|
|||
#pragma once
|
||||
.public _020AFC4C
|
||||
.public _s32_div_f
|
||||
.public abs
|
||||
.public CheckVariousStatuses2
|
||||
.public DIRECTIONS_XY
|
||||
.public DISPLACEMENTS_WITHIN_2_LARGEST_FIRST
|
||||
.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST
|
||||
.public DISPLACEMENTS_WITHIN_3
|
||||
.public DisplayUi
|
||||
.public DUNGEON_PRNG_STATE
|
||||
.public DUNGEON_PRNG_STATE_SECONDARY_VALUES
|
||||
.public DUNGEON_PTR
|
||||
.public DisplayUi
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__022E95F4
|
||||
.public GetLeader
|
||||
.public GetTile
|
||||
|
|
@ -19,6 +17,11 @@
|
|||
.public InitWeirdMinimapMatrix
|
||||
.public MemAlloc
|
||||
.public MemFree
|
||||
.public UpdateCamera
|
||||
.public UpdateMinimap
|
||||
.public _020AFC4C
|
||||
.public _s32_div_f
|
||||
.public abs
|
||||
.public ov29_022DD8B4
|
||||
.public ov29_022DDEF8
|
||||
.public ov29_022DE11C
|
||||
|
|
@ -52,5 +55,3 @@
|
|||
.public sub_0204AEA0
|
||||
.public sub_0204AEC0
|
||||
.public sub_02051E20
|
||||
.public UpdateCamera
|
||||
.public UpdateMinimap
|
||||
|
|
|
|||
5128
asm/main_02075600.s
5128
asm/main_02075600.s
File diff suppressed because it is too large
Load Diff
310
asm/main_0207B854.s
Normal file
310
asm/main_0207B854.s
Normal file
|
|
@ -0,0 +1,310 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0207B854.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_0207B854
|
||||
sub_0207B854: ; 0x0207B854
|
||||
subs r0, r0, #4
|
||||
bhs sub_0207B854
|
||||
bx lr
|
||||
arm_func_end sub_0207B854
|
||||
|
||||
arm_func_start sub_0207B860
|
||||
sub_0207B860: ; 0x0207B860
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r0, #1
|
||||
blx SVC_WaitByLoop
|
||||
mov r0, #1
|
||||
mov r1, r0
|
||||
bl sub_02078900
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end sub_0207B860
|
||||
|
||||
arm_func_start sub_0207B87C
|
||||
sub_0207B87C: ; 0x0207B87C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r0, _0207B8C8 ; =_022B99D0
|
||||
ldrh r1, [r0, #2]
|
||||
cmp r1, #0
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
mov r1, #1
|
||||
strh r1, [r0, #2]
|
||||
bl sub_0207D9A4
|
||||
mov r5, #0xc
|
||||
mov r4, #1
|
||||
_0207B8A4:
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl sub_0207DAFC
|
||||
cmp r0, #0
|
||||
beq _0207B8A4
|
||||
ldr r1, _0207B8CC ; =sub_0207B8D0
|
||||
mov r0, #0xc
|
||||
bl sub_0207DAB0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0207B8C8: .word _022B99D0
|
||||
_0207B8CC: .word sub_0207B8D0
|
||||
arm_func_end sub_0207B87C
|
||||
|
||||
arm_func_start sub_0207B8D0
|
||||
sub_0207B8D0: ; 0x0207B8D0
|
||||
stmdb sp!, {r3, lr}
|
||||
and r0, r1, #0x7f00
|
||||
mov r0, r0, lsl #8
|
||||
mov r0, r0, lsr #0x10
|
||||
cmp r0, #0x10
|
||||
bne _0207B8F8
|
||||
ldr r0, _0207B900 ; =_022B99D0
|
||||
mov r1, #1
|
||||
strh r1, [r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
_0207B8F8:
|
||||
bl WaitForever2
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_0207B900: .word _022B99D0
|
||||
arm_func_end sub_0207B8D0
|
||||
|
||||
arm_func_start sub_0207B904
|
||||
sub_0207B904: ; 0x0207B904
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0, lsl #8
|
||||
mov r5, #0xc
|
||||
mov r4, #0
|
||||
_0207B914:
|
||||
mov r0, r5
|
||||
mov r1, r6
|
||||
mov r2, r4
|
||||
bl sub_0207DB20
|
||||
cmp r0, #0
|
||||
bne _0207B914
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end sub_0207B904
|
||||
|
||||
arm_func_start sub_0207B930
|
||||
sub_0207B930: ; 0x0207B930
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, _0207B9C0 ; =0x027FFC40
|
||||
mov r4, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #2
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
cmp r0, #0
|
||||
beq _0207B958
|
||||
bl WaitForever2
|
||||
_0207B958:
|
||||
bl OS_GetLockID
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
bl sub_02083434
|
||||
ldr r0, _0207B9C4 ; =0x00000000
|
||||
bl sub_0207C164
|
||||
ldr r0, _0207B9C8 ; =0x00000001
|
||||
bl sub_0207C164
|
||||
ldr r0, _0207B9CC ; =0x00000002
|
||||
bl sub_0207C164
|
||||
ldr r0, _0207B9D0 ; =0x00000003
|
||||
bl sub_0207C164
|
||||
ldr r0, _0207B9D4 ; =0x00040000
|
||||
bl sub_02078C3C
|
||||
ldr r0, _0207B9D8 ; =0xFFFBFFFF
|
||||
bl sub_02078CC8
|
||||
ldr r1, _0207B9DC ; =0x027FFC20
|
||||
ldr r0, _0207B9E0 ; =0x00000010
|
||||
str r4, [r1]
|
||||
bl sub_0207B904
|
||||
ldr r0, _0207B9E4 ; =0x027E3F80
|
||||
ldr r1, _0207B9E8 ; =0x00000800
|
||||
sub r0, r0, r1
|
||||
mov sp, r0
|
||||
bl sub_01FF97CC
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0207B9C0: .word 0x027FFC40
|
||||
_0207B9C4: .word 0x00000000
|
||||
_0207B9C8: .word 0x00000001
|
||||
_0207B9CC: .word 0x00000002
|
||||
_0207B9D0: .word 0x00000003
|
||||
_0207B9D4: .word 0x00040000
|
||||
_0207B9D8: .word 0xFFFBFFFF
|
||||
_0207B9DC: .word 0x027FFC20
|
||||
_0207B9E0: .word 0x00000010
|
||||
_0207B9E4: .word 0x027E3F80
|
||||
_0207B9E8: .word 0x00000800
|
||||
arm_func_end sub_0207B930
|
||||
|
||||
arm_func_start sub_0207B9EC
|
||||
sub_0207B9EC: ; 0x0207B9EC
|
||||
ldr ip, _0207BA00 ; =MemcpyFast
|
||||
mov r1, r0
|
||||
ldr r0, _0207BA04 ; =0x027FFCF4
|
||||
mov r2, #6
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0207BA00: .word MemcpyFast
|
||||
_0207BA04: .word 0x027FFCF4
|
||||
arm_func_end sub_0207B9EC
|
||||
|
||||
arm_func_start sub_0207BA08
|
||||
sub_0207BA08: ; 0x0207BA08
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr ip, _0207BA88 ; =0x027FFC80
|
||||
mov r4, r0
|
||||
ldrh r2, [ip, #0x64]
|
||||
add r0, ip, #6
|
||||
add r1, r4, #4
|
||||
mov r2, r2, lsl #0x1d
|
||||
mov r2, r2, lsr #0x1d
|
||||
strb r2, [r4]
|
||||
ldrb r3, [ip, #2]
|
||||
mov r2, #0x14
|
||||
mov r3, r3, lsl #0x1c
|
||||
mov r3, r3, lsr #0x1c
|
||||
strb r3, [r4, #1]
|
||||
ldrb r3, [ip, #3]
|
||||
strb r3, [r4, #2]
|
||||
ldrb r3, [ip, #4]
|
||||
strb r3, [r4, #3]
|
||||
ldrb r3, [ip, #0x1a]
|
||||
strh r3, [r4, #0x1a]
|
||||
ldrb r3, [ip, #0x50]
|
||||
strh r3, [r4, #0x52]
|
||||
bl ArrayCopy16
|
||||
ldr r0, _0207BA88 ; =0x027FFC80
|
||||
add r1, r4, #0x1c
|
||||
add r0, r0, #0x1c
|
||||
mov r2, #0x34
|
||||
bl ArrayCopy16
|
||||
mov r0, #0
|
||||
strh r0, [r4, #0x18]
|
||||
strh r0, [r4, #0x50]
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0207BA88: .word 0x027FFC80
|
||||
arm_func_end sub_0207BA08
|
||||
|
||||
arm_func_start CountLeadingZeros
|
||||
CountLeadingZeros: ; 0x0207BA8C
|
||||
clz r0, r0
|
||||
bx lr
|
||||
arm_func_end CountLeadingZeros
|
||||
|
||||
arm_func_start sub_0207BA94
|
||||
sub_0207BA94: ; 0x0207BA94
|
||||
ldr r0, _0207BAC0 ; =_022B99D4
|
||||
mov r3, #0
|
||||
str r3, [r0]
|
||||
ldr r0, _0207BAC4 ; =_022B99D8
|
||||
mov r2, r3
|
||||
_0207BAA8:
|
||||
mov r1, r3, lsl #1
|
||||
add r3, r3, #1
|
||||
strh r2, [r0, r1]
|
||||
cmp r3, #9
|
||||
blt _0207BAA8
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0207BAC0: .word _022B99D4
|
||||
_0207BAC4: .word _022B99D8
|
||||
arm_func_end sub_0207BA94
|
||||
|
||||
arm_func_start sub_0207BAC8
|
||||
sub_0207BAC8: ; 0x0207BAC8
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
||||
mov r5, r0
|
||||
mov sl, r1
|
||||
bl EnableIrqFlag
|
||||
ldr r4, _0207BB44 ; =_022B99D4
|
||||
ldr r1, _0207BB48 ; =0x000001FF
|
||||
ldr r2, [r4]
|
||||
mov sb, r0
|
||||
and r0, r5, r2
|
||||
ldr r6, _0207BB4C ; =_022B99D8
|
||||
and r8, r0, r1
|
||||
mov r7, #1
|
||||
mov r5, #0
|
||||
_0207BAFC:
|
||||
mov r0, r8
|
||||
bl CountLeadingZeros
|
||||
rsbs r2, r0, #0x1f
|
||||
bmi _0207BB38
|
||||
mov r1, r2, lsl #1
|
||||
ldrh r0, [r6, r1]
|
||||
mvn r2, r7, lsl r2
|
||||
cmp sl, r0
|
||||
and r8, r8, r2
|
||||
bne _0207BAFC
|
||||
ldr r0, [r4]
|
||||
strh r5, [r6, r1]
|
||||
and r0, r0, r2
|
||||
str r0, [r4]
|
||||
b _0207BAFC
|
||||
_0207BB38:
|
||||
mov r0, sb
|
||||
bl SetIrqFlag
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
.align 2, 0
|
||||
_0207BB44: .word _022B99D4
|
||||
_0207BB48: .word 0x000001FF
|
||||
_0207BB4C: .word _022B99D8
|
||||
arm_func_end sub_0207BAC8
|
||||
|
||||
arm_func_start sub_0207BB50
|
||||
sub_0207BB50: ; 0x0207BB50
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _0207BC10 ; =0x04000006
|
||||
mov r5, r0
|
||||
ldrh r6, [r1]
|
||||
ldr r4, _0207BC14 ; =0x027FFC00
|
||||
bl GetTimer0Control
|
||||
orr r0, r0, r6, lsl #16
|
||||
str r0, [r5]
|
||||
ldr r1, _0207BC18 ; =_022B99A8
|
||||
ldrh ip, [r4, #0xf8]
|
||||
ldr r3, [r1]
|
||||
ldr r2, [r1, #4]
|
||||
mov r0, r4
|
||||
eor r2, r3, ip, lsl #16
|
||||
str r2, [r5, #4]
|
||||
ldr r2, [r1]
|
||||
ldr r3, [r0, #0x3c]
|
||||
ldr r2, [r1, #4]
|
||||
ldr r1, [r4, #0xf4]
|
||||
ldr ip, _0207BC1C ; =0x04000600
|
||||
eor r1, r2, r1
|
||||
eor r2, r3, r1
|
||||
str r2, [r5, #8]
|
||||
ldr r1, [ip]
|
||||
eor r1, r2, r1
|
||||
str r1, [r5, #8]
|
||||
ldr r2, [r0, #0x1e8]
|
||||
add r1, r0, #0x300
|
||||
str r2, [r5, #0xc]
|
||||
ldr r3, [r0, #0x1ec]
|
||||
sub r2, ip, #0x4d0
|
||||
str r3, [r5, #0x10]
|
||||
ldr r3, [r0, #0x390]
|
||||
ldrh r4, [r1, #0x94]
|
||||
add r0, r0, #0x3a8
|
||||
eor r3, r3, r4, lsl #16
|
||||
str r3, [r5, #0x14]
|
||||
ldrh r4, [r1, #0xaa]
|
||||
ldrh r3, [r1, #0xac]
|
||||
orr r3, r3, r4, lsl #16
|
||||
str r3, [r5, #0x18]
|
||||
ldrh r2, [r2]
|
||||
ldrh r0, [r0]
|
||||
ldrh r1, [r1, #0x98]
|
||||
orr r0, r2, r0
|
||||
orr r0, r0, r1, lsl #16
|
||||
str r0, [r5, #0x1c]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0207BC10: .word 0x04000006
|
||||
_0207BC14: .word 0x027FFC00
|
||||
_0207BC18: .word _022B99A8
|
||||
_0207BC1C: .word 0x04000600
|
||||
arm_func_end sub_0207BB50
|
||||
4426
asm/main_0207BC3C.s
Normal file
4426
asm/main_0207BC3C.s
Normal file
File diff suppressed because it is too large
Load Diff
313
asm/main_0207F40C.s
Normal file
313
asm/main_0207F40C.s
Normal file
|
|
@ -0,0 +1,313 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0207F40C.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_0207F40C
|
||||
sub_0207F40C: ; 0x0207F40C
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
||||
sub sp, sp, #0xc
|
||||
mov r7, r1
|
||||
ldrb r1, [r7]
|
||||
mov r8, r0
|
||||
mov r6, r2
|
||||
cmp r1, #0x2f
|
||||
mov r5, r3
|
||||
cmpne r1, #0x5c
|
||||
bne _0207F458
|
||||
ldr r0, _0207F54C ; =_022BB5EC
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
strh r1, [sp, #4]
|
||||
str r0, [sp]
|
||||
str r1, [sp, #8]
|
||||
strh r1, [sp, #6]
|
||||
add r7, r7, #1
|
||||
b _0207F4FC
|
||||
_0207F458:
|
||||
ldr r0, _0207F54C ; =_022BB5EC
|
||||
add r3, sp, #0
|
||||
ldmia r0, {r0, r1, r2}
|
||||
stmia r3, {r0, r1, r2}
|
||||
mov r4, #0
|
||||
_0207F46C:
|
||||
ldrb r0, [r7, r4]
|
||||
cmp r0, #0
|
||||
cmpne r0, #0x2f
|
||||
cmpne r0, #0x5c
|
||||
beq _0207F4FC
|
||||
cmp r0, #0x3a
|
||||
bne _0207F4F0
|
||||
mov r0, r7
|
||||
mov r1, r4
|
||||
bl sub_0207EDB4
|
||||
cmp r0, #0
|
||||
addeq sp, sp, #0xc
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
||||
ldr r1, [r0, #0x1c]
|
||||
tst r1, #2
|
||||
movne r1, #1
|
||||
moveq r1, #0
|
||||
cmp r1, #0
|
||||
addeq sp, sp, #0xc
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
||||
mov r1, #0
|
||||
str r0, [sp]
|
||||
str r1, [sp, #8]
|
||||
strh r1, [sp, #6]
|
||||
strh r1, [sp, #4]
|
||||
add r0, r4, #1
|
||||
ldrb r0, [r7, r0]!
|
||||
cmp r0, #0x2f
|
||||
cmpne r0, #0x5c
|
||||
addeq r7, r7, #1
|
||||
b _0207F4FC
|
||||
_0207F4F0:
|
||||
add r4, r4, #1
|
||||
cmp r4, #3
|
||||
ble _0207F46C
|
||||
_0207F4FC:
|
||||
ldr r1, [sp]
|
||||
add r0, sp, #0
|
||||
str r1, [r8, #8]
|
||||
str r7, [r8, #0x3c]
|
||||
add r3, r8, #0x30
|
||||
ldmia r0, {r0, r1, r2}
|
||||
stmia r3, {r0, r1, r2}
|
||||
cmp r5, #0
|
||||
moveq r0, #0
|
||||
streq r0, [r8, #0x40]
|
||||
streq r6, [r8, #0x44]
|
||||
beq _0207F538
|
||||
mov r0, #1
|
||||
str r0, [r8, #0x40]
|
||||
str r5, [r8, #0x44]
|
||||
_0207F538:
|
||||
mov r0, r8
|
||||
mov r1, #4
|
||||
bl sub_0207EBE4
|
||||
add sp, sp, #0xc
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
_0207F54C: .word _022BB5EC
|
||||
arm_func_end sub_0207F40C
|
||||
|
||||
arm_func_start sub_0207F550
|
||||
sub_0207F550: ; 0x0207F550
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r0
|
||||
ldr r4, [r7, #0x2c]
|
||||
ldr r0, [r7, #0x28]
|
||||
mov r6, r2
|
||||
str r1, [r7, #0x30]
|
||||
sub r0, r0, r4
|
||||
cmp r6, r0
|
||||
movgt r6, r0
|
||||
cmp r6, #0
|
||||
movlt r6, #0
|
||||
str r2, [r7, #0x34]
|
||||
mov r5, r3
|
||||
str r6, [r7, #0x38]
|
||||
cmp r5, #0
|
||||
ldreq r0, [r7, #0xc]
|
||||
mov r1, #0
|
||||
orreq r0, r0, #4
|
||||
streq r0, [r7, #0xc]
|
||||
mov r0, r7
|
||||
bl sub_0207EBE4
|
||||
cmp r5, #0
|
||||
bne _0207F5C4
|
||||
mov r0, r7
|
||||
bl sub_0207F748
|
||||
cmp r0, #0
|
||||
ldrne r0, [r7, #0x2c]
|
||||
subne r6, r0, r4
|
||||
mvneq r6, #0
|
||||
_0207F5C4:
|
||||
mov r0, r6
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
arm_func_end sub_0207F550
|
||||
|
||||
arm_func_start sub_0207F5CC
|
||||
sub_0207F5CC: ; 0x0207F5CC
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
sub sp, sp, #0x48
|
||||
mov r5, r0
|
||||
add r0, sp, #0
|
||||
mov r4, r1
|
||||
bl FileInit
|
||||
add r0, sp, #0
|
||||
mov r1, r4
|
||||
mov r2, r5
|
||||
mov r3, #0
|
||||
bl sub_0207F40C
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
add sp, sp, #0x48
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end sub_0207F5CC
|
||||
|
||||
arm_func_start sub_0207F60C
|
||||
sub_0207F60C: ; 0x0207F60C
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
str r1, [r4, #8]
|
||||
ldr ip, [sp, #8]
|
||||
mov r1, #7
|
||||
str ip, [r4, #0x38]
|
||||
str r2, [r4, #0x30]
|
||||
str r3, [r4, #0x34]
|
||||
bl sub_0207EBE4
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldr r1, [r4, #0xc]
|
||||
mov r0, #1
|
||||
orr r1, r1, #0x10
|
||||
bic r1, r1, #0x20
|
||||
str r1, [r4, #0xc]
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end sub_0207F60C
|
||||
|
||||
arm_func_start sub_0207F654
|
||||
sub_0207F654: ; 0x0207F654
|
||||
stmdb sp!, {r0, r1, r2, r3}
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r4, r0
|
||||
cmp r1, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, lr}
|
||||
addeq sp, sp, #0x10
|
||||
bxeq lr
|
||||
str r1, [r4, #8]
|
||||
str r1, [r4, #0x30]
|
||||
ldr r2, [sp, #0x10]
|
||||
mov r1, #6
|
||||
str r2, [r4, #0x34]
|
||||
bl sub_0207EBE4
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, lr}
|
||||
addeq sp, sp, #0x10
|
||||
bxeq lr
|
||||
ldr r1, [r4, #0xc]
|
||||
mov r0, #1
|
||||
orr r1, r1, #0x10
|
||||
bic r1, r1, #0x20
|
||||
str r1, [r4, #0xc]
|
||||
ldmia sp!, {r4, lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end sub_0207F654
|
||||
|
||||
arm_func_start sub_0207F6C4
|
||||
sub_0207F6C4: ; 0x0207F6C4
|
||||
stmdb sp!, {r4, lr}
|
||||
sub sp, sp, #8
|
||||
mov r4, r0
|
||||
add r0, sp, #0
|
||||
bl sub_0207F5CC
|
||||
cmp r0, #0
|
||||
beq _0207F700
|
||||
add r1, sp, #0
|
||||
mov r0, r4
|
||||
ldmia r1, {r1, r2}
|
||||
bl sub_0207F654
|
||||
cmp r0, #0
|
||||
addne sp, sp, #8
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, pc}
|
||||
_0207F700:
|
||||
mov r0, #0
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end sub_0207F6C4
|
||||
|
||||
arm_func_start sub_0207F70C
|
||||
sub_0207F70C: ; 0x0207F70C
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r1, #8
|
||||
mov r4, r0
|
||||
bl sub_0207EBE4
|
||||
cmp r0, #0
|
||||
mov r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
str r0, [r4, #8]
|
||||
mov r0, #0xe
|
||||
str r0, [r4, #0x10]
|
||||
ldr r1, [r4, #0xc]
|
||||
mov r0, #1
|
||||
bic r1, r1, #0x30
|
||||
str r1, [r4, #0xc]
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end sub_0207F70C
|
||||
|
||||
arm_func_start sub_0207F748
|
||||
sub_0207F748: ; 0x0207F748
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r6, r0
|
||||
mov r5, #0
|
||||
bl EnableIrqFlag
|
||||
ldr r1, [r6, #0xc]
|
||||
mov r4, r0
|
||||
tst r1, #1
|
||||
movne r0, #1
|
||||
moveq r0, r5
|
||||
cmp r0, #0
|
||||
beq _0207F7D8
|
||||
ldr r0, [r6, #0xc]
|
||||
tst r0, #0x44
|
||||
moveq r5, #1
|
||||
movne r5, #0
|
||||
cmp r5, #0
|
||||
beq _0207F7B0
|
||||
ldr r0, [r6, #0xc]
|
||||
orr r0, r0, #4
|
||||
str r0, [r6, #0xc]
|
||||
_0207F798:
|
||||
add r0, r6, #0x18
|
||||
bl sub_02079888
|
||||
ldr r0, [r6, #0xc]
|
||||
tst r0, #0x40
|
||||
beq _0207F798
|
||||
b _0207F7D8
|
||||
_0207F7B0:
|
||||
mov r7, #0
|
||||
mov r8, #1
|
||||
_0207F7B8:
|
||||
add r0, r6, #0x18
|
||||
bl sub_02079888
|
||||
ldr r0, [r6, #0xc]
|
||||
tst r0, #1
|
||||
movne r0, r8
|
||||
moveq r0, r7
|
||||
cmp r0, #0
|
||||
bne _0207F7B8
|
||||
_0207F7D8:
|
||||
mov r0, r4
|
||||
bl SetIrqFlag
|
||||
cmp r5, #0
|
||||
beq _0207F7F4
|
||||
mov r0, r6
|
||||
bl sub_0207EBA0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_0207F7F4:
|
||||
ldr r0, [r6, #0x14]
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
arm_func_end sub_0207F748
|
||||
|
||||
arm_func_start sub_0207F808
|
||||
sub_0207F808: ; 0x0207F808
|
||||
ldr ip, _0207F814 ; =sub_0207F550
|
||||
mov r3, #1
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0207F814: .word sub_0207F550
|
||||
arm_func_end sub_0207F808
|
||||
|
|
@ -1618,46 +1618,3 @@ _022EAA8C: .word 0x5D588B65
|
|||
_022EAA90: .word DUNGEON_PRNG_STATE_SECONDARY_VALUES
|
||||
_022EAA94: .word 0x00269EC3
|
||||
arm_func_end DungeonRand16Bit
|
||||
|
||||
arm_func_start DungeonRandInt
|
||||
DungeonRandInt: ; 0x022EAA98
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl DungeonRand16Bit
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r0, lsr #0x10
|
||||
mul r0, r1, r4
|
||||
mov r0, r0, asr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end DungeonRandInt
|
||||
|
||||
arm_func_start DungeonRandRange
|
||||
DungeonRandRange: ; 0x022EAAC0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
cmp r5, r4
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
bge _022EAAFC
|
||||
bl DungeonRand16Bit
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r0, lsr #0x10
|
||||
sub r0, r4, r5
|
||||
mul r0, r1, r0
|
||||
mov r0, r0, asr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
add r0, r5, r0, lsr #16
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022EAAFC:
|
||||
bl DungeonRand16Bit
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r0, lsr #0x10
|
||||
sub r0, r5, r4
|
||||
mul r0, r1, r0
|
||||
mov r0, r0, asr #0x10
|
||||
mov r0, r0, lsl #0x10
|
||||
add r0, r4, r0, lsr #16
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end DungeonRandRange
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef PMDSKY_DG_RANDOM_H
|
||||
#define PMDSKY_DG_RANDOM_H
|
||||
|
||||
s32 DungeonRandInt(s32 end);
|
||||
s32 DungeonRandRange(s32 from, s32 to);
|
||||
// Returns the result of a possibly biased coin flip (a Bernoulli random variable) with some success probability p, using the dungeon PRNG.
|
||||
// percentChance: success percentage (100*p)
|
||||
// return: true with probability p, false with probability (1-p)
|
||||
|
|
|
|||
12
include/main_0207B848.h
Normal file
12
include/main_0207B848.h
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef PMDSKY_MAIN_0207B848_H
|
||||
#define PMDSKY_MAIN_0207B848_H
|
||||
|
||||
u8 ClearIrqFlag();
|
||||
u8 EnableIrqFlag();
|
||||
u8 SetIrqFlag(u8 flag);
|
||||
u8 EnableIrqFiqFlags(void);
|
||||
u8 SetIrqFiqFlags(u8 flags);
|
||||
u8 GetIrqFlag();
|
||||
u8 GetProcessorMode();
|
||||
|
||||
#endif //PMDSKY_MAIN_0207B848_H
|
||||
7
include/main_0207BC20.h
Normal file
7
include/main_0207BC20.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef PMDSKY_MAIN_0207BC20_H
|
||||
#define PMDSKY_MAIN_0207BC20_H
|
||||
|
||||
void WaitForever2(void);
|
||||
void WaitForInterrupt(void);
|
||||
|
||||
#endif //PMDSKY_MAIN_0207BC20_H
|
||||
8
include/main_0207F3E4.h
Normal file
8
include/main_0207F3E4.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef PMDSKY_MAIN_0207F3E4_H
|
||||
#define PMDSKY_MAIN_0207F3E4_H
|
||||
|
||||
#include <file.h>
|
||||
|
||||
void FileInit(struct file_stream* file);
|
||||
|
||||
#endif //PMDSKY_MAIN_0207F3E4_H
|
||||
6
main.lsf
6
main.lsf
|
|
@ -27,6 +27,12 @@ Static main
|
|||
Object lib/DSE/asm/dc_lfo_1.o
|
||||
Object lib/DSE/src/dc_lfo_2.o
|
||||
Object asm/main_02075600.o
|
||||
Object src/main_0207B848.o
|
||||
Object asm/main_0207B854.o
|
||||
Object src/main_0207BC20.o
|
||||
Object asm/main_0207BC3C.o
|
||||
Object src/main_0207F3E4.o
|
||||
Object asm/main_0207F40C.o
|
||||
Object src/main_0207F818.o
|
||||
Object asm/main_0207F894.o
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,29 @@
|
|||
|
||||
// file starts at 0x022ea968
|
||||
|
||||
extern s32 DungeonRand16Bit(void);
|
||||
extern s16 DungeonRand16Bit(void);
|
||||
|
||||
s32 DungeonRandInt(s32 end)
|
||||
{
|
||||
s32 entropy = DungeonRand16Bit();
|
||||
entropy &= 0xffff;
|
||||
entropy *= end;
|
||||
return (((s32) entropy) >> 0x10) & 0xffff;
|
||||
}
|
||||
|
||||
s32 DungeonRandRange(s32 from, s32 to)
|
||||
{
|
||||
s32 entropy;
|
||||
if (from == to) {
|
||||
return from;
|
||||
} else if (from<to) {
|
||||
entropy = DungeonRand16Bit();
|
||||
return from + ((s32)((entropy & 0xffff) * (to - from)) >> 0x10 & 0xffffU);
|
||||
} else {
|
||||
entropy = DungeonRand16Bit();
|
||||
return to + ((s32)((entropy & 0xffff) * (from - to)) >> 0x10 & 0xffffU);
|
||||
}
|
||||
}
|
||||
|
||||
u8 DungeonRandOutcome__022EAB20(s32 percentChance)
|
||||
{
|
||||
|
|
|
|||
62
src/main_0207B848.c
Normal file
62
src/main_0207B848.c
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include "main_0207B848.h"
|
||||
|
||||
asm u8 ClearIrqFlag()
|
||||
{
|
||||
mrs r0, cpsr
|
||||
bic r1, r0, #0x80
|
||||
msr cpsr_c, r1
|
||||
and r0, r0, #0x80
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 EnableIrqFlag()
|
||||
{
|
||||
mrs r0, cpsr
|
||||
orr r1, r0, #0x80
|
||||
msr cpsr_c, r1
|
||||
and r0, r0, #0x80
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 SetIrqFlag(u8 flag)
|
||||
{
|
||||
mrs r1, cpsr
|
||||
bic r2, r1, #0x80
|
||||
orr r2, r2, r0
|
||||
msr cpsr_c, r2
|
||||
and r0, r1, #0x80
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 EnableIrqFiqFlags(void)
|
||||
{
|
||||
mrs r0, cpsr
|
||||
orr r1, r0, #0xc0
|
||||
msr cpsr_c, r1
|
||||
and r0, r0, #0xc0
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 SetIrqFiqFlags(u8 flags)
|
||||
{
|
||||
mrs r1, cpsr
|
||||
bic r2, r1, #0xc0
|
||||
orr r2, r2, r0
|
||||
msr cpsr_c, r2
|
||||
and r0, r1, #0xc0
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 GetIrqFlag()
|
||||
{
|
||||
mrs r0, cpsr
|
||||
and r0, r0, #0x80
|
||||
bx lr
|
||||
}
|
||||
|
||||
asm u8 GetProcessorMode()
|
||||
{
|
||||
mrs r0, cpsr
|
||||
and r0, r0, #0x1f
|
||||
bx lr
|
||||
}
|
||||
20
src/main_0207BC20.c
Normal file
20
src/main_0207BC20.c
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#include "main_0207BC20.h"
|
||||
#include "main_0207B848.h"
|
||||
|
||||
void WaitForever2(void)
|
||||
{
|
||||
while (TRUE) {
|
||||
EnableIrqFlag();
|
||||
WaitForInterrupt();
|
||||
}
|
||||
}
|
||||
|
||||
asm void WaitForInterrupt(void)
|
||||
{
|
||||
mov r0, #0
|
||||
// System Control Coprocessor command: Wait For Interrupt
|
||||
// https://problemkaputt.de/gbatek.htm#armcp15cachecontrol
|
||||
mcr p15, 0, r0, c7, c0, 4
|
||||
bx lr
|
||||
}
|
||||
|
||||
12
src/main_0207F3E4.c
Normal file
12
src/main_0207F3E4.c
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#include "main_0207F3E4.h"
|
||||
|
||||
void FileInit(struct file_stream* file)
|
||||
{
|
||||
file->field_0x0 = 0;
|
||||
file->field_0x4 = 0;
|
||||
file->field_0x1c = 0;
|
||||
file->field_0x18 = 0;
|
||||
file->field_0x8 = 0;
|
||||
file->field_0x10 = 0xe;
|
||||
file->field_0xc = 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user