diff --git a/asm/include/main_02013AD0.inc b/asm/include/main_02013AD0.inc index e5aa25a6..41905c0e 100644 --- a/asm/include/main_02013AD0.inc +++ b/asm/include/main_02013AD0.inc @@ -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 diff --git a/asm/include/main_020251F0.inc b/asm/include/main_020251F0.inc new file mode 100644 index 00000000..cff72eb0 --- /dev/null +++ b/asm/include/main_020251F0.inc @@ -0,0 +1,8 @@ +#pragma once +.public _0209A044 +.public _0209A046 +.public _0209A3B4 +.public _0209A3B6 +.public _020B112C_JP +.public sub_0202065C +.public sub_02025C7C diff --git a/asm/main_02013AD0.s b/asm/main_02013AD0.s index ce78d9c4..2de3b799 100644 --- a/asm/main_02013AD0.s +++ b/asm/main_02013AD0.s @@ -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 diff --git a/asm/main_020251F0.s b/asm/main_020251F0.s new file mode 100644 index 00000000..0f61c6c9 --- /dev/null +++ b/asm/main_020251F0.s @@ -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 diff --git a/include/main_020251AC.h b/include/main_020251AC.h new file mode 100644 index 00000000..c9f03389 --- /dev/null +++ b/include/main_020251AC.h @@ -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 diff --git a/main.lsf b/main.lsf index 09a569a9..efd1d9ac 100644 --- a/main.lsf +++ b/main.lsf @@ -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 diff --git a/src/main_020251AC.c b/src/main_020251AC.c new file mode 100644 index 00000000..e7c40879 --- /dev/null +++ b/src/main_020251AC.c @@ -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