Decomped several string functions

This commit is contained in:
chordtoll
2025-05-22 21:58:06 -07:00
parent c58dd90898
commit eb2911b005
7 changed files with 970 additions and 970 deletions

View File

@@ -1,4 +1,130 @@
#pragma once
.public AUDIO_COMMANDS_BUFFER
.public ArrayCopy32
.public ArrayFill32
.public BagHasExclusiveItemTypeForMonster
.public CopyAndInterleave
.public CopyAndInterleave0
.public CopyBitsFrom
.public CopyBitsTo
.public CopyStringFromId
.public DUNGEON_MOVE_TABLES
.public Debug_FatalError
.public Debug_GetDebugFlag
.public Debug_Print
.public Debug_Print0
.public DirectoryFileMngr_GetDirectoryFileSize
.public DirectoryFileMngr_LoadDirectoryFile
.public DirectoryFileMngr_OpenDirectoryFile
.public DseBgm_IsPlaying
.public DseBgm_Load
.public DseBgm_SetFades
.public DseBgm_SetSignalCallback
.public DseBgm_Stop
.public DseBgm_Unload
.public DseDriver_ConfigureHeap
.public DseDriver_Init
.public DseDriver_LoadDefaultSettings
.public DseSe_GetUsedBankIDs
.public DseSe_HasPlayingInstances
.public DseSe_Load
.public DseSe_Play
.public DseSe_Stop
.public DseSe_StopAll
.public DseSe_Unload
.public DseSequence_GetParameter
.public DseSwd_IsBankLoading
.public DseSwd_LoadBank
.public DseSwd_LoadMainBank
.public DseSwd_LoadWaves
.public DseSwd_Unload
.public DungeonGoesUp
.public DungeonSwapIdxToId
.public ENTITIES
.public EnqueueRender3dTexture
.public FileClose
.public FileGetSize
.public FileRom_HandleOpen
.public FileRom_HandleRead
.public FileRom_InitDataTransfer
.public FileRom_StopDataTransfer
.public FileRom_Veneer_FileInit
.public G3i_LookAt_
.public G3i_OrthoW_
.public GXS_BeginLoadBGExtPltt
.public GXS_BeginLoadOBJExtPltt
.public GXS_EndLoadBGExtPltt
.public GXS_EndLoadOBJExtPltt
.public GX_BeginLoadBGExtPltt
.public GX_BeginLoadOBJExtPltt
.public GX_BeginLoadTex
.public GX_BeginLoadTexPltt
.public GX_EndLoadBGExtPltt
.public GX_EndLoadOBJExtPltt
.public GX_EndLoadTex
.public GX_EndLoadTexPltt
.public GX_LoadTex
.public GX_LoadTexPltt
.public GetAbility
.public GetAbilityString
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetActorMatchingStorageId
.public GetCurrentBagCapacity
.public GetDsFirmwareUserSettingsVeneer
.public GetExecuteSpecialEpisodeType
.public GetGameMode
.public GetInfoMoveGround
.public GetIqSkillStringId
.public GetItemMoveId16
.public GetItemNameFormatted
.public GetMainTeamName
.public GetMonsterGender
.public GetMonsterGenderVeneer
.public GetMoveName
.public GetNameString
.public GetNbFloors
.public GetNbFloorsPlusOne
.public GetPerformanceFlagWithChecks
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetTypeStringId
.public IqSkillFlagTest
.public LANGUAGE_INFO_DATA
.public LoadFileFromRom
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public LoadStringFile
.public MOVE_ACCURACY_STARS_TABLE
.public MOVE_POWER_STARS_TABLE
.public MemAlloc
.public MemArenaAlloc
.public MemFree
.public MemLocateSet
.public MemLocateUnset
.public MemZero
.public MemZero32
.public Memcpy32
.public MultiplyByFixedPoint
.public NewRender3dQuadrilateral
.public NewRender3dRectangle
.public NewRender3dTexture
.public NewRender3dTiling
.public PUNCH_MOVE_LIST
.public PointsToZero
.public RECOIL_MOVE_LIST
.public RENDER_3D
.public RENDER_3D_FUNCTIONS_64
.public Rand16Bit
.public Render3dProcessQueue
.public ResumeBgm
.public Rgb8ToRgb5
.public StringFromId
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UnloadFile
.public WAN_TABLE
.public ZInit8
.public _02098EA8
.public _02098EE0
.public _02098F60
@@ -191,13 +317,9 @@
.public _02099E20
.public _02099E40
.public _02099E64_EU
.public _0209A044
.public _0209A046
.public _0209A230_EU
.public _0209A2D4_EU
.public _0209A2F4_EU
.public _0209A3B4
.public _0209A3B6
.public _020AF6E8
.public _020AF6F0
.public _020AF6F8
@@ -238,7 +360,6 @@
.public _020B05C0_EU
.public _020B05D4_EU
.public _020B05D8_EU
.public _020B112C_JP
.public _022A4BE8
.public _022A4BEC
.public _022A4C00
@@ -267,134 +388,13 @@
.public _022A5970
.public _s32_div_f
.public _u32_div_f
.public ArrayCopy32
.public ArrayFill32
.public AUDIO_COMMANDS_BUFFER
.public BagHasExclusiveItemTypeForMonster
.public CopyAndInterleave
.public CopyAndInterleave0
.public CopyBitsFrom
.public CopyBitsTo
.public CopyStringFromId
.public Debug_FatalError
.public Debug_GetDebugFlag
.public Debug_Print
.public Debug_Print0
.public DirectoryFileMngr_GetDirectoryFileSize
.public DirectoryFileMngr_LoadDirectoryFile
.public DirectoryFileMngr_OpenDirectoryFile
.public DseBgm_IsPlaying
.public DseBgm_Load
.public DseBgm_SetFades
.public DseBgm_SetSignalCallback
.public DseBgm_Stop
.public DseBgm_Unload
.public DseDriver_ConfigureHeap
.public DseDriver_Init
.public DseDriver_LoadDefaultSettings
.public DseSe_GetUsedBankIDs
.public DseSe_HasPlayingInstances
.public DseSe_Load
.public DseSe_Play
.public DseSe_Stop
.public DseSe_StopAll
.public DseSe_Unload
.public DseSequence_GetParameter
.public DseSwd_IsBankLoading
.public DseSwd_LoadBank
.public DseSwd_LoadMainBank
.public DseSwd_LoadWaves
.public DseSwd_Unload
.public DUNGEON_MOVE_TABLES
.public DungeonGoesUp
.public DungeonSwapIdxToId
.public EnqueueRender3dTexture
.public ENTITIES
.public FileClose
.public FileGetSize
.public FileRom_HandleOpen
.public FileRom_HandleRead
.public FileRom_InitDataTransfer
.public FileRom_StopDataTransfer
.public FileRom_Veneer_FileInit
.public G3i_LookAt_
.public G3i_OrthoW_
.public GetAbility
.public GetAbilityString
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetActorMatchingStorageId
.public GetCurrentBagCapacity
.public GetDsFirmwareUserSettingsVeneer
.public GetExecuteSpecialEpisodeType
.public GetGameMode
.public GetInfoMoveGround
.public GetIqSkillStringId
.public GetItemMoveId16
.public GetItemNameFormatted
.public GetMainTeamName
.public GetMonsterGender
.public GetMonsterGenderVeneer
.public GetMoveName
.public GetNameString
.public GetNbFloors
.public GetNbFloorsPlusOne
.public GetPerformanceFlagWithChecks
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetTypeStringId
.public GX_BeginLoadBGExtPltt
.public GX_BeginLoadOBJExtPltt
.public GX_BeginLoadTex
.public GX_BeginLoadTexPltt
.public GX_EndLoadBGExtPltt
.public GX_EndLoadOBJExtPltt
.public GX_EndLoadTex
.public GX_EndLoadTexPltt
.public GX_LoadTex
.public GX_LoadTexPltt
.public GXS_BeginLoadBGExtPltt
.public GXS_BeginLoadOBJExtPltt
.public GXS_EndLoadBGExtPltt
.public GXS_EndLoadOBJExtPltt
.public IqSkillFlagTest
.public LANGUAGE_INFO_DATA
.public LoadFileFromRom
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public LoadStringFile
.public MemAlloc
.public MemArenaAlloc
.public Memcpy32
.public MemFree
.public MemLocateSet
.public MemLocateUnset
.public memset
.public MemZero
.public MemZero32
.public MOVE_ACCURACY_STARS_TABLE
.public MOVE_POWER_STARS_TABLE
.public MultiplyByFixedPoint
.public NewRender3dQuadrilateral
.public NewRender3dRectangle
.public NewRender3dTexture
.public NewRender3dTiling
.public ov10_022BDADC
.public ov10_022C2528
.public PointsToZero
.public PUNCH_MOVE_LIST
.public Rand16Bit
.public RECOIL_MOVE_LIST
.public Render3dProcessQueue
.public RENDER_3D
.public RENDER_3D_FUNCTIONS_64
.public ResumeBgm
.public Rgb8ToRgb5
.public sprintf
.public strcat
.public strcmp
.public strcpy
.public StringFromId
.public strlen
.public strncmp
.public strstr
@@ -443,8 +443,8 @@
.public sub_0200B6F0
.public sub_0200B768
.public sub_0200D310
.public sub_02025480
.public sub_020257FC
.public sub_02025C7C
.public sub_0204BBB0
.public sub_0204E530
.public sub_0204F6F8
@@ -474,8 +474,4 @@
.public sub_0207C9C4
.public sub_0207C9E4
.public sub_0207CC10
.public TEAM_MEMBER_TABLE_PTR
.public UnloadFile
.public vsprintf
.public WAN_TABLE
.public ZInit8

View File

@@ -0,0 +1,8 @@
#pragma once
.public _0209A044
.public _0209A046
.public _0209A3B4
.public _0209A3B6
.public _020B112C_JP
.public sub_0202065C
.public sub_02025C7C

View File

@@ -22314,842 +22314,3 @@ _020250D8: .word _022A5969
_020250DC: .word _022A596A
_020250E0: .word _022A5970
arm_func_end sub_0202507C
arm_func_start SetQuestionMarks
SetQuestionMarks: ; 0x020250E4
#ifdef JAPAN
mov r1, #0xf
#else
mov r1, #0x3f
#endif
strb r1, [r0]
strb r1, [r0, #1]
strb r1, [r0, #2]
mov r1, #0
strb r1, [r0, #3]
bx lr
arm_func_end SetQuestionMarks
arm_func_start StrcpySimple
StrcpySimple:
ldrb r2, [r1], #1
mov r3, r0
strb r2, [r0], #1
ldrb r2, [r3]
cmp r2, #0
bne StrcpySimple
bx lr
arm_func_end StrcpySimple
arm_func_start StrncpySimple
StrncpySimple: ; 0x0202511C
stmdb sp!, {r3, lr}
mov ip, #0
b _02025164
_02025128:
ldrb r3, [r1], #1
mov lr, r0
strb r3, [r0], #1
ldrb r3, [lr]
cmp r3, #0
bne _02025160
add ip, ip, #1
mov r1, #0
b _02025154
_0202514C:
strb r1, [r0], #1
add ip, ip, #1
_02025154:
cmp ip, r2
blt _0202514C
ldmia sp!, {r3, pc}
_02025160:
add ip, ip, #1
_02025164:
cmp ip, r2
blt _02025128
ldmia sp!, {r3, pc}
arm_func_end StrncpySimple
arm_func_start StrncpySimpleNoPad
StrncpySimpleNoPad: ; 0x02025170
stmdb sp!, {r3, lr}
mov ip, #0
b _02025198
_0202517C:
ldrb r3, [r1], #1
mov lr, r0
strb r3, [r0], #1
ldrb r3, [lr]
cmp r3, #0
ldmeqia sp!, {r3, pc}
add ip, ip, #1
_02025198:
cmp ip, r2
blt _0202517C
mov r1, #0
strb r1, [r0]
ldmia sp!, {r3, pc}
arm_func_end StrncpySimpleNoPad
arm_func_start StrncmpSimple
StrncmpSimple: ; 0x020251AC
stmdb sp!, {r3, lr}
mov lr, #0
_020251B4:
ldrb ip, [r0, lr]
ldrb r3, [r1, lr]
add lr, lr, #1
cmp ip, r3
beq _020251D4
mvnlo r0, #0
movhs r0, #1
ldmia sp!, {r3, pc}
_020251D4:
cmp ip, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
cmp lr, r2
blt _020251B4
mov r0, #0
ldmia sp!, {r3, pc}
arm_func_end StrncmpSimple
arm_func_start sub_020251F0
sub_020251F0: ; 0x020251F0
#ifdef JAPAN
ldr r1, _02025264 ; =_020B112C_JP
ldr r1, [r1, #4]
add r2, r1, r0, lsl #1
ldrb r1, [r1, r0, lsl #1]
ldrb r0, [r2, #1]
add r0, r0, r1, lsl #8
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bx lr
.align 2, 0
_02025264: .word _020B112C_JP
#else
bx lr
#endif
arm_func_end sub_020251F0
arm_func_start StrncpySimpleNoPadSafe
StrncpySimpleNoPadSafe: ; 0x020251F4
#ifdef JAPAN
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
b _02025294
_0202527C:
ldrb r0, [r5], #1
bl sub_020251F0
mov r1, r0, asr #8
strb r1, [r6]
strb r0, [r6, #1]
add r6, r6, #2
_02025294:
cmp r4, #0
sub r4, r4, #1
ble _020252AC
ldrb r0, [r5]
cmp r0, #0
bne _0202527C
_020252AC:
mov r0, #0
strb r0, [r6]
ldmia sp!, {r4, r5, r6, pc}
#else
mov ip, #0x20
b _0202520C
_020251FC:
ldrb r3, [r1], #1
cmp r3, #0x100
strlob r3, [r0], #1
strhsb ip, [r0], #1
_0202520C:
cmp r2, #0
sub r2, r2, #1
ble _02025224
ldrb r3, [r1]
cmp r3, #0
bne _020251FC
_02025224:
mov r1, #0
strb r1, [r0]
bx lr
#endif
arm_func_end StrncpySimpleNoPadSafe
arm_func_start StrcpyName
StrcpyName: ; 0x02025230
#ifdef JAPAN
stmdb sp!, {r3, lr}
ldr r3, _02025300 ; =_020B112C_JP
b _020252D8
_020252C4:
ldrb ip, [r1], #1
ldr lr, [r3]
mov ip, ip, lsl #1
ldrh ip, [lr, ip]
strh ip, [r0], #2
_020252D8:
cmp r2, #0
sub r2, r2, #1
ble _020252F0
ldrb ip, [r1]
cmp ip, #0
bne _020252C4
_020252F0:
cmp r2, #0
movgt r1, #0
strgth r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_02025300: .word _020B112C_JP
#else
stmdb sp!, {r4, lr}
mov ip, #0
mov r3, ip
b _020252FC
_02025240:
cmp r2, #0x7e
bne _020252F8
ldrb lr, [r1]
ldrb r4, [r1, #1]
add r1, r1, #2
cmp lr, #0x30
blo _0202526C
cmp lr, #0x39
subls r2, lr, #0x30
andls lr, r2, #0xff
bls _020252A0
_0202526C:
cmp lr, #0x61
blo _02025284
cmp lr, #0x66
subls r2, lr, #0x6b
andls lr, r2, #0xff
bls _020252A0
_02025284:
cmp lr, #0x41
blo _0202529C
cmp lr, #0x46
subls r2, lr, #0x4b
andls lr, r2, #0xff
bls _020252A0
_0202529C:
mov lr, ip
_020252A0:
cmp r4, #0x30
blo _020252B8
cmp r4, #0x39
subls r2, r4, #0x30
andls r4, r2, #0xff
bls _020252EC
_020252B8:
cmp r4, #0x61
blo _020252D0
cmp r4, #0x66
subls r2, r4, #0x6b
andls r4, r2, #0xff
bls _020252EC
_020252D0:
cmp r4, #0x41
blo _020252E8
cmp r4, #0x46
subls r2, r4, #0x4b
andls r4, r2, #0xff
bls _020252EC
_020252E8:
mov r4, r3
_020252EC:
orr r2, r4, lr, lsl #4
strb r2, [r0], #1
b _020252FC
_020252F8:
strb r2, [r0], #1
_020252FC:
ldrb r2, [r1], #1
cmp r2, #0
bne _02025240
mov r1, #0
strb r1, [r0]
ldmia sp!, {r4, pc}
#endif
arm_func_end StrcpyName
#ifdef JAPAN
arm_func_start sub_02025304_JP
sub_02025304_JP: ; 0x02025304
stmdb sp!, {r4, r5, r6, lr}
mov lr, #0
ldr r2, _02025368 ; =_020B112C_JP
b _02025350
_02025314:
mov r5, lr
ldr r4, [r2, #4]
b _0202533C
_02025320:
cmp r6, r3
ldreqb ip, [r1, #1]
ldreqb r3, [r4, #1]
cmpeq ip, r3
beq _02025348
add r4, r4, #2
add r5, r5, #1
_0202533C:
ldrb r3, [r4]
cmp r3, #0
bne _02025320
_02025348:
strb r5, [r0], #1
add r1, r1, #2
_02025350:
ldrb r6, [r1]
cmp r6, #0
bne _02025314
mov r1, #0
strb r1, [r0]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02025368: .word _020B112C_JP
arm_func_end sub_02025304_JP
#endif
arm_func_start StrncpyName
StrncpyName: ; 0x02025314
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, #0
ldr r3, _020253DC ; =_020B112C_JP
b _020253CC
_0202537C:
ldrb r7, [r1]
cmp r7, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r6, r4
ldr r5, [r3, #4]
b _020253B8
_0202539C:
cmp r7, ip
ldreqb lr, [r1, #1]
ldreqb ip, [r5, #1]
cmpeq lr, ip
beq _020253C4
add r5, r5, #2
add r6, r6, #1
_020253B8:
ldrb ip, [r5]
cmp ip, #0
bne _0202539C
_020253C4:
strb r6, [r0], #1
add r1, r1, #2
_020253CC:
cmp r2, #0
sub r2, r2, #1
bgt _0202537C
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020253DC: .word _020B112C_JP
#else
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
mov ip, lr
b _020253F4
_02025324:
ldrb r3, [r1], #1
cmp r3, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r3, r4, r5, pc}
cmp r3, #0x7e
bne _020253F0
ldrb r4, [r1]
ldrb r5, [r1, #1]
add r1, r1, #2
cmp r4, #0x30
blo _02025364
cmp r4, #0x39
subls r3, r4, #0x30
andls r4, r3, #0xff
bls _02025398
_02025364:
cmp r4, #0x61
blo _0202537C
cmp r4, #0x66
subls r3, r4, #0x6b
andls r4, r3, #0xff
bls _02025398
_0202537C:
cmp r4, #0x41
blo _02025394
cmp r4, #0x46
subls r3, r4, #0x4b
andls r4, r3, #0xff
bls _02025398
_02025394:
mov r4, lr
_02025398:
cmp r5, #0x30
blo _020253B0
cmp r5, #0x39
subls r3, r5, #0x30
andls r5, r3, #0xff
bls _020253E4
_020253B0:
cmp r5, #0x61
blo _020253C8
cmp r5, #0x66
subls r3, r5, #0x6b
andls r5, r3, #0xff
bls _020253E4
_020253C8:
cmp r5, #0x41
blo _020253E0
cmp r5, #0x46
subls r3, r5, #0x4b
andls r5, r3, #0xff
bls _020253E4
_020253E0:
mov r5, ip
_020253E4:
orr r3, r5, r4, lsl #4
strb r3, [r0], #1
b _020253F4
_020253F0:
strb r3, [r0], #1
_020253F4:
cmp r2, #0
sub r2, r2, #1
bgt _02025324
ldmia sp!, {r3, r4, r5, pc}
#endif
arm_func_end StrncpyName
#ifdef JAPAN
arm_func_start sub_020253E0_JP
sub_020253E0_JP: ; 0x020253E0
stmdb sp!, {r4, r5, r6, lr}
mov ip, #0
ldr r3, _02025444 ; =_020B112C_JP
b _02025434
_020253F0:
ldrh r5, [r1]
cmp r5, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r4, r5, r6, pc}
mov r4, ip
ldr lr, [r3]
b _02025420
_02025410:
cmp r6, r5
beq _0202542C
add lr, lr, #2
add r4, r4, #1
_02025420:
ldrh r6, [lr]
cmp r6, #0
bne _02025410
_0202542C:
strb r4, [r0], #1
add r1, r1, #2
_02025434:
cmp r2, #0
sub r2, r2, #1
bgt _020253F0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02025444: .word _020B112C_JP
arm_func_end sub_020253E0_JP
#else
arm_func_start sub_02025404
sub_02025404: ; 0x02025404
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
b _02025424
_02025418:
ldrb r0, [r5], #1
bl sub_02025480
strh r0, [r6], #2
_02025424:
cmp r4, #0
sub r4, r4, #1
ble _0202543C
ldrb r0, [r5]
cmp r0, #0
bne _02025418
_0202543C:
cmp r4, #0
movgt r0, #0
strgth r0, [r6]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_02025404
arm_func_start sub_0202544C
sub_0202544C: ; 0x0202544C
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x40
mov r5, r0
add r0, sp, #0
mov r3, #1
mov r4, r2
bl sub_0202568C
add r1, sp, #0
mov r0, r5
mov r2, r4
bl StrncpyName
add sp, sp, #0x40
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0202544C
#endif
arm_func_start sub_02025480
sub_02025480: ; 0x02025480
stmdb sp!, {r3, lr}
#ifdef JAPAN
tst r0, #0xff00
moveq r0, r0, lsl #0x10
moveq r0, r0, lsr #0x10
ldmeqia sp!, {r3, pc}
#endif
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
mov ip, #0
#ifdef JAPAN
mov lr, #0x110
#else
mov lr, #0xdb
#endif
ldr r2, _020254F0 ; =_0209A044
b _020254C8
_020254A0:
add r1, ip, lr
add r1, r1, r1, lsr #31
mov r3, r1, asr #1
mov r1, r3, lsl #2
ldrh r1, [r2, r1]
cmp r1, r0
moveq ip, r3
beq _020254D0
addlt ip, r3, #1
movge lr, r3
_020254C8:
cmp ip, lr
blt _020254A0
_020254D0:
ldr r1, _020254F0 ; =_0209A044
mov r2, ip, lsl #2
ldrh r1, [r1, r2]
cmp r1, r0
ldreq r0, _020254F4 ; =_0209A046
ldreqh r0, [r0, r2]
movne r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_020254F0: .word _0209A044
_020254F4: .word _0209A046
arm_func_end sub_02025480
arm_func_start sub_020254F8
sub_020254F8: ; 0x020254F8
#ifdef JAPAN
stmdb sp!, {r3, lr}
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
cmp r0, #0xa
ldreq r0, _02025530 ; =0x000081A5
ldmeqia sp!, {r3, pc}
tst r0, #0xff00
ldmeqia sp!, {r3, pc}
mov lr, #0
ldr r3, _02025534 ; =_0209A044
ldr r1, _02025538 ; =0x00000111
b _02025520
_02025504:
add r2, r3, lr, lsl #2
ldrh r2, [r2, #2]
mov ip, lr, lsl #2
cmp r0, r2
ldreqh r0, [r3, ip]
ldmeqia sp!, {r3, pc}
add lr, lr, #1
_02025520:
cmp lr, r1
blt _02025504
mov r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_02025530: .word 0x000081A5
_02025534: .word _0209A044
_02025538: .word 0x00000111
#else
cmp r0, #0
moveq r0, #0
bxeq lr
cmp r0, #0xa
moveq r0, #0xa
bxeq lr
mov ip, #0
ldr r2, _02025548 ; =_0209A044
b _02025538
_0202551C:
add r1, r2, ip, lsl #2
ldrh r1, [r1, #2]
mov r3, ip, lsl #2
cmp r0, r1
ldreqh r0, [r2, r3]
bxeq lr
add ip, ip, #1
_02025538:
cmp ip, #0xdc
blt _0202551C
mov r0, #0
bx lr
.align 2, 0
_02025548: .word _0209A044
#endif
arm_func_end sub_020254F8
arm_func_start sub_0202554C
sub_0202554C: ; 0x0202554C
stmdb sp!, {r3, lr}
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
cmp r0, #0xa
#ifdef JAPAN
ldreq r0, _020255BC ; =0x000081A5
#else
moveq r0, #0xa
#endif
ldmeqia sp!, {r3, pc}
mov lr, #0
ldr ip, _020255CC ; =0x000001BE
ldr r2, _020255D0 ; =_0209A3B4
b _020255A4
_02025578:
add r1, lr, ip
add r1, r1, r1, lsr #31
mov r3, r1, asr #1
mov r1, r3, lsl #2
ldrh r1, [r2, r1]
cmp r0, r1
moveq lr, r3
beq _020255AC
cmp r1, r0
addlo lr, r3, #1
movhs ip, r3
_020255A4:
cmp lr, ip
blt _02025578
_020255AC:
ldr r1, _020255D0 ; =_0209A3B4
mov r2, lr, lsl #2
ldrh r1, [r1, r2]
cmp r0, r1
ldreq r0, _020255D4 ; =_0209A3B6
ldreqh r0, [r0, r2]
#ifdef JAPAN
ldrne r0, _020255CC_JP ; =0x00008148
#else
movne r0, #0x3f
#endif
ldmia sp!, {r3, pc}
.align 2, 0
#ifdef JAPAN
_020255BC: .word 0x000081A5
_020255CC: .word 0x000001BF
#else
_020255CC: .word 0x000001BE
#endif
_020255D0: .word _0209A3B4
_020255D4: .word _0209A3B6
#ifdef JAPAN
_020255CC_JP: .word 0x00008148
#endif
arm_func_end sub_0202554C
arm_func_start sub_020255D8
sub_020255D8: ; 0x020255D8
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
str r1, [sp]
add r4, sp, #0
b _020255FC
_020255EC:
mov r0, r4
bl sub_0202065C
bl sub_02025480
strh r0, [r5], #2
_020255FC:
ldr r0, [sp]
ldrb r0, [r0]
cmp r0, #0
bne _020255EC
mov r1, #0
mov r0, r5
strh r1, [r5]
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_020255D8
arm_func_start sub_0202561C
sub_0202561C: ; 0x0202561C
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #4
mov r4, r0
mov r8, r2
mov r7, r3
str r1, [sp]
mov r6, #0
add r5, sp, #0
b _02025654
_02025640:
mov r0, r5
bl sub_0202065C
bl sub_02025480
strh r0, [r4], #2
add r6, r6, #1
_02025654:
ldr r0, [sp]
ldrb r0, [r0]
cmp r0, #0
beq _0202566C
cmp r6, r8
blt _02025640
_0202566C:
cmp r7, #0
beq _02025680
cmp r6, r8
movlt r0, #0
strlth r0, [r4]
_02025680:
mov r0, r4
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
arm_func_end sub_0202561C
arm_func_start sub_0202568C
sub_0202568C: ; 0x0202568C
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, #0
b _020256C0
_0202569C:
bl sub_020254F8
ands r1, r0, #0xff00
movne r1, r1, asr #8
strneb r1, [r7]
strneb r0, [r7, #1]
addne r7, r7, #2
streqb r0, [r7], #1
add r6, r6, #2
add r4, r4, #1
_020256C0:
ldrh r0, [r6]
cmp r0, #0
beq _020256D4
cmp r4, r5
blt _0202569C
_020256D4:
mov r0, r7
ldmia sp!, {r3, r4, r5, r6, r7, pc}
#else
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r4, r0
mov r8, r1
mov r7, r2
mov r6, r3
mov r5, #0
b _020256CC
_020256A8:
bl sub_020254F8
ands r1, r0, #0xff00
movne r1, r1, asr #8
strneb r1, [r4]
strneb r0, [r4, #1]
addne r4, r4, #2
streqb r0, [r4], #1
add r8, r8, #2
add r5, r5, #1
_020256CC:
ldrh r0, [r8]
cmp r0, #0
beq _020256E0
cmp r5, r7
blt _020256A8
_020256E0:
cmp r6, #0
beq _020256F4
cmp r5, r7
movlt r0, #0
strltb r0, [r4]
_020256F4:
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, pc}
#endif
arm_func_end sub_0202568C
arm_func_start sub_020256FC
sub_020256FC: ; 0x020256FC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
mov sb, r1
mov r8, r2
mov r7, #0
mov r5, #0x81
mov r4, #0x48
ldr fp, _02025780 ; =0x000081A1
b _02025764
_02025720:
bl sub_0202554C
mov r6, r0
bl sub_02025C7C
#ifdef JAPAN
ldrh r0, [r0, #4]
#else
ldrh r0, [r0]
#endif
cmp r0, fp
streqb r5, [sl]
streqb r4, [sl, #1]
addeq sl, sl, #2
beq _0202575C
ands r0, r6, #0xff00
movne r0, r0, asr #8
strneb r0, [sl]
strneb r6, [sl, #1]
addne sl, sl, #2
streqb r6, [sl], #1
_0202575C:
add sb, sb, #2
add r7, r7, #1
_02025764:
ldrh r0, [sb]
cmp r0, #0
beq _02025778
cmp r7, r8
blt _02025720
_02025778:
mov r0, sl
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02025780: .word 0x000081A1
arm_func_end sub_020256FC
arm_func_start sub_02025784
sub_02025784: ; 0x02025784
bx lr
arm_func_end sub_02025784

743
asm/main_020251F0.s Normal file
View File

@@ -0,0 +1,743 @@
.include "asm/macros.inc"
.include "main_020251F0.inc"
.text
arm_func_start sub_020251F0
sub_020251F0: ; 0x020251F0
#ifdef JAPAN
ldr r1, _02025264 ; =_020B112C_JP
ldr r1, [r1, #4]
add r2, r1, r0, lsl #1
ldrb r1, [r1, r0, lsl #1]
ldrb r0, [r2, #1]
add r0, r0, r1, lsl #8
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bx lr
.align 2, 0
_02025264: .word _020B112C_JP
#else
bx lr
#endif
arm_func_end sub_020251F0
arm_func_start StrncpySimpleNoPadSafe
StrncpySimpleNoPadSafe: ; 0x020251F4
#ifdef JAPAN
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
b _02025294
_0202527C:
ldrb r0, [r5], #1
bl sub_020251F0
mov r1, r0, asr #8
strb r1, [r6]
strb r0, [r6, #1]
add r6, r6, #2
_02025294:
cmp r4, #0
sub r4, r4, #1
ble _020252AC
ldrb r0, [r5]
cmp r0, #0
bne _0202527C
_020252AC:
mov r0, #0
strb r0, [r6]
ldmia sp!, {r4, r5, r6, pc}
#else
mov ip, #0x20
b _0202520C
_020251FC:
ldrb r3, [r1], #1
cmp r3, #0x100
strlob r3, [r0], #1
strhsb ip, [r0], #1
_0202520C:
cmp r2, #0
sub r2, r2, #1
ble _02025224
ldrb r3, [r1]
cmp r3, #0
bne _020251FC
_02025224:
mov r1, #0
strb r1, [r0]
bx lr
#endif
arm_func_end StrncpySimpleNoPadSafe
arm_func_start StrcpyName
StrcpyName: ; 0x02025230
#ifdef JAPAN
stmdb sp!, {r3, lr}
ldr r3, _02025300 ; =_020B112C_JP
b _020252D8
_020252C4:
ldrb ip, [r1], #1
ldr lr, [r3]
mov ip, ip, lsl #1
ldrh ip, [lr, ip]
strh ip, [r0], #2
_020252D8:
cmp r2, #0
sub r2, r2, #1
ble _020252F0
ldrb ip, [r1]
cmp ip, #0
bne _020252C4
_020252F0:
cmp r2, #0
movgt r1, #0
strgth r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_02025300: .word _020B112C_JP
#else
stmdb sp!, {r4, lr}
mov ip, #0
mov r3, ip
b _020252FC
_02025240:
cmp r2, #0x7e
bne _020252F8
ldrb lr, [r1]
ldrb r4, [r1, #1]
add r1, r1, #2
cmp lr, #0x30
blo _0202526C
cmp lr, #0x39
subls r2, lr, #0x30
andls lr, r2, #0xff
bls _020252A0
_0202526C:
cmp lr, #0x61
blo _02025284
cmp lr, #0x66
subls r2, lr, #0x6b
andls lr, r2, #0xff
bls _020252A0
_02025284:
cmp lr, #0x41
blo _0202529C
cmp lr, #0x46
subls r2, lr, #0x4b
andls lr, r2, #0xff
bls _020252A0
_0202529C:
mov lr, ip
_020252A0:
cmp r4, #0x30
blo _020252B8
cmp r4, #0x39
subls r2, r4, #0x30
andls r4, r2, #0xff
bls _020252EC
_020252B8:
cmp r4, #0x61
blo _020252D0
cmp r4, #0x66
subls r2, r4, #0x6b
andls r4, r2, #0xff
bls _020252EC
_020252D0:
cmp r4, #0x41
blo _020252E8
cmp r4, #0x46
subls r2, r4, #0x4b
andls r4, r2, #0xff
bls _020252EC
_020252E8:
mov r4, r3
_020252EC:
orr r2, r4, lr, lsl #4
strb r2, [r0], #1
b _020252FC
_020252F8:
strb r2, [r0], #1
_020252FC:
ldrb r2, [r1], #1
cmp r2, #0
bne _02025240
mov r1, #0
strb r1, [r0]
ldmia sp!, {r4, pc}
#endif
arm_func_end StrcpyName
#ifdef JAPAN
arm_func_start sub_02025304_JP
sub_02025304_JP: ; 0x02025304
stmdb sp!, {r4, r5, r6, lr}
mov lr, #0
ldr r2, _02025368 ; =_020B112C_JP
b _02025350
_02025314:
mov r5, lr
ldr r4, [r2, #4]
b _0202533C
_02025320:
cmp r6, r3
ldreqb ip, [r1, #1]
ldreqb r3, [r4, #1]
cmpeq ip, r3
beq _02025348
add r4, r4, #2
add r5, r5, #1
_0202533C:
ldrb r3, [r4]
cmp r3, #0
bne _02025320
_02025348:
strb r5, [r0], #1
add r1, r1, #2
_02025350:
ldrb r6, [r1]
cmp r6, #0
bne _02025314
mov r1, #0
strb r1, [r0]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02025368: .word _020B112C_JP
arm_func_end sub_02025304_JP
#endif
arm_func_start StrncpyName
StrncpyName: ; 0x02025314
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, #0
ldr r3, _020253DC ; =_020B112C_JP
b _020253CC
_0202537C:
ldrb r7, [r1]
cmp r7, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r6, r4
ldr r5, [r3, #4]
b _020253B8
_0202539C:
cmp r7, ip
ldreqb lr, [r1, #1]
ldreqb ip, [r5, #1]
cmpeq lr, ip
beq _020253C4
add r5, r5, #2
add r6, r6, #1
_020253B8:
ldrb ip, [r5]
cmp ip, #0
bne _0202539C
_020253C4:
strb r6, [r0], #1
add r1, r1, #2
_020253CC:
cmp r2, #0
sub r2, r2, #1
bgt _0202537C
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_020253DC: .word _020B112C_JP
#else
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
mov ip, lr
b _020253F4
_02025324:
ldrb r3, [r1], #1
cmp r3, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r3, r4, r5, pc}
cmp r3, #0x7e
bne _020253F0
ldrb r4, [r1]
ldrb r5, [r1, #1]
add r1, r1, #2
cmp r4, #0x30
blo _02025364
cmp r4, #0x39
subls r3, r4, #0x30
andls r4, r3, #0xff
bls _02025398
_02025364:
cmp r4, #0x61
blo _0202537C
cmp r4, #0x66
subls r3, r4, #0x6b
andls r4, r3, #0xff
bls _02025398
_0202537C:
cmp r4, #0x41
blo _02025394
cmp r4, #0x46
subls r3, r4, #0x4b
andls r4, r3, #0xff
bls _02025398
_02025394:
mov r4, lr
_02025398:
cmp r5, #0x30
blo _020253B0
cmp r5, #0x39
subls r3, r5, #0x30
andls r5, r3, #0xff
bls _020253E4
_020253B0:
cmp r5, #0x61
blo _020253C8
cmp r5, #0x66
subls r3, r5, #0x6b
andls r5, r3, #0xff
bls _020253E4
_020253C8:
cmp r5, #0x41
blo _020253E0
cmp r5, #0x46
subls r3, r5, #0x4b
andls r5, r3, #0xff
bls _020253E4
_020253E0:
mov r5, ip
_020253E4:
orr r3, r5, r4, lsl #4
strb r3, [r0], #1
b _020253F4
_020253F0:
strb r3, [r0], #1
_020253F4:
cmp r2, #0
sub r2, r2, #1
bgt _02025324
ldmia sp!, {r3, r4, r5, pc}
#endif
arm_func_end StrncpyName
#ifdef JAPAN
arm_func_start sub_020253E0_JP
sub_020253E0_JP: ; 0x020253E0
stmdb sp!, {r4, r5, r6, lr}
mov ip, #0
ldr r3, _02025444 ; =_020B112C_JP
b _02025434
_020253F0:
ldrh r5, [r1]
cmp r5, #0
moveq r1, #0
streqb r1, [r0]
ldmeqia sp!, {r4, r5, r6, pc}
mov r4, ip
ldr lr, [r3]
b _02025420
_02025410:
cmp r6, r5
beq _0202542C
add lr, lr, #2
add r4, r4, #1
_02025420:
ldrh r6, [lr]
cmp r6, #0
bne _02025410
_0202542C:
strb r4, [r0], #1
add r1, r1, #2
_02025434:
cmp r2, #0
sub r2, r2, #1
bgt _020253F0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02025444: .word _020B112C_JP
arm_func_end sub_020253E0_JP
#else
arm_func_start sub_02025404
sub_02025404: ; 0x02025404
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
b _02025424
_02025418:
ldrb r0, [r5], #1
bl sub_02025480
strh r0, [r6], #2
_02025424:
cmp r4, #0
sub r4, r4, #1
ble _0202543C
ldrb r0, [r5]
cmp r0, #0
bne _02025418
_0202543C:
cmp r4, #0
movgt r0, #0
strgth r0, [r6]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_02025404
arm_func_start sub_0202544C
sub_0202544C: ; 0x0202544C
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x40
mov r5, r0
add r0, sp, #0
mov r3, #1
mov r4, r2
bl sub_0202568C
add r1, sp, #0
mov r0, r5
mov r2, r4
bl StrncpyName
add sp, sp, #0x40
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0202544C
#endif
arm_func_start sub_02025480
sub_02025480: ; 0x02025480
stmdb sp!, {r3, lr}
#ifdef JAPAN
tst r0, #0xff00
moveq r0, r0, lsl #0x10
moveq r0, r0, lsr #0x10
ldmeqia sp!, {r3, pc}
#endif
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
mov ip, #0
#ifdef JAPAN
mov lr, #0x110
#else
mov lr, #0xdb
#endif
ldr r2, _020254F0 ; =_0209A044
b _020254C8
_020254A0:
add r1, ip, lr
add r1, r1, r1, lsr #31
mov r3, r1, asr #1
mov r1, r3, lsl #2
ldrh r1, [r2, r1]
cmp r1, r0
moveq ip, r3
beq _020254D0
addlt ip, r3, #1
movge lr, r3
_020254C8:
cmp ip, lr
blt _020254A0
_020254D0:
ldr r1, _020254F0 ; =_0209A044
mov r2, ip, lsl #2
ldrh r1, [r1, r2]
cmp r1, r0
ldreq r0, _020254F4 ; =_0209A046
ldreqh r0, [r0, r2]
movne r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_020254F0: .word _0209A044
_020254F4: .word _0209A046
arm_func_end sub_02025480
arm_func_start sub_020254F8
sub_020254F8: ; 0x020254F8
#ifdef JAPAN
stmdb sp!, {r3, lr}
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
cmp r0, #0xa
ldreq r0, _02025530 ; =0x000081A5
ldmeqia sp!, {r3, pc}
tst r0, #0xff00
ldmeqia sp!, {r3, pc}
mov lr, #0
ldr r3, _02025534 ; =_0209A044
ldr r1, _02025538 ; =0x00000111
b _02025520
_02025504:
add r2, r3, lr, lsl #2
ldrh r2, [r2, #2]
mov ip, lr, lsl #2
cmp r0, r2
ldreqh r0, [r3, ip]
ldmeqia sp!, {r3, pc}
add lr, lr, #1
_02025520:
cmp lr, r1
blt _02025504
mov r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_02025530: .word 0x000081A5
_02025534: .word _0209A044
_02025538: .word 0x00000111
#else
cmp r0, #0
moveq r0, #0
bxeq lr
cmp r0, #0xa
moveq r0, #0xa
bxeq lr
mov ip, #0
ldr r2, _02025548 ; =_0209A044
b _02025538
_0202551C:
add r1, r2, ip, lsl #2
ldrh r1, [r1, #2]
mov r3, ip, lsl #2
cmp r0, r1
ldreqh r0, [r2, r3]
bxeq lr
add ip, ip, #1
_02025538:
cmp ip, #0xdc
blt _0202551C
mov r0, #0
bx lr
.align 2, 0
_02025548: .word _0209A044
#endif
arm_func_end sub_020254F8
arm_func_start sub_0202554C
sub_0202554C: ; 0x0202554C
stmdb sp!, {r3, lr}
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, pc}
cmp r0, #0xa
#ifdef JAPAN
ldreq r0, _020255BC ; =0x000081A5
#else
moveq r0, #0xa
#endif
ldmeqia sp!, {r3, pc}
mov lr, #0
ldr ip, _020255CC ; =0x000001BE
ldr r2, _020255D0 ; =_0209A3B4
b _020255A4
_02025578:
add r1, lr, ip
add r1, r1, r1, lsr #31
mov r3, r1, asr #1
mov r1, r3, lsl #2
ldrh r1, [r2, r1]
cmp r0, r1
moveq lr, r3
beq _020255AC
cmp r1, r0
addlo lr, r3, #1
movhs ip, r3
_020255A4:
cmp lr, ip
blt _02025578
_020255AC:
ldr r1, _020255D0 ; =_0209A3B4
mov r2, lr, lsl #2
ldrh r1, [r1, r2]
cmp r0, r1
ldreq r0, _020255D4 ; =_0209A3B6
ldreqh r0, [r0, r2]
#ifdef JAPAN
ldrne r0, _020255CC_JP ; =0x00008148
#else
movne r0, #0x3f
#endif
ldmia sp!, {r3, pc}
.align 2, 0
#ifdef JAPAN
_020255BC: .word 0x000081A5
_020255CC: .word 0x000001BF
#else
_020255CC: .word 0x000001BE
#endif
_020255D0: .word _0209A3B4
_020255D4: .word _0209A3B6
#ifdef JAPAN
_020255CC_JP: .word 0x00008148
#endif
arm_func_end sub_0202554C
arm_func_start sub_020255D8
sub_020255D8: ; 0x020255D8
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
str r1, [sp]
add r4, sp, #0
b _020255FC
_020255EC:
mov r0, r4
bl sub_0202065C
bl sub_02025480
strh r0, [r5], #2
_020255FC:
ldr r0, [sp]
ldrb r0, [r0]
cmp r0, #0
bne _020255EC
mov r1, #0
mov r0, r5
strh r1, [r5]
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_020255D8
arm_func_start sub_0202561C
sub_0202561C: ; 0x0202561C
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #4
mov r4, r0
mov r8, r2
mov r7, r3
str r1, [sp]
mov r6, #0
add r5, sp, #0
b _02025654
_02025640:
mov r0, r5
bl sub_0202065C
bl sub_02025480
strh r0, [r4], #2
add r6, r6, #1
_02025654:
ldr r0, [sp]
ldrb r0, [r0]
cmp r0, #0
beq _0202566C
cmp r6, r8
blt _02025640
_0202566C:
cmp r7, #0
beq _02025680
cmp r6, r8
movlt r0, #0
strlth r0, [r4]
_02025680:
mov r0, r4
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
arm_func_end sub_0202561C
arm_func_start sub_0202568C
sub_0202568C: ; 0x0202568C
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, #0
b _020256C0
_0202569C:
bl sub_020254F8
ands r1, r0, #0xff00
movne r1, r1, asr #8
strneb r1, [r7]
strneb r0, [r7, #1]
addne r7, r7, #2
streqb r0, [r7], #1
add r6, r6, #2
add r4, r4, #1
_020256C0:
ldrh r0, [r6]
cmp r0, #0
beq _020256D4
cmp r4, r5
blt _0202569C
_020256D4:
mov r0, r7
ldmia sp!, {r3, r4, r5, r6, r7, pc}
#else
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r4, r0
mov r8, r1
mov r7, r2
mov r6, r3
mov r5, #0
b _020256CC
_020256A8:
bl sub_020254F8
ands r1, r0, #0xff00
movne r1, r1, asr #8
strneb r1, [r4]
strneb r0, [r4, #1]
addne r4, r4, #2
streqb r0, [r4], #1
add r8, r8, #2
add r5, r5, #1
_020256CC:
ldrh r0, [r8]
cmp r0, #0
beq _020256E0
cmp r5, r7
blt _020256A8
_020256E0:
cmp r6, #0
beq _020256F4
cmp r5, r7
movlt r0, #0
strltb r0, [r4]
_020256F4:
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, pc}
#endif
arm_func_end sub_0202568C
arm_func_start sub_020256FC
sub_020256FC: ; 0x020256FC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
mov sb, r1
mov r8, r2
mov r7, #0
mov r5, #0x81
mov r4, #0x48
ldr fp, _02025780 ; =0x000081A1
b _02025764
_02025720:
bl sub_0202554C
mov r6, r0
bl sub_02025C7C
#ifdef JAPAN
ldrh r0, [r0, #4]
#else
ldrh r0, [r0]
#endif
cmp r0, fp
streqb r5, [sl]
streqb r4, [sl, #1]
addeq sl, sl, #2
beq _0202575C
ands r0, r6, #0xff00
movne r0, r0, asr #8
strneb r0, [sl]
strneb r6, [sl, #1]
addne sl, sl, #2
streqb r6, [sl], #1
_0202575C:
add sb, sb, #2
add r7, r7, #1
_02025764:
ldrh r0, [sb]
cmp r0, #0
beq _02025778
cmp r7, r8
blt _02025720
_02025778:
mov r0, sl
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02025780: .word 0x000081A1
arm_func_end sub_020256FC
arm_func_start sub_02025784
sub_02025784: ; 0x02025784
bx lr
arm_func_end sub_02025784

10
include/main_020251AC.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_MAIN_020251AC_H
#define PMDSKY_MAIN_020251AC_H
void SetQuestionMarks(char *s);
void StrcpySimple(unsigned char* dest, const unsigned char* src);
void StrncpySimple(unsigned char* dest, const unsigned char* src, s32 n);
void StrncpySimpleNoPad(unsigned char* dest, const unsigned char* src, s32 n);
int StrncmpSimple(const unsigned char* c1, const unsigned char* c2, s32 n);
#endif //PMDSKY_MAIN_020251AC_H

View File

@@ -33,6 +33,8 @@ Static main
Object asm/main_0200ED1C.o
Object src/moves.o
Object asm/main_02013AD0.o
Object src/main_020251AC.o
Object asm/main_020251F0.o
Object src/main_02025788.o
Object asm/main_020257FC.o
Object src/main_0202593C.o

80
src/main_020251AC.c Normal file
View File

@@ -0,0 +1,80 @@
#include "main_020251AC.h"
void SetQuestionMarks(char *s)
{
#ifdef JAPAN
s[0]=0xf;
s[1]=0xf;
s[2]=0xf;
#else
s[0]=0x3f;
s[1]=0x3f;
s[2]=0x3f;
#endif
s[3]=0;
}
void StrcpySimple(unsigned char* dest, const unsigned char* src)
{
unsigned char* dest_tmp;
do {
dest_tmp = dest;
*dest++ = *src++;
} while (*dest_tmp!=0);
}
void StrncpySimple(unsigned char* dest, const unsigned char* src, s32 n)
{
s32 bytes_copied = 0;
unsigned char* dest_tmp;
while (bytes_copied < n) {
dest_tmp = dest;
*dest++ = *src++;
if (*dest_tmp == 0) {
bytes_copied+=1;
while (bytes_copied < n) {
*dest++=0;
bytes_copied+=1;
}
return;
}
bytes_copied++;
}
}
void StrncpySimpleNoPad(unsigned char* dest, const unsigned char* src, s32 n)
{
s32 bytes_copied = 0;
unsigned char* dest_tmp;
while (bytes_copied < n) {
dest_tmp = dest;
*dest++ = *src++;
if (*dest_tmp == 0) {
return;
}
bytes_copied++;
}
*dest=0;
}
int StrncmpSimple(const unsigned char* s1, const unsigned char* s2, s32 n)
{
s32 bytes_compared = 0;
do {
unsigned char c1 = *(s1+bytes_compared);
unsigned char c2 = *(s2+bytes_compared);
bytes_compared++;
if (c1!=c2) {
if (c1<c2) {
return -1;
} else {
return 1;
}
} else {
if (c1==0) {
return 0;
}
}
} while (bytes_compared < n);
return 0;
}