diff --git a/.gitattributes b/.gitattributes index bc69cf966..feb6923ea 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,6 @@ charmap.txt text eol=crlf m2ctx.sh text eol=lf +*.png binary + * text eol=crlf diff --git a/arm7/global.inc b/arm7/global.inc index 6403574ba..71ae9d3f7 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -1,505 +1,505 @@ -.extern SDK_AUTOLOAD_ITCM_START -.extern SDK_AUTOLOAD_DTCM_START -.extern SDK_AUTOLOAD_LIST -.extern SDK_AUTOLOAD_LIST_END -.extern SDK_AUTOLOAD_START -.extern SDK_MAIN_ARENA_LO -.extern SDK_SECTION_ARENA_DTCM_START -.extern SDK_SECTION_ARENA_EX_START -.extern SDK_SECTION_ARENA_ITCM_START -.extern SDK_STATIC_BSS_END -.extern SDK_STATIC_BSS_START - -; .itcm -.extern WVR_ShelterExtWram - -; .wram -.extern OS_IrqHandler -.extern NitroSpMain -.extern CARDi_EraseBackupSectorCore -.extern CARDi_EraseChipCore -.extern CARDi_InitCommon -.extern CARDi_InitStatusRegister -.extern CARDi_OnFifoRecv -.extern CARDi_ProgramBackupCore -.extern CARDi_ReadBackupCore -.extern CARDi_ReadRomID -.extern CARDi_ReadRomIDCore -.extern CARDi_TaskThread -.extern CARDi_VerifyBackupCore -.extern CARDi_WriteBackupCore -.extern CARD_GetRomHeader -.extern CARD_Init -.extern CARD_InitPulledOutCallback -.extern FUN_03800E0C -.extern OS_IrqHandler_ThreadSwitch -.extern OSi_EnterTimerCallback -.extern OSi_IrqVBlank -.extern OSi_IrqTimer3 -.extern OSi_IrqTimer2 -.extern OSi_IrqTimer1 -.extern OSi_IrqTimer0 -.extern OSi_IrqDma3 -.extern OSi_IrqDma2 -.extern OSi_IrqDma1 -.extern OSi_IrqDma0 -.extern OSi_RemoveMutexLinkFromQueue -.extern OSi_SetTimerReserved -.extern OSi_UnlockAllMutex -.extern OS_IrqDummy -.extern OS_CheckHeap -.extern OS_CreateHeap -.extern OS_CreateHeap -.extern OS_DisableInterrupts_IrqAndFiq -.extern OS_DisableIrqMask -.extern OS_EnableInterrupts -.extern OS_EnableIrqMask -.extern OS_GetArenaHi -.extern OS_GetArenaLo -.extern OS_GetProcMode -.extern OS_Init -.extern OS_InitAlloc -.extern OS_InitArena -.extern OS_InitContext -.extern OS_InitIrqTable -.extern OS_InitLock -.extern OS_InitReset -.extern OS_InitThread -.extern OS_IsResetOccurred -.extern OS_IsTickAvailable -.extern OS_LoadContext -.extern OS_ResetRequestIrqMask -.extern OS_ResetSystem -.extern OS_RestoreInterrupts_IrqAndFiq -.extern OS_SaveContext -.extern OS_SetArenaLo -.extern OS_SetCurrentHeap -.extern OS_SetIrqMask -.extern OS_SetIrqFunction -.extern OS_UnLockCartridge -.extern OS_GetLockID -.extern OS_ReleaseLockID -.extern OS_ReadOwnerOfLockWord -.extern OS_TryLockCartridge -.extern OS_UnlockCartridge -.extern OS_LockCartridge -.extern FUN_037F8000 -.extern FUN_037F8530 -.extern FUN_037F8CB4 -.extern OS_Sleep -.extern OS_WakeupThreadDirect -.extern OS_WakeupThread -.extern OS_SleepThread -.extern OS_JoinThread -.extern OS_ExitThread -.extern OS_CreateThread -.extern OS_ReadMessage -.extern OS_ReceiveMessage -.extern OS_SendMessage -.extern OS_InitMessageQueue -.extern OS_UnlockMutex -.extern OS_LockMutex -.extern OS_InitTick -.extern OS_CancelAlarm -.extern OS_SetAlarm -.extern OS_CreateAlarm -.extern OS_InitAlarm -.extern OS_CancelVAlarms -.extern OS_SetVAlarmTag -.extern OS_SetPeriodicVAlarm -.extern OS_CreateVAlarm -.extern OS_IsVAlarmAvailable -.extern OS_InitVAlarm -.extern OS_DisableInterrupts -.extern OS_RestoreInterrupts -.extern OS_SpinWait -.extern MIi_CpuClear32 -.extern MIi_CpuClearFast -.extern MIi_CpuCopyFast -.extern MI_CpuFill8 -.extern MI_SwapWord -.extern PXI_Init -.extern PXI_InitFifo -.extern PXI_IsCallbackReady -.extern PXI_SendWordByFifo -.extern PXI_SetFifoRecvCallback -.extern EXIi_SelectRcnt -.extern EXIi_SetBitRcnt0L -.extern PADi_xyButtonAlarmHandler -.extern SNDi_LockMutex -.extern SNDi_SetPlayerParam -.extern SNDi_SetSurroundDecay -.extern SNDi_SetTrackParam -.extern SNDi_UnlockMutex -.extern SND_AlarmInit -.extern SND_AllocExChannel -.extern SND_BeginSleep -.extern SND_CalcChannelVolume -.extern SND_CalcRandom -.extern SND_CalcTimer -.extern SND_CommandInit -.extern SND_CommandProc -.extern SND_Enable -.extern SND_EndSleep -.extern SND_ExChannelInit -.extern SND_ExChannelMain -.extern SND_FreeExChannel -.extern SND_GetChannelControl -.extern SND_GetLfoValue -.extern SND_GetLockedChannel -.extern SND_Init -.extern SND_InitLfoParam -.extern SND_InvalidateBank -.extern SND_InvalidateSeq -.extern SND_InvalidateWave -.extern SND_IsCaptureActive -.extern SND_IsChannelActive -.extern SND_IsExChannelActive -.extern SND_LockChannel -.extern SND_NoteOn -.extern SND_PauseSeq -.extern SND_PrepareSeq -.extern SND_ReadInstData -.extern SND_ReleaseExChannel -.extern SND_SendWakeupMessage -.extern SND_SetChannelPan -.extern SND_SetChannelTimer -.extern SND_SetChannelVolume -.extern SND_SetExChannelAttack -.extern SND_SetExChannelDecay -.extern SND_SetExChannelRelease -.extern SND_SetExChannelSustain -.extern SND_SetMasterPan -.extern SND_SetMasterVolume -.extern SND_SetOutputSelector -.extern SND_SetPlayerGlobalVariable -.extern SND_SetPlayerLocalVariable -.extern SND_SetTrackAllocatableChannel -.extern SND_SetTrackMute -.extern SND_SetupAlarm -.extern SND_SetupCapture -.extern SND_SetupChannelNoise -.extern SND_SetupChannelPcm -.extern SND_SetupChannelPsg -.extern SND_SeqInit -.extern SND_SeqMain -.extern SND_Shutdown -.extern SND_SinIdx -.extern SND_SkipSeq -.extern SND_StartAlarm -.extern SND_StartExChannelNoise -.extern SND_StartExChannelPcm -.extern SND_StartExChannelPsg -.extern SND_StartIntervalTimer -.extern SND_StartLfo -.extern SND_StartPreparedSeq -.extern SND_StartSeq -.extern SND_StopAlarm -.extern SND_StopChannel -.extern SND_StopIntervalTimer -.extern SND_StopSeq -.extern SND_StopUnlockedChannel -.extern SND_UnlockChannel -.extern SND_UpdateExChannel -.extern SND_UpdateLfo -.extern SND_UpdateSharedWork -.extern ExChannelLfoUpdate -.extern ExChannelSweepUpdate -.extern ExChannelVolumeCmp -.extern ExChannelStart -.extern ExChannelSetup -.extern TrackMute -.extern AllocateTrack -.extern PlayerStepTicks -.extern PlayerUpdateChannelVolume -.extern PlayerStop -.extern PlayerGetTrack -.extern PlayerSeqMain -.extern TrackFreeChannels -.extern TrackReleaseChannels -.extern PlayerSetBank -.extern TrackSetSeq -.extern TrackInit -.extern TrackReadU16 -.extern SeqReadByte -.extern SeqCacheFetch -.extern SPIi_CheckEntry -.extern SPIi_CheckException -.extern SPIi_GetException -.extern SPIi_ReleaseException -.extern SPIi_ReturnResult -.extern SPIi_SetEntry -.extern SPI_Init -.extern FUN_03801660 -.extern FUN_038016A8 -.extern PMi_ResetControl -.extern PMi_SetControl -.extern PMi_SetLED -.extern PM_AnalyzeCommand -.extern PM_ExecuteProcess -.extern PM_Init -.extern PM_SelfBlinkProc -.extern MIC_AnalyzeCommand -.extern MIC_ExecuteProcess -.extern MIC_Init -.extern TP_AnalyzeCommand -.extern TP_ExecuteProcess -.extern TP_Init -.extern CTRDGi_InitCommon -.extern CTRDGi_SendtoPxi -.extern CTRDG_CheckPullOut_Polling -.extern CTRDG_VibPulseEdgeUpdate -.extern CTRDG_Init -.extern CTRDG_IsExisting -.extern CTRDG_IsPulledOut -.extern NVRAM_AnalyzeCommand -.extern NVRAM_ExecuteProcess -.extern NVRAM_Init -.extern NVRAM_ReadDataBytes -.extern RTC_Init -.extern RTC_ReadAdjust -.extern RTC_ReadAlarm1 -.extern RTC_ReadAlarm2 -.extern RTC_ReadDate -.extern RTC_ReadDateTime -.extern RTC_ReadFree -.extern RTC_ReadPulse -.extern RTC_ReadStatus1 -.extern RTC_ReadStatus2 -.extern RTC_ReadTime -.extern RTC_Reset -.extern RTC_SetHourFormat -.extern RTC_WriteAdjust -.extern RTC_WriteAlarm1 -.extern RTC_WriteAlarm2 -.extern RTC_WriteDateTime -.extern RTC_WriteFree -.extern RTC_WritePulse -.extern RTC_WriteStatus1 -.extern RTC_WriteStatus2 -.extern RTC_WriteTime -.extern WVR_Shutdown -.extern WVR_Init -.extern FUN_038073EC -.extern WMSP_GetAllowedChannel -.extern OS_DisableIrqMask -.extern OS_EnableIrqMask -.extern OS_SetIrqFunction -.extern OS_GetLockID -.extern OS_EnableScheduler -.extern OS_DisableScheduler -.extern OS_Sleep -.extern OS_SetThreadPriority -.extern OS_WakeupThreadDirect -.extern OS_IsThreadTerminated -.extern OS_JoinThread -.extern OS_ExitThread -.extern OS_CreateThread -.extern OS_ReceiveMessage -.extern OS_SendMessage -.extern OS_InitMessageQueue -.extern OS_UnlockMutex -.extern OS_LockMutex -.extern OS_InitMutex -.extern OS_FreeToHeap -.extern OS_AllocFromHeap -.extern OS_GetTick -.extern OS_CancelAlarm -.extern OS_SetPeriodicAlarm -.extern OS_SetAlarm -.extern OS_CreateAlarm -.extern OS_IsAlarmAvailable -.extern OS_CancelVAlarm -.extern OS_SetVAlarm -.extern OS_CreateVAlarm -.extern OS_IsVAlarmAvailable -.extern OS_InitVAlarm -.extern OS_DisableInterrupts -.extern OS_RestoreInterrupts -.extern OS_Terminate -.extern MI_StopDma -.extern MI_WaitDma -.extern MIi_CpuClear16 -.extern MIi_CpuCopy16 -.extern MIi_CpuClear32 -.extern MIi_CpuCopy32 -.extern MIi_CpuClearFast -.extern MI_CpuFill8 -.extern MI_CpuCopy8 -.extern PXI_Init -.extern PXI_SetFifoRecvCallback -.extern SND_BeginSleep -.extern SPI_Unlock -.extern SPI_Lock -.extern PM_SetLEDPattern -.extern NVRAM_SoftwareReset -.extern NVRAM_ReadDataBytes -.extern NVRAM_ReadStatusRegister -.extern FUN_03806F8C -.extern WMSP_GetAllowedChannel -.extern WMSP_GetBuffer4Callback2Wm9 -.extern WMSP_ReturnResult2Wm9 -.extern MATH_CountPopulation -.extern _0380B764 -.extern _0380B808 -.extern _0380B8AC -.extern _0380B8D8 -.extern _0380B904 -.extern _ll_sdiv -.extern _ll_udiv -.extern _s32_div_f -.extern _u32_div_f -.extern sLfoSinTable -.extern SNDi_DecibelSquareTable -.extern sSampleDataShiftTable -.extern sChannelAllocationOrder -.extern sAttackCoeffTable -.extern _038072BC -.extern _038072C0 -.extern _038072C4 -.extern _038072C8 -.extern SVC_CpuSet -.extern SVC_GetCRC16 -.extern SVC_GetPitchTable -.extern SVC_GetVolumeTable -.extern SVC_Halt -.extern SVC_SoundBiasReset -.extern SVC_SoundBiasSet -.extern SVC_Stop -.extern SVC_WaitByLoop -.extern _038075E4 -.extern OS_IRQTable -.extern sMasterPan -.extern _03807660 -.extern cardi_rom_header_addr -.extern CARD_CheckPullOut_Polling -.extern CARD_SetThreadPriority -.extern _03807668 -.extern _0380766C -.extern PMi_LEDStatus -.extern PMi_BlinkPatternData -.extern _03807704 -.extern _03807708 -.extern OSi_IrqThreadQueue -.extern OSi_IrqCallbackInfo -.extern _03807718 -.extern _0380771C -.extern _03807744 -.extern _03807748 -.extern _0380774C -.extern _03807774 -.extern _03807780 -.extern OSi_StackForDestructor -.extern OSi_RescheduleCount -.extern _0380778C -.extern OSi_SystemCallbackInSwitchThread -.extern OSi_CurrentThreadPtr -.extern OSi_IsThreadInitialized -.extern OSi_ThreadInfo -.extern _038077A0 -.extern OSi_IdleThread -.extern OSi_LauncherThread -.extern _038078F4 -.extern OSiHeapInfo -.extern _0380791C -.extern OSi_UseTick -.extern OSi_NeedResetTimer -.extern OSi_TickCounter -.extern _03807930 -.extern _03807934 -.extern _0380793C -.extern _03807940 -.extern _03807944 -.extern _03807948 -.extern _03807950 -.extern _03807954 -.extern _03807958 -.extern _0380795C -.extern PAD_InitXYButton -.extern PADi_XYButtonAvailable -.extern _038079E0 -.extern sSurroundDecay -.extern sOrgPan -.extern sOrgVolume -.extern _03807A30 -.extern _03807A34 -.extern _03807A54 -.extern _03807A74 -.extern _03807AA0 -.extern _03807F4C -.extern _03807F50 -.extern _03807F58 -.extern SNDi_SharedWork -.extern SNDi_Work -.extern _038084AC -.extern _038086EC -.extern _03808EEC -.extern _038090EC -.extern _0380910C -.extern _0380912C -.extern cardi_common -.extern _03809188 -.extern _03809760 -.extern _03809764 -.extern cardi_rom_base -.extern rom_stat -.extern _038099A0 -.extern _038099A4 -.extern _038099A8 -.extern _038099AC -.extern _038099B0 -.extern _038099B8 -.extern _03809C5C -.extern _03809C7C -.extern _03809CBC -.extern _03809CC0 -.extern _03809E40 -.extern _03809E4C -.extern _03809E50 -.extern _03809E54 -.extern _03809E80 -.extern _03809F28 -.extern PMi_KeyPattern -.extern PMi_TriggerBL -.extern PMi_Initialized -.extern PMi_Work -.extern _03809F64 -.extern PMi_BlinkPatternNo -.extern _03809F6C -.extern _03809FA8 -.extern CTRDGi_Work -.extern _03809FBC -.extern current_vib -.extern _03809FC4 -.extern _03809FC8 -.extern _03809FCC -.extern _03809FD0 -.extern _03809FD4 -.extern _03809FEC -.extern _0380A018 -.extern _0380A038 -.extern _0380A03C -.extern _0380A05C -.extern _0380A06C -.extern _0380A13C -.extern _0380A210 -.extern _0380A3F0 -.extern _0380A3F4 -.extern _0380A3F8 -.extern _0380A3FC -.extern _0380A400 -.extern _0380A4A4 -.extern _0380AA64 -.extern _0380B064 -.extern FS_Init - -; .ext -.extern WMSP_GetIndicateThread -.extern WMSP_GetRequestThread -.extern WM_sp_init -.extern WMSP_CancelAllAlarms -.extern WMSP_CancelVAlarm -.extern WL_Terminate -.extern wmspW -.extern _0601A960 -.extern _0601AE88 +.extern SDK_AUTOLOAD_ITCM_START +.extern SDK_AUTOLOAD_DTCM_START +.extern SDK_AUTOLOAD_LIST +.extern SDK_AUTOLOAD_LIST_END +.extern SDK_AUTOLOAD_START +.extern SDK_MAIN_ARENA_LO +.extern SDK_SECTION_ARENA_DTCM_START +.extern SDK_SECTION_ARENA_EX_START +.extern SDK_SECTION_ARENA_ITCM_START +.extern SDK_STATIC_BSS_END +.extern SDK_STATIC_BSS_START + +; .itcm +.extern WVR_ShelterExtWram + +; .wram +.extern OS_IrqHandler +.extern NitroSpMain +.extern CARDi_EraseBackupSectorCore +.extern CARDi_EraseChipCore +.extern CARDi_InitCommon +.extern CARDi_InitStatusRegister +.extern CARDi_OnFifoRecv +.extern CARDi_ProgramBackupCore +.extern CARDi_ReadBackupCore +.extern CARDi_ReadRomID +.extern CARDi_ReadRomIDCore +.extern CARDi_TaskThread +.extern CARDi_VerifyBackupCore +.extern CARDi_WriteBackupCore +.extern CARD_GetRomHeader +.extern CARD_Init +.extern CARD_InitPulledOutCallback +.extern FUN_03800E0C +.extern OS_IrqHandler_ThreadSwitch +.extern OSi_EnterTimerCallback +.extern OSi_IrqVBlank +.extern OSi_IrqTimer3 +.extern OSi_IrqTimer2 +.extern OSi_IrqTimer1 +.extern OSi_IrqTimer0 +.extern OSi_IrqDma3 +.extern OSi_IrqDma2 +.extern OSi_IrqDma1 +.extern OSi_IrqDma0 +.extern OSi_RemoveMutexLinkFromQueue +.extern OSi_SetTimerReserved +.extern OSi_UnlockAllMutex +.extern OS_IrqDummy +.extern OS_CheckHeap +.extern OS_CreateHeap +.extern OS_CreateHeap +.extern OS_DisableInterrupts_IrqAndFiq +.extern OS_DisableIrqMask +.extern OS_EnableInterrupts +.extern OS_EnableIrqMask +.extern OS_GetArenaHi +.extern OS_GetArenaLo +.extern OS_GetProcMode +.extern OS_Init +.extern OS_InitAlloc +.extern OS_InitArena +.extern OS_InitContext +.extern OS_InitIrqTable +.extern OS_InitLock +.extern OS_InitReset +.extern OS_InitThread +.extern OS_IsResetOccurred +.extern OS_IsTickAvailable +.extern OS_LoadContext +.extern OS_ResetRequestIrqMask +.extern OS_ResetSystem +.extern OS_RestoreInterrupts_IrqAndFiq +.extern OS_SaveContext +.extern OS_SetArenaLo +.extern OS_SetCurrentHeap +.extern OS_SetIrqMask +.extern OS_SetIrqFunction +.extern OS_UnLockCartridge +.extern OS_GetLockID +.extern OS_ReleaseLockID +.extern OS_ReadOwnerOfLockWord +.extern OS_TryLockCartridge +.extern OS_UnlockCartridge +.extern OS_LockCartridge +.extern FUN_037F8000 +.extern FUN_037F8530 +.extern FUN_037F8CB4 +.extern OS_Sleep +.extern OS_WakeupThreadDirect +.extern OS_WakeupThread +.extern OS_SleepThread +.extern OS_JoinThread +.extern OS_ExitThread +.extern OS_CreateThread +.extern OS_ReadMessage +.extern OS_ReceiveMessage +.extern OS_SendMessage +.extern OS_InitMessageQueue +.extern OS_UnlockMutex +.extern OS_LockMutex +.extern OS_InitTick +.extern OS_CancelAlarm +.extern OS_SetAlarm +.extern OS_CreateAlarm +.extern OS_InitAlarm +.extern OS_CancelVAlarms +.extern OS_SetVAlarmTag +.extern OS_SetPeriodicVAlarm +.extern OS_CreateVAlarm +.extern OS_IsVAlarmAvailable +.extern OS_InitVAlarm +.extern OS_DisableInterrupts +.extern OS_RestoreInterrupts +.extern OS_SpinWait +.extern MIi_CpuClear32 +.extern MIi_CpuClearFast +.extern MIi_CpuCopyFast +.extern MI_CpuFill8 +.extern MI_SwapWord +.extern PXI_Init +.extern PXI_InitFifo +.extern PXI_IsCallbackReady +.extern PXI_SendWordByFifo +.extern PXI_SetFifoRecvCallback +.extern EXIi_SelectRcnt +.extern EXIi_SetBitRcnt0L +.extern PADi_xyButtonAlarmHandler +.extern SNDi_LockMutex +.extern SNDi_SetPlayerParam +.extern SNDi_SetSurroundDecay +.extern SNDi_SetTrackParam +.extern SNDi_UnlockMutex +.extern SND_AlarmInit +.extern SND_AllocExChannel +.extern SND_BeginSleep +.extern SND_CalcChannelVolume +.extern SND_CalcRandom +.extern SND_CalcTimer +.extern SND_CommandInit +.extern SND_CommandProc +.extern SND_Enable +.extern SND_EndSleep +.extern SND_ExChannelInit +.extern SND_ExChannelMain +.extern SND_FreeExChannel +.extern SND_GetChannelControl +.extern SND_GetLfoValue +.extern SND_GetLockedChannel +.extern SND_Init +.extern SND_InitLfoParam +.extern SND_InvalidateBank +.extern SND_InvalidateSeq +.extern SND_InvalidateWave +.extern SND_IsCaptureActive +.extern SND_IsChannelActive +.extern SND_IsExChannelActive +.extern SND_LockChannel +.extern SND_NoteOn +.extern SND_PauseSeq +.extern SND_PrepareSeq +.extern SND_ReadInstData +.extern SND_ReleaseExChannel +.extern SND_SendWakeupMessage +.extern SND_SetChannelPan +.extern SND_SetChannelTimer +.extern SND_SetChannelVolume +.extern SND_SetExChannelAttack +.extern SND_SetExChannelDecay +.extern SND_SetExChannelRelease +.extern SND_SetExChannelSustain +.extern SND_SetMasterPan +.extern SND_SetMasterVolume +.extern SND_SetOutputSelector +.extern SND_SetPlayerGlobalVariable +.extern SND_SetPlayerLocalVariable +.extern SND_SetTrackAllocatableChannel +.extern SND_SetTrackMute +.extern SND_SetupAlarm +.extern SND_SetupCapture +.extern SND_SetupChannelNoise +.extern SND_SetupChannelPcm +.extern SND_SetupChannelPsg +.extern SND_SeqInit +.extern SND_SeqMain +.extern SND_Shutdown +.extern SND_SinIdx +.extern SND_SkipSeq +.extern SND_StartAlarm +.extern SND_StartExChannelNoise +.extern SND_StartExChannelPcm +.extern SND_StartExChannelPsg +.extern SND_StartIntervalTimer +.extern SND_StartLfo +.extern SND_StartPreparedSeq +.extern SND_StartSeq +.extern SND_StopAlarm +.extern SND_StopChannel +.extern SND_StopIntervalTimer +.extern SND_StopSeq +.extern SND_StopUnlockedChannel +.extern SND_UnlockChannel +.extern SND_UpdateExChannel +.extern SND_UpdateLfo +.extern SND_UpdateSharedWork +.extern ExChannelLfoUpdate +.extern ExChannelSweepUpdate +.extern ExChannelVolumeCmp +.extern ExChannelStart +.extern ExChannelSetup +.extern TrackMute +.extern AllocateTrack +.extern PlayerStepTicks +.extern PlayerUpdateChannelVolume +.extern PlayerStop +.extern PlayerGetTrack +.extern PlayerSeqMain +.extern TrackFreeChannels +.extern TrackReleaseChannels +.extern PlayerSetBank +.extern TrackSetSeq +.extern TrackInit +.extern TrackReadU16 +.extern SeqReadByte +.extern SeqCacheFetch +.extern SPIi_CheckEntry +.extern SPIi_CheckException +.extern SPIi_GetException +.extern SPIi_ReleaseException +.extern SPIi_ReturnResult +.extern SPIi_SetEntry +.extern SPI_Init +.extern FUN_03801660 +.extern FUN_038016A8 +.extern PMi_ResetControl +.extern PMi_SetControl +.extern PMi_SetLED +.extern PM_AnalyzeCommand +.extern PM_ExecuteProcess +.extern PM_Init +.extern PM_SelfBlinkProc +.extern MIC_AnalyzeCommand +.extern MIC_ExecuteProcess +.extern MIC_Init +.extern TP_AnalyzeCommand +.extern TP_ExecuteProcess +.extern TP_Init +.extern CTRDGi_InitCommon +.extern CTRDGi_SendtoPxi +.extern CTRDG_CheckPullOut_Polling +.extern CTRDG_VibPulseEdgeUpdate +.extern CTRDG_Init +.extern CTRDG_IsExisting +.extern CTRDG_IsPulledOut +.extern NVRAM_AnalyzeCommand +.extern NVRAM_ExecuteProcess +.extern NVRAM_Init +.extern NVRAM_ReadDataBytes +.extern RTC_Init +.extern RTC_ReadAdjust +.extern RTC_ReadAlarm1 +.extern RTC_ReadAlarm2 +.extern RTC_ReadDate +.extern RTC_ReadDateTime +.extern RTC_ReadFree +.extern RTC_ReadPulse +.extern RTC_ReadStatus1 +.extern RTC_ReadStatus2 +.extern RTC_ReadTime +.extern RTC_Reset +.extern RTC_SetHourFormat +.extern RTC_WriteAdjust +.extern RTC_WriteAlarm1 +.extern RTC_WriteAlarm2 +.extern RTC_WriteDateTime +.extern RTC_WriteFree +.extern RTC_WritePulse +.extern RTC_WriteStatus1 +.extern RTC_WriteStatus2 +.extern RTC_WriteTime +.extern WVR_Shutdown +.extern WVR_Init +.extern FUN_038073EC +.extern WMSP_GetAllowedChannel +.extern OS_DisableIrqMask +.extern OS_EnableIrqMask +.extern OS_SetIrqFunction +.extern OS_GetLockID +.extern OS_EnableScheduler +.extern OS_DisableScheduler +.extern OS_Sleep +.extern OS_SetThreadPriority +.extern OS_WakeupThreadDirect +.extern OS_IsThreadTerminated +.extern OS_JoinThread +.extern OS_ExitThread +.extern OS_CreateThread +.extern OS_ReceiveMessage +.extern OS_SendMessage +.extern OS_InitMessageQueue +.extern OS_UnlockMutex +.extern OS_LockMutex +.extern OS_InitMutex +.extern OS_FreeToHeap +.extern OS_AllocFromHeap +.extern OS_GetTick +.extern OS_CancelAlarm +.extern OS_SetPeriodicAlarm +.extern OS_SetAlarm +.extern OS_CreateAlarm +.extern OS_IsAlarmAvailable +.extern OS_CancelVAlarm +.extern OS_SetVAlarm +.extern OS_CreateVAlarm +.extern OS_IsVAlarmAvailable +.extern OS_InitVAlarm +.extern OS_DisableInterrupts +.extern OS_RestoreInterrupts +.extern OS_Terminate +.extern MI_StopDma +.extern MI_WaitDma +.extern MIi_CpuClear16 +.extern MIi_CpuCopy16 +.extern MIi_CpuClear32 +.extern MIi_CpuCopy32 +.extern MIi_CpuClearFast +.extern MI_CpuFill8 +.extern MI_CpuCopy8 +.extern PXI_Init +.extern PXI_SetFifoRecvCallback +.extern SND_BeginSleep +.extern SPI_Unlock +.extern SPI_Lock +.extern PM_SetLEDPattern +.extern NVRAM_SoftwareReset +.extern NVRAM_ReadDataBytes +.extern NVRAM_ReadStatusRegister +.extern FUN_03806F8C +.extern WMSP_GetAllowedChannel +.extern WMSP_GetBuffer4Callback2Wm9 +.extern WMSP_ReturnResult2Wm9 +.extern MATH_CountPopulation +.extern _0380B764 +.extern _0380B808 +.extern _0380B8AC +.extern _0380B8D8 +.extern _0380B904 +.extern _ll_sdiv +.extern _ll_udiv +.extern _s32_div_f +.extern _u32_div_f +.extern sLfoSinTable +.extern SNDi_DecibelSquareTable +.extern sSampleDataShiftTable +.extern sChannelAllocationOrder +.extern sAttackCoeffTable +.extern _038072BC +.extern _038072C0 +.extern _038072C4 +.extern _038072C8 +.extern SVC_CpuSet +.extern SVC_GetCRC16 +.extern SVC_GetPitchTable +.extern SVC_GetVolumeTable +.extern SVC_Halt +.extern SVC_SoundBiasReset +.extern SVC_SoundBiasSet +.extern SVC_Stop +.extern SVC_WaitByLoop +.extern _038075E4 +.extern OS_IRQTable +.extern sMasterPan +.extern _03807660 +.extern cardi_rom_header_addr +.extern CARD_CheckPullOut_Polling +.extern CARD_SetThreadPriority +.extern _03807668 +.extern _0380766C +.extern PMi_LEDStatus +.extern PMi_BlinkPatternData +.extern _03807704 +.extern _03807708 +.extern OSi_IrqThreadQueue +.extern OSi_IrqCallbackInfo +.extern _03807718 +.extern _0380771C +.extern _03807744 +.extern _03807748 +.extern _0380774C +.extern _03807774 +.extern _03807780 +.extern OSi_StackForDestructor +.extern OSi_RescheduleCount +.extern _0380778C +.extern OSi_SystemCallbackInSwitchThread +.extern OSi_CurrentThreadPtr +.extern OSi_IsThreadInitialized +.extern OSi_ThreadInfo +.extern _038077A0 +.extern OSi_IdleThread +.extern OSi_LauncherThread +.extern _038078F4 +.extern OSiHeapInfo +.extern _0380791C +.extern OSi_UseTick +.extern OSi_NeedResetTimer +.extern OSi_TickCounter +.extern _03807930 +.extern _03807934 +.extern _0380793C +.extern _03807940 +.extern _03807944 +.extern _03807948 +.extern _03807950 +.extern _03807954 +.extern _03807958 +.extern _0380795C +.extern PAD_InitXYButton +.extern PADi_XYButtonAvailable +.extern _038079E0 +.extern sSurroundDecay +.extern sOrgPan +.extern sOrgVolume +.extern _03807A30 +.extern _03807A34 +.extern _03807A54 +.extern _03807A74 +.extern _03807AA0 +.extern _03807F4C +.extern _03807F50 +.extern _03807F58 +.extern SNDi_SharedWork +.extern SNDi_Work +.extern _038084AC +.extern _038086EC +.extern _03808EEC +.extern _038090EC +.extern _0380910C +.extern _0380912C +.extern cardi_common +.extern _03809188 +.extern _03809760 +.extern _03809764 +.extern cardi_rom_base +.extern rom_stat +.extern _038099A0 +.extern _038099A4 +.extern _038099A8 +.extern _038099AC +.extern _038099B0 +.extern _038099B8 +.extern _03809C5C +.extern _03809C7C +.extern _03809CBC +.extern _03809CC0 +.extern _03809E40 +.extern _03809E4C +.extern _03809E50 +.extern _03809E54 +.extern _03809E80 +.extern _03809F28 +.extern PMi_KeyPattern +.extern PMi_TriggerBL +.extern PMi_Initialized +.extern PMi_Work +.extern _03809F64 +.extern PMi_BlinkPatternNo +.extern _03809F6C +.extern _03809FA8 +.extern CTRDGi_Work +.extern _03809FBC +.extern current_vib +.extern _03809FC4 +.extern _03809FC8 +.extern _03809FCC +.extern _03809FD0 +.extern _03809FD4 +.extern _03809FEC +.extern _0380A018 +.extern _0380A038 +.extern _0380A03C +.extern _0380A05C +.extern _0380A06C +.extern _0380A13C +.extern _0380A210 +.extern _0380A3F0 +.extern _0380A3F4 +.extern _0380A3F8 +.extern _0380A3FC +.extern _0380A400 +.extern _0380A4A4 +.extern _0380AA64 +.extern _0380B064 +.extern FS_Init + +; .ext +.extern WMSP_GetIndicateThread +.extern WMSP_GetRequestThread +.extern WM_sp_init +.extern WMSP_CancelAllAlarms +.extern WMSP_CancelVAlarm +.extern WL_Terminate +.extern wmspW +.extern _0601A960 +.extern _0601AE88 diff --git a/arm9/asm/MSL_ARM_abort_exit.s b/arm9/asm/MSL_ARM_abort_exit.s index 1128f4e8f..e6e30a582 100644 --- a/arm9/asm/MSL_ARM_abort_exit.s +++ b/arm9/asm/MSL_ARM_abort_exit.s @@ -1,160 +1,160 @@ - .include "asm/macros.inc" - .include "global.inc" - - .bss - - .global __console_exit -__console_exit: ; 0x021D6F78 - .space 0x4 - .size __console_exit,.-__console_exit - - .global __stdio_exit -__stdio_exit: ; 0x021D6F7C - .space 0x4 - .size __stdio_exit,.-__stdio_exit - - .global __atexit_curr_func -__atexit_curr_func: ; 0x021D6F80 - .space 0x4 - .size __atexit_curr_func,.-__atexit_curr_func - - .global __aborting -__aborting: ; 0x021D6F84 - .space 0x4 - .size __aborting,.-__aborting - - .global __atexit_funcs -__atexit_funcs: ; 0x021D6F88 - .space 0x100 - .size __atexit_funcs,.-__atexit_funcs - - .text - - arm_func_start abort -abort: ; 0x020DE14C - stmdb sp!, {r3,lr} - mov r0, #0x1 - bl raise - ldr r1, _020DE16C ; =__aborting - 0xC - mov r0, #0x1 - str r0, [r1, #0xc] - bl exit - ldmia sp!, {r3,pc} - .balign 4 -_020DE16C: .word __aborting - 0xC - arm_func_end abort - - arm_func_start exit -exit: ; 0x020DE170 - stmdb sp!, {r4,lr} - ldr r1, _020DE1B8 ; =__aborting - 0xC - mov r4, r0 - ldr r0, [r1, #0xc] - cmp r0, #0x0 - bne _020DE1AC - bl __destroy_global_chain - ldr r0, _020DE1B8 ; =__stdio_exit - 0x4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _020DE1AC - blx r0 - ldr r0, _020DE1B8 ; =__stdio_exit - 0x4 - mov r1, #0x0 - str r1, [r0, #0x4] -_020DE1AC: - mov r0, r4 - bl __exit - ldmia sp!, {r4,pc} - .balign 4 -_020DE1B8: .word __console_exit - arm_func_end exit - - arm_func_start __exit -__exit: ; 0x020DE1BC - stmdb sp!, {r3-r5,lr} - ldr r0, _020DE2CC ; =__cs - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DE1F4 - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020DE2D8 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - b _020DE24C -_020DE1F4: - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, #0x0] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DE224 - ldr r0, _020DE2D8 ; =__cs_ref - ldr r1, [r0, #0x0] - add r1, r1, #0x1 - str r1, [r0, #0x0] - b _020DE24C -_020DE224: - ldr r0, _020DE2CC ; =__cs - bl OS_LockMutex - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020DE2D8 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x0] - str r2, [r0, #0x0] -_020DE24C: - ldr r4, _020DE2DC ; =__console_exit - ldr r0, [r4, #0x8] - cmp r0, #0x0 - ble _020DE280 - ldr r5, _020DE2E0 ; =__atexit_funcs -_020DE260: - ldr r0, [r4, #0x8] - sub r1, r0, #0x1 - ldr r0, [r5, r1, lsl #0x2] - str r1, [r4, #0x8] - blx r0 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - bgt _020DE260 -_020DE280: - ldr r0, _020DE2D8 ; =__cs_ref - ldr r1, [r0, #0x0] - subs r1, r1, #0x1 - str r1, [r0, #0x0] - bne _020DE29C - ldr r0, _020DE2CC ; =__cs - bl OS_UnlockMutex -_020DE29C: - ldr r0, _020DE2DC ; =__console_exit - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020DE2BC - blx r0 - ldr r0, _020DE2DC ; =__console_exit - mov r1, #0x0 - str r1, [r0, #0x0] -_020DE2BC: - mov r0, #0x0 - bl fflush - bl _ExitProcess - ldmia sp!, {r3-r5,pc} - .balign 4 -_020DE2CC: .word __cs -_020DE2D0: .word OSi_ThreadInfo -_020DE2D4: .word __cs_id -_020DE2D8: .word __cs_ref -_020DE2DC: .word __console_exit -_020DE2E0: .word __atexit_funcs - arm_func_end __exit - - exception abort, 37, 0x00100000 - exception exit, 77, 0x00100100 - exception __exit, 297, 0x00200300 + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global __console_exit +__console_exit: ; 0x021D6F78 + .space 0x4 + .size __console_exit,.-__console_exit + + .global __stdio_exit +__stdio_exit: ; 0x021D6F7C + .space 0x4 + .size __stdio_exit,.-__stdio_exit + + .global __atexit_curr_func +__atexit_curr_func: ; 0x021D6F80 + .space 0x4 + .size __atexit_curr_func,.-__atexit_curr_func + + .global __aborting +__aborting: ; 0x021D6F84 + .space 0x4 + .size __aborting,.-__aborting + + .global __atexit_funcs +__atexit_funcs: ; 0x021D6F88 + .space 0x100 + .size __atexit_funcs,.-__atexit_funcs + + .text + + arm_func_start abort +abort: ; 0x020DE14C + stmdb sp!, {r3,lr} + mov r0, #0x1 + bl raise + ldr r1, _020DE16C ; =__aborting - 0xC + mov r0, #0x1 + str r0, [r1, #0xc] + bl exit + ldmia sp!, {r3,pc} + .balign 4 +_020DE16C: .word __aborting - 0xC + arm_func_end abort + + arm_func_start exit +exit: ; 0x020DE170 + stmdb sp!, {r4,lr} + ldr r1, _020DE1B8 ; =__aborting - 0xC + mov r4, r0 + ldr r0, [r1, #0xc] + cmp r0, #0x0 + bne _020DE1AC + bl __destroy_global_chain + ldr r0, _020DE1B8 ; =__stdio_exit - 0x4 + ldr r0, [r0, #0x4] + cmp r0, #0x0 + beq _020DE1AC + blx r0 + ldr r0, _020DE1B8 ; =__stdio_exit - 0x4 + mov r1, #0x0 + str r1, [r0, #0x4] +_020DE1AC: + mov r0, r4 + bl __exit + ldmia sp!, {r4,pc} + .balign 4 +_020DE1B8: .word __console_exit + arm_func_end exit + + arm_func_start __exit +__exit: ; 0x020DE1BC + stmdb sp!, {r3-r5,lr} + ldr r0, _020DE2CC ; =__cs + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020DE1F4 + ldr r0, _020DE2D0 ; =OSi_ThreadInfo + ldr r1, _020DE2D4 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + b _020DE24C +_020DE1F4: + ldr r0, _020DE2D0 ; =OSi_ThreadInfo + ldr r1, _020DE2D4 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE224 + ldr r0, _020DE2D8 ; =__cs_ref + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + b _020DE24C +_020DE224: + ldr r0, _020DE2CC ; =__cs + bl OS_LockMutex + ldr r0, _020DE2D0 ; =OSi_ThreadInfo + ldr r1, _020DE2D4 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] +_020DE24C: + ldr r4, _020DE2DC ; =__console_exit + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ble _020DE280 + ldr r5, _020DE2E0 ; =__atexit_funcs +_020DE260: + ldr r0, [r4, #0x8] + sub r1, r0, #0x1 + ldr r0, [r5, r1, lsl #0x2] + str r1, [r4, #0x8] + blx r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + bgt _020DE260 +_020DE280: + ldr r0, _020DE2D8 ; =__cs_ref + ldr r1, [r0, #0x0] + subs r1, r1, #0x1 + str r1, [r0, #0x0] + bne _020DE29C + ldr r0, _020DE2CC ; =__cs + bl OS_UnlockMutex +_020DE29C: + ldr r0, _020DE2DC ; =__console_exit + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020DE2BC + blx r0 + ldr r0, _020DE2DC ; =__console_exit + mov r1, #0x0 + str r1, [r0, #0x0] +_020DE2BC: + mov r0, #0x0 + bl fflush + bl _ExitProcess + ldmia sp!, {r3-r5,pc} + .balign 4 +_020DE2CC: .word __cs +_020DE2D0: .word OSi_ThreadInfo +_020DE2D4: .word __cs_id +_020DE2D8: .word __cs_ref +_020DE2DC: .word __console_exit +_020DE2E0: .word __atexit_funcs + arm_func_end __exit + + exception abort, 37, 0x00100000 + exception exit, 77, 0x00100100 + exception __exit, 297, 0x00200300 diff --git a/arm9/asm/MSL_ARM_critical_regions_NITRO.s b/arm9/asm/MSL_ARM_critical_regions_NITRO.s index 2995c55ef..744a7c0d1 100644 --- a/arm9/asm/MSL_ARM_critical_regions_NITRO.s +++ b/arm9/asm/MSL_ARM_critical_regions_NITRO.s @@ -1,19 +1,19 @@ - .include "asm/macros.inc" - .include "global.inc" - - .bss - - .global __cs_id -__cs_id: ; 0x021D7088 - .space 0x24 - .size __cs_id,.-__cs_id - - .global __cs_ref -__cs_ref: ; 0x021D70AC - .space 0x24 - .size __cs_ref,.-__cs_ref - - .global __cs -__cs: ; 0x021D70D0 - .space 0xD8 - .size __cs,.-__cs + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global __cs_id +__cs_id: ; 0x021D7088 + .space 0x24 + .size __cs_id,.-__cs_id + + .global __cs_ref +__cs_ref: ; 0x021D70AC + .space 0x24 + .size __cs_ref,.-__cs_ref + + .global __cs +__cs: ; 0x021D70D0 + .space 0xD8 + .size __cs,.-__cs diff --git a/arm9/asm/MSL_ARM_math.s b/arm9/asm/MSL_ARM_math.s index 6fad26bb9..ed8e8ccbb 100644 --- a/arm9/asm/MSL_ARM_math.s +++ b/arm9/asm/MSL_ARM_math.s @@ -1,17 +1,17 @@ - .include "global.inc" - .include "asm/macros.inc" - - .text - - arm_func_start nan -nan: ; 0x020DE2E4 - ldr r0, _020DE2F4 ; =__float_nan - ldr ip, _020DE2F8 ; =_f2d - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020DE2F4: .word __float_nan -_020DE2F8: .word _f2d - arm_func_end nan - - exception nan, 25, 0x00000000 + .include "global.inc" + .include "asm/macros.inc" + + .text + + arm_func_start nan +nan: ; 0x020DE2E4 + ldr r0, _020DE2F4 ; =__float_nan + ldr ip, _020DE2F8 ; =_f2d + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020DE2F4: .word __float_nan +_020DE2F8: .word _f2d + arm_func_end nan + + exception nan, 25, 0x00000000 diff --git a/arm9/asm/MSL_Common_ansi_files.s b/arm9/asm/MSL_Common_ansi_files.s index a2e75c220..6b75c1ea1 100644 --- a/arm9/asm/MSL_Common_ansi_files.s +++ b/arm9/asm/MSL_Common_ansi_files.s @@ -1,145 +1,145 @@ - .include "global.inc" - .include "asm/macros.inc" - - .data - - .global __files -__files: ; 0x02106A58 - ; stdin - .byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word stdin_buff - .byte 0x00, 0x01, 0x00, 0x00 - .word stdin_buff - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - - ; stdout - .byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word stdout_buff - .byte 0x00, 0x01, 0x00, 0x00 - .word stdout_buff - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - - ; stderr - .byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word stderr_buff - .byte 0x00, 0x01, 0x00, 0x00 - .word stderr_buff - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - .size __files,.-__files - - .bss - - .global stderr_buff -stderr_buff: ; 0x021D71A8 - .space 0x100 - .size stderr_buff,.-stderr_buff - - .global stdout_buff -stdout_buff: ; 0x021D72A8 - .space 0x100 - .size stdout_buff,.-stdout_buff - - .global stdin_buff -stdin_buff: ; 0x021D73A8 - .space 0x100 - .size stdin_buff,.-stdin_buff - - .text - - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE384 ; =__files - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE31C: - ldr r1, [r0, #0x4] - mov r2, r1, lsl #0x16 - movs r2, r2, lsr #0x1d - beq _020DE35C - mov r1, r1, lsl #0x19 - mov r1, r1, lsr #0x1e - tst r1, #0x1 - beq _020DE35C - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DE35C - bl fflush - cmp r0, #0x0 - movne r4, r9 -_020DE35C: - cmp r5, #0x3 - movge r0, r7 - bge _020DE374 - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE374: - cmp r0, #0x0 - bne _020DE31C - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE384: .word __files - arm_func_end __flush_line_buffered_output_files - - arm_func_start __flush_all -__flush_all: ; 0x020DE388 - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE3EC ; =__files - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE3A8: - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - beq _020DE3C4 - bl fflush - cmp r0, #0x0 - movne r4, r9 -_020DE3C4: - cmp r5, #0x3 - movge r0, r7 - bge _020DE3DC - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE3DC: - cmp r0, #0x0 - bne _020DE3A8 - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE3EC: .word __files - arm_func_end __flush_all - - exception __flush_line_buffered_output_files, 141, 0x00403F00 - exception __flush_all, 105, 0x00403F00 + .include "global.inc" + .include "asm/macros.inc" + + .data + + .global __files +__files: ; 0x02106A58 + ; stdin + .byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word stdin_buff + .byte 0x00, 0x01, 0x00, 0x00 + .word stdin_buff + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word __read_console + .word __write_console + .word __close_console + .byte 0x00, 0x00, 0x00, 0x00 + + ; stdout + .byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word stdout_buff + .byte 0x00, 0x01, 0x00, 0x00 + .word stdout_buff + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word __read_console + .word __write_console + .word __close_console + .byte 0x00, 0x00, 0x00, 0x00 + + ; stderr + .byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word stderr_buff + .byte 0x00, 0x01, 0x00, 0x00 + .word stderr_buff + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .word __read_console + .word __write_console + .word __close_console + .byte 0x00, 0x00, 0x00, 0x00 + .size __files,.-__files + + .bss + + .global stderr_buff +stderr_buff: ; 0x021D71A8 + .space 0x100 + .size stderr_buff,.-stderr_buff + + .global stdout_buff +stdout_buff: ; 0x021D72A8 + .space 0x100 + .size stdout_buff,.-stdout_buff + + .global stdin_buff +stdin_buff: ; 0x021D73A8 + .space 0x100 + .size stdin_buff,.-stdin_buff + + .text + + arm_func_start __flush_line_buffered_output_files +__flush_line_buffered_output_files: + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE384 ; =__files + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE31C: + ldr r1, [r0, #0x4] + mov r2, r1, lsl #0x16 + movs r2, r2, lsr #0x1d + beq _020DE35C + mov r1, r1, lsl #0x19 + mov r1, r1, lsr #0x1e + tst r1, #0x1 + beq _020DE35C + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DE35C + bl fflush + cmp r0, #0x0 + movne r4, r9 +_020DE35C: + cmp r5, #0x3 + movge r0, r7 + bge _020DE374 + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE374: + cmp r0, #0x0 + bne _020DE31C + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE384: .word __files + arm_func_end __flush_line_buffered_output_files + + arm_func_start __flush_all +__flush_all: ; 0x020DE388 + stmdb sp!, {r3-r9,lr} + ldr r0, _020DE3EC ; =__files + mov r4, #0x0 + mov r5, #0x1 + mov r8, r0 + mvn r9, #0x0 + mov r7, r4 + mov r6, #0x4c +_020DE3A8: + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + beq _020DE3C4 + bl fflush + cmp r0, #0x0 + movne r4, r9 +_020DE3C4: + cmp r5, #0x3 + movge r0, r7 + bge _020DE3DC + mul r0, r5, r6 + add r5, r5, #0x1 + add r0, r8, r0 +_020DE3DC: + cmp r0, #0x0 + bne _020DE3A8 + mov r0, r4 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DE3EC: .word __files + arm_func_end __flush_all + + exception __flush_line_buffered_output_files, 141, 0x00403F00 + exception __flush_all, 105, 0x00403F00 diff --git a/arm9/asm/MSL_Common_assert.s b/arm9/asm/MSL_Common_assert.s index db655417b..369b5fd4c 100644 --- a/arm9/asm/MSL_Common_assert.s +++ b/arm9/asm/MSL_Common_assert.s @@ -1,33 +1,33 @@ - .include "asm/macros.inc" - .include "global.inc" - - .data - -__local_str__msl_assertion_failed: ; 0x02106B3C - .asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n" - .size __local_str__msl_assertion_failed,.-__local_str__msl_assertion_failed - .balign 4, 0 - - .text - - arm_func_start __msl_assertion_failed -__msl_assertion_failed: ; 0x020DE3FC - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - ldr r0, _020DE434 ; =__local_str__msl_assertion_failed - mov r1, r4 - mov r2, lr - mov r3, r12 - bl printf - bl abort - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - .balign 4 -_020DE434: .word __local_str__msl_assertion_failed - arm_func_end __msl_assertion_failed - - exception __msl_assertion_failed, 61, 0x00200100 + .include "asm/macros.inc" + .include "global.inc" + + .data + +__local_str__msl_assertion_failed: ; 0x02106B3C + .asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n" + .size __local_str__msl_assertion_failed,.-__local_str__msl_assertion_failed + .balign 4, 0 + + .text + + arm_func_start __msl_assertion_failed +__msl_assertion_failed: ; 0x020DE3FC + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov lr, r1 + mov r12, r2 + str r3, [sp, #0x0] + ldr r0, _020DE434 ; =__local_str__msl_assertion_failed + mov r1, r4 + mov r2, lr + mov r3, r12 + bl printf + bl abort + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + .balign 4 +_020DE434: .word __local_str__msl_assertion_failed + arm_func_end __msl_assertion_failed + + exception __msl_assertion_failed, 61, 0x00200100 diff --git a/arm9/asm/MSL_Common_buffer_io.s b/arm9/asm/MSL_Common_buffer_io.s index a3791f4d7..aec7b0e68 100644 --- a/arm9/asm/MSL_Common_buffer_io.s +++ b/arm9/asm/MSL_Common_buffer_io.s @@ -1,113 +1,113 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start __convert_from_newlines -__convert_from_newlines: - bx lr - arm_func_end __convert_from_newlines - - arm_func_start __convert_to_newlines -__convert_to_newlines: - bx lr - arm_func_end __convert_to_newlines - - arm_func_start __prep_buffer -__prep_buffer: - ldr r1, [r0, #0x1c] - str r1, [r0, #0x24] - ldr r3, [r0, #0x20] - str r3, [r0, #0x28] - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x2c] - and r1, r2, r1 - sub r1, r3, r1 - str r1, [r0, #0x28] - ldr r1, [r0, #0x18] - str r1, [r0, #0x34] - bx lr - arm_func_end __prep_buffer - - arm_func_start __load_buffer -__load_buffer: - stmdb sp!, {r4-r6,lr} - mov r5, r2 - mov r4, r0 - mov r6, r1 - bl __prep_buffer - cmp r5, #0x1 - ldreq r0, [r4, #0x20] - add r2, r4, #0x28 - streq r0, [r4, #0x28] - ldr r0, [r4, #0x0] - ldr r1, [r4, #0x1c] - ldr r3, [r4, #0x48] - ldr r12, [r4, #0x3c] - blx r12 - cmp r0, #0x2 - moveq r1, #0x0 - streq r1, [r4, #0x28] - cmp r6, #0x0 - ldrne r1, [r4, #0x28] - strne r1, [r6, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r4-r6,pc} - ldr r1, [r4, #0x18] - ldr r0, [r4, #0x28] - add r0, r1, r0 - str r0, [r4, #0x18] - ldr r0, [r4, #0x4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _020DE4F4 - ldr r0, [r4, #0x1c] - add r1, r4, #0x28 - bl __convert_to_newlines -_020DE4F4: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - arm_func_end __load_buffer - - arm_func_start __flush_buffer -__flush_buffer: - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r2, [r5, #0x24] - ldr r0, [r5, #0x1c] - mov r4, r1 - subs r0, r2, r0 - beq _020DE574 - str r0, [r5, #0x28] - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _020DE538 - ldr r0, [r5, #0x1c] - add r1, r5, #0x28 - bl __convert_from_newlines -_020DE538: - ldr r0, [r5, #0x0] - ldr r1, [r5, #0x1c] - ldr r3, [r5, #0x48] - ldr r12, [r5, #0x40] - add r2, r5, #0x28 - blx r12 - cmp r4, #0x0 - ldrne r1, [r5, #0x28] - strne r1, [r4, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r3-r5,pc} - ldr r1, [r5, #0x18] - ldr r0, [r5, #0x28] - add r0, r1, r0 - str r0, [r5, #0x18] -_020DE574: - mov r0, r5 - bl __prep_buffer - mov r0, #0x0 - ldmia sp!, {r3-r5,pc} - arm_func_end __flush_buffer - - exception __load_buffer, 141, 0x00200700 - exception __flush_buffer, 137, 0x00200300 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start __convert_from_newlines +__convert_from_newlines: + bx lr + arm_func_end __convert_from_newlines + + arm_func_start __convert_to_newlines +__convert_to_newlines: + bx lr + arm_func_end __convert_to_newlines + + arm_func_start __prep_buffer +__prep_buffer: + ldr r1, [r0, #0x1c] + str r1, [r0, #0x24] + ldr r3, [r0, #0x20] + str r3, [r0, #0x28] + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x2c] + and r1, r2, r1 + sub r1, r3, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x18] + str r1, [r0, #0x34] + bx lr + arm_func_end __prep_buffer + + arm_func_start __load_buffer +__load_buffer: + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r0 + mov r6, r1 + bl __prep_buffer + cmp r5, #0x1 + ldreq r0, [r4, #0x20] + add r2, r4, #0x28 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x0] + ldr r1, [r4, #0x1c] + ldr r3, [r4, #0x48] + ldr r12, [r4, #0x3c] + blx r12 + cmp r0, #0x2 + moveq r1, #0x0 + streq r1, [r4, #0x28] + cmp r6, #0x0 + ldrne r1, [r4, #0x28] + strne r1, [r6, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r4-r6,pc} + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x28] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r0, [r4, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE4F4 + ldr r0, [r4, #0x1c] + add r1, r4, #0x28 + bl __convert_to_newlines +_020DE4F4: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + arm_func_end __load_buffer + + arm_func_start __flush_buffer +__flush_buffer: + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r0, [r5, #0x1c] + mov r4, r1 + subs r0, r2, r0 + beq _020DE574 + str r0, [r5, #0x28] + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE538 + ldr r0, [r5, #0x1c] + add r1, r5, #0x28 + bl __convert_from_newlines +_020DE538: + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x1c] + ldr r3, [r5, #0x48] + ldr r12, [r5, #0x40] + add r2, r5, #0x28 + blx r12 + cmp r4, #0x0 + ldrne r1, [r5, #0x28] + strne r1, [r4, #0x0] + cmp r0, #0x0 + ldmneia sp!, {r3-r5,pc} + ldr r1, [r5, #0x18] + ldr r0, [r5, #0x28] + add r0, r1, r0 + str r0, [r5, #0x18] +_020DE574: + mov r0, r5 + bl __prep_buffer + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} + arm_func_end __flush_buffer + + exception __load_buffer, 141, 0x00200700 + exception __flush_buffer, 137, 0x00200300 diff --git a/arm9/asm/MSL_Common_ctype.s b/arm9/asm/MSL_Common_ctype.s index 7513f4513..801811354 100644 --- a/arm9/asm/MSL_Common_ctype.s +++ b/arm9/asm/MSL_Common_ctype.s @@ -1,48 +1,48 @@ - .include "asm/macros.inc" - .include "global.inc" - - .rodata - - .global __lower_mapC -__lower_mapC: ; 0x0210420C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F - .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F - .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F - .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F - .byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F - .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F - .byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F - .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F - .size __lower_mapC,.-__lower_mapC - - .global __upper_mapC -__upper_mapC: ; 0x0210428C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F - .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F - .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F - .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F - .byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F - .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F - .byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F - .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F - .size __upper_mapC,.-__upper_mapC - - .global __msl_digit -__msl_digit: ; 0x0210430C - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004 - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458 - .short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004 - .size __msl_digit,.-__msl_digit + .include "asm/macros.inc" + .include "global.inc" + + .rodata + + .global __lower_mapC +__lower_mapC: ; 0x0210420C + .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F + .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F + .byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F + .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F + .byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F + .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F + .size __lower_mapC,.-__lower_mapC + + .global __upper_mapC +__upper_mapC: ; 0x0210428C + .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F + .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F + .byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F + .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F + .byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F + .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F + .size __upper_mapC,.-__upper_mapC + + .global __msl_digit +__msl_digit: ; 0x0210430C + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004 + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458 + .short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004 + .size __msl_digit,.-__msl_digit diff --git a/arm9/asm/MSL_Common_direct_io.s b/arm9/asm/MSL_Common_direct_io.s index 8a4933030..badeba5c2 100644 --- a/arm9/asm/MSL_Common_direct_io.s +++ b/arm9/asm/MSL_Common_direct_io.s @@ -1,505 +1,505 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start fread -fread: ; 0x020DE584 - stmdb sp!, {r4-r10,lr} - ldr r4, _020DE67C ; =__files - mov r7, r3 - cmp r7, r4 - moveq r6, #0x2 - mov r10, r0 - movne r6, #0x5 - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DE680 ; =__cs - mov r9, r1 - add r0, r5, r4 - mov r8, r2 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DE5E8 - ldr r0, _020DE684 ; =OSi_ThreadInfo - ldr r2, _020DE688 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DE68C ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] - b _020DE640 -_020DE5E8: - ldr r0, _020DE684 ; =OSi_ThreadInfo - ldr r1, _020DE688 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DE618 - ldr r1, _020DE68C ; =__cs_ref - ldr r0, [r1, r6, lsl #0x2] - add r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - b _020DE640 -_020DE618: - add r0, r5, r4 - bl OS_LockMutex - ldr r0, _020DE684 ; =OSi_ThreadInfo - ldr r2, _020DE688 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DE68C ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] -_020DE640: - mov r0, r10 - mov r1, r9 - mov r2, r8 - mov r3, r7 - bl __fread - ldr r1, _020DE68C ; =__cs_ref - mov r7, r0 - ldr r0, [r1, r6, lsl #0x2] - subs r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - bne _020DE674 - add r0, r5, r4 - bl OS_UnlockMutex -_020DE674: - mov r0, r7 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020DE67C: .word __files -_020DE680: .word __cs -_020DE684: .word OSi_ThreadInfo -_020DE688: .word __cs_id -_020DE68C: .word __cs_ref - arm_func_end fread - - arm_func_start __fread -__fread: ; 0x020DE690 - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x4 - mov r7, r3 - mov r9, r0 - mov r8, r1 - mov r0, r7 - mov r1, #0x0 - mov r4, r2 - bl fwide - cmp r0, #0x0 - bne _020DE6C8 - mov r0, r7 - mvn r1, #0x0 - bl fwide -_020DE6C8: - muls r4, r8, r4 - beq _020DE6EC - ldrb r0, [r7, #0xd] - cmp r0, #0x0 - bne _020DE6EC - ldr r1, [r7, #0x4] - mov r0, r1, lsl #0x16 - movs r0, r0, lsr #0x1d - bne _020DE6F8 -_020DE6EC: - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r3-r10,pc} -_020DE6F8: - mov r0, r1, lsl #0x13 - movs r0, r0, lsr #0x1f - movne r0, r1, lsl #0x19 - movne r0, r0, lsr #0x1e - ldr r1, [r7, #0x8] - cmpne r0, #0x2 - mov r6, #0x1 - mov r0, r1, lsl #0x1d - movne r6, #0x0 - movs r0, r0, lsr #0x1d - bne _020DE74C - ldr r0, [r7, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - tst r0, #0x1 - beq _020DE74C - bic r0, r1, #0x7 - orr r0, r0, #0x2 - str r0, [r7, #0x8] - mov r0, #0x0 - str r0, [r7, #0x28] -_020DE74C: - ldr r0, [r7, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x2 - bhs _020DE778 - mov r0, #0x1 - strb r0, [r7, #0xd] - mov r0, #0x0 - add sp, sp, #0x4 - str r0, [r7, #0x28] - ldmia sp!, {r3-r10,pc} -_020DE778: - ldr r0, [r7, #0x4] - mov r0, r0, lsl #0x19 - mov r0, r0, lsr #0x1e - tst r0, #0x1 - beq _020DE7B0 - bl __flush_line_buffered_output_files - cmp r0, #0x0 - beq _020DE7B0 - mov r0, #0x1 - strb r0, [r7, #0xd] - mov r0, #0x0 - add sp, sp, #0x4 - str r0, [r7, #0x28] - ldmia sp!, {r3-r10,pc} -_020DE7B0: - cmp r4, #0x0 - mov r5, #0x0 - beq _020DE874 - ldr r0, [r7, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - blo _020DE874 - mov r10, r5 -_020DE7D4: - mov r0, r7 - mov r1, r10 - bl fwide - cmp r0, #0x1 - ldr r0, [r7, #0x8] - bne _020DE808 - mov r0, r0, lsl #0x1d - add r0, r7, r0, lsr #0x1c - ldrh r0, [r0, #0xe] - add r5, r5, #0x2 - sub r4, r4, #0x2 - strh r0, [r9], #0x2 - b _020DE820 -_020DE808: - mov r0, r0, lsl #0x1d - add r0, r7, r0, lsr #0x1d - ldrb r0, [r0, #0xf] - add r5, r5, #0x1 - sub r4, r4, #0x1 - strb r0, [r9], #0x1 -_020DE820: - ldr r1, [r7, #0x8] - cmp r4, #0x0 - mov r0, r1, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #0x1 - bic r1, r1, #0x7 - and r0, r0, #0x7 - orr r0, r1, r0 - str r0, [r7, #0x8] - beq _020DE85C - ldr r0, [r7, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - bhs _020DE7D4 -_020DE85C: - ldr r0, [r7, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x2 - ldreq r0, [r7, #0x30] - streq r0, [r7, #0x28] -_020DE874: - cmp r4, #0x0 - beq _020DE938 - ldr r0, [r7, #0x28] - cmp r0, #0x0 - cmpeq r6, #0x0 - beq _020DE938 - mov r10, #0x0 -_020DE890: - ldr r0, [r7, #0x28] - cmp r0, #0x0 - bne _020DE8E4 - mov r0, r7 - mov r1, r10 - mov r2, r10 - bl __load_buffer - cmp r0, #0x0 - beq _020DE8E4 - cmp r0, #0x1 - mov r0, #0x1 - streqb r0, [r7, #0xd] - beq _020DE8D4 - ldr r1, [r7, #0x8] - bic r1, r1, #0x7 - str r1, [r7, #0x8] - strb r0, [r7, #0xc] -_020DE8D4: - mov r0, #0x0 - str r0, [r7, #0x28] - mov r4, #0x0 - b _020DE938 -_020DE8E4: - ldr r0, [r7, #0x28] - str r0, [sp, #0x0] - cmp r0, r4 - strhi r4, [sp, #0x0] - ldr r1, [r7, #0x24] - ldr r2, [sp, #0x0] - mov r0, r9 - bl memcpy - ldr r2, [sp, #0x0] - ldr r0, [r7, #0x24] - subs r4, r4, r2 - add r0, r0, r2 - str r0, [r7, #0x24] - ldr r1, [r7, #0x28] - ldr r0, [sp, #0x0] - add r9, r9, r2 - sub r0, r1, r0 - add r5, r5, r2 - str r0, [r7, #0x28] - cmpne r6, #0x0 - bne _020DE890 -_020DE938: - cmp r4, #0x0 - beq _020DE9C4 - cmp r6, #0x0 - bne _020DE9C4 - ldr r6, [r7, #0x1c] - ldr r10, [r7, #0x20] - add r1, sp, #0x0 - str r9, [r7, #0x1c] - mov r0, r7 - mov r2, #0x1 - str r4, [r7, #0x20] - bl __load_buffer - cmp r0, #0x0 - beq _020DE9A4 - cmp r0, #0x1 - mov r0, #0x1 - bne _020DE98C - strb r0, [r7, #0xd] - mov r0, #0x0 - str r0, [r7, #0x28] - b _020DE9A4 -_020DE98C: - ldr r1, [r7, #0x8] - bic r1, r1, #0x7 - str r1, [r7, #0x8] - strb r0, [r7, #0xc] - mov r0, #0x0 - str r0, [r7, #0x28] -_020DE9A4: - ldr r1, [sp, #0x0] - mov r0, r7 - str r6, [r7, #0x1c] - str r10, [r7, #0x20] - add r5, r5, r1 - bl __prep_buffer - mov r0, #0x0 - str r0, [r7, #0x28] -_020DE9C4: - mov r0, r5 - mov r1, r8 - bl _u32_div_f - add sp, sp, #0x4 - ldmia sp!, {r3-r10,pc} - arm_func_end __fread - - arm_func_start __fwrite -__fwrite: - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x8 - mov r9, r3 - mov r10, r0 - str r1, [sp, #0x0] - mov r0, r9 - mov r1, #0x0 - mov r4, r2 - bl fwide - cmp r0, #0x0 - bne _020DEA10 - mov r0, r9 - mvn r1, #0x0 - bl fwide -_020DEA10: - ldr r0, [sp, #0x0] - muls r5, r0, r4 - beq _020DEA38 - ldrb r0, [r9, #0xd] - cmp r0, #0x0 - bne _020DEA38 - ldr r1, [r9, #0x4] - mov r0, r1, lsl #0x16 - movs r0, r0, lsr #0x1d - bne _020DEA44 -_020DEA38: - add sp, sp, #0x8 - mov r0, #0x0 - ldmia sp!, {r3-r11,pc} -_020DEA44: - mov r0, r1, lsl #0x13 - movs r0, r0, lsr #0x1f - movne r0, r1, lsl #0x19 - movne r0, r0, lsr #0x1e - cmpne r0, #0x2 - ldr r1, [r9, #0x8] - cmpne r0, #0x1 - mov r8, #0x1 - mov r0, r1, lsl #0x1d - movne r8, #0x0 - movs r0, r0, lsr #0x1d - bne _020DEA9C - ldr r0, [r9, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - tst r0, #0x2 - beq _020DEA9C - bic r0, r1, #0x7 - orr r1, r0, #0x1 - mov r0, r9 - str r1, [r9, #0x8] - bl __prep_buffer -_020DEA9C: - ldr r0, [r9, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x1 - beq _020DEAC8 - mov r0, #0x1 - strb r0, [r9, #0xd] - mov r0, #0x0 - add sp, sp, #0x8 - str r0, [r9, #0x28] - ldmia sp!, {r3-r11,pc} -_020DEAC8: - cmp r5, #0x0 - mov r6, #0x0 - beq _020DEBF0 - ldr r0, [r9, #0x1c] - ldr r2, [r9, #0x24] - cmp r2, r0 - cmpeq r8, #0x0 - beq _020DEBF0 - ldr r1, [r9, #0x20] - sub r0, r2, r0 - sub r0, r1, r0 - str r0, [r9, #0x28] - mov r11, #0xa - mov r4, #0x0 -_020DEB00: - ldr r0, [r9, #0x28] - mov r7, r4 - str r0, [sp, #0x4] - cmp r0, r5 - strhi r5, [sp, #0x4] - ldr r0, [r9, #0x4] - mov r0, r0, lsl #0x19 - mov r0, r0, lsr #0x1e - cmp r0, #0x1 - bne _020DEB50 - ldr r2, [sp, #0x4] - cmp r2, #0x0 - beq _020DEB50 - mov r0, r10 - mov r1, r11 - bl __memrchr - movs r7, r0 - addne r0, r7, #0x1 - subne r0, r0, r10 - strne r0, [sp, #0x4] -_020DEB50: - ldr r2, [sp, #0x4] - cmp r2, #0x0 - beq _020DEB90 - ldr r0, [r9, #0x24] - mov r1, r10 - bl memcpy - ldr r2, [sp, #0x4] - ldr r0, [r9, #0x24] - add r10, r10, r2 - add r0, r0, r2 - str r0, [r9, #0x24] - ldr r1, [r9, #0x28] - ldr r0, [sp, #0x4] - sub r5, r5, r2 - sub r0, r1, r0 - str r0, [r9, #0x28] -_020DEB90: - ldr r0, [r9, #0x28] - cmp r0, #0x0 - beq _020DEBB4 - cmp r7, #0x0 - bne _020DEBB4 - ldr r0, [r9, #0x4] - mov r0, r0, lsl #0x19 - movs r0, r0, lsr #0x1e - bne _020DEBDC -_020DEBB4: - mov r0, r9 - mov r1, #0x0 - bl __flush_buffer - cmp r0, #0x0 - beq _020DEBDC - mov r0, #0x1 - strb r0, [r9, #0xd] - mov r5, #0x0 - str r5, [r9, #0x28] - b _020DEBF0 -_020DEBDC: - ldr r0, [sp, #0x4] - cmp r5, #0x0 - add r6, r6, r0 - cmpne r8, #0x0 - bne _020DEB00 -_020DEBF0: - cmp r5, #0x0 - beq _020DEC5C - cmp r8, #0x0 - bne _020DEC5C - ldr r4, [r9, #0x1c] - ldr r7, [r9, #0x20] - add r2, r10, r5 - str r10, [r9, #0x1c] - str r5, [r9, #0x20] - add r1, sp, #0x4 - mov r0, r9 - str r2, [r9, #0x24] - bl __flush_buffer - cmp r0, #0x0 - ldreq r0, [sp, #0x4] - addeq r6, r6, r0 - beq _020DEC44 - mov r0, #0x1 - strb r0, [r9, #0xd] - mov r0, #0x0 - str r0, [r9, #0x28] -_020DEC44: - str r4, [r9, #0x1c] - mov r0, r9 - str r7, [r9, #0x20] - bl __prep_buffer - mov r0, #0x0 - str r0, [r9, #0x28] -_020DEC5C: - ldr r0, [r9, #0x4] - ldr r1, [sp, #0x0] - mov r0, r0, lsl #0x19 - mov r0, r0, lsr #0x1e - cmp r0, #0x2 - movne r0, #0x0 - strne r0, [r9, #0x28] - mov r0, r6 - bl _u32_div_f - add sp, sp, #0x8 - ldmia sp!, {r3-r11,pc} - arm_func_end __fwrite - - exception fread, 269, 0x00407F00 - exception __fread, 841, 0x00507F00 - exception __fwrite, 689, 0x0060FF00 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start fread +fread: ; 0x020DE584 + stmdb sp!, {r4-r10,lr} + ldr r4, _020DE67C ; =__files + mov r7, r3 + cmp r7, r4 + moveq r6, #0x2 + mov r10, r0 + movne r6, #0x5 + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DE680 ; =__cs + mov r9, r1 + add r0, r5, r4 + mov r8, r2 + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020DE5E8 + ldr r0, _020DE684 ; =OSi_ThreadInfo + ldr r2, _020DE688 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DE640 +_020DE5E8: + ldr r0, _020DE684 ; =OSi_ThreadInfo + ldr r1, _020DE688 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE618 + ldr r1, _020DE68C ; =__cs_ref + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DE640 +_020DE618: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DE684 ; =OSi_ThreadInfo + ldr r2, _020DE688 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DE640: + mov r0, r10 + mov r1, r9 + mov r2, r8 + mov r3, r7 + bl __fread + ldr r1, _020DE68C ; =__cs_ref + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DE674 + add r0, r5, r4 + bl OS_UnlockMutex +_020DE674: + mov r0, r7 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020DE67C: .word __files +_020DE680: .word __cs +_020DE684: .word OSi_ThreadInfo +_020DE688: .word __cs_id +_020DE68C: .word __cs_ref + arm_func_end fread + + arm_func_start __fread +__fread: ; 0x020DE690 + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x4 + mov r7, r3 + mov r9, r0 + mov r8, r1 + mov r0, r7 + mov r1, #0x0 + mov r4, r2 + bl fwide + cmp r0, #0x0 + bne _020DE6C8 + mov r0, r7 + mvn r1, #0x0 + bl fwide +_020DE6C8: + muls r4, r8, r4 + beq _020DE6EC + ldrb r0, [r7, #0xd] + cmp r0, #0x0 + bne _020DE6EC + ldr r1, [r7, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DE6F8 +_020DE6EC: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r3-r10,pc} +_020DE6F8: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + ldr r1, [r7, #0x8] + cmpne r0, #0x2 + mov r6, #0x1 + mov r0, r1, lsl #0x1d + movne r6, #0x0 + movs r0, r0, lsr #0x1d + bne _020DE74C + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x1 + beq _020DE74C + bic r0, r1, #0x7 + orr r0, r0, #0x2 + str r0, [r7, #0x8] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE74C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + bhs _020DE778 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE778: + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + tst r0, #0x1 + beq _020DE7B0 + bl __flush_line_buffered_output_files + cmp r0, #0x0 + beq _020DE7B0 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE7B0: + cmp r4, #0x0 + mov r5, #0x0 + beq _020DE874 + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + blo _020DE874 + mov r10, r5 +_020DE7D4: + mov r0, r7 + mov r1, r10 + bl fwide + cmp r0, #0x1 + ldr r0, [r7, #0x8] + bne _020DE808 + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1c + ldrh r0, [r0, #0xe] + add r5, r5, #0x2 + sub r4, r4, #0x2 + strh r0, [r9], #0x2 + b _020DE820 +_020DE808: + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1d + ldrb r0, [r0, #0xf] + add r5, r5, #0x1 + sub r4, r4, #0x1 + strb r0, [r9], #0x1 +_020DE820: + ldr r1, [r7, #0x8] + cmp r4, #0x0 + mov r0, r1, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x1 + bic r1, r1, #0x7 + and r0, r0, #0x7 + orr r0, r1, r0 + str r0, [r7, #0x8] + beq _020DE85C + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + bhs _020DE7D4 +_020DE85C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + ldreq r0, [r7, #0x30] + streq r0, [r7, #0x28] +_020DE874: + cmp r4, #0x0 + beq _020DE938 + ldr r0, [r7, #0x28] + cmp r0, #0x0 + cmpeq r6, #0x0 + beq _020DE938 + mov r10, #0x0 +_020DE890: + ldr r0, [r7, #0x28] + cmp r0, #0x0 + bne _020DE8E4 + mov r0, r7 + mov r1, r10 + mov r2, r10 + bl __load_buffer + cmp r0, #0x0 + beq _020DE8E4 + cmp r0, #0x1 + mov r0, #0x1 + streqb r0, [r7, #0xd] + beq _020DE8D4 + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] +_020DE8D4: + mov r0, #0x0 + str r0, [r7, #0x28] + mov r4, #0x0 + b _020DE938 +_020DE8E4: + ldr r0, [r7, #0x28] + str r0, [sp, #0x0] + cmp r0, r4 + strhi r4, [sp, #0x0] + ldr r1, [r7, #0x24] + ldr r2, [sp, #0x0] + mov r0, r9 + bl memcpy + ldr r2, [sp, #0x0] + ldr r0, [r7, #0x24] + subs r4, r4, r2 + add r0, r0, r2 + str r0, [r7, #0x24] + ldr r1, [r7, #0x28] + ldr r0, [sp, #0x0] + add r9, r9, r2 + sub r0, r1, r0 + add r5, r5, r2 + str r0, [r7, #0x28] + cmpne r6, #0x0 + bne _020DE890 +_020DE938: + cmp r4, #0x0 + beq _020DE9C4 + cmp r6, #0x0 + bne _020DE9C4 + ldr r6, [r7, #0x1c] + ldr r10, [r7, #0x20] + add r1, sp, #0x0 + str r9, [r7, #0x1c] + mov r0, r7 + mov r2, #0x1 + str r4, [r7, #0x20] + bl __load_buffer + cmp r0, #0x0 + beq _020DE9A4 + cmp r0, #0x1 + mov r0, #0x1 + bne _020DE98C + strb r0, [r7, #0xd] + mov r0, #0x0 + str r0, [r7, #0x28] + b _020DE9A4 +_020DE98C: + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9A4: + ldr r1, [sp, #0x0] + mov r0, r7 + str r6, [r7, #0x1c] + str r10, [r7, #0x20] + add r5, r5, r1 + bl __prep_buffer + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9C4: + mov r0, r5 + mov r1, r8 + bl _u32_div_f + add sp, sp, #0x4 + ldmia sp!, {r3-r10,pc} + arm_func_end __fread + + arm_func_start __fwrite +__fwrite: + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x8 + mov r9, r3 + mov r10, r0 + str r1, [sp, #0x0] + mov r0, r9 + mov r1, #0x0 + mov r4, r2 + bl fwide + cmp r0, #0x0 + bne _020DEA10 + mov r0, r9 + mvn r1, #0x0 + bl fwide +_020DEA10: + ldr r0, [sp, #0x0] + muls r5, r0, r4 + beq _020DEA38 + ldrb r0, [r9, #0xd] + cmp r0, #0x0 + bne _020DEA38 + ldr r1, [r9, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DEA44 +_020DEA38: + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r3-r11,pc} +_020DEA44: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + cmpne r0, #0x2 + ldr r1, [r9, #0x8] + cmpne r0, #0x1 + mov r8, #0x1 + mov r0, r1, lsl #0x1d + movne r8, #0x0 + movs r0, r0, lsr #0x1d + bne _020DEA9C + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x2 + beq _020DEA9C + bic r0, r1, #0x7 + orr r1, r0, #0x1 + mov r0, r9 + str r1, [r9, #0x8] + bl __prep_buffer +_020DEA9C: + ldr r0, [r9, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + beq _020DEAC8 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + add sp, sp, #0x8 + str r0, [r9, #0x28] + ldmia sp!, {r3-r11,pc} +_020DEAC8: + cmp r5, #0x0 + mov r6, #0x0 + beq _020DEBF0 + ldr r0, [r9, #0x1c] + ldr r2, [r9, #0x24] + cmp r2, r0 + cmpeq r8, #0x0 + beq _020DEBF0 + ldr r1, [r9, #0x20] + sub r0, r2, r0 + sub r0, r1, r0 + str r0, [r9, #0x28] + mov r11, #0xa + mov r4, #0x0 +_020DEB00: + ldr r0, [r9, #0x28] + mov r7, r4 + str r0, [sp, #0x4] + cmp r0, r5 + strhi r5, [sp, #0x4] + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x1 + bne _020DEB50 + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB50 + mov r0, r10 + mov r1, r11 + bl __memrchr + movs r7, r0 + addne r0, r7, #0x1 + subne r0, r0, r10 + strne r0, [sp, #0x4] +_020DEB50: + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB90 + ldr r0, [r9, #0x24] + mov r1, r10 + bl memcpy + ldr r2, [sp, #0x4] + ldr r0, [r9, #0x24] + add r10, r10, r2 + add r0, r0, r2 + str r0, [r9, #0x24] + ldr r1, [r9, #0x28] + ldr r0, [sp, #0x4] + sub r5, r5, r2 + sub r0, r1, r0 + str r0, [r9, #0x28] +_020DEB90: + ldr r0, [r9, #0x28] + cmp r0, #0x0 + beq _020DEBB4 + cmp r7, #0x0 + bne _020DEBB4 + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1e + bne _020DEBDC +_020DEBB4: + mov r0, r9 + mov r1, #0x0 + bl __flush_buffer + cmp r0, #0x0 + beq _020DEBDC + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r5, #0x0 + str r5, [r9, #0x28] + b _020DEBF0 +_020DEBDC: + ldr r0, [sp, #0x4] + cmp r5, #0x0 + add r6, r6, r0 + cmpne r8, #0x0 + bne _020DEB00 +_020DEBF0: + cmp r5, #0x0 + beq _020DEC5C + cmp r8, #0x0 + bne _020DEC5C + ldr r4, [r9, #0x1c] + ldr r7, [r9, #0x20] + add r2, r10, r5 + str r10, [r9, #0x1c] + str r5, [r9, #0x20] + add r1, sp, #0x4 + mov r0, r9 + str r2, [r9, #0x24] + bl __flush_buffer + cmp r0, #0x0 + ldreq r0, [sp, #0x4] + addeq r6, r6, r0 + beq _020DEC44 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC44: + str r4, [r9, #0x1c] + mov r0, r9 + str r7, [r9, #0x20] + bl __prep_buffer + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC5C: + ldr r0, [r9, #0x4] + ldr r1, [sp, #0x0] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x2 + movne r0, #0x0 + strne r0, [r9, #0x28] + mov r0, r6 + bl _u32_div_f + add sp, sp, #0x8 + ldmia sp!, {r3-r11,pc} + arm_func_end __fwrite + + exception fread, 269, 0x00407F00 + exception __fread, 841, 0x00507F00 + exception __fwrite, 689, 0x0060FF00 diff --git a/arm9/asm/MSL_Common_errno.s b/arm9/asm/MSL_Common_errno.s index 1005e7b71..a5faaef62 100644 --- a/arm9/asm/MSL_Common_errno.s +++ b/arm9/asm/MSL_Common_errno.s @@ -1,9 +1,9 @@ - .include "asm/macros.inc" - .include "global.inc" - - .bss - - .global errno -errno: ; 0x021D74A8 - .space 0x4 + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global errno +errno: ; 0x021D74A8 + .space 0x4 .size errno,.-errno \ No newline at end of file diff --git a/arm9/asm/MSL_Common_file_io.s b/arm9/asm/MSL_Common_file_io.s index dfc9db537..b52d2763e 100644 --- a/arm9/asm/MSL_Common_file_io.s +++ b/arm9/asm/MSL_Common_file_io.s @@ -1,107 +1,107 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start fclose -fclose: ; 0x020DEC88 - stmdb sp!, {r3-r5,lr} - movs r5, r0 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} - ldr r1, [r5, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - moveq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} - bl fflush - mov r4, r0 - ldr r0, [r5, #0x0] - ldr r1, [r5, #0x44] - blx r1 - ldr r1, [r5, #0x4] - mov r2, #0x0 - bic r1, r1, #0x380 - str r1, [r5, #0x4] - str r2, [r5, #0x0] - ldr r1, [r5, #0x8] - mov r1, r1, lsl #0x1c - movs r1, r1, lsr #0x1f - subne r0, r2, #0x1 - ldmneia sp!, {r3-r5,pc} - cmp r4, #0x0 - cmpeq r0, #0x0 - movne r2, #0x1 - rsb r0, r2, #0x0 - ldmia sp!, {r3-r5,pc} - arm_func_end fclose - - arm_func_start fflush -fflush: - stmdb sp!, {r4,lr} - movs r4, r0 - bne _020DED10 - bl __flush_all - ldmia sp!, {r4,pc} -_020DED10: - ldrb r0, [r4, #0xd] - cmp r0, #0x0 - bne _020DED2C - ldr r0, [r4, #0x4] - mov r1, r0, lsl #0x16 - movs r1, r1, lsr #0x1d - bne _020DED34 -_020DED2C: - mvn r0, #0x0 - ldmia sp!, {r4,pc} -_020DED34: - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, [r4, #0x8] - mov r1, r0, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x3 - biccs r0, r0, #0x7 - orrcs r0, r0, #0x2 - strcs r0, [r4, #0x8] - ldr r0, [r4, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #0x2 - moveq r0, #0x0 - streq r0, [r4, #0x28] - ldr r0, [r4, #0x8] - mov r1, r0, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - beq _020DEDA0 - bic r0, r0, #0x7 - str r0, [r4, #0x8] - mov r0, #0x0 - ldmia sp!, {r4,pc} -_020DEDA0: - mov r0, r4 - mov r1, #0x0 - bl __flush_buffer - cmp r0, #0x0 - mov r0, #0x0 - beq _020DEDCC - mov r1, #0x1 - strb r1, [r4, #0xd] - str r0, [r4, #0x28] - sub r0, r0, #0x1 - ldmia sp!, {r4,pc} -_020DEDCC: - ldr r1, [r4, #0x8] - bic r1, r1, #0x7 - str r1, [r4, #0x8] - str r0, [r4, #0x18] - str r0, [r4, #0x28] - ldmia sp!, {r4,pc} - arm_func_end fflush - - exception fclose, 117, 0x00200300 - exception fflush, 233, 0x00100100 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start fclose +fclose: ; 0x020DEC88 + stmdb sp!, {r3-r5,lr} + movs r5, r0 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} + ldr r1, [r5, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} + bl fflush + mov r4, r0 + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x44] + blx r1 + ldr r1, [r5, #0x4] + mov r2, #0x0 + bic r1, r1, #0x380 + str r1, [r5, #0x4] + str r2, [r5, #0x0] + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1f + subne r0, r2, #0x1 + ldmneia sp!, {r3-r5,pc} + cmp r4, #0x0 + cmpeq r0, #0x0 + movne r2, #0x1 + rsb r0, r2, #0x0 + ldmia sp!, {r3-r5,pc} + arm_func_end fclose + + arm_func_start fflush +fflush: + stmdb sp!, {r4,lr} + movs r4, r0 + bne _020DED10 + bl __flush_all + ldmia sp!, {r4,pc} +_020DED10: + ldrb r0, [r4, #0xd] + cmp r0, #0x0 + bne _020DED2C + ldr r0, [r4, #0x4] + mov r1, r0, lsl #0x16 + movs r1, r1, lsr #0x1d + bne _020DED34 +_020DED2C: + mvn r0, #0x0 + ldmia sp!, {r4,pc} +_020DED34: + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x3 + biccs r0, r0, #0x7 + orrcs r0, r0, #0x2 + strcs r0, [r4, #0x8] + ldr r0, [r4, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + moveq r0, #0x0 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + beq _020DEDA0 + bic r0, r0, #0x7 + str r0, [r4, #0x8] + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020DEDA0: + mov r0, r4 + mov r1, #0x0 + bl __flush_buffer + cmp r0, #0x0 + mov r0, #0x0 + beq _020DEDCC + mov r1, #0x1 + strb r1, [r4, #0xd] + str r0, [r4, #0x28] + sub r0, r0, #0x1 + ldmia sp!, {r4,pc} +_020DEDCC: + ldr r1, [r4, #0x8] + bic r1, r1, #0x7 + str r1, [r4, #0x8] + str r0, [r4, #0x18] + str r0, [r4, #0x28] + ldmia sp!, {r4,pc} + arm_func_end fflush + + exception fclose, 117, 0x00200300 + exception fflush, 233, 0x00100100 diff --git a/arm9/asm/MSL_Common_file_pos.s b/arm9/asm/MSL_Common_file_pos.s index d416f9ad1..7bf206359 100644 --- a/arm9/asm/MSL_Common_file_pos.s +++ b/arm9/asm/MSL_Common_file_pos.s @@ -1,362 +1,362 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ftell -_ftell: ; 0x020DEDE4 - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - add r1, r1, #0xff - and r1, r1, #0xff - cmp r1, #0x1 - bhi _020DEE10 - ldrb r1, [r0, #0xd] - cmp r1, #0x0 - beq _020DEE24 -_020DEE10: - ldr r0, _020DEE5C ; =errno - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - bx lr -_020DEE24: - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - movs r12, r1, lsr #0x1d - ldreq r0, [r0, #0x18] - bxeq lr - ldr r2, [r0, #0x24] - ldr r1, [r0, #0x1c] - ldr r3, [r0, #0x34] - sub r0, r2, r1 - cmp r12, #0x3 - add r0, r3, r0 - subcs r1, r12, #0x2 - subcs r0, r0, r1 - bx lr - .balign 4 -_020DEE5C: .word errno - arm_func_end _ftell - - arm_func_start ftell -ftell: ; 0x020DEE60 - stmdb sp!, {r3-r7,lr} - ldr r1, _020DEF60 ; =__files - mov r7, r0 - cmp r7, r1 - moveq r6, #0x2 - beq _020DEE98 - ldr r0, _020DEF64 ; =__files + 0x4C - cmp r7, r0 - moveq r6, #0x3 - beq _020DEE98 - ldr r0, _020DEF68 ; =__files + 0x98 - cmp r7, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DEE98: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DEF6C ; =__cs - add r0, r5, r4 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DEED8 - ldr r0, _020DEF70 ; =OSi_ThreadInfo - ldr r2, _020DEF74 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DEF78 ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] - b _020DEF30 -_020DEED8: - ldr r0, _020DEF70 ; =OSi_ThreadInfo - ldr r1, _020DEF74 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DEF08 - ldr r1, _020DEF78 ; =__cs_ref - ldr r0, [r1, r6, lsl #0x2] - add r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - b _020DEF30 -_020DEF08: - add r0, r5, r4 - bl OS_LockMutex - ldr r0, _020DEF70 ; =OSi_ThreadInfo - ldr r2, _020DEF74 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DEF78 ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] -_020DEF30: - mov r0, r7 - bl _ftell - ldr r1, _020DEF78 ; =__cs_ref - mov r7, r0 - ldr r0, [r1, r6, lsl #0x2] - subs r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - bne _020DEF58 - add r0, r5, r4 - bl OS_UnlockMutex -_020DEF58: - mov r0, r7 - ldmia sp!, {r3-r7,pc} - .balign 4 -_020DEF60: .word __files -_020DEF64: .word __files + 0x4C -_020DEF68: .word __files + 0x98 -_020DEF6C: .word __cs -_020DEF70: .word OSi_ThreadInfo -_020DEF74: .word __cs_id -_020DEF78: .word __cs_ref - arm_func_end ftell - - arm_func_start _fseek -_fseek: ; 0x020DEF7C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r1, [r5, #0x4] - mov r4, r2 - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - cmp r1, #0x1 - ldreqb r1, [r5, #0xd] - cmpeq r1, #0x0 - beq _020DEFC8 - ldr r0, _020DF160 ; =errno - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DEFC8: - ldr r1, [r5, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DF018 - mov r1, #0x0 - bl __flush_buffer - cmp r0, #0x0 - beq _020DF018 - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =errno - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DF018: - cmp r4, #0x1 - bne _020DF038 - mov r0, r5 - mov r4, #0x0 - bl _ftell - ldr r1, [sp, #0x14] - add r0, r1, r0 - str r0, [sp, #0x14] -_020DF038: - cmp r4, #0x2 - beq _020DF0CC - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - beq _020DF0CC - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #0x2 - cmp r0, #0x1 - bhi _020DF0CC - ldr r2, [sp, #0x14] - ldr r0, [r5, #0x18] - cmp r2, r0 - bhs _020DF088 - ldr r0, [r5, #0x34] - cmp r2, r0 - bhs _020DF098 -_020DF088: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF098: - ldr r1, [r5, #0x1c] - sub r0, r2, r0 - add r0, r1, r0 - str r0, [r5, #0x24] - ldr r1, [r5, #0x18] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - str r0, [r5, #0x28] - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - orr r0, r0, #0x2 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF0CC: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] -_020DF0D8: - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - movs r0, r0, lsr #0x1d - bne _020DF150 - ldr r12, [r5, #0x38] - cmp r12, #0x0 - beq _020DF13C - ldr r0, [r5, #0x0] - ldr r3, [r5, #0x48] - add r1, sp, #0x14 - mov r2, r4 - blx r12 - cmp r0, #0x0 - beq _020DF13C - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =errno - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DF13C: - mov r1, #0x0 - strb r1, [r5, #0xc] - ldr r0, [sp, #0x14] - str r0, [r5, #0x18] - str r1, [r5, #0x28] -_020DF150: - mov r0, #0x0 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DF160: .word errno - arm_func_end _fseek - - arm_func_start fseek -fseek: - stmdb sp!, {r3-r9,lr} - ldr r3, _020DF274 ; =__files - mov r9, r0 - cmp r9, r3 - mov r8, r1 - mov r7, r2 - moveq r6, #0x2 - beq _020DF1A4 - ldr r0, _020DF278 ; =__files + 0x4C - cmp r9, r0 - moveq r6, #0x3 - beq _020DF1A4 - ldr r0, _020DF27C ; =__files + 0x98 - cmp r9, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DF1A4: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DF280 ; =__cs - add r0, r5, r4 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DF1E4 - ldr r0, _020DF284 ; =OSi_ThreadInfo - ldr r2, _020DF288 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DF28C ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] - b _020DF23C -_020DF1E4: - ldr r0, _020DF284 ; =OSi_ThreadInfo - ldr r1, _020DF288 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DF214 - ldr r1, _020DF28C ; =__cs_ref - ldr r0, [r1, r6, lsl #0x2] - add r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - b _020DF23C -_020DF214: - add r0, r5, r4 - bl OS_LockMutex - ldr r0, _020DF284 ; =OSi_ThreadInfo - ldr r2, _020DF288 ; =__cs_id - ldr r1, [r0, #0x4] - ldr r0, _020DF28C ; =__cs_ref - ldr r3, [r1, #0x6c] - mov r1, #0x1 - str r3, [r2, r6, lsl #0x2] - str r1, [r0, r6, lsl #0x2] -_020DF23C: - mov r0, r9 - mov r1, r8 - mov r2, r7 - bl _fseek - ldr r1, _020DF28C ; =__cs_ref - mov r7, r0 - ldr r0, [r1, r6, lsl #0x2] - subs r0, r0, #0x1 - str r0, [r1, r6, lsl #0x2] - bne _020DF26C - add r0, r5, r4 - bl OS_UnlockMutex -_020DF26C: - mov r0, r7 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DF274: .word __files -_020DF278: .word __files + 0x4C -_020DF27C: .word __files + 0x98 -_020DF280: .word __cs -_020DF284: .word OSi_ThreadInfo -_020DF288: .word __cs_id -_020DF28C: .word __cs_ref - arm_func_end fseek - - arm_func_start rewind -rewind: ; 0x020DF290 - stmdb sp!, {r4,lr} - mov r1, #0x0 - mov r4, r0 - mov r2, r1 - strb r1, [r4, #0xd] - bl fseek - mov r0, #0x0 - strb r0, [r4, #0xd] - ldmia sp!, {r4,pc} - arm_func_end rewind - - exception ftell, 285, 0x00300F00 - exception _fseek, 489, 0x00400320 - exception fseek, 301, 0x00403F00 - exception rewind, 37, 0x00100100 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ftell +_ftell: ; 0x020DEDE4 + ldr r1, [r0, #0x4] + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + add r1, r1, #0xff + and r1, r1, #0xff + cmp r1, #0x1 + bhi _020DEE10 + ldrb r1, [r0, #0xd] + cmp r1, #0x0 + beq _020DEE24 +_020DEE10: + ldr r0, _020DEE5C ; =errno + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + bx lr +_020DEE24: + ldr r1, [r0, #0x8] + mov r1, r1, lsl #0x1d + movs r12, r1, lsr #0x1d + ldreq r0, [r0, #0x18] + bxeq lr + ldr r2, [r0, #0x24] + ldr r1, [r0, #0x1c] + ldr r3, [r0, #0x34] + sub r0, r2, r1 + cmp r12, #0x3 + add r0, r3, r0 + subcs r1, r12, #0x2 + subcs r0, r0, r1 + bx lr + .balign 4 +_020DEE5C: .word errno + arm_func_end _ftell + + arm_func_start ftell +ftell: ; 0x020DEE60 + stmdb sp!, {r3-r7,lr} + ldr r1, _020DEF60 ; =__files + mov r7, r0 + cmp r7, r1 + moveq r6, #0x2 + beq _020DEE98 + ldr r0, _020DEF64 ; =__files + 0x4C + cmp r7, r0 + moveq r6, #0x3 + beq _020DEE98 + ldr r0, _020DEF68 ; =__files + 0x98 + cmp r7, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DEE98: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DEF6C ; =__cs + add r0, r5, r4 + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020DEED8 + ldr r0, _020DEF70 ; =OSi_ThreadInfo + ldr r2, _020DEF74 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DEF30 +_020DEED8: + ldr r0, _020DEF70 ; =OSi_ThreadInfo + ldr r1, _020DEF74 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DEF08 + ldr r1, _020DEF78 ; =__cs_ref + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DEF30 +_020DEF08: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DEF70 ; =OSi_ThreadInfo + ldr r2, _020DEF74 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DEF30: + mov r0, r7 + bl _ftell + ldr r1, _020DEF78 ; =__cs_ref + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DEF58 + add r0, r5, r4 + bl OS_UnlockMutex +_020DEF58: + mov r0, r7 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020DEF60: .word __files +_020DEF64: .word __files + 0x4C +_020DEF68: .word __files + 0x98 +_020DEF6C: .word __cs +_020DEF70: .word OSi_ThreadInfo +_020DEF74: .word __cs_id +_020DEF78: .word __cs_ref + arm_func_end ftell + + arm_func_start _fseek +_fseek: ; 0x020DEF7C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r5,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + mov r4, r2 + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + cmp r1, #0x1 + ldreqb r1, [r5, #0xd] + cmpeq r1, #0x0 + beq _020DEFC8 + ldr r0, _020DF160 ; =errno + mov r1, #0x28 + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DEFC8: + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + bne _020DF018 + mov r1, #0x0 + bl __flush_buffer + cmp r0, #0x0 + beq _020DF018 + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =errno + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF018: + cmp r4, #0x1 + bne _020DF038 + mov r0, r5 + mov r4, #0x0 + bl _ftell + ldr r1, [sp, #0x14] + add r0, r1, r0 + str r0, [sp, #0x14] +_020DF038: + cmp r4, #0x2 + beq _020DF0CC + ldr r0, [r5, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + beq _020DF0CC + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x2 + cmp r0, #0x1 + bhi _020DF0CC + ldr r2, [sp, #0x14] + ldr r0, [r5, #0x18] + cmp r2, r0 + bhs _020DF088 + ldr r0, [r5, #0x34] + cmp r2, r0 + bhs _020DF098 +_020DF088: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF098: + ldr r1, [r5, #0x1c] + sub r0, r2, r0 + add r0, r1, r0 + str r0, [r5, #0x24] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + str r0, [r5, #0x28] + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + orr r0, r0, #0x2 + str r0, [r5, #0x8] + b _020DF0D8 +_020DF0CC: + ldr r0, [r5, #0x8] + bic r0, r0, #0x7 + str r0, [r5, #0x8] +_020DF0D8: + ldr r0, [r5, #0x8] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1d + bne _020DF150 + ldr r12, [r5, #0x38] + cmp r12, #0x0 + beq _020DF13C + ldr r0, [r5, #0x0] + ldr r3, [r5, #0x48] + add r1, sp, #0x14 + mov r2, r4 + blx r12 + cmp r0, #0x0 + beq _020DF13C + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =errno + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr +_020DF13C: + mov r1, #0x0 + strb r1, [r5, #0xc] + ldr r0, [sp, #0x14] + str r0, [r5, #0x18] + str r1, [r5, #0x28] +_020DF150: + mov r0, #0x0 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DF160: .word errno + arm_func_end _fseek + + arm_func_start fseek +fseek: + stmdb sp!, {r3-r9,lr} + ldr r3, _020DF274 ; =__files + mov r9, r0 + cmp r9, r3 + mov r8, r1 + mov r7, r2 + moveq r6, #0x2 + beq _020DF1A4 + ldr r0, _020DF278 ; =__files + 0x4C + cmp r9, r0 + moveq r6, #0x3 + beq _020DF1A4 + ldr r0, _020DF27C ; =__files + 0x98 + cmp r9, r0 + moveq r6, #0x4 + movne r6, #0x5 +_020DF1A4: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020DF280 ; =__cs + add r0, r5, r4 + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020DF1E4 + ldr r0, _020DF284 ; =OSi_ThreadInfo + ldr r2, _020DF288 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DF23C +_020DF1E4: + ldr r0, _020DF284 ; =OSi_ThreadInfo + ldr r1, _020DF288 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DF214 + ldr r1, _020DF28C ; =__cs_ref + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DF23C +_020DF214: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DF284 ; =OSi_ThreadInfo + ldr r2, _020DF288 ; =__cs_id + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =__cs_ref + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DF23C: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl _fseek + ldr r1, _020DF28C ; =__cs_ref + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DF26C + add r0, r5, r4 + bl OS_UnlockMutex +_020DF26C: + mov r0, r7 + ldmia sp!, {r3-r9,pc} + .balign 4 +_020DF274: .word __files +_020DF278: .word __files + 0x4C +_020DF27C: .word __files + 0x98 +_020DF280: .word __cs +_020DF284: .word OSi_ThreadInfo +_020DF288: .word __cs_id +_020DF28C: .word __cs_ref + arm_func_end fseek + + arm_func_start rewind +rewind: ; 0x020DF290 + stmdb sp!, {r4,lr} + mov r1, #0x0 + mov r4, r0 + mov r2, r1 + strb r1, [r4, #0xd] + bl fseek + mov r0, #0x0 + strb r0, [r4, #0xd] + ldmia sp!, {r4,pc} + arm_func_end rewind + + exception ftell, 285, 0x00300F00 + exception _fseek, 489, 0x00400320 + exception fseek, 301, 0x00403F00 + exception rewind, 37, 0x00100100 diff --git a/arm9/asm/MSL_Common_float.s b/arm9/asm/MSL_Common_float.s index c9a1db8fc..7226d1195 100644 --- a/arm9/asm/MSL_Common_float.s +++ b/arm9/asm/MSL_Common_float.s @@ -1,18 +1,18 @@ - .include "asm/macros.inc" - .include "global.inc" - - .data - .global __float_huge -__float_huge: ; 0x02106B74 - .word 0x7F800000 ; inf - .size __float_huge,.-__float_huge - - .global __float_nan -__float_nan: ; 0x02106B78 - .word 0x7FFFFFFF ; nan - .size __float_nan,.-__float_nan - - .global __double_huge -__double_huge: ; 0x02106B7C - .word 0x00000000, 0x7FF00000 ; inf - .size __double_huge,.-__double_huge + .include "asm/macros.inc" + .include "global.inc" + + .data + .global __float_huge +__float_huge: ; 0x02106B74 + .word 0x7F800000 ; inf + .size __float_huge,.-__float_huge + + .global __float_nan +__float_nan: ; 0x02106B78 + .word 0x7FFFFFFF ; nan + .size __float_nan,.-__float_nan + + .global __double_huge +__double_huge: ; 0x02106B7C + .word 0x00000000, 0x7FF00000 ; inf + .size __double_huge,.-__double_huge diff --git a/arm9/asm/MSL_Common_mbstring.s b/arm9/asm/MSL_Common_mbstring.s index b22396f56..ee6c44864 100644 --- a/arm9/asm/MSL_Common_mbstring.s +++ b/arm9/asm/MSL_Common_mbstring.s @@ -1,237 +1,237 @@ - .include "asm/macros.inc" - .include "global.inc" - - .data - - .balign 4 - .global _loc_tim_C$timezone -_loc_tim_C$timezone: ; 0x02106B84 - .asciz "" - .size _loc_tim_C$timezone,.-_loc_tim_C$timezone - - .balign 4 - .global _loc_tim_C$timefmt2 -_loc_tim_C$timefmt2: ; 0x02106B88 - .asciz "%T" - .size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2 - - .balign 4 - .global _loc_tim_C$AMPM -_loc_tim_C$AMPM: ; 0x02106B8C - .asciz "AM|PM" - .size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM - - .balign 4, 0 - .global _loc_ctyp_C -_loc_ctyp_C: ; 0x02106B94 - .word __mbtowc_noconv - .word __wctomb_noconv - .size _loc_ctyp_C,.-_loc_ctyp_C - - .global _loc_coll_C -_loc_coll_C: ; 0x02106B9C - .word 0x20 - .word 0x6E - .word 0x00 - .word char_coll_tableC - .size _loc_coll_C,.-_loc_coll_C - - .global _loc_tim_C -_loc_tim_C: ; 0x02106BAC - .word _loc_tim_C$AMPM - .word _loc_tim_C$datetimefmt - .word _loc_tim_C$timefmt - .word _loc_tim_C$datefmt - .word _loc_tim_C$timefmt2 - .word _loc_tim_C$daynames - .word _loc_tim_C$monthnames - .word _loc_tim_C$timezone - .size _loc_tim_C,.-_loc_tim_C - - .global char_coll_tableC -char_coll_tableC: ; 0x02106BCC - .short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008 - .short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010 - .short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028 - .short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016 - .short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037 - .short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047 - .short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057 - .short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C - .short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038 - .short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048 - .short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058 - .short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000 - .size char_coll_tableC,.-char_coll_tableC - - .global _loc_tim_C$datefmt -_loc_tim_C$datefmt: ; 0x02106C8C - .asciz "%m/%d/%y" - .size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt - - .balign 4, 0 - .global _current_locale -_current_locale: ; 0x02106C98 - .word _loc_tim_C - .word _loc_coll_C - .word _loc_ctyp_C - .size _current_locale,.-_current_locale - - .global _loc_tim_C$timefmt -_loc_tim_C$timefmt: ; 0x02106CA4 - .asciz "%I:%M:%S %p" - .size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt - - .balign 4, 0 - .global _loc_tim_C$datetimefmt -_loc_tim_C$datetimefmt: ; 0x02106CB0 - .asciz "%a %b %e %T %Y" - .size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt - - .balign 4, 0 - .global _loc_tim_C$daynames -_loc_tim_C$daynames: ; 0x02106CC0 - .asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" - .size _loc_tim_C$daynames,.-_loc_tim_C$daynames - - .balign 4, 0 - .global _loc_tim_C$monthnames -_loc_tim_C$monthnames: ; 0x02106D18 - .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" - .size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames - - .text - - arm_func_start mbtowc -mbtowc: - stmdb sp!, {r3,lr} - ldr r3, _020DF2CC ; =_current_locale - ldr r3, [r3, #0x8] - ldr r3, [r3, #0x0] - blx r3 - ldmia sp!, {r3,pc} - .balign 4 -_020DF2CC: .word _current_locale - arm_func_end mbtowc - - arm_func_start __mbtowc_noconv -__mbtowc_noconv: ; 0x020DF2D0 - cmp r1, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r2, #0x0 - mvneq r0, #0x0 - bxeq lr - cmp r0, #0x0 - ldrneb r2, [r1, #0x0] - strneh r2, [r0, #0x0] - ldrsb r0, [r1, #0x0] - cmp r0, #0x0 - moveq r0, #0x0 - movne r0, #0x1 - bx lr - arm_func_end __mbtowc_noconv - - arm_func_start __wctomb_noconv -__wctomb_noconv: ; 0x020DF308 - cmp r0, #0x0 - moveq r0, #0x0 - strneb r1, [r0, #0x0] - movne r0, #0x1 - bx lr - arm_func_end __wctomb_noconv - - arm_func_start wctomb -wctomb: ; 0x020DF31C - stmdb sp!, {r3,lr} - ldr r2, _020DF334 ; =_current_locale - ldr r2, [r2, #0x8] - ldr r2, [r2, #0x4] - blx r2 - ldmia sp!, {r3,pc} - .balign 4 -_020DF334: .word _current_locale - arm_func_end wctomb - - arm_func_start mbstowcs -mbstowcs: ; 0x020DF338 - stmdb sp!, {r4-r8,lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - bl strlen - mov r5, r0 - cmp r8, #0x0 - mov r4, #0x0 - beq _020DF3B8 - cmp r6, #0x0 - bls _020DF3B8 -_020DF368: - ldrsb r0, [r7, #0x0] - cmp r0, #0x0 - beq _020DF3A0 - mov r0, r8 - mov r1, r7 - mov r2, r5 - bl mbtowc - cmp r0, #0x0 - add r8, r8, #0x2 - addgt r7, r7, r0 - subgt r5, r5, r0 - bgt _020DF3AC - mvn r0, #0x0 - ldmia sp!, {r4-r8,pc} -_020DF3A0: - mov r0, #0x0 - strh r0, [r8, #0x0] - b _020DF3B8 -_020DF3AC: - add r4, r4, #0x1 - cmp r4, r6 - blo _020DF368 -_020DF3B8: - mov r0, r4 - ldmia sp!, {r4-r8,pc} - arm_func_end mbstowcs - - arm_func_start wcstombs -wcstombs: - stmdb sp!, {r3-r9,lr} - movs r4, r0 - mov r9, r1 - cmpne r9, #0x0 - mov r8, r2 - mov r7, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r9,pc} - add r6, sp, #0x0 -_020DF3E4: - ldrh r1, [r9, #0x0] - cmp r1, #0x0 - moveq r0, #0x0 - streqb r0, [r4, r7] - beq _020DF430 - mov r0, r6 - add r9, r9, #0x2 - bl wctomb - mov r5, r0 - add r0, r7, r5 - cmp r0, r8 - bhi _020DF430 - mov r1, r6 - mov r2, r5 - add r0, r4, r7 - bl strncpy - add r7, r7, r5 - cmp r7, r8 - bls _020DF3E4 -_020DF430: - mov r0, r7 - ldmia sp!, {r3-r9,pc} - arm_func_end wcstombs - - exception mbtowc, 29, 0x00100000 - exception wctomb, 29, 0x00100000 - exception mbstowcs, 137, 0x00301F00 - exception wcstombs, 121, 0x00403F00 + .include "asm/macros.inc" + .include "global.inc" + + .data + + .balign 4 + .global _loc_tim_C$timezone +_loc_tim_C$timezone: ; 0x02106B84 + .asciz "" + .size _loc_tim_C$timezone,.-_loc_tim_C$timezone + + .balign 4 + .global _loc_tim_C$timefmt2 +_loc_tim_C$timefmt2: ; 0x02106B88 + .asciz "%T" + .size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2 + + .balign 4 + .global _loc_tim_C$AMPM +_loc_tim_C$AMPM: ; 0x02106B8C + .asciz "AM|PM" + .size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM + + .balign 4, 0 + .global _loc_ctyp_C +_loc_ctyp_C: ; 0x02106B94 + .word __mbtowc_noconv + .word __wctomb_noconv + .size _loc_ctyp_C,.-_loc_ctyp_C + + .global _loc_coll_C +_loc_coll_C: ; 0x02106B9C + .word 0x20 + .word 0x6E + .word 0x00 + .word char_coll_tableC + .size _loc_coll_C,.-_loc_coll_C + + .global _loc_tim_C +_loc_tim_C: ; 0x02106BAC + .word _loc_tim_C$AMPM + .word _loc_tim_C$datetimefmt + .word _loc_tim_C$timefmt + .word _loc_tim_C$datefmt + .word _loc_tim_C$timefmt2 + .word _loc_tim_C$daynames + .word _loc_tim_C$monthnames + .word _loc_tim_C$timezone + .size _loc_tim_C,.-_loc_tim_C + + .global char_coll_tableC +char_coll_tableC: ; 0x02106BCC + .short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008 + .short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010 + .short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028 + .short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016 + .short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037 + .short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047 + .short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057 + .short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C + .short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038 + .short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048 + .short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058 + .short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000 + .size char_coll_tableC,.-char_coll_tableC + + .global _loc_tim_C$datefmt +_loc_tim_C$datefmt: ; 0x02106C8C + .asciz "%m/%d/%y" + .size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt + + .balign 4, 0 + .global _current_locale +_current_locale: ; 0x02106C98 + .word _loc_tim_C + .word _loc_coll_C + .word _loc_ctyp_C + .size _current_locale,.-_current_locale + + .global _loc_tim_C$timefmt +_loc_tim_C$timefmt: ; 0x02106CA4 + .asciz "%I:%M:%S %p" + .size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt + + .balign 4, 0 + .global _loc_tim_C$datetimefmt +_loc_tim_C$datetimefmt: ; 0x02106CB0 + .asciz "%a %b %e %T %Y" + .size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt + + .balign 4, 0 + .global _loc_tim_C$daynames +_loc_tim_C$daynames: ; 0x02106CC0 + .asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" + .size _loc_tim_C$daynames,.-_loc_tim_C$daynames + + .balign 4, 0 + .global _loc_tim_C$monthnames +_loc_tim_C$monthnames: ; 0x02106D18 + .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" + .size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames + + .text + + arm_func_start mbtowc +mbtowc: + stmdb sp!, {r3,lr} + ldr r3, _020DF2CC ; =_current_locale + ldr r3, [r3, #0x8] + ldr r3, [r3, #0x0] + blx r3 + ldmia sp!, {r3,pc} + .balign 4 +_020DF2CC: .word _current_locale + arm_func_end mbtowc + + arm_func_start __mbtowc_noconv +__mbtowc_noconv: ; 0x020DF2D0 + cmp r1, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, #0x0 + mvneq r0, #0x0 + bxeq lr + cmp r0, #0x0 + ldrneb r2, [r1, #0x0] + strneh r2, [r0, #0x0] + ldrsb r0, [r1, #0x0] + cmp r0, #0x0 + moveq r0, #0x0 + movne r0, #0x1 + bx lr + arm_func_end __mbtowc_noconv + + arm_func_start __wctomb_noconv +__wctomb_noconv: ; 0x020DF308 + cmp r0, #0x0 + moveq r0, #0x0 + strneb r1, [r0, #0x0] + movne r0, #0x1 + bx lr + arm_func_end __wctomb_noconv + + arm_func_start wctomb +wctomb: ; 0x020DF31C + stmdb sp!, {r3,lr} + ldr r2, _020DF334 ; =_current_locale + ldr r2, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldmia sp!, {r3,pc} + .balign 4 +_020DF334: .word _current_locale + arm_func_end wctomb + + arm_func_start mbstowcs +mbstowcs: ; 0x020DF338 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + bl strlen + mov r5, r0 + cmp r8, #0x0 + mov r4, #0x0 + beq _020DF3B8 + cmp r6, #0x0 + bls _020DF3B8 +_020DF368: + ldrsb r0, [r7, #0x0] + cmp r0, #0x0 + beq _020DF3A0 + mov r0, r8 + mov r1, r7 + mov r2, r5 + bl mbtowc + cmp r0, #0x0 + add r8, r8, #0x2 + addgt r7, r7, r0 + subgt r5, r5, r0 + bgt _020DF3AC + mvn r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020DF3A0: + mov r0, #0x0 + strh r0, [r8, #0x0] + b _020DF3B8 +_020DF3AC: + add r4, r4, #0x1 + cmp r4, r6 + blo _020DF368 +_020DF3B8: + mov r0, r4 + ldmia sp!, {r4-r8,pc} + arm_func_end mbstowcs + + arm_func_start wcstombs +wcstombs: + stmdb sp!, {r3-r9,lr} + movs r4, r0 + mov r9, r1 + cmpne r9, #0x0 + mov r8, r2 + mov r7, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r9,pc} + add r6, sp, #0x0 +_020DF3E4: + ldrh r1, [r9, #0x0] + cmp r1, #0x0 + moveq r0, #0x0 + streqb r0, [r4, r7] + beq _020DF430 + mov r0, r6 + add r9, r9, #0x2 + bl wctomb + mov r5, r0 + add r0, r7, r5 + cmp r0, r8 + bhi _020DF430 + mov r1, r6 + mov r2, r5 + add r0, r4, r7 + bl strncpy + add r7, r7, r5 + cmp r7, r8 + bls _020DF3E4 +_020DF430: + mov r0, r7 + ldmia sp!, {r3-r9,pc} + arm_func_end wcstombs + + exception mbtowc, 29, 0x00100000 + exception wctomb, 29, 0x00100000 + exception mbstowcs, 137, 0x00301F00 + exception wcstombs, 121, 0x00403F00 diff --git a/arm9/asm/MSL_Common_mem.s b/arm9/asm/MSL_Common_mem.s index dfb7fd07f..860ff581b 100644 --- a/arm9/asm/MSL_Common_mem.s +++ b/arm9/asm/MSL_Common_mem.s @@ -1,111 +1,111 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start memcpy -memcpy: ; 0x020DF438 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF444: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF444 - bx lr - arm_func_end memcpy - - arm_func_start memmove -memmove: ; 0x020DF458 - cmp r1, r0 - blo _020DF480 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF46C: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF46C - bx lr -_020DF480: - cmp r2, #0x0 - add r3, r1, r2 - add r12, r0, r2 - bxeq lr -_020DF490: - ldrsb r1, [r3, #-0x1]! - subs r2, r2, #0x1 - strb r1, [r12, #-0x1]! - bne _020DF490 - bx lr - arm_func_end memmove - - arm_func_start memset -memset: ; 0x020DF4A4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl __fill_mem - mov r0, r4 - ldmia sp!, {r4,pc} - arm_func_end memset - - arm_func_start memchr -memchr: - cmp r2, #0x0 - and r3, r1, #0xff - beq _020DF4DC -_020DF4C4: - ldrb r1, [r0], #0x1 - cmp r1, r3 - subeq r0, r0, #0x1 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4C4 -_020DF4DC: - mov r0, #0x0 - bx lr - arm_func_end memchr - - arm_func_start __memrchr -__memrchr: ; 0x020DF4E4 - cmp r2, #0x0 - and r3, r1, #0xff - add r0, r0, r2 - beq _020DF508 -_020DF4F4: - ldrb r1, [r0, #-0x1]! - cmp r1, r3 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4F4 -_020DF508: - mov r0, #0x0 - bx lr - arm_func_end __memrchr - - arm_func_start memcmp -memcmp: ; 0x020DF510 - cmp r2, #0x0 - beq _020DF548 -_020DF518: - ldrb r12, [r0], #0x1 - ldrb r3, [r1], #0x1 - cmp r12, r3 - beq _020DF540 - ldrb r2, [r0, #-0x1] - ldrb r0, [r1, #-0x1] - cmp r2, r0 - mvncc r0, #0x0 - movcs r0, #0x1 - bx lr -_020DF540: - subs r2, r2, #0x1 - bne _020DF518 -_020DF548: - mov r0, #0x0 - bx lr - arm_func_end memcmp - - exception memset, 21, 0x00100100 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start memcpy +memcpy: ; 0x020DF438 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF444: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF444 + bx lr + arm_func_end memcpy + + arm_func_start memmove +memmove: ; 0x020DF458 + cmp r1, r0 + blo _020DF480 + mov r12, r0 + cmp r2, #0x0 + bxeq lr +_020DF46C: + ldrsb r3, [r1], #0x1 + subs r2, r2, #0x1 + strb r3, [r12], #0x1 + bne _020DF46C + bx lr +_020DF480: + cmp r2, #0x0 + add r3, r1, r2 + add r12, r0, r2 + bxeq lr +_020DF490: + ldrsb r1, [r3, #-0x1]! + subs r2, r2, #0x1 + strb r1, [r12, #-0x1]! + bne _020DF490 + bx lr + arm_func_end memmove + + arm_func_start memset +memset: ; 0x020DF4A4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl __fill_mem + mov r0, r4 + ldmia sp!, {r4,pc} + arm_func_end memset + + arm_func_start memchr +memchr: + cmp r2, #0x0 + and r3, r1, #0xff + beq _020DF4DC +_020DF4C4: + ldrb r1, [r0], #0x1 + cmp r1, r3 + subeq r0, r0, #0x1 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4C4 +_020DF4DC: + mov r0, #0x0 + bx lr + arm_func_end memchr + + arm_func_start __memrchr +__memrchr: ; 0x020DF4E4 + cmp r2, #0x0 + and r3, r1, #0xff + add r0, r0, r2 + beq _020DF508 +_020DF4F4: + ldrb r1, [r0, #-0x1]! + cmp r1, r3 + bxeq lr + subs r2, r2, #0x1 + bne _020DF4F4 +_020DF508: + mov r0, #0x0 + bx lr + arm_func_end __memrchr + + arm_func_start memcmp +memcmp: ; 0x020DF510 + cmp r2, #0x0 + beq _020DF548 +_020DF518: + ldrb r12, [r0], #0x1 + ldrb r3, [r1], #0x1 + cmp r12, r3 + beq _020DF540 + ldrb r2, [r0, #-0x1] + ldrb r0, [r1, #-0x1] + cmp r2, r0 + mvncc r0, #0x0 + movcs r0, #0x1 + bx lr +_020DF540: + subs r2, r2, #0x1 + bne _020DF518 +_020DF548: + mov r0, #0x0 + bx lr + arm_func_end memcmp + + exception memset, 21, 0x00100100 diff --git a/arm9/asm/MSL_Common_mem_funcs.s b/arm9/asm/MSL_Common_mem_funcs.s index 2a0a0efb4..f52aa8ee8 100644 --- a/arm9/asm/MSL_Common_mem_funcs.s +++ b/arm9/asm/MSL_Common_mem_funcs.s @@ -1,61 +1,61 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start __fill_mem -__fill_mem: ; 0x020DF550 - cmp r2, #0x20 - and r3, r1, #0xff - blo _020DF5E4 - rsb r1, r0, #0x0 - ands r12, r1, #0x3 - beq _020DF57C - sub r2, r2, r12 - and r1, r3, #0xff -_020DF570: - strb r1, [r0], #0x1 - subs r12, r12, #0x1 - bne _020DF570 -_020DF57C: - cmp r3, #0x0 - beq _020DF594 - mov r1, r3, lsl #0x10 - orr r1, r1, r3, lsl #0x18 - orr r1, r1, r3, lsl #0x8 - orr r3, r3, r1 -_020DF594: - movs r1, r2, lsr #0x5 - beq _020DF5C8 -_020DF59C: - str r3, [r0, #0x0] - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r3, [r0, #0xc] - str r3, [r0, #0x10] - str r3, [r0, #0x14] - str r3, [r0, #0x18] - str r3, [r0, #0x1c] - add r0, r0, #0x20 - subs r1, r1, #0x1 - bne _020DF59C -_020DF5C8: - and r1, r2, #0x1f - movs r1, r1, lsr #0x2 - beq _020DF5E0 -_020DF5D4: - str r3, [r0], #0x4 - subs r1, r1, #0x1 - bne _020DF5D4 -_020DF5E0: - and r2, r2, #0x3 -_020DF5E4: - cmp r2, #0x0 - bxeq lr - and r1, r3, #0xff -_020DF5F0: - strb r1, [r0], #0x1 - subs r2, r2, #0x1 - bne _020DF5F0 - bx lr - arm_func_end __fill_mem + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start __fill_mem +__fill_mem: ; 0x020DF550 + cmp r2, #0x20 + and r3, r1, #0xff + blo _020DF5E4 + rsb r1, r0, #0x0 + ands r12, r1, #0x3 + beq _020DF57C + sub r2, r2, r12 + and r1, r3, #0xff +_020DF570: + strb r1, [r0], #0x1 + subs r12, r12, #0x1 + bne _020DF570 +_020DF57C: + cmp r3, #0x0 + beq _020DF594 + mov r1, r3, lsl #0x10 + orr r1, r1, r3, lsl #0x18 + orr r1, r1, r3, lsl #0x8 + orr r3, r3, r1 +_020DF594: + movs r1, r2, lsr #0x5 + beq _020DF5C8 +_020DF59C: + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r3, [r0, #0x10] + str r3, [r0, #0x14] + str r3, [r0, #0x18] + str r3, [r0, #0x1c] + add r0, r0, #0x20 + subs r1, r1, #0x1 + bne _020DF59C +_020DF5C8: + and r1, r2, #0x1f + movs r1, r1, lsr #0x2 + beq _020DF5E0 +_020DF5D4: + str r3, [r0], #0x4 + subs r1, r1, #0x1 + bne _020DF5D4 +_020DF5E0: + and r2, r2, #0x3 +_020DF5E4: + cmp r2, #0x0 + bxeq lr + and r1, r3, #0xff +_020DF5F0: + strb r1, [r0], #0x1 + subs r2, r2, #0x1 + bne _020DF5F0 + bx lr + arm_func_end __fill_mem diff --git a/arm9/asm/MSL_Common_printf.s b/arm9/asm/MSL_Common_printf.s index 1dfef8fde..86a2f2faa 100644 --- a/arm9/asm/MSL_Common_printf.s +++ b/arm9/asm/MSL_Common_printf.s @@ -1,2583 +1,2583 @@ - .include "asm/macros.inc" - .include "global.inc" - - .data - - .global UNK_02106DA0 -UNK_02106DA0: ; 0x02106DA0 - .byte 0x30, 0x78, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00 - .size UNK_02106DA0,.-UNK_02106DA0 - - .global UNK_02106DA8 -UNK_02106DA8: ; 0x02106DA8 - .asciz "-INF" - .size UNK_02106DA8,.-UNK_02106DA8 - - .balign 4, 0 - .global UNK_02106DB0 -UNK_02106DB0: ; 0x02106DB0 - .asciz "-inf" - .size UNK_02106DB0,.-UNK_02106DB0 - - .balign 4, 0 - .global UNK_02106DB8 -UNK_02106DB8: ; 0x02106DB8 - .asciz "INF" - .size UNK_02106DB8,.-UNK_02106DB8 - - .balign 4, 0 - .global UNK_02106DBC -UNK_02106DBC: ; 0x02106DBC - .asciz "inf" - .size UNK_02106DBC,.-UNK_02106DBC - - .balign 4, 0 - .global UNK_02106DC0 -UNK_02106DC0: ; 0x02106DC0 - .asciz "-NAN" - .size UNK_02106DC0,.-UNK_02106DC0 - - .balign 4, 0 - .global UNK_02106DC8 -UNK_02106DC8: ; 0x02106DC8 - .asciz "-nan" - .size UNK_02106DC8,.-UNK_02106DC8 - - .balign 4, 0 - .global UNK_02106DD0 -UNK_02106DD0: ; 0x02106DD0 - .asciz "NAN" - .size UNK_02106DD0,.-UNK_02106DD0 - - .balign 4, 0 - .global UNK_02106DD4 -UNK_02106DD4: ; 0x02106DD4 - .asciz "nan" - .size UNK_02106DD4,.-UNK_02106DD4 - - .balign 4, 0 - .global UNK_02106DD8 -UNK_02106DD8: ; 0x02106DD8 - .byte 0x00, 0x00, 0x00, 0x00 - .size UNK_02106DD8,.-UNK_02106DD8 - - .global UNK_02106DDC -UNK_02106DDC: ; 0x02106DDC - .byte 0x00, 0x00, 0x00, 0x00 - .size UNK_02106DDC,.-UNK_02106DDC - - .text - - arm_func_start parse_format -parse_format: ; 0x020DF600 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrsb r3, [r0, #0x1] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x1 - bne _020DF65C - add r0, sp, #0x0 - strb r3, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF65C: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020DF670: - mov r8, r7 - cmp r3, #0x2b - bgt _020DF6A0 - bge _020DF6C8 - cmp r3, #0x23 - bgt _020DF6F8 - cmp r3, #0x20 - blt _020DF6F8 - beq _020DF6D0 - cmp r3, #0x23 - beq _020DF6E0 - b _020DF6F8 -_020DF6A0: - cmp r3, #0x30 - bgt _020DF6F8 - cmp r3, #0x2d - blt _020DF6F8 - beq _020DF6C0 - cmp r3, #0x30 - beq _020DF6E8 - b _020DF6F8 -_020DF6C0: - strb r6, [sp, #0x0] - b _020DF6FC -_020DF6C8: - strb r7, [sp, #0x1] - b _020DF6FC -_020DF6D0: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020DF6FC -_020DF6E0: - strb r7, [sp, #0x3] - b _020DF6FC -_020DF6E8: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020DF6FC -_020DF6F8: - mov r8, r0 -_020DF6FC: - cmp r8, #0x0 - ldrnesb r3, [r12, #0x1]! - bne _020DF670 - cmp r3, #0x2a - bne _020DF744 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020DF73C - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020DF73C: - ldrsb r3, [r12, #0x1]! - b _020DF794 -_020DF744: - ldr r4, _020DFB88 ; =__msl_digit - mov r5, #0x0 - mov r0, #0xa - b _020DF768 -_020DF754: - ldr r2, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r2, r0, r3 - ldrsb r3, [r12, #0x1]! - str r6, [sp, #0x8] -_020DF768: - cmp r3, #0x0 - blt _020DF778 - cmp r3, #0x80 - blt _020DF780 -_020DF778: - mov r2, r5 - b _020DF78C -_020DF780: - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020DF78C: - cmp r2, #0x0 - bne _020DF754 -_020DF794: - ldr r2, [sp, #0x8] - ldr r0, _020DFB8C ; =0x000001FD - cmp r2, r0 - ble _020DF7C4 - mov r1, #0xff - add r0, sp, #0x0 - strb r1, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF7C4: - cmp r3, #0x2e - bne _020DF858 - ldrsb r3, [r12, #0x1]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020DF808 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrsb r3, [r12, #0x1]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020DF858 -_020DF808: - ldr r2, _020DFB88 ; =__msl_digit - mov r4, #0x0 - mov r0, #0xa - b _020DF82C -_020DF818: - ldr r1, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r1, r0, r3 - ldrsb r3, [r12, #0x1]! - str r5, [sp, #0xc] -_020DF82C: - cmp r3, #0x0 - blt _020DF83C - cmp r3, #0x80 - blt _020DF844 -_020DF83C: - mov r1, r4 - b _020DF850 -_020DF844: - mov r1, r3, lsl #0x1 - ldrh r1, [r2, r1] - and r1, r1, #0x8 -_020DF850: - cmp r1, #0x0 - bne _020DF818 -_020DF858: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020DF890 - cmp r3, #0x68 - blt _020DF884 - beq _020DF8AC - cmp r3, #0x6a - beq _020DF8F8 - cmp r3, #0x6c - beq _020DF8C8 - b _020DF91C -_020DF884: - cmp r3, #0x4c - beq _020DF8EC - b _020DF91C -_020DF890: - cmp r3, #0x74 - bgt _020DF8A0 - beq _020DF904 - b _020DF91C -_020DF8A0: - cmp r3, #0x7a - beq _020DF910 - b _020DF91C -_020DF8AC: - ldrsb r1, [r12, #0x1] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqsb r3, [r12, #0x1]! - b _020DF920 -_020DF8C8: - ldrsb r1, [r12, #0x1] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020DF920 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrsb r3, [r12, #0x1]! - b _020DF920 -_020DF8EC: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020DF920 -_020DF8F8: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020DF920 -_020DF904: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020DF920 -_020DF910: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020DF920 -_020DF91C: - mov r0, #0x0 -_020DF920: - cmp r0, #0x0 - ldrnesb r3, [r12, #0x1]! - strb r3, [sp, #0x5] - cmp r3, #0x61 - bgt _020DF974 - bge _020DFA5C - cmp r3, #0x47 - bgt _020DF968 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020DFB68 - b _020DFA5C ; case 65 - b _020DFB68 ; case 66 - b _020DFB68 ; case 67 - b _020DFB68 ; case 68 - b _020DFAA4 ; case 69 - b _020DFA24 ; case 70 - b _020DFA94 ; case 71 -_020DF968: - cmp r3, #0x58 - beq _020DF9E8 - b _020DFB68 -_020DF974: - cmp r3, #0x63 - bgt _020DF984 - beq _020DFB04 - b _020DFB68 -_020DF984: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020DFB68 - b _020DF9E8 ; case 100 - b _020DFAA4 ; case 101 - b _020DFA24 ; case 102 - b _020DFA94 ; case 103 - b _020DFB68 ; case 104 - b _020DF9E8 ; case 105 - b _020DFB68 ; case 106 - b _020DFB68 ; case 107 - b _020DFB68 ; case 108 - b _020DFB68 ; case 109 - b _020DFB54 ; case 110 - b _020DF9E8 ; case 111 - b _020DFAE0 ; case 112 - b _020DFB68 ; case 113 - b _020DFB68 ; case 114 - b _020DFB30 ; case 115 - b _020DFB68 ; case 116 - b _020DF9E8 ; case 117 - b _020DFB68 ; case 118 - b _020DFB68 ; case 119 - b _020DF9E8 ; case 120 -_020DF9E8: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020DFB70 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020DFB70 -_020DFA24: - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x6 - streq r0, [sp, #0xc] - b _020DFB70 -_020DFA5C: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - moveq r0, #0xff - streqb r0, [sp, #0x5] - b _020DFB70 -_020DFA94: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] -_020DFAA4: - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x6 - streq r0, [sp, #0xc] - b _020DFB70 -_020DFAE0: - mov r3, #0x78 - mov r2, #0x1 - mov r1, #0x3 - mov r0, #0x8 - strb r3, [sp, #0x5] - strb r2, [sp, #0x3] - strb r1, [sp, #0x4] - str r0, [sp, #0xc] - b _020DFB70 -_020DFB04: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x5] - b _020DFB70 -_020DFB30: - ldrb r0, [sp, #0x4] - cmp r0, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020DFB70 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x5] - b _020DFB70 -_020DFB54: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x5] - b _020DFB70 -_020DFB68: - mov r0, #0xff - strb r0, [sp, #0x5] -_020DFB70: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020DFB88: .word __msl_digit -_020DFB8C: .word 0x000001FD - arm_func_end parse_format - - arm_func_start long2str -long2str: ; 0x020DFB90 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strb r0, [r5, #-0x1]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrb r8, [sp, #0x45] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020DFC04 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFBF0 - cmp r8, #0x6f - beq _020DFC04 -_020DFBF0: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFC04: - cmp r8, #0x69 - bgt _020DFC2C - bge _020DFC60 - cmp r8, #0x58 - bgt _020DFC20 - beq _020DFC8C - b _020DFC94 -_020DFC20: - cmp r8, #0x64 - beq _020DFC60 - b _020DFC94 -_020DFC2C: - cmp r8, #0x6f - bgt _020DFC40 - moveq r4, #0x8 - moveq r11, #0x0 - b _020DFC94 -_020DFC40: - cmp r8, #0x78 - bgt _020DFC94 - cmp r8, #0x75 - blt _020DFC94 - beq _020DFC80 - cmp r8, #0x78 - beq _020DFC8C - b _020DFC94 -_020DFC60: - cmp r10, #0x0 - mov r4, #0xa - bge _020DFC94 - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020DFC94 -_020DFC80: - mov r4, #0xa - mov r11, #0x0 - b _020DFC94 -_020DFC8C: - mov r4, #0x10 - mov r11, #0x0 -_020DFC94: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020DFCCC - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020DFCCC: - cmp r10, #0x0 - strb r9, [r5, #-0x1]! - add r6, r6, #0x1 - bne _020DFC94 - cmp r4, #0x8 - bne _020DFD00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r5, #-0x1]! - addne r6, r6, #0x1 -_020DFD00: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020DFD34 - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020DFD34 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020DFD34: - ldr r0, [sp, #0x0] - sub r1, r0, r5 - ldr r0, _020DFDD8 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020DFD78 - mov r0, #0x30 -_020DFD68: - add r6, r6, #0x1 - cmp r6, r7 - strb r0, [r5, #-0x1]! - blt _020DFD68 -_020DFD78: - cmp r4, #0x10 - bne _020DFD94 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r5, #-0x1] - strneb r0, [r5, #-0x2]! -_020DFD94: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r5, #-0x1]! - bne _020DFDC4 - cmp r11, #0x1 - moveq r0, #0x2b - streqb r0, [r5, #-0x1]! - beq _020DFDC4 - cmp r11, #0x2 - moveq r0, #0x20 - streqb r0, [r5, #-0x1]! -_020DFDC4: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DFDD8: .word 0x000001FD - arm_func_end long2str - - arm_func_start longlong2str -longlong2str: ; 0x020DFDDC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strb r0, [r6, #-0x1]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrb r8, [sp, #0x51] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020DFE6C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFE58 - cmp r8, #0x6f - beq _020DFE6C -_020DFE58: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFE6C: - cmp r8, #0x69 - bgt _020DFE94 - bge _020DFEC4 - cmp r8, #0x58 - bgt _020DFE88 - beq _020DFF18 - b _020DFF24 -_020DFE88: - cmp r8, #0x64 - beq _020DFEC4 - b _020DFF24 -_020DFE94: - cmp r8, #0x6f - bgt _020DFEA4 - beq _020DFEF8 - b _020DFF24 -_020DFEA4: - cmp r8, #0x78 - bgt _020DFF24 - cmp r8, #0x75 - blt _020DFF24 - beq _020DFF08 - cmp r8, #0x78 - beq _020DFF18 - b _020DFF24 -_020DFEC4: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020DFF24 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020DFEEC - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020DFEEC: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020DFF24 -_020DFEF8: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020DFF24 -_020DFF08: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020DFF24 -_020DFF18: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020DFF24: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020DFF70 - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020DFF70: - strb r0, [r6, #-0x1]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020DFF24 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020DFFB0 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r6, #-0x1]! - addne r7, r7, #0x1 -_020DFFB0: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E0000 - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0000 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E0000: - ldr r0, [sp, #0x0] - ldr r1, _020E00B8 ; =0x000001FD - sub r2, r0, r6 - ldr r0, [sp, #0x10] - add r0, r0, r2 - cmp r0, r1 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E0050 - mov r1, #0x30 -_020E003C: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strb r1, [r6, #-0x1]! - blt _020E003C -_020E0050: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0070 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r6, #-0x1] - strneb r0, [r6, #-0x2]! -_020E0070: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r6, #-0x1]! - bne _020E00A4 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqb r0, [r6, #-0x1]! - beq _020E00A4 - cmp r0, #0x2 - moveq r0, #0x20 - streqb r0, [r6, #-0x1]! -_020E00A4: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E00B8: .word 0x000001FD - arm_func_end longlong2str - - arm_func_start double2hex -double2hex: ; 0x020E00BC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E056C ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrb r6, [sp, #0x79] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E0188 - ldr r3, _020E0570 ; =UNK_02106DA0 - sub r0, r8, #0x6 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - add sp, sp, #0x44 - strb r2, [r8, #-0x6] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r2, [r3, #0x4] - ldrb r1, [r3, #0x5] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0188: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E0298 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0224 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E01E8 - ldr r3, _020E0574 ; =UNK_02106DA8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E01E8: - ldr r3, _020E0578 ; =UNK_02106DB0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0224: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0264 - ldr r3, _020E057C ; =UNK_02106DB8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0264: - ldr r3, _020E0580 ; =UNK_02106DBC - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0298: - cmp r0, #0x4e - bne _020E03A4 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0330 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E02F4 - ldr r3, _020E0584 ; =UNK_02106DC0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E02F4: - ldr r3, _020E0588 ; =UNK_02106DC8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0330: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0370 - ldr r3, _020E058C ; =UNK_02106DD0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0370: - ldr r3, _020E0590 ; =UNK_02106DD4 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E03A4: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strb r0, [sp, #0x39] -_020E03D4: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E03D4 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E0594 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strb r1, [r0, #-0x1]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E04E4 - mov r9, #0x30 -_020E045C: - cmp r8, #0x40 - bge _020E04CC - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E04A0 - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E04A0: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E04D0 - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E04D0 -_020E04CC: - mov r1, r9 -_020E04D0: - sub lr, lr, #0x1 - cmp lr, #0x1 - strb r1, [r0, #-0x1]! - sub r8, r8, #0x4 - bge _020E045C -_020E04E4: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r0, #-0x1]! - mov r1, #0x31 - strb r1, [r0, #-0x1] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strb r1, [r0, #-0x2]! - mov r1, #0x30 - strb r1, [r0, #-0x1]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneb r1, [r0, #-0x1]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqb r1, [r0, #-0x1]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqb r1, [r0, #-0x1]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E056C: .word 0x000001FD -_020E0570: .word UNK_02106DA0 -_020E0574: .word UNK_02106DA8 -_020E0578: .word UNK_02106DB0 -_020E057C: .word UNK_02106DB8 -_020E0580: .word UNK_02106DBC -_020E0584: .word UNK_02106DC0 -_020E0588: .word UNK_02106DC8 -_020E058C: .word UNK_02106DD0 -_020E0590: .word UNK_02106DD4 -_020E0594: .word 0x000007FF - arm_func_end double2hex - - arm_func_start round_decimal -round_decimal: ; 0x020E0598 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E05C0 -_020E05A4: - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E05C0: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} - add r12, r0, #0x5 - add r2, r12, r1 - add r2, r2, #0x1 - ldrsb r3, [r2, #-0x1]! - sub r3, r3, #0x30 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #0x5 - bne _020E0620 - add r12, r12, lr -_020E05F4: - sub r12, r12, #0x1 - cmp r12, r2 - bls _020E060C - ldrsb r3, [r12, #0x0] - cmp r3, #0x30 - beq _020E05F4 -_020E060C: - cmp r12, r2 - ldreqsb r3, [r2, #-0x1] - andeq r4, r3, #0x1 - movne r4, #0x1 - b _020E0628 -_020E0620: - movgt r4, #0x1 - movle r4, #0x0 -_020E0628: - cmp r1, #0x0 - beq _020E0684 - mov r12, #0x0 - mov lr, #0x1 -_020E0638: - ldrsb r3, [r2, #-0x1]! - sub r3, r3, #0x30 - add r3, r3, r4 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #0x9 - movgt r4, lr - movle r4, r12 - cmp r4, #0x0 - bne _020E0668 - cmp r3, #0x0 - bne _020E0670 -_020E0668: - sub r1, r1, #0x1 - b _020E067C -_020E0670: - add r3, r3, #0x30 - strb r3, [r2, #0x0] - b _020E0684 -_020E067C: - cmp r1, #0x0 - bne _020E0638 -_020E0684: - cmp r4, #0x0 - beq _020E06AC - ldrsh r3, [r0, #0x2] - mov r2, #0x1 - mov r1, #0x31 - add r3, r3, #0x1 - strh r3, [r0, #0x2] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E06AC: - cmp r1, #0x0 - beq _020E05A4 - strb r1, [r0, #0x4] - ldmia sp!, {r4,pc} - arm_func_end round_decimal - - arm_func_start float2str -float2str: ; 0x020E06BC - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x2c - ldr r7, [sp, #0x68] - ldr r3, _020E0DF4 ; =0x000001FD - ldrb r6, [sp, #0x61] - ldrb r5, [sp, #0x5f] - ldrb r4, [sp, #0x5d] - cmp r7, r3 - mov r10, r0 - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E074C -_020E0734: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E074C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E0764 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E0734 -_020E0764: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E0784 - cmp r0, #0x49 - beq _020E0790 - cmp r0, #0x4e - beq _020E08F0 - b _020E0A44 -_020E0784: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E0A44 -_020E0790: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E0854 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E07BC - cmp r6, #0x80 - blt _020E07C4 -_020E07BC: - mov r1, #0x0 - b _020E07D4 -_020E07C4: - ldr r1, _020E0DF8 ; =__msl_digit - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E07D4: - cmp r1, #0x0 - beq _020E0818 - ldr r3, _020E0DFC ; =UNK_02106DA8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0818: - ldr r3, _020E0E00 ; =UNK_02106DB0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0854: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E0868 - cmp r6, #0x80 - blt _020E0870 -_020E0868: - mov r1, #0x0 - b _020E0880 -_020E0870: - ldr r1, _020E0DF8 ; =__msl_digit - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0880: - cmp r1, #0x0 - beq _020E08BC - ldr r3, _020E0E04 ; =UNK_02106DB8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08BC: - ldr r3, _020E0E08 ; =UNK_02106DBC - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08F0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E09A8 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E0910 - cmp r6, #0x80 - blt _020E0918 -_020E0910: - mov r1, #0x0 - b _020E0928 -_020E0918: - ldr r1, _020E0DF8 ; =__msl_digit - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0928: - cmp r1, #0x0 - beq _020E096C - ldr r3, _020E0E0C ; =UNK_02106DC0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E096C: - ldr r3, _020E0E10 ; =UNK_02106DC8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E09A8: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E09BC - cmp r6, #0x80 - blt _020E09C4 -_020E09BC: - mov r1, #0x0 - b _020E09D4 -_020E09C4: - ldr r1, _020E0DF8 ; =__msl_digit - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E09D4: - cmp r1, #0x0 - beq _020E0A10 - ldr r3, _020E0E14 ; =UNK_02106DD0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A10: - ldr r3, _020E0E18 ; =UNK_02106DD4 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A44: - ldrb r0, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r8, r9, #0x1 - sub r0, r0, #0x1 - add r0, r1, r0 - strh r0, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E0A98 - bge _020E0B24 - cmp r6, #0x47 - bgt _020E0DE0 - cmp r6, #0x45 - blt _020E0DE0 - beq _020E0B24 - cmp r6, #0x46 - beq _020E0C6C - cmp r6, #0x47 - beq _020E0AB0 - b _020E0DE0 -_020E0A98: - cmp r6, #0x66 - bgt _020E0AA8 - beq _020E0C6C - b _020E0DE0 -_020E0AA8: - cmp r6, #0x67 - bne _020E0DE0 -_020E0AB0: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E0AC8 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal -_020E0AC8: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E0AE0 - cmp r2, r7 - blt _020E0B00 -_020E0AE0: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E0B24 -_020E0B00: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E0C6C - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E0C6C -_020E0B24: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E0B3C - add r0, sp, #0x4 - bl round_decimal -_020E0B3C: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E0E1C ; =0x66666667 - mov r0, #0xa - b _020E0B90 -_020E0B60: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E0B90: - cmp lr, #0x0 - bne _020E0B60 - cmp r10, #0x2 - blt _020E0B60 - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r9, r8 - ldr r0, _020E0DF4 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E0BFC - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E0BFC - mov r0, #0x30 -_020E0BF0: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E0BF0 -_020E0BFC: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E0C20 -_020E0C10: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E0C10 -_020E0C20: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E0DE0 -_020E0C6C: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E0CAC - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E0CAC: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E0DF4 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r9, #0x0 - ble _020E0D00 - mov r3, #0x30 -_020E0CF0: - add r9, r9, #0x1 - cmp r9, r6 - strb r3, [r8, #-0x1]! - blt _020E0CF0 -_020E0D00: - mov r6, #0x0 - b _020E0D14 -_020E0D08: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E0D14: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E0D08 - cmp r6, r1 - bge _020E0D40 - mov r3, #0x30 -_020E0D30: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E0D30 -_020E0D40: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E0DA8 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E0D88 - mov r3, #0x30 -_020E0D70: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E0D70 -_020E0D88: - cmp r5, r0 - bge _020E0DB0 -_020E0D90: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E0D90 - b _020E0DB0 -_020E0DA8: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E0DB0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E0DE0: - mov r0, r8 - add sp, sp, #0x2c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E0DF4: .word 0x000001FD -_020E0DF8: .word __msl_digit -_020E0DFC: .word UNK_02106DA8 -_020E0E00: .word UNK_02106DB0 -_020E0E04: .word UNK_02106DB8 -_020E0E08: .word UNK_02106DBC -_020E0E0C: .word UNK_02106DC0 -_020E0E10: .word UNK_02106DC8 -_020E0E14: .word UNK_02106DD0 -_020E0E18: .word UNK_02106DD4 -_020E0E1C: .word 0x66666667 - arm_func_end float2str - - arm_func_start __pformatter -__pformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r3, #0x20 - mov r11, r2 - strb r3, [sp, #0x19] - ldrsb r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r10, #0x0 - beq _020E1628 -_020E0E50: - mov r0, r11 - mov r1, #0x25 - bl strchr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E0EA4 - mov r0, r11 - bl strlen - movs r2, r0 - add r10, r10, r2 - beq _020E1628 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E1628 - add sp, sp, #0x22c - mvn r0, #0x0 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0EA4: - subs r2, r0, r11 - add r10, r10, r2 - beq _020E0ED4 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E0ED4: - ldr r0, [sp, #0xc] - add r1, sp, #0x25c - add r2, sp, #0x1c - bl parse_format - ldrb r1, [sp, #0x21] - mov r11, r0 - cmp r1, #0x61 - bgt _020E0F40 - bge _020E12A4 - cmp r1, #0x47 - bgt _020E0F34 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E0F28 - b _020E12A4 ; case 65 - b _020E148C ; case 66 - b _020E148C ; case 67 - b _020E148C ; case 68 - b _020E123C ; case 69 - b _020E123C ; case 70 - b _020E123C ; case 71 -_020E0F28: - cmp r1, #0x25 - beq _020E1478 - b _020E148C -_020E0F34: - cmp r1, #0x58 - beq _020E1100 - b _020E148C -_020E0F40: - cmp r1, #0x75 - bgt _020E0FA8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E0F9C - b _020E0FC0 ; case 100 - b _020E123C ; case 101 - b _020E123C ; case 102 - b _020E123C ; case 103 - b _020E148C ; case 104 - b _020E0FC0 ; case 105 - b _020E148C ; case 106 - b _020E148C ; case 107 - b _020E148C ; case 108 - b _020E148C ; case 109 - b _020E13CC ; case 110 - b _020E1100 ; case 111 - b _020E148C ; case 112 - b _020E148C ; case 113 - b _020E148C ; case 114 - b _020E130C ; case 115 - b _020E148C ; case 116 - b _020E1100 ; case 117 -_020E0F9C: - cmp r1, #0x63 - beq _020E1458 - b _020E148C -_020E0FA8: - cmp r1, #0x78 - bgt _020E0FB8 - beq _020E1100 - b _020E148C -_020E0FB8: - cmp r1, #0xff - b _020E148C -_020E0FC0: - ldrb r0, [sp, #0x20] - cmp r0, #0x3 - bne _020E0FE0 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E1078 -_020E0FE0: - cmp r0, #0x4 - bne _020E1008 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E1078 -_020E1008: - cmp r0, #0x6 - bne _020E1030 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E1078 -_020E1030: - cmp r0, #0x7 - bne _020E104C - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E1078 -_020E104C: - cmp r0, #0x8 - bne _020E1068 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E1078 -_020E1068: - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] -_020E1078: - cmp r0, #0x2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, asr #0x10 - cmp r0, #0x1 - moveq r1, r5, lsl #0x18 - moveq r5, r1, asr #0x18 - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x1c - bne _020E10CC - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl longlong2str - movs r7, r0 - beq _020E148C - b _020E10F0 -_020E10CC: - sub r4, sp, #0x8 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2-r3} - bl long2str - movs r7, r0 - beq _020E148C -_020E10F0: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E1100: - ldrb r0, [sp, #0x20] - cmp r0, #0x3 - bne _020E1120 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E1120: - cmp r0, #0x4 - bne _020E1148 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1148: - cmp r0, #0x6 - bne _020E1170 - ldr r1, [sp, #0x25c] - add r2, r1, #0x8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E11B8 -_020E1170: - cmp r0, #0x7 - bne _020E118C - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E118C: - cmp r0, #0x8 - bne _020E11A8 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E11A8: - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] -_020E11B8: - cmp r0, #0x2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, lsr #0x10 - cmp r0, #0x1 - andeq r5, r5, #0xff - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x1c - bne _020E1208 - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl longlong2str - movs r7, r0 - beq _020E148C - b _020E122C -_020E1208: - sub r4, sp, #0x8 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2-r3} - bl long2str - movs r7, r0 - beq _020E148C -_020E122C: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E123C: - ldrb r0, [sp, #0x20] - cmp r0, #0x9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #0x8 - strne r0, [sp, #0x25c] - bne _020E1260 - ldr r0, [sp, #0x25c] - add r0, r0, #0x8 - str r0, [sp, #0x25c] -_020E1260: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x1c - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl float2str - movs r7, r0 - beq _020E148C - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E12A4: - ldrb r0, [sp, #0x20] - cmp r0, #0x9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #0x8 - strne r0, [sp, #0x25c] - bne _020E12C8 - ldr r0, [sp, #0x25c] - add r0, r0, #0x8 - str r0, [sp, #0x25c] -_020E12C8: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x1c - sub r4, sp, #0x4 - ldmia r0, {r0-r3} - stmia r4, {r0-r3} - ldr r3, [r4, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl double2hex - movs r7, r0 - beq _020E148C - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E130C: - ldrb r0, [sp, #0x20] - cmp r0, #0x5 - bne _020E134C - ldr r0, [sp, #0x25c] - mov r2, #0x200 - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r1, [r0, #-0x4] - add r0, sp, #0x2c - cmp r1, #0x0 - ldreq r1, _020E163C ; =UNK_02106DD8 - bl wcstombs - cmp r0, #0x0 - blt _020E148C - add r7, sp, #0x2c - b _020E135C -_020E134C: - ldr r0, [sp, #0x25c] - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r7, [r0, #-0x4] -_020E135C: - ldrb r0, [sp, #0x1f] - cmp r7, #0x0 - ldreq r7, _020E1640 ; =UNK_02106DDC - cmp r0, #0x0 - beq _020E1390 - ldrb r0, [sp, #0x1e] - ldrb r6, [r7], #0x1 - cmp r0, #0x0 - beq _020E14D8 - ldr r0, [sp, #0x28] - cmp r6, r0 - movgt r6, r0 - b _020E14D8 -_020E1390: - ldrb r0, [sp, #0x1e] - cmp r0, #0x0 - beq _020E13BC - ldr r6, [sp, #0x28] - mov r0, r7 - mov r2, r6 - mov r1, #0x0 - bl memchr - cmp r0, #0x0 - subne r6, r0, r7 - b _020E14D8 -_020E13BC: - mov r0, r7 - bl strlen - mov r6, r0 - b _020E14D8 -_020E13CC: - ldr r1, [sp, #0x25c] - ldrb r0, [sp, #0x20] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r1, [r1, #-0x4] - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020E161C - b _020E1410 ; case 0 - b _020E161C ; case 1 - b _020E1418 ; case 2 - b _020E1420 ; case 3 - b _020E1448 ; case 4 - b _020E161C ; case 5 - b _020E1428 ; case 6 - b _020E1438 ; case 7 - b _020E1440 ; case 8 -_020E1410: - str r10, [r1, #0x0] - b _020E161C -_020E1418: - strh r10, [r1, #0x0] - b _020E161C -_020E1420: - str r10, [r1, #0x0] - b _020E161C -_020E1428: - str r10, [r1, #0x0] - mov r0, r10, asr #0x1f - str r0, [r1, #0x4] - b _020E161C -_020E1438: - str r10, [r1, #0x0] - b _020E161C -_020E1440: - str r10, [r1, #0x0] - b _020E161C -_020E1448: - str r10, [r1, #0x0] - mov r0, r10, asr #0x1f - str r0, [r1, #0x4] - b _020E161C -_020E1458: - ldr r0, [sp, #0x25c] - add r7, sp, #0x2c - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r0, [r0, #-0x4] - mov r6, #0x1 - strb r0, [sp, #0x2c] - b _020E14D8 -_020E1478: - mov r0, #0x25 - strb r0, [sp, #0x2c] - add r7, sp, #0x2c - mov r6, #0x1 - b _020E14D8 -_020E148C: - ldr r0, [sp, #0xc] - bl strlen - movs r4, r0 - beq _020E14C4 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r4 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E14C4: - add sp, sp, #0x22c - add r0, r10, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E14D8: - ldrb r0, [sp, #0x1c] - mov r4, r6 - cmp r0, #0x0 - beq _020E158C - cmp r0, #0x2 - moveq r0, #0x30 - movne r0, #0x20 - strb r0, [sp, #0x19] - ldrsb r0, [r7, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E1548 - ldrsb r0, [sp, #0x19] - cmp r0, #0x30 - bne _020E1548 - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r7, r7, #0x1 - sub r6, r6, #0x1 -_020E1548: - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E158C -_020E1554: - mov r0, r8 - add r1, sp, #0x19 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E1554 -_020E158C: - cmp r6, #0x0 - beq _020E15BC - mov r0, r8 - mov r1, r7 - mov r2, r6 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E15BC: - ldrb r0, [sp, #0x1c] - cmp r0, #0x0 - bne _020E1618 - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E1618 - mov r6, #0x20 - add r7, sp, #0x18 -_020E15DC: - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - strb r6, [sp, #0x18] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E15DC -_020E1618: - add r10, r10, r4 -_020E161C: - ldrsb r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E0E50 -_020E1628: - mov r0, r10 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E163C: .word UNK_02106DD8 -_020E1640: .word UNK_02106DDC - arm_func_end __pformatter - - arm_func_start __FileWrite -__FileWrite: ; 0x020E1644 - stmdb sp!, {r3-r5,lr} - mov r5, r0 - mov r0, r1 - mov r3, r5 - mov r1, #0x1 - mov r4, r2 - bl __fwrite - cmp r4, r0 - movne r5, #0x0 - mov r0, r5 - ldmia sp!, {r3-r5,pc} - arm_func_end __FileWrite - - arm_func_start __StringWrite -__StringWrite: ; 0x020E1670 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3 - bl memcpy - ldr r1, [r4, #0x8] - mov r0, #0x1 - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - arm_func_end __StringWrite - - arm_func_start printf -printf: ; 0x020E16B4 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, _020E17B4 ; =__files + 0x4C - mvn r1, #0x0 - bl fwide - cmp r0, #0x0 - mvnge r0, #0x0 - ldmgeia sp!, {r4,lr} - addge sp, sp, #0x10 - bxge lr - ldr r0, _020E17B8 ; =__cs + 0x48 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020E1710 - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020E17C4 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0xc] - str r2, [r0, #0xc] - b _020E1768 -_020E1710: - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, #0xc] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020E1740 - ldr r0, _020E17C4 ; =__cs_ref - ldr r1, [r0, #0xc] - add r1, r1, #0x1 - str r1, [r0, #0xc] - b _020E1768 -_020E1740: - ldr r0, _020E17B8 ; =__cs + 0x48 - bl OS_LockMutex - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020E17C4 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0xc] - str r2, [r0, #0xc] -_020E1768: - add r0, sp, #0x8 - bic r3, r0, #0x3 - ldr r2, [sp, #0x8] - ldr r0, _020E17C8 ; =__FileWrite - ldr r1, _020E17B4 ; =__files + 0x4C - add r3, r3, #0x4 - bl __pformatter - ldr r1, _020E17C4 ; =__cs_ref - mov r4, r0 - ldr r0, [r1, #0xc] - subs r0, r0, #0x1 - str r0, [r1, #0xc] - bne _020E17A4 - ldr r0, _020E17B8 ; =__cs + 0x48 - bl OS_UnlockMutex -_020E17A4: - mov r0, r4 - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E17B4: .word __files + 0x4C -_020E17B8: .word __cs + 0x48 -_020E17BC: .word OSi_ThreadInfo -_020E17C0: .word __cs_id -_020E17C4: .word __cs_ref -_020E17C8: .word __FileWrite - arm_func_end printf - - arm_func_start vsnprintf -vsnprintf: ; 0x020E17CC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E1830 ; =__StringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __pformatter - cmp r5, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r5,pc} - cmp r0, r4 - movcc r1, #0x0 - addcc sp, sp, #0xc - strccb r1, [r5, r0] - ldmccia sp!, {r4-r5,pc} - cmp r4, #0x0 - addne r1, r5, r4 - movne r2, #0x0 - strneb r2, [r1, #-0x1] - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - .balign 4 -_020E1830: .word __StringWrite - arm_func_end vsnprintf - - arm_func_start snprintf -snprintf: ; 0x020E1834 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - arm_func_end snprintf - - arm_func_start sprintf -sprintf: ; 0x020E185C - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r1, sp, #0xc - bic r1, r1, #0x3 - add r3, r1, #0x4 - ldr r2, [sp, #0xc] - mvn r1, #0x0 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - arm_func_end sprintf - - exception long2str, 589, 0x0090FF20 - exception longlong2str, 737, 0x00A0FF20 - exception double2hex, 1245, 0x00F07F20 - exception float2str, 1893, 0x00C0FF20 - exception __pformatter, 2084, UNK_020EC710 - exception __FileWrite, 45, 0x00200300 - exception __StringWrite, 69, 0x00200300 - exception printf, 281, 0x00300120 - exception vsnprintf, 105, 0x00300300 - exception snprintf, 41, 0x00300020 - exception sprintf, 45, 0x00300020 - - .section .exception,8 - -UNK_020EC710: ; 0x020EC710 - .byte 0x20, 0xFF, 0x09, 0x60 - .balign 8 + .include "asm/macros.inc" + .include "global.inc" + + .data + + .global UNK_02106DA0 +UNK_02106DA0: ; 0x02106DA0 + .byte 0x30, 0x78, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00 + .size UNK_02106DA0,.-UNK_02106DA0 + + .global UNK_02106DA8 +UNK_02106DA8: ; 0x02106DA8 + .asciz "-INF" + .size UNK_02106DA8,.-UNK_02106DA8 + + .balign 4, 0 + .global UNK_02106DB0 +UNK_02106DB0: ; 0x02106DB0 + .asciz "-inf" + .size UNK_02106DB0,.-UNK_02106DB0 + + .balign 4, 0 + .global UNK_02106DB8 +UNK_02106DB8: ; 0x02106DB8 + .asciz "INF" + .size UNK_02106DB8,.-UNK_02106DB8 + + .balign 4, 0 + .global UNK_02106DBC +UNK_02106DBC: ; 0x02106DBC + .asciz "inf" + .size UNK_02106DBC,.-UNK_02106DBC + + .balign 4, 0 + .global UNK_02106DC0 +UNK_02106DC0: ; 0x02106DC0 + .asciz "-NAN" + .size UNK_02106DC0,.-UNK_02106DC0 + + .balign 4, 0 + .global UNK_02106DC8 +UNK_02106DC8: ; 0x02106DC8 + .asciz "-nan" + .size UNK_02106DC8,.-UNK_02106DC8 + + .balign 4, 0 + .global UNK_02106DD0 +UNK_02106DD0: ; 0x02106DD0 + .asciz "NAN" + .size UNK_02106DD0,.-UNK_02106DD0 + + .balign 4, 0 + .global UNK_02106DD4 +UNK_02106DD4: ; 0x02106DD4 + .asciz "nan" + .size UNK_02106DD4,.-UNK_02106DD4 + + .balign 4, 0 + .global UNK_02106DD8 +UNK_02106DD8: ; 0x02106DD8 + .byte 0x00, 0x00, 0x00, 0x00 + .size UNK_02106DD8,.-UNK_02106DD8 + + .global UNK_02106DDC +UNK_02106DDC: ; 0x02106DDC + .byte 0x00, 0x00, 0x00, 0x00 + .size UNK_02106DDC,.-UNK_02106DDC + + .text + + arm_func_start parse_format +parse_format: ; 0x020DF600 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrsb r3, [r0, #0x1] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x1 + bne _020DF65C + add r0, sp, #0x0 + strb r3, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF65C: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020DF670: + mov r8, r7 + cmp r3, #0x2b + bgt _020DF6A0 + bge _020DF6C8 + cmp r3, #0x23 + bgt _020DF6F8 + cmp r3, #0x20 + blt _020DF6F8 + beq _020DF6D0 + cmp r3, #0x23 + beq _020DF6E0 + b _020DF6F8 +_020DF6A0: + cmp r3, #0x30 + bgt _020DF6F8 + cmp r3, #0x2d + blt _020DF6F8 + beq _020DF6C0 + cmp r3, #0x30 + beq _020DF6E8 + b _020DF6F8 +_020DF6C0: + strb r6, [sp, #0x0] + b _020DF6FC +_020DF6C8: + strb r7, [sp, #0x1] + b _020DF6FC +_020DF6D0: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020DF6FC +_020DF6E0: + strb r7, [sp, #0x3] + b _020DF6FC +_020DF6E8: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020DF6FC +_020DF6F8: + mov r8, r0 +_020DF6FC: + cmp r8, #0x0 + ldrnesb r3, [r12, #0x1]! + bne _020DF670 + cmp r3, #0x2a + bne _020DF744 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020DF73C + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020DF73C: + ldrsb r3, [r12, #0x1]! + b _020DF794 +_020DF744: + ldr r4, _020DFB88 ; =__msl_digit + mov r5, #0x0 + mov r0, #0xa + b _020DF768 +_020DF754: + ldr r2, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r2, r0, r3 + ldrsb r3, [r12, #0x1]! + str r6, [sp, #0x8] +_020DF768: + cmp r3, #0x0 + blt _020DF778 + cmp r3, #0x80 + blt _020DF780 +_020DF778: + mov r2, r5 + b _020DF78C +_020DF780: + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020DF78C: + cmp r2, #0x0 + bne _020DF754 +_020DF794: + ldr r2, [sp, #0x8] + ldr r0, _020DFB8C ; =0x000001FD + cmp r2, r0 + ble _020DF7C4 + mov r1, #0xff + add r0, sp, #0x0 + strb r1, [sp, #0x5] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x1 + ldmia sp!, {r4-r8,pc} +_020DF7C4: + cmp r3, #0x2e + bne _020DF858 + ldrsb r3, [r12, #0x1]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020DF808 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrsb r3, [r12, #0x1]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020DF858 +_020DF808: + ldr r2, _020DFB88 ; =__msl_digit + mov r4, #0x0 + mov r0, #0xa + b _020DF82C +_020DF818: + ldr r1, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r1, r0, r3 + ldrsb r3, [r12, #0x1]! + str r5, [sp, #0xc] +_020DF82C: + cmp r3, #0x0 + blt _020DF83C + cmp r3, #0x80 + blt _020DF844 +_020DF83C: + mov r1, r4 + b _020DF850 +_020DF844: + mov r1, r3, lsl #0x1 + ldrh r1, [r2, r1] + and r1, r1, #0x8 +_020DF850: + cmp r1, #0x0 + bne _020DF818 +_020DF858: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020DF890 + cmp r3, #0x68 + blt _020DF884 + beq _020DF8AC + cmp r3, #0x6a + beq _020DF8F8 + cmp r3, #0x6c + beq _020DF8C8 + b _020DF91C +_020DF884: + cmp r3, #0x4c + beq _020DF8EC + b _020DF91C +_020DF890: + cmp r3, #0x74 + bgt _020DF8A0 + beq _020DF904 + b _020DF91C +_020DF8A0: + cmp r3, #0x7a + beq _020DF910 + b _020DF91C +_020DF8AC: + ldrsb r1, [r12, #0x1] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqsb r3, [r12, #0x1]! + b _020DF920 +_020DF8C8: + ldrsb r1, [r12, #0x1] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020DF920 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrsb r3, [r12, #0x1]! + b _020DF920 +_020DF8EC: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020DF920 +_020DF8F8: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020DF920 +_020DF904: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020DF920 +_020DF910: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020DF920 +_020DF91C: + mov r0, #0x0 +_020DF920: + cmp r0, #0x0 + ldrnesb r3, [r12, #0x1]! + strb r3, [sp, #0x5] + cmp r3, #0x61 + bgt _020DF974 + bge _020DFA5C + cmp r3, #0x47 + bgt _020DF968 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020DFB68 + b _020DFA5C ; case 65 + b _020DFB68 ; case 66 + b _020DFB68 ; case 67 + b _020DFB68 ; case 68 + b _020DFAA4 ; case 69 + b _020DFA24 ; case 70 + b _020DFA94 ; case 71 +_020DF968: + cmp r3, #0x58 + beq _020DF9E8 + b _020DFB68 +_020DF974: + cmp r3, #0x63 + bgt _020DF984 + beq _020DFB04 + b _020DFB68 +_020DF984: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020DFB68 + b _020DF9E8 ; case 100 + b _020DFAA4 ; case 101 + b _020DFA24 ; case 102 + b _020DFA94 ; case 103 + b _020DFB68 ; case 104 + b _020DF9E8 ; case 105 + b _020DFB68 ; case 106 + b _020DFB68 ; case 107 + b _020DFB68 ; case 108 + b _020DFB68 ; case 109 + b _020DFB54 ; case 110 + b _020DF9E8 ; case 111 + b _020DFAE0 ; case 112 + b _020DFB68 ; case 113 + b _020DFB68 ; case 114 + b _020DFB30 ; case 115 + b _020DFB68 ; case 116 + b _020DF9E8 ; case 117 + b _020DFB68 ; case 118 + b _020DFB68 ; case 119 + b _020DF9E8 ; case 120 +_020DF9E8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020DFB70 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020DFB70 +_020DFA24: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 +_020DFA5C: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFA94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020DFAA4: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 +_020DFAE0: + mov r3, #0x78 + mov r2, #0x1 + mov r1, #0x3 + mov r0, #0x8 + strb r3, [sp, #0x5] + strb r2, [sp, #0x3] + strb r1, [sp, #0x4] + str r0, [sp, #0xc] + b _020DFB70 +_020DFB04: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB30: + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB54: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 +_020DFB68: + mov r0, #0xff + strb r0, [sp, #0x5] +_020DFB70: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020DFB88: .word __msl_digit +_020DFB8C: .word 0x000001FD + arm_func_end parse_format + + arm_func_start long2str +long2str: ; 0x020DFB90 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strb r0, [r5, #-0x1]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrb r8, [sp, #0x45] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020DFC04 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFBF0 + cmp r8, #0x6f + beq _020DFC04 +_020DFBF0: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFC04: + cmp r8, #0x69 + bgt _020DFC2C + bge _020DFC60 + cmp r8, #0x58 + bgt _020DFC20 + beq _020DFC8C + b _020DFC94 +_020DFC20: + cmp r8, #0x64 + beq _020DFC60 + b _020DFC94 +_020DFC2C: + cmp r8, #0x6f + bgt _020DFC40 + moveq r4, #0x8 + moveq r11, #0x0 + b _020DFC94 +_020DFC40: + cmp r8, #0x78 + bgt _020DFC94 + cmp r8, #0x75 + blt _020DFC94 + beq _020DFC80 + cmp r8, #0x78 + beq _020DFC8C + b _020DFC94 +_020DFC60: + cmp r10, #0x0 + mov r4, #0xa + bge _020DFC94 + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020DFC94 +_020DFC80: + mov r4, #0xa + mov r11, #0x0 + b _020DFC94 +_020DFC8C: + mov r4, #0x10 + mov r11, #0x0 +_020DFC94: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020DFCCC + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020DFCCC: + cmp r10, #0x0 + strb r9, [r5, #-0x1]! + add r6, r6, #0x1 + bne _020DFC94 + cmp r4, #0x8 + bne _020DFD00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r5, #-0x1]! + addne r6, r6, #0x1 +_020DFD00: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020DFD34 + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020DFD34 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020DFD34: + ldr r0, [sp, #0x0] + sub r1, r0, r5 + ldr r0, _020DFDD8 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020DFD78 + mov r0, #0x30 +_020DFD68: + add r6, r6, #0x1 + cmp r6, r7 + strb r0, [r5, #-0x1]! + blt _020DFD68 +_020DFD78: + cmp r4, #0x10 + bne _020DFD94 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r5, #-0x1] + strneb r0, [r5, #-0x2]! +_020DFD94: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r5, #-0x1]! + bne _020DFDC4 + cmp r11, #0x1 + moveq r0, #0x2b + streqb r0, [r5, #-0x1]! + beq _020DFDC4 + cmp r11, #0x2 + moveq r0, #0x20 + streqb r0, [r5, #-0x1]! +_020DFDC4: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020DFDD8: .word 0x000001FD + arm_func_end long2str + + arm_func_start longlong2str +longlong2str: ; 0x020DFDDC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strb r0, [r6, #-0x1]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrb r8, [sp, #0x51] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020DFE6C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020DFE58 + cmp r8, #0x6f + beq _020DFE6C +_020DFE58: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020DFE6C: + cmp r8, #0x69 + bgt _020DFE94 + bge _020DFEC4 + cmp r8, #0x58 + bgt _020DFE88 + beq _020DFF18 + b _020DFF24 +_020DFE88: + cmp r8, #0x64 + beq _020DFEC4 + b _020DFF24 +_020DFE94: + cmp r8, #0x6f + bgt _020DFEA4 + beq _020DFEF8 + b _020DFF24 +_020DFEA4: + cmp r8, #0x78 + bgt _020DFF24 + cmp r8, #0x75 + blt _020DFF24 + beq _020DFF08 + cmp r8, #0x78 + beq _020DFF18 + b _020DFF24 +_020DFEC4: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020DFF24 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020DFEEC + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020DFEEC: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020DFF24 +_020DFEF8: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020DFF24 +_020DFF08: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020DFF24 +_020DFF18: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020DFF24: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020DFF70 + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020DFF70: + strb r0, [r6, #-0x1]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020DFF24 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020DFFB0 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r6, #-0x1]! + addne r7, r7, #0x1 +_020DFFB0: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E0000 + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0000 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E0000: + ldr r0, [sp, #0x0] + ldr r1, _020E00B8 ; =0x000001FD + sub r2, r0, r6 + ldr r0, [sp, #0x10] + add r0, r0, r2 + cmp r0, r1 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E0050 + mov r1, #0x30 +_020E003C: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strb r1, [r6, #-0x1]! + blt _020E003C +_020E0050: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E0070 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneb r8, [r6, #-0x1] + strneb r0, [r6, #-0x2]! +_020E0070: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r6, #-0x1]! + bne _020E00A4 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqb r0, [r6, #-0x1]! + beq _020E00A4 + cmp r0, #0x2 + moveq r0, #0x20 + streqb r0, [r6, #-0x1]! +_020E00A4: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E00B8: .word 0x000001FD + arm_func_end longlong2str + + arm_func_start double2hex +double2hex: ; 0x020E00BC + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E056C ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrb r6, [sp, #0x79] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E0188 + ldr r3, _020E0570 ; =UNK_02106DA0 + sub r0, r8, #0x6 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + add sp, sp, #0x44 + strb r2, [r8, #-0x6] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r2, [r3, #0x4] + ldrb r1, [r3, #0x5] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0188: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E0298 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0224 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E01E8 + ldr r3, _020E0574 ; =UNK_02106DA8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E01E8: + ldr r3, _020E0578 ; =UNK_02106DB0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0224: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0264 + ldr r3, _020E057C ; =UNK_02106DB8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0264: + ldr r3, _020E0580 ; =UNK_02106DBC + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0298: + cmp r0, #0x4e + bne _020E03A4 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E0330 + cmp r6, #0x41 + sub r0, r8, #0x5 + bne _020E02F4 + ldr r3, _020E0584 ; =UNK_02106DC0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E02F4: + ldr r3, _020E0588 ; =UNK_02106DC8 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0330: + cmp r6, #0x41 + sub r0, r8, #0x4 + bne _020E0370 + ldr r3, _020E058C ; =UNK_02106DD0 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E0370: + ldr r3, _020E0590 ; =UNK_02106DD4 + add sp, sp, #0x44 + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E03A4: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strb r0, [sp, #0x39] +_020E03D4: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E03D4 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E0594 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strb r1, [r0, #-0x1]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E04E4 + mov r9, #0x30 +_020E045C: + cmp r8, #0x40 + bge _020E04CC + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E04A0 + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E04A0: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E04D0 + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E04D0 +_020E04CC: + mov r1, r9 +_020E04D0: + sub lr, lr, #0x1 + cmp lr, #0x1 + strb r1, [r0, #-0x1]! + sub r8, r8, #0x4 + bge _020E045C +_020E04E4: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r0, #-0x1]! + mov r1, #0x31 + strb r1, [r0, #-0x1] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strb r1, [r0, #-0x2]! + mov r1, #0x30 + strb r1, [r0, #-0x1]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneb r1, [r0, #-0x1]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqb r1, [r0, #-0x1]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqb r1, [r0, #-0x1]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E056C: .word 0x000001FD +_020E0570: .word UNK_02106DA0 +_020E0574: .word UNK_02106DA8 +_020E0578: .word UNK_02106DB0 +_020E057C: .word UNK_02106DB8 +_020E0580: .word UNK_02106DBC +_020E0584: .word UNK_02106DC0 +_020E0588: .word UNK_02106DC8 +_020E058C: .word UNK_02106DD0 +_020E0590: .word UNK_02106DD4 +_020E0594: .word 0x000007FF + arm_func_end double2hex + + arm_func_start round_decimal +round_decimal: ; 0x020E0598 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E05C0 +_020E05A4: + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E05C0: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E0620 + add r12, r12, lr +_020E05F4: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E060C + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E05F4 +_020E060C: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E0628 +_020E0620: + movgt r4, #0x1 + movle r4, #0x0 +_020E0628: + cmp r1, #0x0 + beq _020E0684 + mov r12, #0x0 + mov lr, #0x1 +_020E0638: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E0668 + cmp r3, #0x0 + bne _020E0670 +_020E0668: + sub r1, r1, #0x1 + b _020E067C +_020E0670: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E0684 +_020E067C: + cmp r1, #0x0 + bne _020E0638 +_020E0684: + cmp r4, #0x0 + beq _020E06AC + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E06AC: + cmp r1, #0x0 + beq _020E05A4 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} + arm_func_end round_decimal + + arm_func_start float2str +float2str: ; 0x020E06BC + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r7, [sp, #0x68] + ldr r3, _020E0DF4 ; =0x000001FD + ldrb r6, [sp, #0x61] + ldrb r5, [sp, #0x5f] + ldrb r4, [sp, #0x5d] + cmp r7, r3 + mov r10, r0 + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E074C +_020E0734: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E074C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E0764 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E0734 +_020E0764: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E0784 + cmp r0, #0x49 + beq _020E0790 + cmp r0, #0x4e + beq _020E08F0 + b _020E0A44 +_020E0784: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E0A44 +_020E0790: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E0854 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E07BC + cmp r6, #0x80 + blt _020E07C4 +_020E07BC: + mov r1, #0x0 + b _020E07D4 +_020E07C4: + ldr r1, _020E0DF8 ; =__msl_digit + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E07D4: + cmp r1, #0x0 + beq _020E0818 + ldr r3, _020E0DFC ; =UNK_02106DA8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0818: + ldr r3, _020E0E00 ; =UNK_02106DB0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0854: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E0868 + cmp r6, #0x80 + blt _020E0870 +_020E0868: + mov r1, #0x0 + b _020E0880 +_020E0870: + ldr r1, _020E0DF8 ; =__msl_digit + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0880: + cmp r1, #0x0 + beq _020E08BC + ldr r3, _020E0E04 ; =UNK_02106DB8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08BC: + ldr r3, _020E0E08 ; =UNK_02106DBC + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E08F0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E09A8 + cmp r6, #0x0 + sub r0, r9, #0x5 + blt _020E0910 + cmp r6, #0x80 + blt _020E0918 +_020E0910: + mov r1, #0x0 + b _020E0928 +_020E0918: + ldr r1, _020E0DF8 ; =__msl_digit + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E0928: + cmp r1, #0x0 + beq _020E096C + ldr r3, _020E0E0C ; =UNK_02106DC0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E096C: + ldr r3, _020E0E10 ; =UNK_02106DC8 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldrb r1, [r3, #0x4] + strb r1, [r0, #0x4] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E09A8: + cmp r6, #0x0 + sub r0, r9, #0x4 + blt _020E09BC + cmp r6, #0x80 + blt _020E09C4 +_020E09BC: + mov r1, #0x0 + b _020E09D4 +_020E09C4: + ldr r1, _020E0DF8 ; =__msl_digit + mov r2, r6, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020E09D4: + cmp r1, #0x0 + beq _020E0A10 + ldr r3, _020E0E14 ; =UNK_02106DD0 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A10: + ldr r3, _020E0E18 ; =UNK_02106DD4 + add sp, sp, #0x2c + ldrb r2, [r3, #0x0] + ldrb r1, [r3, #0x1] + strb r2, [r0, #0x0] + strb r1, [r0, #0x1] + ldrb r2, [r3, #0x2] + ldrb r1, [r3, #0x3] + strb r2, [r0, #0x2] + strb r1, [r0, #0x3] + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0A44: + ldrb r0, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r8, r9, #0x1 + sub r0, r0, #0x1 + add r0, r1, r0 + strh r0, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E0A98 + bge _020E0B24 + cmp r6, #0x47 + bgt _020E0DE0 + cmp r6, #0x45 + blt _020E0DE0 + beq _020E0B24 + cmp r6, #0x46 + beq _020E0C6C + cmp r6, #0x47 + beq _020E0AB0 + b _020E0DE0 +_020E0A98: + cmp r6, #0x66 + bgt _020E0AA8 + beq _020E0C6C + b _020E0DE0 +_020E0AA8: + cmp r6, #0x67 + bne _020E0DE0 +_020E0AB0: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E0AC8 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal +_020E0AC8: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E0AE0 + cmp r2, r7 + blt _020E0B00 +_020E0AE0: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E0B24 +_020E0B00: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E0C6C + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E0C6C +_020E0B24: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E0B3C + add r0, sp, #0x4 + bl round_decimal +_020E0B3C: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E0E1C ; =0x66666667 + mov r0, #0xa + b _020E0B90 +_020E0B60: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E0B90: + cmp lr, #0x0 + bne _020E0B60 + cmp r10, #0x2 + blt _020E0B60 + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r9, r8 + ldr r0, _020E0DF4 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E0BFC + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E0BFC + mov r0, #0x30 +_020E0BF0: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E0BF0 +_020E0BFC: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E0C20 +_020E0C10: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E0C10 +_020E0C20: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E0DE0 +_020E0C6C: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E0CAC + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E0CAC: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E0DF4 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x2c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r9, #0x0 + ble _020E0D00 + mov r3, #0x30 +_020E0CF0: + add r9, r9, #0x1 + cmp r9, r6 + strb r3, [r8, #-0x1]! + blt _020E0CF0 +_020E0D00: + mov r6, #0x0 + b _020E0D14 +_020E0D08: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E0D14: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E0D08 + cmp r6, r1 + bge _020E0D40 + mov r3, #0x30 +_020E0D30: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E0D30 +_020E0D40: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E0DA8 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E0D88 + mov r3, #0x30 +_020E0D70: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E0D70 +_020E0D88: + cmp r5, r0 + bge _020E0DB0 +_020E0D90: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E0D90 + b _020E0DB0 +_020E0DA8: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E0DB0: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E0DE0 + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E0DE0 + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E0DE0: + mov r0, r8 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E0DF4: .word 0x000001FD +_020E0DF8: .word __msl_digit +_020E0DFC: .word UNK_02106DA8 +_020E0E00: .word UNK_02106DB0 +_020E0E04: .word UNK_02106DB8 +_020E0E08: .word UNK_02106DBC +_020E0E0C: .word UNK_02106DC0 +_020E0E10: .word UNK_02106DC8 +_020E0E14: .word UNK_02106DD0 +_020E0E18: .word UNK_02106DD4 +_020E0E1C: .word 0x66666667 + arm_func_end float2str + + arm_func_start __pformatter +__pformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r3, #0x20 + mov r11, r2 + strb r3, [sp, #0x19] + ldrsb r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r10, #0x0 + beq _020E1628 +_020E0E50: + mov r0, r11 + mov r1, #0x25 + bl strchr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E0EA4 + mov r0, r11 + bl strlen + movs r2, r0 + add r10, r10, r2 + beq _020E1628 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E1628 + add sp, sp, #0x22c + mvn r0, #0x0 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E0EA4: + subs r2, r0, r11 + add r10, r10, r2 + beq _020E0ED4 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E0ED4: + ldr r0, [sp, #0xc] + add r1, sp, #0x25c + add r2, sp, #0x1c + bl parse_format + ldrb r1, [sp, #0x21] + mov r11, r0 + cmp r1, #0x61 + bgt _020E0F40 + bge _020E12A4 + cmp r1, #0x47 + bgt _020E0F34 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E0F28 + b _020E12A4 ; case 65 + b _020E148C ; case 66 + b _020E148C ; case 67 + b _020E148C ; case 68 + b _020E123C ; case 69 + b _020E123C ; case 70 + b _020E123C ; case 71 +_020E0F28: + cmp r1, #0x25 + beq _020E1478 + b _020E148C +_020E0F34: + cmp r1, #0x58 + beq _020E1100 + b _020E148C +_020E0F40: + cmp r1, #0x75 + bgt _020E0FA8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E0F9C + b _020E0FC0 ; case 100 + b _020E123C ; case 101 + b _020E123C ; case 102 + b _020E123C ; case 103 + b _020E148C ; case 104 + b _020E0FC0 ; case 105 + b _020E148C ; case 106 + b _020E148C ; case 107 + b _020E148C ; case 108 + b _020E148C ; case 109 + b _020E13CC ; case 110 + b _020E1100 ; case 111 + b _020E148C ; case 112 + b _020E148C ; case 113 + b _020E148C ; case 114 + b _020E130C ; case 115 + b _020E148C ; case 116 + b _020E1100 ; case 117 +_020E0F9C: + cmp r1, #0x63 + beq _020E1458 + b _020E148C +_020E0FA8: + cmp r1, #0x78 + bgt _020E0FB8 + beq _020E1100 + b _020E148C +_020E0FB8: + cmp r1, #0xff + b _020E148C +_020E0FC0: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E0FE0 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E0FE0: + cmp r0, #0x4 + bne _020E1008 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1008: + cmp r0, #0x6 + bne _020E1030 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1030: + cmp r0, #0x7 + bne _020E104C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E104C: + cmp r0, #0x8 + bne _020E1068 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E1068: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E1078: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, asr #0x10 + cmp r0, #0x1 + moveq r1, r5, lsl #0x18 + moveq r5, r1, asr #0x18 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E10CC + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E10F0 +_020E10CC: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E10F0: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E1100: + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E1120 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E1120: + cmp r0, #0x4 + bne _020E1148 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1148: + cmp r0, #0x6 + bne _020E1170 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E11B8 +_020E1170: + cmp r0, #0x7 + bne _020E118C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E118C: + cmp r0, #0x8 + bne _020E11A8 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E11B8 +_020E11A8: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E11B8: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, lsr #0x10 + cmp r0, #0x1 + andeq r5, r5, #0xff + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E1208 + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E122C +_020E1208: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E122C: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E123C: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E1260 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E1260: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl float2str + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E12A4: + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E12C8 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E12C8: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl double2hex + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 +_020E130C: + ldrb r0, [sp, #0x20] + cmp r0, #0x5 + bne _020E134C + ldr r0, [sp, #0x25c] + mov r2, #0x200 + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r1, [r0, #-0x4] + add r0, sp, #0x2c + cmp r1, #0x0 + ldreq r1, _020E163C ; =UNK_02106DD8 + bl wcstombs + cmp r0, #0x0 + blt _020E148C + add r7, sp, #0x2c + b _020E135C +_020E134C: + ldr r0, [sp, #0x25c] + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r7, [r0, #-0x4] +_020E135C: + ldrb r0, [sp, #0x1f] + cmp r7, #0x0 + ldreq r7, _020E1640 ; =UNK_02106DDC + cmp r0, #0x0 + beq _020E1390 + ldrb r0, [sp, #0x1e] + ldrb r6, [r7], #0x1 + cmp r0, #0x0 + beq _020E14D8 + ldr r0, [sp, #0x28] + cmp r6, r0 + movgt r6, r0 + b _020E14D8 +_020E1390: + ldrb r0, [sp, #0x1e] + cmp r0, #0x0 + beq _020E13BC + ldr r6, [sp, #0x28] + mov r0, r7 + mov r2, r6 + mov r1, #0x0 + bl memchr + cmp r0, #0x0 + subne r6, r0, r7 + b _020E14D8 +_020E13BC: + mov r0, r7 + bl strlen + mov r6, r0 + b _020E14D8 +_020E13CC: + ldr r1, [sp, #0x25c] + ldrb r0, [sp, #0x20] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r1, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E161C + b _020E1410 ; case 0 + b _020E161C ; case 1 + b _020E1418 ; case 2 + b _020E1420 ; case 3 + b _020E1448 ; case 4 + b _020E161C ; case 5 + b _020E1428 ; case 6 + b _020E1438 ; case 7 + b _020E1440 ; case 8 +_020E1410: + str r10, [r1, #0x0] + b _020E161C +_020E1418: + strh r10, [r1, #0x0] + b _020E161C +_020E1420: + str r10, [r1, #0x0] + b _020E161C +_020E1428: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C +_020E1438: + str r10, [r1, #0x0] + b _020E161C +_020E1440: + str r10, [r1, #0x0] + b _020E161C +_020E1448: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C +_020E1458: + ldr r0, [sp, #0x25c] + add r7, sp, #0x2c + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r0, [r0, #-0x4] + mov r6, #0x1 + strb r0, [sp, #0x2c] + b _020E14D8 +_020E1478: + mov r0, #0x25 + strb r0, [sp, #0x2c] + add r7, sp, #0x2c + mov r6, #0x1 + b _020E14D8 +_020E148C: + ldr r0, [sp, #0xc] + bl strlen + movs r4, r0 + beq _020E14C4 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r4 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E14C4: + add sp, sp, #0x22c + add r0, r10, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E14D8: + ldrb r0, [sp, #0x1c] + mov r4, r6 + cmp r0, #0x0 + beq _020E158C + cmp r0, #0x2 + moveq r0, #0x30 + movne r0, #0x20 + strb r0, [sp, #0x19] + ldrsb r0, [r7, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E1548 + ldrsb r0, [sp, #0x19] + cmp r0, #0x30 + bne _020E1548 + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r7, r7, #0x1 + sub r6, r6, #0x1 +_020E1548: + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E158C +_020E1554: + mov r0, r8 + add r1, sp, #0x19 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E1554 +_020E158C: + cmp r6, #0x0 + beq _020E15BC + mov r0, r8 + mov r1, r7 + mov r2, r6 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E15BC: + ldrb r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020E1618 + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020E1618 + mov r6, #0x20 + add r7, sp, #0x18 +_020E15DC: + mov r0, r8 + mov r1, r7 + mov r2, #0x1 + strb r6, [sp, #0x18] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x22c + mvneq r0, #0x0 + ldmeqia sp!, {r4-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #0x1 + cmp r4, r0 + blt _020E15DC +_020E1618: + add r10, r10, r4 +_020E161C: + ldrsb r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E0E50 +_020E1628: + mov r0, r10 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E163C: .word UNK_02106DD8 +_020E1640: .word UNK_02106DDC + arm_func_end __pformatter + + arm_func_start __FileWrite +__FileWrite: ; 0x020E1644 + stmdb sp!, {r3-r5,lr} + mov r5, r0 + mov r0, r1 + mov r3, r5 + mov r1, #0x1 + mov r4, r2 + bl __fwrite + cmp r4, r0 + movne r5, #0x0 + mov r0, r5 + ldmia sp!, {r3-r5,pc} + arm_func_end __FileWrite + + arm_func_start __StringWrite +__StringWrite: ; 0x020E1670 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r1, [r4, #0x8] + mov r0, #0x1 + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + arm_func_end __StringWrite + + arm_func_start printf +printf: ; 0x020E16B4 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, _020E17B4 ; =__files + 0x4C + mvn r1, #0x0 + bl fwide + cmp r0, #0x0 + mvnge r0, #0x0 + ldmgeia sp!, {r4,lr} + addge sp, sp, #0x10 + bxge lr + ldr r0, _020E17B8 ; =__cs + 0x48 + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020E1710 + ldr r0, _020E17BC ; =OSi_ThreadInfo + ldr r1, _020E17C0 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] + b _020E1768 +_020E1710: + ldr r0, _020E17BC ; =OSi_ThreadInfo + ldr r1, _020E17C0 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, #0xc] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E1740 + ldr r0, _020E17C4 ; =__cs_ref + ldr r1, [r0, #0xc] + add r1, r1, #0x1 + str r1, [r0, #0xc] + b _020E1768 +_020E1740: + ldr r0, _020E17B8 ; =__cs + 0x48 + bl OS_LockMutex + ldr r0, _020E17BC ; =OSi_ThreadInfo + ldr r1, _020E17C0 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] +_020E1768: + add r0, sp, #0x8 + bic r3, r0, #0x3 + ldr r2, [sp, #0x8] + ldr r0, _020E17C8 ; =__FileWrite + ldr r1, _020E17B4 ; =__files + 0x4C + add r3, r3, #0x4 + bl __pformatter + ldr r1, _020E17C4 ; =__cs_ref + mov r4, r0 + ldr r0, [r1, #0xc] + subs r0, r0, #0x1 + str r0, [r1, #0xc] + bne _020E17A4 + ldr r0, _020E17B8 ; =__cs + 0x48 + bl OS_UnlockMutex +_020E17A4: + mov r0, r4 + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E17B4: .word __files + 0x4C +_020E17B8: .word __cs + 0x48 +_020E17BC: .word OSi_ThreadInfo +_020E17C0: .word __cs_id +_020E17C4: .word __cs_ref +_020E17C8: .word __FileWrite + arm_func_end printf + + arm_func_start vsnprintf +vsnprintf: ; 0x020E17CC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E1830 ; =__StringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __pformatter + cmp r5, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r5,pc} + cmp r0, r4 + movcc r1, #0x0 + addcc sp, sp, #0xc + strccb r1, [r5, r0] + ldmccia sp!, {r4-r5,pc} + cmp r4, #0x0 + addne r1, r5, r4 + movne r2, #0x0 + strneb r2, [r1, #-0x1] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E1830: .word __StringWrite + arm_func_end vsnprintf + + arm_func_start snprintf +snprintf: ; 0x020E1834 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + arm_func_end snprintf + + arm_func_start sprintf +sprintf: ; 0x020E185C + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r1, sp, #0xc + bic r1, r1, #0x3 + add r3, r1, #0x4 + ldr r2, [sp, #0xc] + mvn r1, #0x0 + bl vsnprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + arm_func_end sprintf + + exception long2str, 589, 0x0090FF20 + exception longlong2str, 737, 0x00A0FF20 + exception double2hex, 1245, 0x00F07F20 + exception float2str, 1893, 0x00C0FF20 + exception __pformatter, 2084, UNK_020EC710 + exception __FileWrite, 45, 0x00200300 + exception __StringWrite, 69, 0x00200300 + exception printf, 281, 0x00300120 + exception vsnprintf, 105, 0x00300300 + exception snprintf, 41, 0x00300020 + exception sprintf, 45, 0x00300020 + + .section .exception,8 + +UNK_020EC710: ; 0x020EC710 + .byte 0x20, 0xFF, 0x09, 0x60 + .balign 8 diff --git a/arm9/asm/MSL_Common_qsort.s b/arm9/asm/MSL_Common_qsort.s index 1e07aab6b..4d5b721b1 100644 --- a/arm9/asm/MSL_Common_qsort.s +++ b/arm9/asm/MSL_Common_qsort.s @@ -1,108 +1,108 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start qsort -qsort: ; 0x020E1888 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - mov r9, r1 - cmp r9, #0x2 - mov r10, r0 - mov r8, r2 - mov r7, r3 - addcc sp, sp, #0x10 - ldmccia sp!, {r3-r11,pc} - mov r0, r9, lsr #0x1 - add r11, r0, #0x1 - sub r0, r11, #0x1 - mla r0, r8, r0, r10 - sub r2, r9, #0x1 - str r0, [sp, #0xc] - mla r0, r8, r2, r10 - str r0, [sp, #0x8] - mul r0, r11, r8 - mvn r1, #0x0 - str r0, [sp, #0x4] - mul r0, r8, r1 - str r0, [sp, #0x0] -_020E18E0: - cmp r11, #0x1 - bls _020E1908 - ldr r0, [sp, #0x4] - sub r11, r11, #0x1 - sub r0, r0, r8 - str r0, [sp, #0x4] - ldr r0, [sp, #0xc] - sub r0, r0, r8 - str r0, [sp, #0xc] - b _020E1950 -_020E1908: - mov r2, r8 - ldr r4, [sp, #0x8] - ldr r3, [sp, #0xc] - cmp r8, #0x0 - beq _020E1934 -_020E191C: - ldrsb r0, [r4, #0x0] - ldrsb r1, [r3, #0x0] - subs r2, r2, #0x1 - strb r0, [r3], #0x1 - strb r1, [r4], #0x1 - bne _020E191C -_020E1934: - sub r9, r9, #0x1 - cmp r9, #0x1 - addeq sp, sp, #0x10 - ldmeqia sp!, {r3-r11,pc} - ldr r0, [sp, #0x8] - sub r0, r0, r8 - str r0, [sp, #0x8] -_020E1950: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x0] - mov r4, r11 - add r0, r1, r0 - cmp r9, r11, lsl #0x1 - add r5, r10, r0 - blo _020E18E0 -_020E196C: - mov r4, r4, lsl #0x1 - sub r0, r4, #0x1 - mov r6, r5 - mla r5, r8, r0, r10 - cmp r9, r4 - bls _020E199C - mov r0, r5 - add r1, r5, r8 - blx r7 - cmp r0, #0x0 - addlt r4, r4, #0x1 - addlt r5, r5, r8 -_020E199C: - mov r0, r6 - mov r1, r5 - blx r7 - cmp r0, #0x0 - bge _020E18E0 - mov r2, r8 - mov r3, r5 - cmp r8, #0x0 - beq _020E19D8 -_020E19C0: - ldrsb r1, [r6, #0x0] - ldrsb r0, [r3, #0x0] - subs r2, r2, #0x1 - strb r0, [r6], #0x1 - strb r1, [r3], #0x1 - bne _020E19C0 -_020E19D8: - cmp r9, r4, lsl #0x1 - bhs _020E196C - b _020E18E0 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,pc} - arm_func_end qsort - - exception qsort, 357, 0x0070FF00 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start qsort +qsort: ; 0x020E1888 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + mov r9, r1 + cmp r9, #0x2 + mov r10, r0 + mov r8, r2 + mov r7, r3 + addcc sp, sp, #0x10 + ldmccia sp!, {r3-r11,pc} + mov r0, r9, lsr #0x1 + add r11, r0, #0x1 + sub r0, r11, #0x1 + mla r0, r8, r0, r10 + sub r2, r9, #0x1 + str r0, [sp, #0xc] + mla r0, r8, r2, r10 + str r0, [sp, #0x8] + mul r0, r11, r8 + mvn r1, #0x0 + str r0, [sp, #0x4] + mul r0, r8, r1 + str r0, [sp, #0x0] +_020E18E0: + cmp r11, #0x1 + bls _020E1908 + ldr r0, [sp, #0x4] + sub r11, r11, #0x1 + sub r0, r0, r8 + str r0, [sp, #0x4] + ldr r0, [sp, #0xc] + sub r0, r0, r8 + str r0, [sp, #0xc] + b _020E1950 +_020E1908: + mov r2, r8 + ldr r4, [sp, #0x8] + ldr r3, [sp, #0xc] + cmp r8, #0x0 + beq _020E1934 +_020E191C: + ldrsb r0, [r4, #0x0] + ldrsb r1, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r3], #0x1 + strb r1, [r4], #0x1 + bne _020E191C +_020E1934: + sub r9, r9, #0x1 + cmp r9, #0x1 + addeq sp, sp, #0x10 + ldmeqia sp!, {r3-r11,pc} + ldr r0, [sp, #0x8] + sub r0, r0, r8 + str r0, [sp, #0x8] +_020E1950: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + mov r4, r11 + add r0, r1, r0 + cmp r9, r11, lsl #0x1 + add r5, r10, r0 + blo _020E18E0 +_020E196C: + mov r4, r4, lsl #0x1 + sub r0, r4, #0x1 + mov r6, r5 + mla r5, r8, r0, r10 + cmp r9, r4 + bls _020E199C + mov r0, r5 + add r1, r5, r8 + blx r7 + cmp r0, #0x0 + addlt r4, r4, #0x1 + addlt r5, r5, r8 +_020E199C: + mov r0, r6 + mov r1, r5 + blx r7 + cmp r0, #0x0 + bge _020E18E0 + mov r2, r8 + mov r3, r5 + cmp r8, #0x0 + beq _020E19D8 +_020E19C0: + ldrsb r1, [r6, #0x0] + ldrsb r0, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r6], #0x1 + strb r1, [r3], #0x1 + bne _020E19C0 +_020E19D8: + cmp r9, r4, lsl #0x1 + bhs _020E196C + b _020E18E0 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,pc} + arm_func_end qsort + + exception qsort, 357, 0x0070FF00 diff --git a/arm9/asm/MSL_Common_scanf.s b/arm9/asm/MSL_Common_scanf.s index eb3fbb9aa..a2585dfb9 100644 --- a/arm9/asm/MSL_Common_scanf.s +++ b/arm9/asm/MSL_Common_scanf.s @@ -1,1458 +1,1458 @@ - .include "asm/macros.inc" - .include "global.inc" - - .rodata - -parse_format$f: ; 0x0210440C - .byte 0x00, 0x00, 0x00, 0x00 - .word 0x7FFFFFFF - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .word 0x00000000 - .size parse_format$f,.-parse_format$f - - .text - - local_arm_func_start parse_format -parse_format: ; 0x020E1A30 - stmdb sp!, {r3-r7,lr} - sub sp, sp, #0x28 - ldr r6, _020E1F20 ; =parse_format$f - add r5, sp, #0x0 - mov r7, r0 - mov lr, r1 - mov r4, r5 - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6, {r0-r1} - stmia r5, {r0-r1} - ldrsb r0, [r7, #0x1] - add r12, r7, #0x1 - cmp r0, #0x25 - bne _020E1A9C - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1A9C: - cmp r0, #0x2a - moveq r0, #0x1 - streqb r0, [sp, #0x0] - ldreqsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1ABC - cmp r0, #0x80 - blt _020E1AC4 -_020E1ABC: - mov r1, #0x0 - b _020E1AD4 -_020E1AC4: - ldr r1, _020E1F24 ; =__msl_digit - mov r2, r0, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x8 -_020E1AD4: - cmp r1, #0x0 - beq _020E1B74 - mov r1, #0x0 - ldr r3, _020E1F24 ; =__msl_digit - str r1, [sp, #0x4] - mov r4, r1 - mov r1, #0xa -_020E1AF0: - ldr r2, [sp, #0x4] - sub r0, r0, #0x30 - mla r0, r2, r1, r0 - str r0, [sp, #0x4] - ldrsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1B14 - cmp r0, #0x80 - blt _020E1B1C -_020E1B14: - mov r2, r4 - b _020E1B28 -_020E1B1C: - mov r2, r0, lsl #0x1 - ldrh r2, [r3, r2] - and r2, r2, #0x8 -_020E1B28: - cmp r2, #0x0 - bne _020E1AF0 - ldr r1, [sp, #0x4] - cmp r1, #0x0 - bne _020E1B6C - mov r0, #0xff - add r4, sp, #0x0 - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1B6C: - mov r1, #0x1 - strb r1, [sp, #0x1] -_020E1B74: - cmp r0, #0x6c - mov r1, #0x1 - bgt _020E1BAC - cmp r0, #0x68 - blt _020E1BA0 - beq _020E1BC8 - cmp r0, #0x6a - beq _020E1C14 - cmp r0, #0x6c - beq _020E1BE4 - b _020E1C38 -_020E1BA0: - cmp r0, #0x4c - beq _020E1C08 - b _020E1C38 -_020E1BAC: - cmp r0, #0x74 - bgt _020E1BBC - beq _020E1C2C - b _020E1C38 -_020E1BBC: - cmp r0, #0x7a - beq _020E1C20 - b _020E1C38 -_020E1BC8: - mov r2, #0x2 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x68 - streqb r1, [sp, #0x2] - ldreqsb r0, [r12, #0x1]! - b _020E1C3C -_020E1BE4: - mov r2, #0x3 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x6c - bne _020E1C3C - mov r0, #0x7 - strb r0, [sp, #0x2] - ldrsb r0, [r12, #0x1]! - b _020E1C3C -_020E1C08: - mov r2, #0x9 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C14: - mov r2, #0x4 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C20: - mov r2, #0x5 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C2C: - mov r2, #0x6 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C38: - mov r1, #0x0 -_020E1C3C: - cmp r1, #0x0 - ldrnesb r0, [r12, #0x1]! - strb r0, [sp, #0x3] - cmp r0, #0x5b - bgt _020E1C90 - bge _020E1DE0 - cmp r0, #0x47 - bgt _020E1C84 - subs r1, r0, #0x41 - addpl pc, pc, r1, lsl #0x2 - b _020E1EF0 - b _020E1D1C ; case 65 - b _020E1EF0 ; case 66 - b _020E1EF0 ; case 67 - b _020E1EF0 ; case 68 - b _020E1D1C ; case 69 - b _020E1D1C ; case 70 - b _020E1D1C ; case 71 -_020E1C84: - cmp r0, #0x58 - beq _020E1D08 - b _020E1EF0 -_020E1C90: - cmp r0, #0x61 - bgt _020E1CA0 - beq _020E1D1C - b _020E1EF0 -_020E1CA0: - sub r0, r0, #0x63 - cmp r0, #0x15 - addls pc, pc, r0, lsl #0x2 - b _020E1EF0 - b _020E1D6C ; case 99 - b _020E1D08 ; case 100 - b _020E1D1C ; case 101 - b _020E1D1C ; case 102 - b _020E1D1C ; case 103 - b _020E1EF0 ; case 104 - b _020E1D08 ; case 105 - b _020E1EF0 ; case 106 - b _020E1EF0 ; case 107 - b _020E1EF0 ; case 108 - b _020E1EF0 ; case 109 - b _020E1EF8 ; case 110 - b _020E1D08 ; case 111 - b _020E1D58 ; case 112 - b _020E1EF0 ; case 113 - b _020E1EF0 ; case 114 - b _020E1D90 ; case 115 - b _020E1EF0 ; case 116 - b _020E1D08 ; case 117 - b _020E1EF0 ; case 118 - b _020E1EF0 ; case 119 - b _020E1D08 ; case 120 -_020E1D08: - ldrb r0, [sp, #0x2] - cmp r0, #0x9 - moveq r0, #0xff - streqb r0, [sp, #0x3] - b _020E1EF8 -_020E1D1C: - ldrb r1, [sp, #0x2] - cmp r1, #0x1 - cmpne r1, #0x2 - beq _020E1D3C - add r0, r1, #0xfc - and r0, r0, #0xff - cmp r0, #0x3 - bhi _020E1D48 -_020E1D3C: - mov r0, #0xff - strb r0, [sp, #0x3] - b _020E1EF8 -_020E1D48: - cmp r1, #0x3 - moveq r0, #0x8 - streqb r0, [sp, #0x2] - b _020E1EF8 -_020E1D58: - mov r1, #0x3 - mov r0, #0x78 - strb r1, [sp, #0x2] - strb r0, [sp, #0x3] - b _020E1EF8 -_020E1D6C: - ldrb r0, [sp, #0x2] - cmp r0, #0x3 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1EF8 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] - b _020E1EF8 -_020E1D90: - ldrb r0, [sp, #0x2] - cmp r0, #0x3 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1DB0 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] -_020E1DB0: - add r2, sp, #0x8 - mov r1, #0x20 - mov r0, #0xff -_020E1DBC: - sub r1, r1, #0x1 - cmp r1, #0x0 - strb r0, [r2], #0x1 - bgt _020E1DBC - mov r1, #0xc1 - mov r0, #0xfe - strb r1, [sp, #0x9] - strb r0, [sp, #0xc] - b _020E1EF8 -_020E1DE0: - ldrb r0, [sp, #0x2] - cmp r0, #0x3 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1E00 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] -_020E1E00: - ldrsb r2, [r12, #0x1]! - mov r1, #0x0 - cmp r2, #0x5e - ldreqsb r2, [r12, #0x1]! - moveq r1, #0x1 - cmp r2, #0x5d - bne _020E1EA8 - ldrb r0, [sp, #0x13] - orr r0, r0, #0x20 - strb r0, [sp, #0x13] - ldrsb r2, [r12, #0x1]! - b _020E1EA8 -_020E1E30: - add r0, sp, #0x0 - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - mov r4, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - ldrsb r3, [r12, #0x1] - cmp r3, #0x2d - bne _020E1EA4 - ldrsb r7, [r12, #0x2] - cmp r7, #0x0 - cmpne r7, #0x5d - beq _020E1EA4 - add r2, r2, #0x1 - cmp r2, r7 - bgt _020E1E9C -_020E1E78: - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - add r2, r2, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - cmp r2, r7 - ble _020E1E78 -_020E1E9C: - ldrsb r2, [r12, #0x3]! - b _020E1EA8 -_020E1EA4: - ldrsb r2, [r12, #0x1]! -_020E1EA8: - cmp r2, #0x0 - cmpne r2, #0x5d - bne _020E1E30 - cmp r2, #0x0 - moveq r0, #0xff - streqb r0, [sp, #0x3] - beq _020E1EF8 - cmp r1, #0x0 - beq _020E1EF8 - add r2, sp, #0x8 - mov r1, #0x20 -_020E1ED4: - ldrb r0, [r2, #0x0] - sub r1, r1, #0x1 - cmp r1, #0x0 - mvn r0, r0 - strb r0, [r2], #0x1 - bgt _020E1ED4 - b _020E1EF8 -_020E1EF0: - mov r0, #0xff - strb r0, [sp, #0x3] -_020E1EF8: - add r4, sp, #0x0 - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add r0, r12, #0x1 - add sp, sp, #0x28 - ldmia sp!, {r3-r7,pc} - .balign 4 -_020E1F20: .word parse_format$f -_020E1F24: .word __msl_digit - arm_func_end parse_format - - arm_func_start __sformatter -__sformatter: ; 0x020E1F28 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x88 - ldrsb r5, [r2, #0x0] - str r2, [sp, #0xc] - mov r2, #0x0 - mov r9, r0 - mov r0, r2 - str r2, [sp, #0x20] - mov r8, r1 - str r3, [sp, #0x10] - str r0, [sp, #0x24] - cmp r5, #0x0 - ldr r10, [sp, #0xb0] - str r0, [sp, #0x30] - mov r4, r2 - str r0, [sp, #0x44] - str r0, [sp, #0x40] - beq _020E2C3C -_020E1F70: - cmp r5, #0x0 - mov r0, #0x1 - blt _020E1F84 - cmp r5, #0x80 - movlt r0, #0x0 -_020E1F84: - cmp r0, #0x0 - movne r0, #0x0 - bne _020E1FA0 - mov r1, r5, lsl #0x1 - ldr r0, _020E2C74 ; =__msl_digit - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E1FA0: - cmp r0, #0x0 - beq _020E2060 - mov r2, #0x0 - ldr r1, _020E2C74 ; =__msl_digit - mov r12, r2 - mov r3, #0x1 -_020E1FB8: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x1]! - str r0, [sp, #0xc] - mov r0, r3 - cmp r5, #0x0 - blt _020E1FD8 - cmp r5, #0x80 - movlt r0, r2 -_020E1FD8: - cmp r0, #0x0 - movne r0, r12 - moveq r0, r5, lsl #0x1 - ldreqh r0, [r1, r0] - andeq r0, r0, #0x100 - cmp r0, #0x0 - bne _020E1FB8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =__msl_digit - b _020E200C -_020E2008: - add r4, r4, #0x1 -_020E200C: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E2034 - cmp r1, #0x80 - blt _020E203C -_020E2034: - mov r0, #0x0 - b _020E2048 -_020E203C: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E2048: - cmp r0, #0x0 - bne _020E2008 - mov r0, r8 - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2060: - cmp r5, #0x25 - beq _020E20D8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E20D8 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - and r0, r5, #0xff - ldrsb r1, [sp, #0x50] - cmp r0, r1 - beq _020E20C4 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, [sp, #0xc] - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20C4: - ldr r0, [sp, #0xc] - add r4, r4, #0x1 - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20D8: - ldr r0, [sp, #0xc] - add r1, sp, #0x60 - bl parse_format - str r0, [sp, #0xc] - ldrb r0, [sp, #0x60] - cmp r0, #0x0 - bne _020E2114 - ldrb r0, [sp, #0x63] - cmp r0, #0x25 - beq _020E2114 - ldr r0, [sp, #0x10] - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r5, [r0, #-0x4] - b _020E2118 -_020E2114: - mov r5, #0x0 -_020E2118: - ldrb r0, [sp, #0x63] - cmp r0, #0x6e - beq _020E2158 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2158 - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2158 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] -_020E2158: - ldrb r1, [sp, #0x63] - cmp r1, #0x5b - bgt _020E21B0 - bge _020E2984 - cmp r1, #0x47 - bgt _020E21A4 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E2198 - b _020E2600 ; case 65 - b _020E2C3C ; case 66 - b _020E2C3C ; case 67 - b _020E2C3C ; case 68 - b _020E2600 ; case 69 - b _020E2600 ; case 70 - b _020E2600 ; case 71 -_020E2198: - cmp r1, #0x25 - beq _020E287C - b _020E2C3C -_020E21A4: - cmp r1, #0x58 - beq _020E243C - b _020E2C3C -_020E21B0: - cmp r1, #0x78 - bgt _020E2228 - subs r0, r1, #0x63 - addpl pc, pc, r0, lsl #0x2 - b _020E221C - b _020E26C4 ; case 99 - b _020E2230 ; case 100 - b _020E2600 ; case 101 - b _020E2600 ; case 102 - b _020E2600 ; case 103 - b _020E2C3C ; case 104 - b _020E2238 ; case 105 - b _020E2C3C ; case 106 - b _020E2C3C ; case 107 - b _020E2C3C ; case 108 - b _020E2C3C ; case 109 - b _020E2BC8 ; case 110 - b _020E242C ; case 111 - b _020E2C3C ; case 112 - b _020E2C3C ; case 113 - b _020E2C3C ; case 114 - b _020E2908 ; case 115 - b _020E2C3C ; case 116 - b _020E2434 ; case 117 - b _020E2C3C ; case 118 - b _020E2C3C ; case 119 - b _020E243C ; case 120 -_020E221C: - cmp r1, #0x61 - beq _020E2600 - b _020E2C3C -_020E2228: - cmp r1, #0xff - b _020E2C3C -_020E2230: - mov r0, #0xa - b _020E223C -_020E2238: - mov r0, #0x0 -_020E223C: - ldr r1, [sp, #0x30] - cmp r1, #0x0 - beq _020E225C - mov r0, #0x0 - str r0, [sp, #0x1c] - str r0, [sp, #0x20] - str r0, [sp, #0x24] - b _020E2364 -_020E225C: - ldrb r1, [sp, #0x62] - add r2, sp, #0x5c - cmp r1, #0x7 - cmpne r1, #0x4 - add r1, sp, #0x58 - bne _020E22A0 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoull - str r0, [sp, #0x34] - str r1, [sp, #0x18] - b _020E22C4 -_020E22A0: - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoul - str r0, [sp, #0x3c] -_020E22C4: - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E22F4 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - mov r0, #0x0 - str r0, [sp, #0x1c] - str r0, [sp, #0x20] - str r0, [sp, #0x24] - b _020E2364 -_020E22F4: - add r4, r4, r0 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - cmpne r0, #0x4 - bne _020E2344 - ldr r0, [sp, #0x58] - cmp r0, #0x0 - beq _020E2330 - ldr r0, [sp, #0x34] - rsbs r0, r0, #0x0 - str r0, [sp, #0x20] - ldr r0, [sp, #0x18] - rsc r0, r0, #0x0 - str r0, [sp, #0x24] - b _020E2364 -_020E2330: - ldr r0, [sp, #0x34] - str r0, [sp, #0x20] - ldr r0, [sp, #0x18] - str r0, [sp, #0x24] - b _020E2364 -_020E2344: - ldr r0, [sp, #0x58] - cmp r0, #0x0 - ldreq r0, [sp, #0x3c] - streq r0, [sp, #0x1c] - beq _020E2364 - ldr r0, [sp, #0x3c] - rsb r0, r0, #0x0 - str r0, [sp, #0x1c] -_020E2364: - cmp r5, #0x0 - beq _020E241C - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E2408 - b _020E239C ; case 0 - b _020E23A8 ; case 1 - b _020E23B4 ; case 2 - b _020E23C0 ; case 3 - b _020E23CC ; case 4 - b _020E23E0 ; case 5 - b _020E23EC ; case 6 - b _020E23F8 ; case 7 -_020E239C: - ldr r0, [sp, #0x1c] - str r0, [r5, #0x0] - b _020E2408 -_020E23A8: - ldr r0, [sp, #0x1c] - strb r0, [r5, #0x0] - b _020E2408 -_020E23B4: - ldr r0, [sp, #0x1c] - strh r0, [r5, #0x0] - b _020E2408 -_020E23C0: - ldr r0, [sp, #0x1c] - str r0, [r5, #0x0] - b _020E2408 -_020E23CC: - ldr r0, [sp, #0x20] - str r0, [r5, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x4] - b _020E2408 -_020E23E0: - ldr r0, [sp, #0x1c] - str r0, [r5, #0x0] - b _020E2408 -_020E23EC: - ldr r0, [sp, #0x1c] - str r0, [r5, #0x0] - b _020E2408 -_020E23F8: - ldr r0, [sp, #0x20] - str r0, [r5, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x4] -_020E2408: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E241C: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E242C: - mov r0, #0x8 - b _020E2440 -_020E2434: - mov r0, #0xa - b _020E2440 -_020E243C: - mov r0, #0x10 -_020E2440: - ldr r1, [sp, #0x30] - cmp r1, #0x0 - beq _020E2460 - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E2460: - ldrb r1, [sp, #0x62] - add r2, sp, #0x5c - cmp r1, #0x7 - cmpne r1, #0x4 - add r1, sp, #0x58 - bne _020E24A4 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoull - str r0, [sp, #0x34] - str r1, [sp, #0x18] - b _020E24C8 -_020E24A4: - str r2, [sp, #0x0] - str r1, [sp, #0x4] - add r1, sp, #0x54 - str r1, [sp, #0x8] - ldr r1, [sp, #0x64] - mov r2, r9 - mov r3, r8 - bl __strtoul - str r0, [sp, #0x3c] -_020E24C8: - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E24F8 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E24F8: - add r4, r4, r0 - ldr r0, [sp, #0x58] - cmp r0, #0x0 - beq _020E2538 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - ldrne r0, [sp, #0x3c] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x3c] - bne _020E2538 - ldr r0, [sp, #0x34] - rsbs r0, r0, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x18] - rsc r0, r0, #0x0 - str r0, [sp, #0x18] -_020E2538: - cmp r5, #0x0 - beq _020E25F0 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E25DC - b _020E2570 ; case 0 - b _020E257C ; case 1 - b _020E2588 ; case 2 - b _020E2594 ; case 3 - b _020E25A0 ; case 4 - b _020E25B4 ; case 5 - b _020E25C0 ; case 6 - b _020E25CC ; case 7 -_020E2570: - ldr r0, [sp, #0x3c] - str r0, [r5, #0x0] - b _020E25DC -_020E257C: - ldr r0, [sp, #0x3c] - strb r0, [r5, #0x0] - b _020E25DC -_020E2588: - ldr r0, [sp, #0x3c] - strh r0, [r5, #0x0] - b _020E25DC -_020E2594: - ldr r0, [sp, #0x3c] - str r0, [r5, #0x0] - b _020E25DC -_020E25A0: - ldr r0, [sp, #0x34] - str r0, [r5, #0x0] - ldr r0, [sp, #0x18] - str r0, [r5, #0x4] - b _020E25DC -_020E25B4: - ldr r0, [sp, #0x3c] - str r0, [r5, #0x0] - b _020E25DC -_020E25C0: - ldr r0, [sp, #0x3c] - str r0, [r5, #0x0] - b _020E25DC -_020E25CC: - ldr r0, [sp, #0x34] - str r0, [r5, #0x0] - ldr r0, [sp, #0x18] - str r0, [r5, #0x4] -_020E25DC: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E25F0: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2600: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - beq _020E261C - ldr r0, _020E2C78 ; =__float_nan - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E261C: - add r0, sp, #0x54 - str r0, [sp, #0x0] - ldr r0, [sp, #0x64] - mov r1, r9 - mov r2, r8 - add r3, sp, #0x5c - bl __strtold - ldr r2, [sp, #0x5c] - cmp r2, #0x0 - bne _020E2664 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, _020E2C78 ; =__float_nan - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E2664: - add r4, r4, r2 -_020E2668: - cmp r5, #0x0 - beq _020E26B4 - ldrb r2, [sp, #0x62] - cmp r2, #0x0 - beq _020E2690 - cmp r2, #0x8 - beq _020E269C - cmp r2, #0x9 - stmeqia r5, {r0-r1} - b _020E26A0 -_020E2690: - bl _d2f - str r0, [r5, #0x0] - b _020E26A0 -_020E269C: - stmia r5, {r0-r1} -_020E26A0: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E26B4: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E26C4: - ldrb r0, [sp, #0x61] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0x64] - cmp r5, #0x0 - beq _020E280C - cmp r10, #0x0 - beq _020E26F8 - ldr r0, [sp, #0x10] - mov r7, #0x1 - add r0, r0, #0x4 - ldr r11, [r0, #-0x4] - str r0, [sp, #0x10] -_020E26F8: - ldr r0, [sp, #0x30] - mov r1, #0x0 - cmp r0, #0x0 - str r1, [sp, #0x5c] - beq _020E2718 - cmp r11, #0x0 - strneb r1, [r5, #0x0] - b _020E2C2C -_020E2718: - mvn r0, #0x0 - str r5, [sp, #0x2c] - str r0, [sp, #0x48] - b _020E2760 -_020E2728: - ldrb r0, [sp, #0x62] - strb r6, [sp, #0x50] - cmp r0, #0xa - ldrnesb r0, [sp, #0x50] - strneb r0, [r5], #0x1 - bne _020E2754 - mov r0, r5 - add r1, sp, #0x50 - mov r2, #0x1 - bl mbtowc - add r5, r5, #0x1 -_020E2754: - ldr r0, [sp, #0x5c] - add r1, r0, #0x1 - str r1, [sp, #0x5c] -_020E2760: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E27B0 - cmp r10, #0x0 - beq _020E2790 - cmp r11, r1 - movhi r7, #0x1 - movls r7, #0x0 - cmp r7, #0x0 - beq _020E27B0 -_020E2790: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - ldr r0, [sp, #0x48] - cmp r6, r0 - bne _020E2728 -_020E27B0: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E27D0 - cmp r10, #0x0 - beq _020E27F8 - cmp r7, #0x0 - bne _020E27F8 -_020E27D0: - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - cmp r11, #0x0 - str r0, [sp, #0x30] - beq _020E2C2C - ldr r0, [sp, #0x2c] - mov r1, #0x0 - strb r1, [r0, #0x0] - b _020E2C2C -_020E27F8: - add r4, r4, r0 - ldr r0, [sp, #0x44] - add r0, r0, #0x1 - str r0, [sp, #0x44] - b _020E286C -_020E280C: - mov r0, #0x0 - str r0, [sp, #0x5c] - mvn r5, #0x0 - b _020E282C -_020E281C: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - add r0, r0, #0x1 - str r0, [sp, #0x5c] -_020E282C: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E285C - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - cmp r6, r5 - bne _020E281C -_020E285C: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E2C3C -_020E286C: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E287C: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =__msl_digit - b _020E2894 -_020E2890: - add r4, r4, #0x1 -_020E2894: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E28BC - cmp r1, #0x80 - blt _020E28C4 -_020E28BC: - mov r0, #0x0 - b _020E28D0 -_020E28C4: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E28D0: - cmp r0, #0x0 - bne _020E2890 - cmp r1, #0x25 - beq _020E2900 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - b _020E2C2C -_020E2900: - add r4, r4, #0x1 - b _020E2C2C -_020E2908: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2984 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - b _020E2944 -_020E292C: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - strb r0, [sp, #0x50] -_020E2944: - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E2958 - cmp r1, #0x80 - blt _020E2960 -_020E2958: - mov r0, #0x0 - b _020E2970 -_020E2960: - ldr r0, _020E2C74 ; =__msl_digit - mov r2, r1, lsl #0x1 - ldrh r0, [r0, r2] - and r0, r0, #0x100 -_020E2970: - cmp r0, #0x0 - bne _020E292C - mov r0, r8 - mov r2, #0x1 - blx r9 -_020E2984: - cmp r5, #0x0 - beq _020E2B00 - cmp r10, #0x0 - beq _020E29AC - ldr r0, [sp, #0x10] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r0, [r0, #-0x4] - sub r11, r0, #0x1 -_020E29AC: - ldr r0, [sp, #0x30] - mov r1, #0x0 - cmp r0, #0x0 - str r1, [sp, #0x5c] - beq _020E29CC - cmp r11, #0x0 - strneb r1, [r5, #0x0] - b _020E2C2C -_020E29CC: - mvn r0, #0x0 - str r5, [sp, #0x28] - str r0, [sp, #0x4c] - b _020E2A30 -_020E29DC: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - add r2, sp, #0x60 - and r3, r1, #0xff - add r2, r2, r3, asr #0x3 - ldrb r3, [r2, #0x8] - and r0, r1, #0x7 - mov r2, #0x1 - tst r3, r2, lsl r0 - beq _020E2A80 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - strneb r1, [r5], #0x1 - bne _020E2A24 - mov r0, r5 - add r1, sp, #0x50 - bl mbtowc - add r5, r5, #0x2 -_020E2A24: - ldr r0, [sp, #0x5c] - add r1, r0, #0x1 - str r1, [sp, #0x5c] -_020E2A30: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2A80 - cmp r10, #0x0 - beq _020E2A60 - cmp r11, r1 - movcs r7, #0x1 - movcc r7, #0x0 - cmp r7, #0x0 - beq _020E2A80 -_020E2A60: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - ldr r0, [sp, #0x4c] - cmp r6, r0 - bne _020E29DC -_020E2A80: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E2AA0 - cmp r10, #0x0 - beq _020E2AD8 - cmp r7, #0x0 - bne _020E2AD8 -_020E2AA0: - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - cmp r11, #0x0 - str r0, [sp, #0x30] - beq _020E2C2C - ldr r0, [sp, #0x28] - mov r1, #0x0 - strb r1, [r0, #0x0] - b _020E2C2C -_020E2AD8: - add r4, r4, r0 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - mov r0, #0x0 - streqh r0, [r5, #0x0] - strneb r0, [r5, #0x0] - ldr r0, [sp, #0x44] - add r0, r0, #0x1 - str r0, [sp, #0x44] - b _020E2B9C -_020E2B00: - mov r0, #0x0 - str r0, [sp, #0x5c] - mvn r5, #0x0 - b _020E2B44 -_020E2B10: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - and r0, r1, #0x7 - and r2, r1, #0xff - add r1, sp, #0x60 - add r1, r1, r2, asr #0x3 - ldrb r2, [r1, #0x8] - mov r1, #0x1 - tst r2, r1, lsl r0 - beq _020E2B74 - ldr r0, [sp, #0x5c] - add r0, r0, #0x1 - str r0, [sp, #0x5c] -_020E2B44: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2B74 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - cmp r6, r5 - bne _020E2B10 -_020E2B74: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E2B98 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2B98: - add r4, r4, r0 -_020E2B9C: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - blt _020E2BB8 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 -_020E2BB8: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2BC8: - cmp r5, #0x0 - beq _020E2C2C - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E2C2C - b _020E2C00 ; case 0 - b _020E2C18 ; case 1 - b _020E2C08 ; case 2 - b _020E2C10 ; case 3 - b _020E2C2C ; case 4 - b _020E2C2C ; case 5 - b _020E2C2C ; case 6 - b _020E2C20 ; case 7 -_020E2C00: - str r4, [r5, #0x0] - b _020E2C2C -_020E2C08: - strh r4, [r5, #0x0] - b _020E2C2C -_020E2C10: - str r4, [r5, #0x0] - b _020E2C2C -_020E2C18: - strb r4, [r5, #0x0] - b _020E2C2C -_020E2C20: - str r4, [r5, #0x0] - mov r0, r4, asr #0x1f - str r0, [r5, #0x4] -_020E2C2C: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x0] - cmp r5, #0x0 - bne _020E1F70 -_020E2C3C: - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2C68 - ldr r0, [sp, #0x40] - cmp r0, #0x0 - addeq sp, sp, #0x88 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,pc} -_020E2C68: - ldr r0, [sp, #0x44] - add sp, sp, #0x88 - ldmia sp!, {r3-r11,pc} - .balign 4 -_020E2C74: .word __msl_digit -_020E2C78: .word __float_nan - arm_func_end __sformatter - - arm_func_start __StringRead -__StringRead: ; 0x020E2C7C - cmp r2, #0x0 - beq _020E2C98 - cmp r2, #0x1 - beq _020E2CC8 - cmp r2, #0x2 - beq _020E2CF0 - b _020E2CF8 -_020E2C98: - ldr r1, [r0, #0x0] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E2CB8 - mov r1, #0x1 - str r1, [r0, #0x4] - sub r0, r1, #0x2 - bx lr -_020E2CB8: - add r1, r1, #0x1 - str r1, [r0, #0x0] - and r0, r2, #0xff - bx lr -_020E2CC8: - ldr r2, [r0, #0x4] - cmp r2, #0x0 - movne r2, #0x0 - strne r2, [r0, #0x4] - bne _020E2CE8 - ldr r2, [r0, #0x0] - sub r2, r2, #0x1 - str r2, [r0, #0x0] -_020E2CE8: - mov r0, r1 - bx lr -_020E2CF0: - ldr r0, [r0, #0x4] - bx lr -_020E2CF8: - mov r0, #0x0 - bx lr - arm_func_end __StringRead - - arm_func_start vsscanf -vsscanf: ; 0x020E2D00 - stmdb sp!, {lr} - sub sp, sp, #0xc - str r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r0, #0x0] - mov lr, r1 - mov r3, r2 - cmpne r0, #0x0 - addeq sp, sp, #0xc - mvneq r0, #0x0 - ldmeqia sp!, {pc} - mov r12, #0x0 - str r12, [sp, #0x8] - ldr r0, _020E2D50 ; =__StringRead - add r1, sp, #0x4 - mov r2, lr - str r12, [sp, #0x0] - bl __sformatter - add sp, sp, #0xc - ldmia sp!, {pc} - .balign 4 -_020E2D50: .word __StringRead - arm_func_end vsscanf - - arm_func_start sscanf -sscanf: ; 0x020E2D54 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r2, sp, #0xc - bic r2, r2, #0x3 - ldr r1, [sp, #0xc] - add r2, r2, #0x4 - bl vsscanf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - arm_func_end sscanf - - exception __sformatter, 3412, UNK_020EC718 - exception vsscanf, 85, 0x00200000 - exception sscanf, 41, 0x00300020 - - .section .exception,8 - -UNK_020EC718: ; 0x020EC718 - .byte 0x00, 0xFF, 0x01, 0xB0 - .balign 8 + .include "asm/macros.inc" + .include "global.inc" + + .rodata + +parse_format$f: ; 0x0210440C + .byte 0x00, 0x00, 0x00, 0x00 + .word 0x7FFFFFFF + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .word 0x00000000 + .size parse_format$f,.-parse_format$f + + .text + + local_arm_func_start parse_format +parse_format: ; 0x020E1A30 + stmdb sp!, {r3-r7,lr} + sub sp, sp, #0x28 + ldr r6, _020E1F20 ; =parse_format$f + add r5, sp, #0x0 + mov r7, r0 + mov lr, r1 + mov r4, r5 + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldmia r6, {r0-r1} + stmia r5, {r0-r1} + ldrsb r0, [r7, #0x1] + add r12, r7, #0x1 + cmp r0, #0x25 + bne _020E1A9C + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1A9C: + cmp r0, #0x2a + moveq r0, #0x1 + streqb r0, [sp, #0x0] + ldreqsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1ABC + cmp r0, #0x80 + blt _020E1AC4 +_020E1ABC: + mov r1, #0x0 + b _020E1AD4 +_020E1AC4: + ldr r1, _020E1F24 ; =__msl_digit + mov r2, r0, lsl #0x1 + ldrh r1, [r1, r2] + and r1, r1, #0x8 +_020E1AD4: + cmp r1, #0x0 + beq _020E1B74 + mov r1, #0x0 + ldr r3, _020E1F24 ; =__msl_digit + str r1, [sp, #0x4] + mov r4, r1 + mov r1, #0xa +_020E1AF0: + ldr r2, [sp, #0x4] + sub r0, r0, #0x30 + mla r0, r2, r1, r0 + str r0, [sp, #0x4] + ldrsb r0, [r12, #0x1]! + cmp r0, #0x0 + blt _020E1B14 + cmp r0, #0x80 + blt _020E1B1C +_020E1B14: + mov r2, r4 + b _020E1B28 +_020E1B1C: + mov r2, r0, lsl #0x1 + ldrh r2, [r3, r2] + and r2, r2, #0x8 +_020E1B28: + cmp r2, #0x0 + bne _020E1AF0 + ldr r1, [sp, #0x4] + cmp r1, #0x0 + bne _020E1B6C + mov r0, #0xff + add r4, sp, #0x0 + strb r0, [sp, #0x3] + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add sp, sp, #0x28 + add r0, r12, #0x1 + ldmia sp!, {r3-r7,pc} +_020E1B6C: + mov r1, #0x1 + strb r1, [sp, #0x1] +_020E1B74: + cmp r0, #0x6c + mov r1, #0x1 + bgt _020E1BAC + cmp r0, #0x68 + blt _020E1BA0 + beq _020E1BC8 + cmp r0, #0x6a + beq _020E1C14 + cmp r0, #0x6c + beq _020E1BE4 + b _020E1C38 +_020E1BA0: + cmp r0, #0x4c + beq _020E1C08 + b _020E1C38 +_020E1BAC: + cmp r0, #0x74 + bgt _020E1BBC + beq _020E1C2C + b _020E1C38 +_020E1BBC: + cmp r0, #0x7a + beq _020E1C20 + b _020E1C38 +_020E1BC8: + mov r2, #0x2 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x68 + streqb r1, [sp, #0x2] + ldreqsb r0, [r12, #0x1]! + b _020E1C3C +_020E1BE4: + mov r2, #0x3 + strb r2, [sp, #0x2] + ldrsb r2, [r12, #0x1] + cmp r2, #0x6c + bne _020E1C3C + mov r0, #0x7 + strb r0, [sp, #0x2] + ldrsb r0, [r12, #0x1]! + b _020E1C3C +_020E1C08: + mov r2, #0x9 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C14: + mov r2, #0x4 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C20: + mov r2, #0x5 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C2C: + mov r2, #0x6 + strb r2, [sp, #0x2] + b _020E1C3C +_020E1C38: + mov r1, #0x0 +_020E1C3C: + cmp r1, #0x0 + ldrnesb r0, [r12, #0x1]! + strb r0, [sp, #0x3] + cmp r0, #0x5b + bgt _020E1C90 + bge _020E1DE0 + cmp r0, #0x47 + bgt _020E1C84 + subs r1, r0, #0x41 + addpl pc, pc, r1, lsl #0x2 + b _020E1EF0 + b _020E1D1C ; case 65 + b _020E1EF0 ; case 66 + b _020E1EF0 ; case 67 + b _020E1EF0 ; case 68 + b _020E1D1C ; case 69 + b _020E1D1C ; case 70 + b _020E1D1C ; case 71 +_020E1C84: + cmp r0, #0x58 + beq _020E1D08 + b _020E1EF0 +_020E1C90: + cmp r0, #0x61 + bgt _020E1CA0 + beq _020E1D1C + b _020E1EF0 +_020E1CA0: + sub r0, r0, #0x63 + cmp r0, #0x15 + addls pc, pc, r0, lsl #0x2 + b _020E1EF0 + b _020E1D6C ; case 99 + b _020E1D08 ; case 100 + b _020E1D1C ; case 101 + b _020E1D1C ; case 102 + b _020E1D1C ; case 103 + b _020E1EF0 ; case 104 + b _020E1D08 ; case 105 + b _020E1EF0 ; case 106 + b _020E1EF0 ; case 107 + b _020E1EF0 ; case 108 + b _020E1EF0 ; case 109 + b _020E1EF8 ; case 110 + b _020E1D08 ; case 111 + b _020E1D58 ; case 112 + b _020E1EF0 ; case 113 + b _020E1EF0 ; case 114 + b _020E1D90 ; case 115 + b _020E1EF0 ; case 116 + b _020E1D08 ; case 117 + b _020E1EF0 ; case 118 + b _020E1EF0 ; case 119 + b _020E1D08 ; case 120 +_020E1D08: + ldrb r0, [sp, #0x2] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x3] + b _020E1EF8 +_020E1D1C: + ldrb r1, [sp, #0x2] + cmp r1, #0x1 + cmpne r1, #0x2 + beq _020E1D3C + add r0, r1, #0xfc + and r0, r0, #0xff + cmp r0, #0x3 + bhi _020E1D48 +_020E1D3C: + mov r0, #0xff + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D48: + cmp r1, #0x3 + moveq r0, #0x8 + streqb r0, [sp, #0x2] + b _020E1EF8 +_020E1D58: + mov r1, #0x3 + mov r0, #0x78 + strb r1, [sp, #0x2] + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D6C: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1EF8 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] + b _020E1EF8 +_020E1D90: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1DB0 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1DB0: + add r2, sp, #0x8 + mov r1, #0x20 + mov r0, #0xff +_020E1DBC: + sub r1, r1, #0x1 + cmp r1, #0x0 + strb r0, [r2], #0x1 + bgt _020E1DBC + mov r1, #0xc1 + mov r0, #0xfe + strb r1, [sp, #0x9] + strb r0, [sp, #0xc] + b _020E1EF8 +_020E1DE0: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1E00 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1E00: + ldrsb r2, [r12, #0x1]! + mov r1, #0x0 + cmp r2, #0x5e + ldreqsb r2, [r12, #0x1]! + moveq r1, #0x1 + cmp r2, #0x5d + bne _020E1EA8 + ldrb r0, [sp, #0x13] + orr r0, r0, #0x20 + strb r0, [sp, #0x13] + ldrsb r2, [r12, #0x1]! + b _020E1EA8 +_020E1E30: + add r0, sp, #0x0 + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + mov r4, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + ldrsb r3, [r12, #0x1] + cmp r3, #0x2d + bne _020E1EA4 + ldrsb r7, [r12, #0x2] + cmp r7, #0x0 + cmpne r7, #0x5d + beq _020E1EA4 + add r2, r2, #0x1 + cmp r2, r7 + bgt _020E1E9C +_020E1E78: + and r3, r2, #0xff + add r6, r0, r3, asr #0x3 + ldrb r5, [r6, #0x8] + and r3, r2, #0x7 + add r2, r2, #0x1 + orr r3, r5, r4, lsl r3 + strb r3, [r6, #0x8] + cmp r2, r7 + ble _020E1E78 +_020E1E9C: + ldrsb r2, [r12, #0x3]! + b _020E1EA8 +_020E1EA4: + ldrsb r2, [r12, #0x1]! +_020E1EA8: + cmp r2, #0x0 + cmpne r2, #0x5d + bne _020E1E30 + cmp r2, #0x0 + moveq r0, #0xff + streqb r0, [sp, #0x3] + beq _020E1EF8 + cmp r1, #0x0 + beq _020E1EF8 + add r2, sp, #0x8 + mov r1, #0x20 +_020E1ED4: + ldrb r0, [r2, #0x0] + sub r1, r1, #0x1 + cmp r1, #0x0 + mvn r0, r0 + strb r0, [r2], #0x1 + bgt _020E1ED4 + b _020E1EF8 +_020E1EF0: + mov r0, #0xff + strb r0, [sp, #0x3] +_020E1EF8: + add r4, sp, #0x0 + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r4, {r0-r1} + stmia lr, {r0-r1} + add r0, r12, #0x1 + add sp, sp, #0x28 + ldmia sp!, {r3-r7,pc} + .balign 4 +_020E1F20: .word parse_format$f +_020E1F24: .word __msl_digit + arm_func_end parse_format + + arm_func_start __sformatter +__sformatter: ; 0x020E1F28 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x88 + ldrsb r5, [r2, #0x0] + str r2, [sp, #0xc] + mov r2, #0x0 + mov r9, r0 + mov r0, r2 + str r2, [sp, #0x20] + mov r8, r1 + str r3, [sp, #0x10] + str r0, [sp, #0x24] + cmp r5, #0x0 + ldr r10, [sp, #0xb0] + str r0, [sp, #0x30] + mov r4, r2 + str r0, [sp, #0x44] + str r0, [sp, #0x40] + beq _020E2C3C +_020E1F70: + cmp r5, #0x0 + mov r0, #0x1 + blt _020E1F84 + cmp r5, #0x80 + movlt r0, #0x0 +_020E1F84: + cmp r0, #0x0 + movne r0, #0x0 + bne _020E1FA0 + mov r1, r5, lsl #0x1 + ldr r0, _020E2C74 ; =__msl_digit + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E1FA0: + cmp r0, #0x0 + beq _020E2060 + mov r2, #0x0 + ldr r1, _020E2C74 ; =__msl_digit + mov r12, r2 + mov r3, #0x1 +_020E1FB8: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x1]! + str r0, [sp, #0xc] + mov r0, r3 + cmp r5, #0x0 + blt _020E1FD8 + cmp r5, #0x80 + movlt r0, r2 +_020E1FD8: + cmp r0, #0x0 + movne r0, r12 + moveq r0, r5, lsl #0x1 + ldreqh r0, [r1, r0] + andeq r0, r0, #0x100 + cmp r0, #0x0 + bne _020E1FB8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =__msl_digit + b _020E200C +_020E2008: + add r4, r4, #0x1 +_020E200C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2034 + cmp r1, #0x80 + blt _020E203C +_020E2034: + mov r0, #0x0 + b _020E2048 +_020E203C: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E2048: + cmp r0, #0x0 + bne _020E2008 + mov r0, r8 + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2060: + cmp r5, #0x25 + beq _020E20D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E20D8 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + and r0, r5, #0xff + ldrsb r1, [sp, #0x50] + cmp r0, r1 + beq _020E20C4 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, [sp, #0xc] + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20C4: + ldr r0, [sp, #0xc] + add r4, r4, #0x1 + add r0, r0, #0x1 + str r0, [sp, #0xc] + b _020E2C2C +_020E20D8: + ldr r0, [sp, #0xc] + add r1, sp, #0x60 + bl parse_format + str r0, [sp, #0xc] + ldrb r0, [sp, #0x60] + cmp r0, #0x0 + bne _020E2114 + ldrb r0, [sp, #0x63] + cmp r0, #0x25 + beq _020E2114 + ldr r0, [sp, #0x10] + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r5, [r0, #-0x4] + b _020E2118 +_020E2114: + mov r5, #0x0 +_020E2118: + ldrb r0, [sp, #0x63] + cmp r0, #0x6e + beq _020E2158 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2158 + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2158 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] +_020E2158: + ldrb r1, [sp, #0x63] + cmp r1, #0x5b + bgt _020E21B0 + bge _020E2984 + cmp r1, #0x47 + bgt _020E21A4 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E2198 + b _020E2600 ; case 65 + b _020E2C3C ; case 66 + b _020E2C3C ; case 67 + b _020E2C3C ; case 68 + b _020E2600 ; case 69 + b _020E2600 ; case 70 + b _020E2600 ; case 71 +_020E2198: + cmp r1, #0x25 + beq _020E287C + b _020E2C3C +_020E21A4: + cmp r1, #0x58 + beq _020E243C + b _020E2C3C +_020E21B0: + cmp r1, #0x78 + bgt _020E2228 + subs r0, r1, #0x63 + addpl pc, pc, r0, lsl #0x2 + b _020E221C + b _020E26C4 ; case 99 + b _020E2230 ; case 100 + b _020E2600 ; case 101 + b _020E2600 ; case 102 + b _020E2600 ; case 103 + b _020E2C3C ; case 104 + b _020E2238 ; case 105 + b _020E2C3C ; case 106 + b _020E2C3C ; case 107 + b _020E2C3C ; case 108 + b _020E2C3C ; case 109 + b _020E2BC8 ; case 110 + b _020E242C ; case 111 + b _020E2C3C ; case 112 + b _020E2C3C ; case 113 + b _020E2C3C ; case 114 + b _020E2908 ; case 115 + b _020E2C3C ; case 116 + b _020E2434 ; case 117 + b _020E2C3C ; case 118 + b _020E2C3C ; case 119 + b _020E243C ; case 120 +_020E221C: + cmp r1, #0x61 + beq _020E2600 + b _020E2C3C +_020E2228: + cmp r1, #0xff + b _020E2C3C +_020E2230: + mov r0, #0xa + b _020E223C +_020E2238: + mov r0, #0x0 +_020E223C: + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E225C + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E225C: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E22A0 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E22C4 +_020E22A0: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E22C4: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E22F4 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E22F4: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + cmpne r0, #0x4 + bne _020E2344 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2330 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x24] + b _020E2364 +_020E2330: + ldr r0, [sp, #0x34] + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + str r0, [sp, #0x24] + b _020E2364 +_020E2344: + ldr r0, [sp, #0x58] + cmp r0, #0x0 + ldreq r0, [sp, #0x3c] + streq r0, [sp, #0x1c] + beq _020E2364 + ldr r0, [sp, #0x3c] + rsb r0, r0, #0x0 + str r0, [sp, #0x1c] +_020E2364: + cmp r5, #0x0 + beq _020E241C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2408 + b _020E239C ; case 0 + b _020E23A8 ; case 1 + b _020E23B4 ; case 2 + b _020E23C0 ; case 3 + b _020E23CC ; case 4 + b _020E23E0 ; case 5 + b _020E23EC ; case 6 + b _020E23F8 ; case 7 +_020E239C: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23A8: + ldr r0, [sp, #0x1c] + strb r0, [r5, #0x0] + b _020E2408 +_020E23B4: + ldr r0, [sp, #0x1c] + strh r0, [r5, #0x0] + b _020E2408 +_020E23C0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23CC: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] + b _020E2408 +_020E23E0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23EC: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23F8: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] +_020E2408: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E241C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E242C: + mov r0, #0x8 + b _020E2440 +_020E2434: + mov r0, #0xa + b _020E2440 +_020E243C: + mov r0, #0x10 +_020E2440: + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E2460 + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E2460: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E24A4 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E24C8 +_020E24A4: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E24C8: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E24F8 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x3c] + str r0, [sp, #0x34] + str r0, [sp, #0x18] + b _020E2538 +_020E24F8: + add r4, r4, r0 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2538 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + ldrne r0, [sp, #0x3c] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x3c] + bne _020E2538 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x18] +_020E2538: + cmp r5, #0x0 + beq _020E25F0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E25DC + b _020E2570 ; case 0 + b _020E257C ; case 1 + b _020E2588 ; case 2 + b _020E2594 ; case 3 + b _020E25A0 ; case 4 + b _020E25B4 ; case 5 + b _020E25C0 ; case 6 + b _020E25CC ; case 7 +_020E2570: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E257C: + ldr r0, [sp, #0x3c] + strb r0, [r5, #0x0] + b _020E25DC +_020E2588: + ldr r0, [sp, #0x3c] + strh r0, [r5, #0x0] + b _020E25DC +_020E2594: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25A0: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] + b _020E25DC +_020E25B4: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25C0: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25CC: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] +_020E25DC: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E25F0: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2600: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020E261C + ldr r0, _020E2C78 ; =__float_nan + ldr r0, [r0, #0x0] + bl _f2d + b _020E2668 +_020E261C: + add r0, sp, #0x54 + str r0, [sp, #0x0] + ldr r0, [sp, #0x64] + mov r1, r9 + mov r2, r8 + add r3, sp, #0x5c + bl __strtold + ldr r2, [sp, #0x5c] + cmp r2, #0x0 + bne _020E2664 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + ldr r0, _020E2C78 ; =__float_nan + ldr r0, [r0, #0x0] + bl _f2d + b _020E2668 +_020E2664: + add r4, r4, r2 +_020E2668: + cmp r5, #0x0 + beq _020E26B4 + ldrb r2, [sp, #0x62] + cmp r2, #0x0 + beq _020E2690 + cmp r2, #0x8 + beq _020E269C + cmp r2, #0x9 + stmeqia r5, {r0-r1} + b _020E26A0 +_020E2690: + bl _d2f + str r0, [r5, #0x0] + b _020E26A0 +_020E269C: + stmia r5, {r0-r1} +_020E26A0: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E26B4: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E26C4: + ldrb r0, [sp, #0x61] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0x64] + cmp r5, #0x0 + beq _020E280C + cmp r10, #0x0 + beq _020E26F8 + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + ldr r11, [r0, #-0x4] + str r0, [sp, #0x10] +_020E26F8: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E2718 + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E2718: + mvn r0, #0x0 + str r5, [sp, #0x2c] + str r0, [sp, #0x48] + b _020E2760 +_020E2728: + ldrb r0, [sp, #0x62] + strb r6, [sp, #0x50] + cmp r0, #0xa + ldrnesb r0, [sp, #0x50] + strneb r0, [r5], #0x1 + bne _020E2754 + mov r0, r5 + add r1, sp, #0x50 + mov r2, #0x1 + bl mbtowc + add r5, r5, #0x1 +_020E2754: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2760: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E27B0 + cmp r10, #0x0 + beq _020E2790 + cmp r11, r1 + movhi r7, #0x1 + movls r7, #0x0 + cmp r7, #0x0 + beq _020E27B0 +_020E2790: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x48] + cmp r6, r0 + bne _020E2728 +_020E27B0: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E27D0 + cmp r10, #0x0 + beq _020E27F8 + cmp r7, #0x0 + bne _020E27F8 +_020E27D0: + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x2c] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E27F8: + add r4, r4, r0 + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E286C +_020E280C: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E282C +_020E281C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E282C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E285C + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E281C +_020E285C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2C3C +_020E286C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E287C: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2C2C + ldr r5, _020E2C74 ; =__msl_digit + b _020E2894 +_020E2890: + add r4, r4, #0x1 +_020E2894: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E28BC + cmp r1, #0x80 + blt _020E28C4 +_020E28BC: + mov r0, #0x0 + b _020E28D0 +_020E28C4: + mov r0, r1, lsl #0x1 + ldrh r0, [r5, r0] + and r0, r0, #0x100 +_020E28D0: + cmp r0, #0x0 + bne _020E2890 + cmp r1, #0x25 + beq _020E2900 + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + b _020E2C2C +_020E2900: + add r4, r4, #0x1 + b _020E2C2C +_020E2908: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2984 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + b _020E2944 +_020E292C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + strb r0, [sp, #0x50] +_020E2944: + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2958 + cmp r1, #0x80 + blt _020E2960 +_020E2958: + mov r0, #0x0 + b _020E2970 +_020E2960: + ldr r0, _020E2C74 ; =__msl_digit + mov r2, r1, lsl #0x1 + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E2970: + cmp r0, #0x0 + bne _020E292C + mov r0, r8 + mov r2, #0x1 + blx r9 +_020E2984: + cmp r5, #0x0 + beq _020E2B00 + cmp r10, #0x0 + beq _020E29AC + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x10] + ldr r0, [r0, #-0x4] + sub r11, r0, #0x1 +_020E29AC: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E29CC + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E29CC: + mvn r0, #0x0 + str r5, [sp, #0x28] + str r0, [sp, #0x4c] + b _020E2A30 +_020E29DC: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + add r2, sp, #0x60 + and r3, r1, #0xff + add r2, r2, r3, asr #0x3 + ldrb r3, [r2, #0x8] + and r0, r1, #0x7 + mov r2, #0x1 + tst r3, r2, lsl r0 + beq _020E2A80 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + strneb r1, [r5], #0x1 + bne _020E2A24 + mov r0, r5 + add r1, sp, #0x50 + bl mbtowc + add r5, r5, #0x2 +_020E2A24: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2A30: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2A80 + cmp r10, #0x0 + beq _020E2A60 + cmp r11, r1 + movcs r7, #0x1 + movcc r7, #0x0 + cmp r7, #0x0 + beq _020E2A80 +_020E2A60: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x4c] + cmp r6, r0 + bne _020E29DC +_020E2A80: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2AA0 + cmp r10, #0x0 + beq _020E2AD8 + cmp r7, #0x0 + bne _020E2AD8 +_020E2AA0: + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x28] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E2AD8: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0xa + mov r0, #0x0 + streqh r0, [r5, #0x0] + strneb r0, [r5, #0x0] + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E2B9C +_020E2B00: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E2B44 +_020E2B10: + strb r6, [sp, #0x50] + ldrsb r1, [sp, #0x50] + and r0, r1, #0x7 + and r2, r1, #0xff + add r1, sp, #0x60 + add r1, r1, r2, asr #0x3 + ldrb r2, [r1, #0x8] + mov r1, #0x1 + tst r2, r1, lsl r0 + beq _020E2B74 + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E2B44: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E2B74 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E2B10 +_020E2B74: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E2B98 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 + b _020E2C2C +_020E2B98: + add r4, r4, r0 +_020E2B9C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + blt _020E2BB8 + mov r0, r8 + ldrsb r1, [sp, #0x50] + mov r2, #0x1 + blx r9 +_020E2BB8: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E2BC8: + cmp r5, #0x0 + beq _020E2C2C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2C2C + b _020E2C00 ; case 0 + b _020E2C18 ; case 1 + b _020E2C08 ; case 2 + b _020E2C10 ; case 3 + b _020E2C2C ; case 4 + b _020E2C2C ; case 5 + b _020E2C2C ; case 6 + b _020E2C20 ; case 7 +_020E2C00: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C08: + strh r4, [r5, #0x0] + b _020E2C2C +_020E2C10: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C18: + strb r4, [r5, #0x0] + b _020E2C2C +_020E2C20: + str r4, [r5, #0x0] + mov r0, r4, asr #0x1f + str r0, [r5, #0x4] +_020E2C2C: + ldr r0, [sp, #0xc] + ldrsb r5, [r0, #0x0] + cmp r5, #0x0 + bne _020E1F70 +_020E2C3C: + mov r0, r8 + mov r1, #0x0 + mov r2, #0x2 + blx r9 + cmp r0, #0x0 + beq _020E2C68 + ldr r0, [sp, #0x40] + cmp r0, #0x0 + addeq sp, sp, #0x88 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,pc} +_020E2C68: + ldr r0, [sp, #0x44] + add sp, sp, #0x88 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E2C74: .word __msl_digit +_020E2C78: .word __float_nan + arm_func_end __sformatter + + arm_func_start __StringRead +__StringRead: ; 0x020E2C7C + cmp r2, #0x0 + beq _020E2C98 + cmp r2, #0x1 + beq _020E2CC8 + cmp r2, #0x2 + beq _020E2CF0 + b _020E2CF8 +_020E2C98: + ldr r1, [r0, #0x0] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E2CB8 + mov r1, #0x1 + str r1, [r0, #0x4] + sub r0, r1, #0x2 + bx lr +_020E2CB8: + add r1, r1, #0x1 + str r1, [r0, #0x0] + and r0, r2, #0xff + bx lr +_020E2CC8: + ldr r2, [r0, #0x4] + cmp r2, #0x0 + movne r2, #0x0 + strne r2, [r0, #0x4] + bne _020E2CE8 + ldr r2, [r0, #0x0] + sub r2, r2, #0x1 + str r2, [r0, #0x0] +_020E2CE8: + mov r0, r1 + bx lr +_020E2CF0: + ldr r0, [r0, #0x4] + bx lr +_020E2CF8: + mov r0, #0x0 + bx lr + arm_func_end __StringRead + + arm_func_start vsscanf +vsscanf: ; 0x020E2D00 + stmdb sp!, {lr} + sub sp, sp, #0xc + str r0, [sp, #0x4] + cmp r0, #0x0 + ldrnesb r0, [r0, #0x0] + mov lr, r1 + mov r3, r2 + cmpne r0, #0x0 + addeq sp, sp, #0xc + mvneq r0, #0x0 + ldmeqia sp!, {pc} + mov r12, #0x0 + str r12, [sp, #0x8] + ldr r0, _020E2D50 ; =__StringRead + add r1, sp, #0x4 + mov r2, lr + str r12, [sp, #0x0] + bl __sformatter + add sp, sp, #0xc + ldmia sp!, {pc} + .balign 4 +_020E2D50: .word __StringRead + arm_func_end vsscanf + + arm_func_start sscanf +sscanf: ; 0x020E2D54 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r2, sp, #0xc + bic r2, r2, #0x3 + ldr r1, [sp, #0xc] + add r2, r2, #0x4 + bl vsscanf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + arm_func_end sscanf + + exception __sformatter, 3412, UNK_020EC718 + exception vsscanf, 85, 0x00200000 + exception sscanf, 41, 0x00300020 + + .section .exception,8 + +UNK_020EC718: ; 0x020EC718 + .byte 0x00, 0xFF, 0x01, 0xB0 + .balign 8 diff --git a/arm9/asm/MSL_Common_signal.s b/arm9/asm/MSL_Common_signal.s index 3a68bbac3..3d7ccd73d 100644 --- a/arm9/asm/MSL_Common_signal.s +++ b/arm9/asm/MSL_Common_signal.s @@ -1,103 +1,103 @@ - .include "asm/macros.inc" - .include "global.inc" - - .bss - - .global signal_funcs -signal_funcs: ; 0x021D74AC - .space 0x1c - .size signal_funcs,.-signal_funcs - - .text - - arm_func_start raise -raise: ; 0x020E2D7C - stmdb sp!, {r3-r5,lr} - mov r5, r0 - cmp r5, #0x1 - blt _020E2D94 - cmp r5, #0x7 - ble _020E2D9C -_020E2D94: - mvn r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E2D9C: - ldr r0, _020E2E98 ; =__cs + 0xA8 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020E2DD0 - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020E2EA4 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x1c] - str r2, [r0, #0x1c] - b _020E2E28 -_020E2DD0: - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =__cs_id - ldr r0, [r0, #0x4] - ldr r1, [r1, #0x1c] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020E2E00 - ldr r0, _020E2EA4 ; =__cs_ref - ldr r1, [r0, #0x1c] - add r1, r1, #0x1 - str r1, [r0, #0x1c] - b _020E2E28 -_020E2E00: - ldr r0, _020E2E98 ; =__cs + 0xA8 - bl OS_LockMutex - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =__cs_id - ldr r2, [r0, #0x4] - ldr r0, _020E2EA4 ; =__cs_ref - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x1c] - str r2, [r0, #0x1c] -_020E2E28: - ldr r1, _020E2EA8 ; =signal_funcs - sub r2, r5, #0x1 - ldr r4, [r1, r2, lsl #0x2] - cmp r4, #0x1 - movne r0, #0x0 - strne r0, [r1, r2, lsl #0x2] - ldr r0, _020E2EA4 ; =__cs_ref - ldr r1, [r0, #0x1c] - subs r1, r1, #0x1 - str r1, [r0, #0x1c] - bne _020E2E5C - ldr r0, _020E2E98 ; =__cs + 0xA8 - bl OS_UnlockMutex -_020E2E5C: - cmp r4, #0x1 - beq _020E2E70 - cmp r4, #0x0 - cmpeq r5, #0x1 - bne _020E2E78 -_020E2E70: - mov r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E2E78: - cmp r4, #0x0 - bne _020E2E88 - mov r0, #0x0 - bl exit -_020E2E88: - mov r0, r5 - blx r4 - mov r0, #0x0 - ldmia sp!, {r3-r5,pc} - .balign 4 -_020E2E98: .word __cs + 0xA8 -_020E2E9C: .word OSi_ThreadInfo -_020E2EA0: .word __cs_id -_020E2EA4: .word __cs_ref -_020E2EA8: .word signal_funcs - arm_func_end raise - - exception raise, 305, 0x00200300 + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global signal_funcs +signal_funcs: ; 0x021D74AC + .space 0x1c + .size signal_funcs,.-signal_funcs + + .text + + arm_func_start raise +raise: ; 0x020E2D7C + stmdb sp!, {r3-r5,lr} + mov r5, r0 + cmp r5, #0x1 + blt _020E2D94 + cmp r5, #0x7 + ble _020E2D9C +_020E2D94: + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2D9C: + ldr r0, _020E2E98 ; =__cs + 0xA8 + bl OS_TryLockMutex + cmp r0, #0x0 + bne _020E2DD0 + ldr r0, _020E2E9C ; =OSi_ThreadInfo + ldr r1, _020E2EA0 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] + b _020E2E28 +_020E2DD0: + ldr r0, _020E2E9C ; =OSi_ThreadInfo + ldr r1, _020E2EA0 ; =__cs_id + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x1c] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E2E00 + ldr r0, _020E2EA4 ; =__cs_ref + ldr r1, [r0, #0x1c] + add r1, r1, #0x1 + str r1, [r0, #0x1c] + b _020E2E28 +_020E2E00: + ldr r0, _020E2E98 ; =__cs + 0xA8 + bl OS_LockMutex + ldr r0, _020E2E9C ; =OSi_ThreadInfo + ldr r1, _020E2EA0 ; =__cs_id + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =__cs_ref + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] +_020E2E28: + ldr r1, _020E2EA8 ; =signal_funcs + sub r2, r5, #0x1 + ldr r4, [r1, r2, lsl #0x2] + cmp r4, #0x1 + movne r0, #0x0 + strne r0, [r1, r2, lsl #0x2] + ldr r0, _020E2EA4 ; =__cs_ref + ldr r1, [r0, #0x1c] + subs r1, r1, #0x1 + str r1, [r0, #0x1c] + bne _020E2E5C + ldr r0, _020E2E98 ; =__cs + 0xA8 + bl OS_UnlockMutex +_020E2E5C: + cmp r4, #0x1 + beq _020E2E70 + cmp r4, #0x0 + cmpeq r5, #0x1 + bne _020E2E78 +_020E2E70: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2E78: + cmp r4, #0x0 + bne _020E2E88 + mov r0, #0x0 + bl exit +_020E2E88: + mov r0, r5 + blx r4 + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E2E98: .word __cs + 0xA8 +_020E2E9C: .word OSi_ThreadInfo +_020E2EA0: .word __cs_id +_020E2EA4: .word __cs_ref +_020E2EA8: .word signal_funcs + arm_func_end raise + + exception raise, 305, 0x00200300 diff --git a/arm9/asm/MSL_Common_string.s b/arm9/asm/MSL_Common_string.s index d8371d057..0ec02fd2d 100644 --- a/arm9/asm/MSL_Common_string.s +++ b/arm9/asm/MSL_Common_string.s @@ -1,364 +1,364 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start strlen -strlen: ; 0x020E2EAC - mvn r2, #0x0 -_020E2EB0: - ldrsb r1, [r0], #0x1 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E2EB0 - mov r0, r2 - bx lr - arm_func_end strlen - - arm_func_start strcpy -strcpy: ; 0x020E2EC8 - stmdb sp!, {r3-r5,lr} - and r4, r1, #0x3 - and r3, r0, #0x3 - mov r2, r0 - cmp r3, r4 - bne _020E2F64 - cmp r4, #0x0 - beq _020E2F20 - ldrb r3, [r1, #0x0] - strb r3, [r0, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} - rsbs r4, r4, #0x3 - beq _020E2F18 -_020E2F00: - ldrb r3, [r1, #0x1]! - cmp r3, #0x0 - strb r3, [r2, #0x1]! - ldmeqia sp!, {r3-r5,pc} - subs r4, r4, #0x1 - bne _020E2F00 -_020E2F18: - add r2, r2, #0x1 - add r1, r1, #0x1 -_020E2F20: - ldr r5, [r1, #0x0] - ldr r3, _020E2F88 ; =0xFEFEFEFF - mvn r4, r5 - add lr, r5, r3 - ldr ip, _020E2F8C ; =0x80808080 - and r4, lr, r4 - tst r4, r12 - bne _020E2F64 - sub r2, r2, #0x4 -_020E2F44: - str r5, [r2, #0x4]! - ldr r5, [r1, #0x4]! - add r4, r5, r3 - mvn lr, r5 - and lr, r4, lr - tst lr, r12 - beq _020E2F44 - add r2, r2, #0x4 -_020E2F64: - ldrb r3, [r1, #0x0] - strb r3, [r2, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2F74: - ldrb r3, [r1, #0x1]! - cmp r3, #0x0 - strb r3, [r2, #0x1]! - bne _020E2F74 - ldmia sp!, {r3-r5,pc} - .balign 4 -_020E2F88: .word 0xFEFEFEFF -_020E2F8C: .word 0x80808080 - arm_func_end strcpy - - arm_func_start strncpy -strncpy: ; 0x020E2F90 - stmdb sp!, {r3,lr} - mov lr, r0 - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E2FA0: - ldrsb r3, [r1], #0x1 - mov r12, lr - strb r3, [lr], #0x1 - ldrsb r3, [r12, #0x0] - cmp r3, #0x0 - bne _020E2FD4 - subs r2, r2, #0x1 - ldmeqia sp!, {r3,pc} - mov r1, #0x0 -_020E2FC4: - strb r1, [lr], #0x1 - subs r2, r2, #0x1 - bne _020E2FC4 - ldmia sp!, {r3,pc} -_020E2FD4: - subs r2, r2, #0x1 - bne _020E2FA0 - ldmia sp!, {r3,pc} - arm_func_end strncpy - - arm_func_start strcat -strcat: ; 0x020E2FE0 - mov r3, r0 -_020E2FE4: - ldrsb r2, [r3], #0x1 - cmp r2, #0x0 - bne _020E2FE4 - sub r3, r3, #0x1 -_020E2FF4: - ldrsb r2, [r1], #0x1 - mov r12, r3 - strb r2, [r3], #0x1 - ldrsb r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E2FF4 - bx lr - arm_func_end strcat - - arm_func_start strncat -strncat: ; 0x020E3010 - stmdb sp!, {r3,lr} - mov r12, r0 -_020E3018: - ldrsb r3, [r12], #0x1 - cmp r3, #0x0 - bne _020E3018 - cmp r2, #0x0 - sub r12, r12, #0x1 - beq _020E3054 -_020E3030: - ldrsb r3, [r1], #0x1 - mov lr, r12 - strb r3, [r12], #0x1 - ldrsb r3, [lr, #0x0] - cmp r3, #0x0 - subeq r12, r12, #0x1 - beq _020E3054 - subs r2, r2, #0x1 - bne _020E3030 -_020E3054: - mov r1, #0x0 - strb r1, [r12, #0x0] - ldmia sp!, {r3,pc} - arm_func_end strncat - - arm_func_start strcmp -strcmp: ; 0x020E3060 - stmdb sp!, {r4,lr} - ldrb r2, [r0, #0x0] - ldrb r3, [r1, #0x0] - subs r3, r2, r3 - movne r0, r3 - ldmneia sp!, {r4,pc} - and r4, r0, #0x3 - and r3, r1, #0x3 - cmp r3, r4 - bne _020E313C - cmp r4, #0x0 - beq _020E30D4 - cmp r2, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - rsbs r4, r4, #0x3 - beq _020E30CC -_020E30A4: - ldrb r3, [r0, #0x1]! - ldrb r2, [r1, #0x1]! - subs r2, r3, r2 - movne r0, r2 - ldmneia sp!, {r4,pc} - cmp r3, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - subs r4, r4, #0x1 - bne _020E30A4 -_020E30CC: - add r0, r0, #0x1 - add r1, r1, #0x1 -_020E30D4: - ldr r2, [r0, #0x0] - ldr r3, _020E316C ; =0xFEFEFEFF - mvn r4, r2 - add lr, r2, r3 - ldr ip, _020E3170 ; =0x80808080 - and r4, lr, r4 - tst r4, r12 - ldr r4, [r1, #0x0] - bne _020E3128 - cmp r2, r4 - bne _020E311C -_020E3100: - ldr r2, [r0, #0x4]! - ldr r4, [r1, #0x4]! - add lr, r2, r3 - tst lr, r12 - bne _020E3128 - cmp r2, r4 - beq _020E3100 -_020E311C: - sub r0, r0, #0x1 - sub r1, r1, #0x1 - b _020E313C -_020E3128: - ldrb r2, [r0, #0x0] - ldrb r3, [r1, #0x0] - subs r3, r2, r3 - movne r0, r3 - ldmneia sp!, {r4,pc} -_020E313C: - cmp r2, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} -_020E3148: - ldrb r3, [r0, #0x1]! - ldrb r2, [r1, #0x1]! - subs r2, r3, r2 - movne r0, r2 - ldmneia sp!, {r4,pc} - cmp r3, #0x0 - bne _020E3148 - mov r0, #0x0 - ldmia sp!, {r4,pc} - .balign 4 -_020E316C: .word 0xFEFEFEFF -_020E3170: .word 0x80808080 - arm_func_end strcmp - - arm_func_start strncmp -strncmp: ; 0x020E3174 - cmp r2, #0x0 - beq _020E31A0 -_020E317C: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r3, r12 - subne r0, r3, r12 - bxne lr - cmp r3, #0x0 - beq _020E31A0 - subs r2, r2, #0x1 - bne _020E317C -_020E31A0: - mov r0, #0x0 - bx lr - arm_func_end strncmp - - arm_func_start strchr -strchr: ; 0x020E31A8 - ldrsb r2, [r0], #0x1 - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - cmp r2, #0x0 - beq _020E31D4 -_020E31BC: - cmp r2, r1 - subeq r0, r0, #0x1 - bxeq lr - ldrsb r2, [r0], #0x1 - cmp r2, #0x0 - bne _020E31BC -_020E31D4: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x1 - bx lr - arm_func_end strchr - - arm_func_start strspn -strspn: ; 0x020E31E4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x20 - add r12, sp, #0x0 - mov r3, #0x8 - mov r2, #0x0 -_020E31F8: - strb r2, [r12, #0x0] - strb r2, [r12, #0x1] - strb r2, [r12, #0x2] - strb r2, [r12, #0x3] - add r12, r12, #0x4 - subs r3, r3, #0x1 - bne _020E31F8 - ldrb r3, [r1, #0x0] - add r4, r1, #0x1 - cmp r3, #0x0 - beq _020E3254 - add lr, sp, #0x0 - mov r2, #0x1 -_020E322C: - and r12, r3, #0xff - and r1, r3, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [lr, r12, asr #0x3] - and r1, r1, #0xff - orr r1, r3, r1 - strb r1, [lr, r12, asr #0x3] - ldrb r3, [r4], #0x1 - cmp r3, #0x0 - bne _020E322C -_020E3254: - ldrb r1, [r0, #0x0] - add r4, r0, #0x1 - cmp r1, #0x0 - beq _020E3294 - add r12, sp, #0x0 - mov r2, #0x1 -_020E326C: - and r3, r1, #0xff - and r1, r1, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [r12, r3, asr #0x3] - and r1, r1, #0xff - tst r3, r1 - bne _020E3294 - ldrb r1, [r4], #0x1 - cmp r1, #0x0 - bne _020E326C -_020E3294: - sub r0, r4, r0 - sub r0, r0, #0x1 - add sp, sp, #0x20 - ldmia sp!, {r4,pc} - arm_func_end strspn - - arm_func_start strstr -strstr: ; 0x020E32A4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - ldrneb r2, [r1, #0x0] - cmpne r2, #0x0 - ldmeqia sp!, {r4,pc} - ldrb r3, [r0, #0x0] - add r4, r0, #0x1 - cmp r3, #0x0 - beq _020E3308 -_020E32C8: - cmp r3, r2 - bne _020E32FC - mov lr, r4 - add r12, r1, #0x1 -_020E32D8: - ldrb r3, [r12], #0x1 - ldrb r0, [lr], #0x1 - cmp r0, r3 - bne _020E32F0 - cmp r0, #0x0 - bne _020E32D8 -_020E32F0: - cmp r3, #0x0 - subeq r0, r4, #0x1 - ldmeqia sp!, {r4,pc} -_020E32FC: - ldrb r3, [r4], #0x1 - cmp r3, #0x0 - bne _020E32C8 -_020E3308: - mov r0, #0x0 - ldmia sp!, {r4,pc} - arm_func_end strstr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start strlen +strlen: ; 0x020E2EAC + mvn r2, #0x0 +_020E2EB0: + ldrsb r1, [r0], #0x1 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E2EB0 + mov r0, r2 + bx lr + arm_func_end strlen + + arm_func_start strcpy +strcpy: ; 0x020E2EC8 + stmdb sp!, {r3-r5,lr} + and r4, r1, #0x3 + and r3, r0, #0x3 + mov r2, r0 + cmp r3, r4 + bne _020E2F64 + cmp r4, #0x0 + beq _020E2F20 + ldrb r3, [r1, #0x0] + strb r3, [r0, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} + rsbs r4, r4, #0x3 + beq _020E2F18 +_020E2F00: + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + ldmeqia sp!, {r3-r5,pc} + subs r4, r4, #0x1 + bne _020E2F00 +_020E2F18: + add r2, r2, #0x1 + add r1, r1, #0x1 +_020E2F20: + ldr r5, [r1, #0x0] + ldr r3, _020E2F88 ; =0xFEFEFEFF + mvn r4, r5 + add lr, r5, r3 + ldr ip, _020E2F8C ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + bne _020E2F64 + sub r2, r2, #0x4 +_020E2F44: + str r5, [r2, #0x4]! + ldr r5, [r1, #0x4]! + add r4, r5, r3 + mvn lr, r5 + and lr, r4, lr + tst lr, r12 + beq _020E2F44 + add r2, r2, #0x4 +_020E2F64: + ldrb r3, [r1, #0x0] + strb r3, [r2, #0x0] + cmp r3, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020E2F74: + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + bne _020E2F74 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E2F88: .word 0xFEFEFEFF +_020E2F8C: .word 0x80808080 + arm_func_end strcpy + + arm_func_start strncpy +strncpy: ; 0x020E2F90 + stmdb sp!, {r3,lr} + mov lr, r0 + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} +_020E2FA0: + ldrsb r3, [r1], #0x1 + mov r12, lr + strb r3, [lr], #0x1 + ldrsb r3, [r12, #0x0] + cmp r3, #0x0 + bne _020E2FD4 + subs r2, r2, #0x1 + ldmeqia sp!, {r3,pc} + mov r1, #0x0 +_020E2FC4: + strb r1, [lr], #0x1 + subs r2, r2, #0x1 + bne _020E2FC4 + ldmia sp!, {r3,pc} +_020E2FD4: + subs r2, r2, #0x1 + bne _020E2FA0 + ldmia sp!, {r3,pc} + arm_func_end strncpy + + arm_func_start strcat +strcat: ; 0x020E2FE0 + mov r3, r0 +_020E2FE4: + ldrsb r2, [r3], #0x1 + cmp r2, #0x0 + bne _020E2FE4 + sub r3, r3, #0x1 +_020E2FF4: + ldrsb r2, [r1], #0x1 + mov r12, r3 + strb r2, [r3], #0x1 + ldrsb r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E2FF4 + bx lr + arm_func_end strcat + + arm_func_start strncat +strncat: ; 0x020E3010 + stmdb sp!, {r3,lr} + mov r12, r0 +_020E3018: + ldrsb r3, [r12], #0x1 + cmp r3, #0x0 + bne _020E3018 + cmp r2, #0x0 + sub r12, r12, #0x1 + beq _020E3054 +_020E3030: + ldrsb r3, [r1], #0x1 + mov lr, r12 + strb r3, [r12], #0x1 + ldrsb r3, [lr, #0x0] + cmp r3, #0x0 + subeq r12, r12, #0x1 + beq _020E3054 + subs r2, r2, #0x1 + bne _020E3030 +_020E3054: + mov r1, #0x0 + strb r1, [r12, #0x0] + ldmia sp!, {r3,pc} + arm_func_end strncat + + arm_func_start strcmp +strcmp: ; 0x020E3060 + stmdb sp!, {r4,lr} + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} + and r4, r0, #0x3 + and r3, r1, #0x3 + cmp r3, r4 + bne _020E313C + cmp r4, #0x0 + beq _020E30D4 + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + rsbs r4, r4, #0x3 + beq _020E30CC +_020E30A4: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} + cmp r3, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + subs r4, r4, #0x1 + bne _020E30A4 +_020E30CC: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020E30D4: + ldr r2, [r0, #0x0] + ldr r3, _020E316C ; =0xFEFEFEFF + mvn r4, r2 + add lr, r2, r3 + ldr ip, _020E3170 ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + ldr r4, [r1, #0x0] + bne _020E3128 + cmp r2, r4 + bne _020E311C +_020E3100: + ldr r2, [r0, #0x4]! + ldr r4, [r1, #0x4]! + add lr, r2, r3 + tst lr, r12 + bne _020E3128 + cmp r2, r4 + beq _020E3100 +_020E311C: + sub r0, r0, #0x1 + sub r1, r1, #0x1 + b _020E313C +_020E3128: + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E313C: + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E3148: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} + cmp r3, #0x0 + bne _020E3148 + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020E316C: .word 0xFEFEFEFF +_020E3170: .word 0x80808080 + arm_func_end strcmp + + arm_func_start strncmp +strncmp: ; 0x020E3174 + cmp r2, #0x0 + beq _020E31A0 +_020E317C: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r3, r12 + subne r0, r3, r12 + bxne lr + cmp r3, #0x0 + beq _020E31A0 + subs r2, r2, #0x1 + bne _020E317C +_020E31A0: + mov r0, #0x0 + bx lr + arm_func_end strncmp + + arm_func_start strchr +strchr: ; 0x020E31A8 + ldrsb r2, [r0], #0x1 + mov r1, r1, lsl #0x18 + mov r1, r1, asr #0x18 + cmp r2, #0x0 + beq _020E31D4 +_020E31BC: + cmp r2, r1 + subeq r0, r0, #0x1 + bxeq lr + ldrsb r2, [r0], #0x1 + cmp r2, #0x0 + bne _020E31BC +_020E31D4: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x1 + bx lr + arm_func_end strchr + + arm_func_start strspn +strspn: ; 0x020E31E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x20 + add r12, sp, #0x0 + mov r3, #0x8 + mov r2, #0x0 +_020E31F8: + strb r2, [r12, #0x0] + strb r2, [r12, #0x1] + strb r2, [r12, #0x2] + strb r2, [r12, #0x3] + add r12, r12, #0x4 + subs r3, r3, #0x1 + bne _020E31F8 + ldrb r3, [r1, #0x0] + add r4, r1, #0x1 + cmp r3, #0x0 + beq _020E3254 + add lr, sp, #0x0 + mov r2, #0x1 +_020E322C: + and r12, r3, #0xff + and r1, r3, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [lr, r12, asr #0x3] + and r1, r1, #0xff + orr r1, r3, r1 + strb r1, [lr, r12, asr #0x3] + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E322C +_020E3254: + ldrb r1, [r0, #0x0] + add r4, r0, #0x1 + cmp r1, #0x0 + beq _020E3294 + add r12, sp, #0x0 + mov r2, #0x1 +_020E326C: + and r3, r1, #0xff + and r1, r1, #0x7 + mov r1, r2, lsl r1 + ldrb r3, [r12, r3, asr #0x3] + and r1, r1, #0xff + tst r3, r1 + bne _020E3294 + ldrb r1, [r4], #0x1 + cmp r1, #0x0 + bne _020E326C +_020E3294: + sub r0, r4, r0 + sub r0, r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4,pc} + arm_func_end strspn + + arm_func_start strstr +strstr: ; 0x020E32A4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + ldrneb r2, [r1, #0x0] + cmpne r2, #0x0 + ldmeqia sp!, {r4,pc} + ldrb r3, [r0, #0x0] + add r4, r0, #0x1 + cmp r3, #0x0 + beq _020E3308 +_020E32C8: + cmp r3, r2 + bne _020E32FC + mov lr, r4 + add r12, r1, #0x1 +_020E32D8: + ldrb r3, [r12], #0x1 + ldrb r0, [lr], #0x1 + cmp r0, r3 + bne _020E32F0 + cmp r0, #0x0 + bne _020E32D8 +_020E32F0: + cmp r3, #0x0 + subeq r0, r4, #0x1 + ldmeqia sp!, {r4,pc} +_020E32FC: + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E32C8 +_020E3308: + mov r0, #0x0 + ldmia sp!, {r4,pc} + arm_func_end strstr diff --git a/arm9/asm/MSL_Common_strtold.s b/arm9/asm/MSL_Common_strtold.s index 2cb0918ba..3eb30fed8 100644 --- a/arm9/asm/MSL_Common_strtold.s +++ b/arm9/asm/MSL_Common_strtold.s @@ -1,1428 +1,1428 @@ - .include "asm/macros.inc" - .include "global.inc" - - .rodata - -model$4434: ; 0x02104434 - .asciz "NAN(" - .size model$4434,.-model$4434 - -model$4439: ; 0x02104439 - .asciz "INFINITY" - .size model$4439,.-model$4439 - - .text - - arm_func_start __strtold -__strtold: ; 0x020E3310 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0xa8 - ldr r4, [sp, #0xd0] - mov r10, #0x0 - str r4, [sp, #0xd0] - str r0, [sp, #0x0] - add r6, sp, #0x80 - mov r9, r1 - mov r8, r2 - str r3, [sp, #0x4] - mov r4, r10 - str r10, [sp, #0x2c] - mov r5, #0x1 - mov r0, #0x4 -_020E3348: - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - strh r10, [r6, #0x4] - strh r10, [r6, #0x6] - add r6, r6, #0x8 - subs r0, r0, #0x1 - bne _020E3348 - mov r0, #0x0 - str r0, [sp, #0x28] - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - ldr r2, [sp, #0x28] - ldr r1, [sp, #0xd0] - strh r10, [r6, #0x4] - str r2, [r1, #0x0] - mov r1, r2 - mov r0, r8 - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x1c] - str r1, [sp, #0x18] - str r1, [sp, #0x10] - str r1, [sp, #0xc] - str r1, [sp, #0x8] - add r4, r4, #0x1 - blx r9 - mov r1, r0 - ldr r7, _020E42F0 ; =model$4439 - add r0, sp, #0x4d - mov r6, #0x4 -_020E33C0: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E33C0 - ldrb r3, [r7, #0x0] - ldr r2, _020E42F4 ; =model$4434 - strb r3, [r0, #0x0] - ldrb r3, [r2, #0x1] - ldrb r0, [r2, #0x2] - ldrb r6, [r2, #0x0] - strb r3, [sp, #0x31] - strb r0, [sp, #0x32] - ldrb r3, [r2, #0x3] - ldrb r0, [r2, #0x4] - strb r6, [sp, #0x30] - strb r3, [sp, #0x33] - strb r0, [sp, #0x34] - b _020E4104 -_020E3418: - cmp r5, #0x100 - bgt _020E3490 - bge _020E3B98 - cmp r5, #0x20 - bgt _020E3474 - bge _020E3A6C - cmp r5, #0x8 - bgt _020E3468 - cmp r5, #0x0 - addge pc, pc, r5, lsl #0x2 - b _020E4104 - b _020E4104 ; case 0 - b _020E34D4 ; case 1 - b _020E38B8 ; case 2 - b _020E4104 ; case 3 - b _020E3968 ; case 4 - b _020E4104 ; case 5 - b _020E4104 ; case 6 - b _020E4104 ; case 7 - b _020E3990 ; case 8 -_020E3468: - cmp r5, #0x10 - beq _020E3A34 - b _020E4104 -_020E3474: - cmp r5, #0x40 - bgt _020E3484 - beq _020E3AF8 - b _020E4104 -_020E3484: - cmp r5, #0x80 - beq _020E3B44 - b _020E4104 -_020E3490: - cmp r5, #0x2000 - bgt _020E34B8 - bge _020E36EC - cmp r5, #0x200 - bgt _020E34AC - beq _020E3BF8 - b _020E4104 -_020E34AC: - cmp r5, #0x400 - beq _020E3C20 - b _020E4104 -_020E34B8: - cmp r5, #0x4000 - bgt _020E34C8 - beq _020E35F4 - b _020E4104 -_020E34C8: - cmp r5, #0x8000 - beq _020E3C98 - b _020E4104 -_020E34D4: - cmp r1, #0x0 - blt _020E34E4 - cmp r1, #0x80 - blt _020E34EC -_020E34E4: - mov r0, #0x0 - b _020E34FC -_020E34EC: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x100 -_020E34FC: - cmp r0, #0x0 - beq _020E3528 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r1, r0 - ldr r0, [sp, #0x2c] - add r0, r0, #0x1 - str r0, [sp, #0x2c] - b _020E4104 -_020E3528: - cmp r1, #0x0 - blt _020E3538 - cmp r1, #0x80 - blt _020E3540 -_020E3538: - mov r0, r1 - b _020E3548 -_020E3540: - ldr r0, _020E42FC ; =__upper_mapC - ldrb r0, [r0, r1] -_020E3548: - cmp r0, #0x49 - bgt _020E3574 - bge _020E35AC - cmp r0, #0x2d - bgt _020E35EC - cmp r0, #0x2b - blt _020E35EC - beq _020E3588 - cmp r0, #0x2d - beq _020E3580 - b _020E35EC -_020E3574: - cmp r0, #0x4e - beq _020E35CC - b _020E35EC -_020E3580: - mov r0, #0x1 - str r0, [sp, #0x28] -_020E3588: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - mov r0, #0x1 - str r0, [sp, #0x18] - b _020E4104 -_020E35AC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - mov r5, #0x4000 - b _020E4104 -_020E35CC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - mov r5, #0x2000 - b _020E4104 -_020E35EC: - mov r5, #0x2 - b _020E4104 -_020E35F4: - mov r5, #0x1 - add r7, sp, #0x4d - add r0, sp, #0x76 - mov r6, #0x4 -_020E3604: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E3604 - ldrb r2, [r7, #0x0] - add r6, sp, #0x77 - ldr r7, _020E42FC ; =__upper_mapC - strb r2, [r0, #0x0] - b _020E3658 -_020E3638: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3658: - cmp r5, #0x8 - bge _020E3688 - cmp r1, #0x0 - blt _020E3670 - cmp r1, #0x80 - blt _020E3678 -_020E3670: - mov r2, r1 - b _020E367C -_020E3678: - ldrb r2, [r7, r1] -_020E367C: - ldrsb r0, [r6, #0x0] - cmp r0, r2 - beq _020E3638 -_020E3688: - cmp r5, #0x3 - cmpne r5, #0x8 - bne _020E36E4 - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E36B8 - ldr r1, _020E4300 ; =__float_huge - mov r0, #0x0 - ldr r1, [r1, #0x0] - bl _fsub - bl _f2d - b _020E36C4 -_020E36B8: - ldr r0, _020E4300 ; =__float_huge - ldr r0, [r0, #0x0] - bl _f2d -_020E36C4: - ldr r2, [sp, #0x2c] - add r3, r2, r5 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E36E4: - mov r5, #0x1000 - b _020E4104 -_020E36EC: - ldrb r3, [sp, #0x30] - ldrb r0, [sp, #0x32] - ldrb r2, [sp, #0x31] - strb r3, [sp, #0x40] - strb r0, [sp, #0x42] - ldrb r3, [sp, #0x33] - ldrb r0, [sp, #0x34] - strb r2, [sp, #0x41] - mov r5, #0x1 - strb r0, [sp, #0x44] - mov r6, #0x0 - add r2, sp, #0x56 - strb r3, [sp, #0x43] - mov r0, #0x8 -_020E3724: - strb r6, [r2, #0x0] - strb r6, [r2, #0x1] - strb r6, [r2, #0x2] - strb r6, [r2, #0x3] - add r2, r2, #0x4 - subs r0, r0, #0x1 - bne _020E3724 - add r7, sp, #0x41 - b _020E3768 -_020E3748: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r7, r7, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3768: - cmp r5, #0x4 - bge _020E379C - cmp r1, #0x0 - blt _020E3780 - cmp r1, #0x80 - blt _020E3788 -_020E3780: - mov r2, r1 - b _020E3790 -_020E3788: - ldr r0, _020E42FC ; =__upper_mapC - ldrb r2, [r0, r1] -_020E3790: - ldrsb r0, [r7, #0x0] - cmp r0, r2 - beq _020E3748 -_020E379C: - sub r0, r5, #0x3 - cmp r0, #0x1 - bhi _020E38B0 - cmp r5, #0x4 - bne _020E3854 - ldr r7, _020E42F8 ; =__msl_digit - b _020E37DC -_020E37B8: - add r0, sp, #0x56 - strb r1, [r0, r6] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E37DC: - cmp r6, #0x20 - bge _020E3844 - cmp r1, #0x0 - blt _020E37F4 - cmp r1, #0x80 - blt _020E37FC -_020E37F4: - mov r0, #0x0 - b _020E3808 -_020E37FC: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x8 -_020E3808: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x0 - blt _020E3820 - cmp r1, #0x80 - blt _020E3828 -_020E3820: - mov r0, #0x0 - b _020E3834 -_020E3828: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x1 -_020E3834: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x2e - beq _020E37B8 -_020E3844: - cmp r1, #0x29 - movne r5, #0x1000 - bne _020E4104 - add r6, r6, #0x1 -_020E3854: - add r0, sp, #0x56 - mov r1, #0x0 - strb r1, [r0, r6] - ldr r1, [sp, #0x28] - cmp r1, #0x0 - beq _020E3888 - bl nan - mov r2, r0 - mov r0, #0x0 - mov r3, r1 - mov r1, r0 - bl _dsub - b _020E388C -_020E3888: - bl nan -_020E388C: - ldr r2, [sp, #0x2c] - add r2, r2, r5 - add r3, r6, r2 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E38B0: - mov r5, #0x1000 - b _020E4104 -_020E38B8: - cmp r1, #0x2e - bne _020E38E0 - mov r5, #0x10 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E38E0: - cmp r1, #0x0 - blt _020E38F0 - cmp r1, #0x80 - blt _020E38F8 -_020E38F0: - mov r0, #0x0 - b _020E3908 -_020E38F8: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3908: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - bne _020E3960 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - cmp r0, #0x0 - mov r1, r0 - blt _020E394C - cmp r0, #0x80 - bge _020E394C - ldr r2, _020E42FC ; =__upper_mapC - ldrb r0, [r2, r0] -_020E394C: - cmp r0, #0x58 - moveq r5, #0x8000 - moveq r10, #0x1 - movne r5, #0x4 - b _020E4104 -_020E3960: - mov r5, #0x8 - b _020E4104 -_020E3968: - cmp r1, #0x30 - movne r5, #0x8 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3990: - cmp r1, #0x0 - blt _020E39A0 - cmp r1, #0x80 - blt _020E39A8 -_020E39A0: - mov r0, #0x0 - b _020E39B8 -_020E39A8: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E39B8: - cmp r0, #0x0 - bne _020E39EC - cmp r1, #0x2e - movne r5, #0x40 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x20 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E39EC: - ldrb r2, [sp, #0x84] - cmp r2, #0x14 - ldrcs r0, [sp, #0x1c] - addcs r0, r0, #0x1 - strcs r0, [sp, #0x1c] - bhs _020E3A18 - add r0, r2, #0x1 - strb r0, [sp, #0x84] - add r0, sp, #0x80 - add r0, r0, r2 - strb r1, [r0, #0x5] -_020E3A18: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3A34: - cmp r1, #0x0 - blt _020E3A44 - cmp r1, #0x80 - blt _020E3A4C -_020E3A44: - mov r0, #0x0 - b _020E3A5C -_020E3A4C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A5C: - cmp r0, #0x0 - moveq r5, #0x1000 - movne r5, #0x20 - b _020E4104 -_020E3A6C: - cmp r1, #0x0 - blt _020E3A7C - cmp r1, #0x80 - blt _020E3A84 -_020E3A7C: - mov r0, #0x0 - b _020E3A94 -_020E3A84: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A94: - cmp r0, #0x0 - moveq r5, #0x40 - beq _020E4104 - ldrb r3, [sp, #0x84] - cmp r3, #0x14 - bhs _020E3ADC - cmp r1, #0x30 - cmpeq r3, #0x0 - beq _020E3AD0 - ldrb r2, [sp, #0x84] - add r0, sp, #0x80 - add r0, r0, r3 - add r2, r2, #0x1 - strb r2, [sp, #0x84] - strb r1, [r0, #0x5] -_020E3AD0: - ldr r0, [sp, #0x1c] - sub r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E3ADC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3AF8: - cmp r1, #0x0 - blt _020E3B08 - cmp r1, #0x80 - blt _020E3B10 -_020E3B08: - mov r0, r1 - b _020E3B18 -_020E3B10: - ldr r0, _020E42FC ; =__upper_mapC - ldrb r0, [r0, r1] -_020E3B18: - cmp r0, #0x45 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3B44: - cmp r1, #0x2b - bne _020E3B68 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E3B90 -_020E3B68: - cmp r1, #0x2d - bne _020E3B90 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - mov r0, #0x1 - str r0, [sp, #0x24] -_020E3B90: - mov r5, #0x100 - b _020E4104 -_020E3B98: - cmp r1, #0x0 - blt _020E3BA8 - cmp r1, #0x80 - blt _020E3BB0 -_020E3BA8: - mov r0, #0x0 - b _020E3BC0 -_020E3BB0: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3BC0: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x200 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3BF8: - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C20: - cmp r1, #0x0 - blt _020E3C30 - cmp r1, #0x80 - blt _020E3C38 -_020E3C30: - mov r0, #0x0 - b _020E3C48 -_020E3C38: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3C48: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x20] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - ldr r1, _020E4304 ; =0x00007FFF - str r0, [sp, #0x20] - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C98: - cmp r10, #0x20 - bgt _020E3CE8 - bge _020E3FBC - cmp r10, #0x8 - bgt _020E3CDC - cmp r10, #0x0 - addge pc, pc, r10, lsl #0x2 - b _020E4104 - b _020E4104 ; case 0 - b _020E3D0C ; case 1 - b _020E3D5C ; case 2 - b _020E4104 ; case 3 - b _020E3D84 ; case 4 - b _020E4104 ; case 5 - b _020E4104 ; case 6 - b _020E4104 ; case 7 - b _020E3E94 ; case 8 -_020E3CDC: - cmp r10, #0x10 - beq _020E3F70 - b _020E4104 -_020E3CE8: - cmp r10, #0x80 - bgt _020E3D00 - bge _020E4064 - cmp r10, #0x40 - beq _020E4004 - b _020E4104 -_020E3D00: - cmp r10, #0x100 - beq _020E408C - b _020E4104 -_020E3D0C: - mov r1, #0x0 - add r0, sp, #0x45 - str r0, [sp, #0x14] - strb r1, [r0, #0x0] - strb r1, [r0, #0x1] - strb r1, [r0, #0x2] - strb r1, [r0, #0x3] - strb r1, [r0, #0x4] - strb r1, [r0, #0x5] - strb r1, [r0, #0x6] - strb r1, [r0, #0x7] - mov r0, r8 - mov r2, r1 - str r1, [sp, #0x8] - mov r11, r1 - mov r10, #0x2 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3D5C: - cmp r1, #0x30 - movne r10, #0x4 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3D84: - cmp r1, #0x0 - blt _020E3D94 - cmp r1, #0x80 - blt _020E3D9C -_020E3D94: - mov r0, #0x0 - b _020E3DAC -_020E3D9C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x400 -_020E3DAC: - cmp r0, #0x0 - bne _020E3DE0 - cmp r1, #0x2e - movne r10, #0x10 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x8 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3DE0: - ldr r2, [sp, #0x8] - mov r0, #0xe - cmp r2, r0 - bhs _020E3E78 - mov r0, r2 - add r0, r0, #0x1 - str r0, [sp, #0x8] - ldr r0, [sp, #0x14] - add r2, r11, r11, lsr #0x1f - cmp r1, #0x0 - ldrb r0, [r0, r2, asr #0x1] - blt _020E3E20 - cmp r1, #0x80 - bge _020E3E20 - ldr r2, _020E42FC ; =__upper_mapC - ldrb r1, [r2, r1] -_020E3E20: - cmp r1, #0x41 - subge r1, r1, #0x37 - sublt r1, r1, #0x30 - mov r2, r11, lsr #0x1f - and r3, r1, #0xff - rsb r1, r2, r11, lsl #0x1f - adds r1, r2, r1, ror #0x1f - moveq r1, r3, lsl #0x4 - add r2, r11, r11, lsr #0x1f - orrne r0, r0, r3 - andeq r1, r1, #0xff - orreq r0, r0, r1 - ldr r1, [sp, #0x14] - add r11, r11, #0x1 - strb r0, [r1, r2, asr #0x1] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3E78: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3E94: - cmp r1, #0x0 - blt _020E3EA4 - cmp r1, #0x80 - blt _020E3EAC -_020E3EA4: - mov r0, #0x0 - b _020E3EBC -_020E3EAC: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x400 -_020E3EBC: - cmp r0, #0x0 - moveq r10, #0x10 - beq _020E4104 - ldr r2, [sp, #0x8] - mov r0, #0xe - cmp r2, r0 - bhs _020E3F54 - ldr r0, [sp, #0x14] - add r2, r11, r11, lsr #0x1f - cmp r1, #0x0 - ldrb r0, [r0, r2, asr #0x1] - blt _020E3EFC - cmp r1, #0x80 - bge _020E3EFC - ldr r2, _020E42FC ; =__upper_mapC - ldrb r1, [r2, r1] -_020E3EFC: - cmp r1, #0x41 - subge r1, r1, #0x37 - sublt r1, r1, #0x30 - mov r2, r11, lsr #0x1f - and r3, r1, #0xff - rsb r1, r2, r11, lsl #0x1f - adds r1, r2, r1, ror #0x1f - moveq r1, r3, lsl #0x4 - add r2, r11, r11, lsr #0x1f - orrne r0, r0, r3 - andeq r1, r1, #0xff - orreq r0, r0, r1 - ldr r1, [sp, #0x14] - add r11, r11, #0x1 - strb r0, [r1, r2, asr #0x1] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3F54: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3F70: - cmp r1, #0x0 - blt _020E3F80 - cmp r1, #0x80 - blt _020E3F88 -_020E3F80: - mov r0, r1 - b _020E3F90 -_020E3F88: - ldr r0, _020E42FC ; =__upper_mapC - ldrb r0, [r0, r1] -_020E3F90: - cmp r0, #0x50 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x20 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3FBC: - cmp r1, #0x2d - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E3FE4 - cmp r1, #0x2b - beq _020E3FE4 - mov r0, r8 - mov r2, #0x1 - blx r9 - sub r4, r4, #0x1 -_020E3FE4: - mov r10, #0x40 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4004: - cmp r1, #0x0 - blt _020E4014 - cmp r1, #0x80 - blt _020E401C -_020E4014: - mov r0, #0x0 - b _020E402C -_020E401C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E402C: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4064: - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E408C: - cmp r1, #0x0 - blt _020E409C - cmp r1, #0x80 - blt _020E40A4 -_020E409C: - mov r0, #0x0 - b _020E40B4 -_020E40A4: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =__msl_digit - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E40B4: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x10] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - str r0, [sp, #0x10] - ldr r1, _020E4304 ; =0x00007FFF - ldr r0, [sp, #0x20] - add r4, r4, #0x1 - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r1, r0 -_020E4104: - ldr r0, [sp, #0x0] - cmp r4, r0 - bgt _020E4124 - mvn r0, #0x0 - cmp r1, r0 - beq _020E4124 - tst r5, #0x1800 - beq _020E3418 -_020E4124: - cmp r5, #0x8000 - beq _020E4140 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - moveq r0, #0x1 - movne r0, #0x0 - b _020E4164 -_020E4140: - sub r0, r4, #0x1 - cmp r0, #0x2 - ble _020E4158 - ldr r0, _020E430C ; =0x0000018E - tst r10, r0 - bne _020E4160 -_020E4158: - mov r0, #0x1 - b _020E4164 -_020E4160: - mov r0, #0x0 -_020E4164: - cmp r0, #0x0 - movne r2, #0x0 - ldrne r0, [sp, #0x4] - bne _020E4184 - ldr r0, [sp, #0x2c] - sub r2, r4, #0x1 - add r2, r2, r0 - ldr r0, [sp, #0x4] -_020E4184: - str r2, [r0, #0x0] - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - bne _020E4388 - ldr r0, [sp, #0x24] - ldrb r2, [sp, #0x84] - cmp r0, #0x0 - ldrne r0, [sp, #0x20] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x20] - add r0, sp, #0x85 - add r1, r0, r2 - b _020E41CC -_020E41C0: - ldr r0, [sp, #0x1c] - add r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E41CC: - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020E41E4 - ldrb r0, [r1, #-0x1]! - cmp r0, #0x30 - beq _020E41C0 -_020E41E4: - add r0, r2, #0x1 - strb r0, [sp, #0x84] - ands r2, r0, #0xff - bne _020E4208 - add r1, r2, #0x1 - strb r1, [sp, #0x84] - add r0, sp, #0x85 - mov r1, #0x30 - strb r1, [r0, r2] -_020E4208: - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x1c] - mov r2, #0x8000 - add r0, r1, r0 - rsb r2, r2, #0x0 - str r0, [sp, #0x20] - cmp r0, r2 - blt _020E4230 - cmp r0, r2, lsr #0x11 - ble _020E423C -_020E4230: - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E423C: - ldr r0, [sp, #0xd0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020E4298 - ldr r0, [sp, #0x24] - cmp r0, #0x0 - movne r0, #0x0 - addne sp, sp, #0xa8 - movne r1, r0 - ldmneia sp!, {r3-r11,pc} - ldr r0, [sp, #0x28] - cmp r0, #0x0 - ldreq r1, _020E4310 ; =__double_huge - addeq sp, sp, #0xa8 - ldmeqia r1, {r0-r1} - ldmeqia sp!, {r3-r11,pc} - ldr r1, _020E4310 ; =__double_huge - mov r0, #0x0 - ldmia r1, {r2-r3} - mov r1, r0 - bl _dsub - add sp, sp, #0xa8 - ldmia sp!, {r3-r11,pc} -_020E4298: - ldr r1, [sp, #0x20] - add r0, sp, #0x80 - strh r1, [sp, #0x82] - bl __dec2num - mov r4, r0 - mov r6, r1 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dneq - beq _020E4318 - mov r0, r4 - mov r1, r6 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - bhs _020E4318 - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] - b _020E4344 - .balign 4 -_020E42F0: .word model$4439 -_020E42F4: .word model$4434 -_020E42F8: .word __msl_digit -_020E42FC: .word __upper_mapC -_020E4300: .word __float_huge -_020E4304: .word 0x00007FFF -_020E4308: .word 0x00000E2C -_020E430C: .word 0x0000018E -_020E4310: .word __double_huge -_020E4314: .word 0x7FEFFFFF -_020E4318: - ldr r3, _020E4314 ; =0x7FEFFFFF - mov r0, r4 - mov r1, r6 - mvn r2, #0x0 - bl _dgr - bls _020E4344 - ldr r0, [sp, #0xd0] - mov r2, #0x1 - ldr r1, _020E4310 ; =__double_huge - str r2, [r0, #0x0] - ldmia r1, {r4,r6} -_020E4344: - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E4378 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - beq _020E4378 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dsub - mov r4, r0 - mov r6, r1 -_020E4378: - add sp, sp, #0xa8 - mov r0, r4 - mov r1, r6 - ldmia sp!, {r3-r11,pc} -_020E4388: - ldr r0, [sp, #0xc] - add r4, sp, #0x38 - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - ldrb r3, [sp, #0x45] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x10] - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x8] - mov r2, #0x0 - add r0, r1, r0, lsl #0x2 - str r0, [sp, #0x10] - mov r1, #0x80 - b _020E43D0 -_020E43C0: - ldr r0, [sp, #0x10] - add r2, r2, #0x1 - sub r0, r0, #0x1 - str r0, [sp, #0x10] -_020E43D0: - cmp r2, #0x4 - bhs _020E43E0 - tst r3, r1, asr r2 - beq _020E43C0 -_020E43E0: - adds r5, r2, #0x1 - beq _020E442C - add r0, sp, #0x4c - add r3, sp, #0x45 - str r0, [sp, #0x14] - mov r1, #0x0 - cmp r0, r3 - blo _020E442C - rsb r6, r5, #0x8 -_020E4404: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x0] - orr r2, r1, r0, lsl r5 - mov r1, r0, asr r6 - ldr r0, [sp, #0x14] - and r1, r1, #0xff - strb r2, [r0], #-0x1 - str r0, [sp, #0x14] - cmp r0, r3 - bhs _020E4404 -_020E442C: - mov r2, #0x0 - mov r6, r2 - strb r2, [r4, #0x0] - strb r2, [r4, #0x1] - strb r2, [r4, #0x2] - strb r2, [r4, #0x3] - strb r2, [r4, #0x4] - strb r2, [r4, #0x5] - strb r2, [r4, #0x6] - strb r2, [r4, #0x7] - mov r3, #0xc - mov r7, #0x1 - mov r0, #0xff - add r1, sp, #0x45 -_020E4464: - add r5, r2, #0x8 - cmp r5, #0x34 - ldrb r5, [r1, r6] - rsbhi r8, r2, #0x34 - and r11, r3, #0x7 - andhi r5, r5, r0, lsl r8 - andhi r5, r5, #0xff - mov r8, r5, asr r11 - and r9, r8, #0xff - ldrb r10, [r4, r7] - rsb r8, r11, #0x8 - mov r5, r5, lsl r8 - orr r9, r10, r9 - strb r9, [r4, r7] - add r7, r7, #0x1 - add r2, r2, #0x8 - ldrb r8, [r4, r7] - and r5, r5, #0xff - cmp r2, #0x34 - orr r5, r8, r5 - strb r5, [r4, r7] - add r3, r3, #0x8 - add r6, r6, #0x1 - blo _020E4464 - ldr r0, [sp, #0x10] - mov r1, #0x800 - add r0, r0, #0xfe - add r2, r0, #0x300 - rsb r1, r1, #0x0 - tst r2, r1 - beq _020E44FC - ldr r2, [sp, #0xd0] - mov r3, #0x1 - mov r0, #0x0 - add sp, sp, #0xa8 - mov r1, r0 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E44FC: - ldrb r0, [r4, #0x1] - mov r2, r2, lsl #0x15 - ldrb r1, [r4, #0x0] - orr r0, r0, r2, lsr #0x11 - strb r0, [r4, #0x1] - ldr r0, [sp, #0x28] - orr r1, r1, r2, lsr #0x19 - cmp r0, #0x0 - andne r0, r1, #0xff - strb r1, [r4, #0x0] - orrne r0, r0, #0x80 - strneb r0, [r4, #0x0] - mov r3, #0x0 -_020E4530: - rsb r1, r3, #0x7 - ldrb r2, [r4, r3] - ldrb r0, [r4, r1] - strb r0, [r4, r3] - add r3, r3, #0x1 - strb r2, [r4, r1] - cmp r3, #0x4 - blt _020E4530 - ldmia r4, {r0-r1} - add sp, sp, #0xa8 - ldmia sp!, {r3-r11,pc} - arm_func_end __strtold - - arm_func_start strtold -strtold: ; 0x020E455C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r7, r0 - mov r0, #0x0 - mov r6, r1 - str r0, [sp, #0x8] - add r4, sp, #0xc - str r7, [sp, #0x4] - ldr r1, _020E4630 ; =__StringRead - add r2, sp, #0x4 - add r3, sp, #0x10 - sub r0, r0, #0x80000001 - str r4, [sp, #0x0] - bl __strtold - mov r5, r1 - mov r4, r0 - cmp r6, #0x0 - ldrne r0, [sp, #0x10] - mov r1, r5 - addne r0, r7, r0 - strne r0, [r6, #0x0] - mov r0, r4 - bl fabs - ldr r2, [sp, #0xc] - mov r6, r0 - mov r7, r1 - cmp r2, #0x0 - bne _020E4614 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r5 - bl _dneq - beq _020E4620 - mov r0, r6 - mov r1, r7 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - blo _020E4614 - ldr r3, _020E4634 ; =0x7FEFFFFF - mov r0, r6 - mov r1, r7 - mvn r2, #0x0 - bl _dgr - bls _020E4620 -_020E4614: - ldr r0, _020E4638 ; =errno - mov r1, #0x22 - str r1, [r0, #0x0] -_020E4620: - mov r0, r4 - mov r1, r5 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020E4630: .word __StringRead -_020E4634: .word 0x7FEFFFFF -_020E4638: .word errno - arm_func_end strtold - - arm_func_start atod -atod: ; 0x020E463C - ldr ip, _020E4648 ; =strtold - mov r1, #0x0 - bx r12 - .balign 4 -_020E4648: .word strtold - arm_func_end atod - - exception __strtold, 4684, UNK_020EC720 - exception strtold, 225, 0x00500F00 - exception atod, 17, 0x00000000 - - .section .exception,8 - -UNK_020EC720: ; 0x020EC720 - .byte 0x00, 0xFF, 0x01, 0xD0 - .balign 8 + .include "asm/macros.inc" + .include "global.inc" + + .rodata + +model$4434: ; 0x02104434 + .asciz "NAN(" + .size model$4434,.-model$4434 + +model$4439: ; 0x02104439 + .asciz "INFINITY" + .size model$4439,.-model$4439 + + .text + + arm_func_start __strtold +__strtold: ; 0x020E3310 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0xa8 + ldr r4, [sp, #0xd0] + mov r10, #0x0 + str r4, [sp, #0xd0] + str r0, [sp, #0x0] + add r6, sp, #0x80 + mov r9, r1 + mov r8, r2 + str r3, [sp, #0x4] + mov r4, r10 + str r10, [sp, #0x2c] + mov r5, #0x1 + mov r0, #0x4 +_020E3348: + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + strh r10, [r6, #0x4] + strh r10, [r6, #0x6] + add r6, r6, #0x8 + subs r0, r0, #0x1 + bne _020E3348 + mov r0, #0x0 + str r0, [sp, #0x28] + strh r10, [r6, #0x0] + strh r10, [r6, #0x2] + ldr r2, [sp, #0x28] + ldr r1, [sp, #0xd0] + strh r10, [r6, #0x4] + str r2, [r1, #0x0] + mov r1, r2 + mov r0, r8 + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x1c] + str r1, [sp, #0x18] + str r1, [sp, #0x10] + str r1, [sp, #0xc] + str r1, [sp, #0x8] + add r4, r4, #0x1 + blx r9 + mov r1, r0 + ldr r7, _020E42F0 ; =model$4439 + add r0, sp, #0x4d + mov r6, #0x4 +_020E33C0: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E33C0 + ldrb r3, [r7, #0x0] + ldr r2, _020E42F4 ; =model$4434 + strb r3, [r0, #0x0] + ldrb r3, [r2, #0x1] + ldrb r0, [r2, #0x2] + ldrb r6, [r2, #0x0] + strb r3, [sp, #0x31] + strb r0, [sp, #0x32] + ldrb r3, [r2, #0x3] + ldrb r0, [r2, #0x4] + strb r6, [sp, #0x30] + strb r3, [sp, #0x33] + strb r0, [sp, #0x34] + b _020E4104 +_020E3418: + cmp r5, #0x100 + bgt _020E3490 + bge _020E3B98 + cmp r5, #0x20 + bgt _020E3474 + bge _020E3A6C + cmp r5, #0x8 + bgt _020E3468 + cmp r5, #0x0 + addge pc, pc, r5, lsl #0x2 + b _020E4104 + b _020E4104 ; case 0 + b _020E34D4 ; case 1 + b _020E38B8 ; case 2 + b _020E4104 ; case 3 + b _020E3968 ; case 4 + b _020E4104 ; case 5 + b _020E4104 ; case 6 + b _020E4104 ; case 7 + b _020E3990 ; case 8 +_020E3468: + cmp r5, #0x10 + beq _020E3A34 + b _020E4104 +_020E3474: + cmp r5, #0x40 + bgt _020E3484 + beq _020E3AF8 + b _020E4104 +_020E3484: + cmp r5, #0x80 + beq _020E3B44 + b _020E4104 +_020E3490: + cmp r5, #0x2000 + bgt _020E34B8 + bge _020E36EC + cmp r5, #0x200 + bgt _020E34AC + beq _020E3BF8 + b _020E4104 +_020E34AC: + cmp r5, #0x400 + beq _020E3C20 + b _020E4104 +_020E34B8: + cmp r5, #0x4000 + bgt _020E34C8 + beq _020E35F4 + b _020E4104 +_020E34C8: + cmp r5, #0x8000 + beq _020E3C98 + b _020E4104 +_020E34D4: + cmp r1, #0x0 + blt _020E34E4 + cmp r1, #0x80 + blt _020E34EC +_020E34E4: + mov r0, #0x0 + b _020E34FC +_020E34EC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E34FC: + cmp r0, #0x0 + beq _020E3528 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 + ldr r0, [sp, #0x2c] + add r0, r0, #0x1 + str r0, [sp, #0x2c] + b _020E4104 +_020E3528: + cmp r1, #0x0 + blt _020E3538 + cmp r1, #0x80 + blt _020E3540 +_020E3538: + mov r0, r1 + b _020E3548 +_020E3540: + ldr r0, _020E42FC ; =__upper_mapC + ldrb r0, [r0, r1] +_020E3548: + cmp r0, #0x49 + bgt _020E3574 + bge _020E35AC + cmp r0, #0x2d + bgt _020E35EC + cmp r0, #0x2b + blt _020E35EC + beq _020E3588 + cmp r0, #0x2d + beq _020E3580 + b _020E35EC +_020E3574: + cmp r0, #0x4e + beq _020E35CC + b _020E35EC +_020E3580: + mov r0, #0x1 + str r0, [sp, #0x28] +_020E3588: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x18] + b _020E4104 +_020E35AC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x4000 + b _020E4104 +_020E35CC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x2000 + b _020E4104 +_020E35EC: + mov r5, #0x2 + b _020E4104 +_020E35F4: + mov r5, #0x1 + add r7, sp, #0x4d + add r0, sp, #0x76 + mov r6, #0x4 +_020E3604: + ldrb r3, [r7, #0x0] + ldrb r2, [r7, #0x1] + add r7, r7, #0x2 + strb r3, [r0, #0x0] + strb r2, [r0, #0x1] + add r0, r0, #0x2 + subs r6, r6, #0x1 + bne _020E3604 + ldrb r2, [r7, #0x0] + add r6, sp, #0x77 + ldr r7, _020E42FC ; =__upper_mapC + strb r2, [r0, #0x0] + b _020E3658 +_020E3638: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3658: + cmp r5, #0x8 + bge _020E3688 + cmp r1, #0x0 + blt _020E3670 + cmp r1, #0x80 + blt _020E3678 +_020E3670: + mov r2, r1 + b _020E367C +_020E3678: + ldrb r2, [r7, r1] +_020E367C: + ldrsb r0, [r6, #0x0] + cmp r0, r2 + beq _020E3638 +_020E3688: + cmp r5, #0x3 + cmpne r5, #0x8 + bne _020E36E4 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E36B8 + ldr r1, _020E4300 ; =__float_huge + mov r0, #0x0 + ldr r1, [r1, #0x0] + bl _fsub + bl _f2d + b _020E36C4 +_020E36B8: + ldr r0, _020E4300 ; =__float_huge + ldr r0, [r0, #0x0] + bl _f2d +_020E36C4: + ldr r2, [sp, #0x2c] + add r3, r2, r5 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E36E4: + mov r5, #0x1000 + b _020E4104 +_020E36EC: + ldrb r3, [sp, #0x30] + ldrb r0, [sp, #0x32] + ldrb r2, [sp, #0x31] + strb r3, [sp, #0x40] + strb r0, [sp, #0x42] + ldrb r3, [sp, #0x33] + ldrb r0, [sp, #0x34] + strb r2, [sp, #0x41] + mov r5, #0x1 + strb r0, [sp, #0x44] + mov r6, #0x0 + add r2, sp, #0x56 + strb r3, [sp, #0x43] + mov r0, #0x8 +_020E3724: + strb r6, [r2, #0x0] + strb r6, [r2, #0x1] + strb r6, [r2, #0x2] + strb r6, [r2, #0x3] + add r2, r2, #0x4 + subs r0, r0, #0x1 + bne _020E3724 + add r7, sp, #0x41 + b _020E3768 +_020E3748: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r7, r7, #0x1 + add r5, r5, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E3768: + cmp r5, #0x4 + bge _020E379C + cmp r1, #0x0 + blt _020E3780 + cmp r1, #0x80 + blt _020E3788 +_020E3780: + mov r2, r1 + b _020E3790 +_020E3788: + ldr r0, _020E42FC ; =__upper_mapC + ldrb r2, [r0, r1] +_020E3790: + ldrsb r0, [r7, #0x0] + cmp r0, r2 + beq _020E3748 +_020E379C: + sub r0, r5, #0x3 + cmp r0, #0x1 + bhi _020E38B0 + cmp r5, #0x4 + bne _020E3854 + ldr r7, _020E42F8 ; =__msl_digit + b _020E37DC +_020E37B8: + add r0, sp, #0x56 + strb r1, [r0, r6] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r6, r6, #0x1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 +_020E37DC: + cmp r6, #0x20 + bge _020E3844 + cmp r1, #0x0 + blt _020E37F4 + cmp r1, #0x80 + blt _020E37FC +_020E37F4: + mov r0, #0x0 + b _020E3808 +_020E37FC: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x8 +_020E3808: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x0 + blt _020E3820 + cmp r1, #0x80 + blt _020E3828 +_020E3820: + mov r0, #0x0 + b _020E3834 +_020E3828: + mov r0, r1, lsl #0x1 + ldrh r0, [r7, r0] + and r0, r0, #0x1 +_020E3834: + cmp r0, #0x0 + bne _020E37B8 + cmp r1, #0x2e + beq _020E37B8 +_020E3844: + cmp r1, #0x29 + movne r5, #0x1000 + bne _020E4104 + add r6, r6, #0x1 +_020E3854: + add r0, sp, #0x56 + mov r1, #0x0 + strb r1, [r0, r6] + ldr r1, [sp, #0x28] + cmp r1, #0x0 + beq _020E3888 + bl nan + mov r2, r0 + mov r0, #0x0 + mov r3, r1 + mov r1, r0 + bl _dsub + b _020E388C +_020E3888: + bl nan +_020E388C: + ldr r2, [sp, #0x2c] + add r2, r2, r5 + add r3, r6, r2 + ldr r2, [sp, #0x18] + add r3, r2, r3 + ldr r2, [sp, #0x4] + add sp, sp, #0xa8 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E38B0: + mov r5, #0x1000 + b _020E4104 +_020E38B8: + cmp r1, #0x2e + bne _020E38E0 + mov r5, #0x10 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E38E0: + cmp r1, #0x0 + blt _020E38F0 + cmp r1, #0x80 + blt _020E38F8 +_020E38F0: + mov r0, #0x0 + b _020E3908 +_020E38F8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3908: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + bne _020E3960 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + cmp r0, #0x0 + mov r1, r0 + blt _020E394C + cmp r0, #0x80 + bge _020E394C + ldr r2, _020E42FC ; =__upper_mapC + ldrb r0, [r2, r0] +_020E394C: + cmp r0, #0x58 + moveq r5, #0x8000 + moveq r10, #0x1 + movne r5, #0x4 + b _020E4104 +_020E3960: + mov r5, #0x8 + b _020E4104 +_020E3968: + cmp r1, #0x30 + movne r5, #0x8 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3990: + cmp r1, #0x0 + blt _020E39A0 + cmp r1, #0x80 + blt _020E39A8 +_020E39A0: + mov r0, #0x0 + b _020E39B8 +_020E39A8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E39B8: + cmp r0, #0x0 + bne _020E39EC + cmp r1, #0x2e + movne r5, #0x40 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E39EC: + ldrb r2, [sp, #0x84] + cmp r2, #0x14 + ldrcs r0, [sp, #0x1c] + addcs r0, r0, #0x1 + strcs r0, [sp, #0x1c] + bhs _020E3A18 + add r0, r2, #0x1 + strb r0, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r2 + strb r1, [r0, #0x5] +_020E3A18: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3A34: + cmp r1, #0x0 + blt _020E3A44 + cmp r1, #0x80 + blt _020E3A4C +_020E3A44: + mov r0, #0x0 + b _020E3A5C +_020E3A4C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A5C: + cmp r0, #0x0 + moveq r5, #0x1000 + movne r5, #0x20 + b _020E4104 +_020E3A6C: + cmp r1, #0x0 + blt _020E3A7C + cmp r1, #0x80 + blt _020E3A84 +_020E3A7C: + mov r0, #0x0 + b _020E3A94 +_020E3A84: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3A94: + cmp r0, #0x0 + moveq r5, #0x40 + beq _020E4104 + ldrb r3, [sp, #0x84] + cmp r3, #0x14 + bhs _020E3ADC + cmp r1, #0x30 + cmpeq r3, #0x0 + beq _020E3AD0 + ldrb r2, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r3 + add r2, r2, #0x1 + strb r2, [sp, #0x84] + strb r1, [r0, #0x5] +_020E3AD0: + ldr r0, [sp, #0x1c] + sub r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E3ADC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3AF8: + cmp r1, #0x0 + blt _020E3B08 + cmp r1, #0x80 + blt _020E3B10 +_020E3B08: + mov r0, r1 + b _020E3B18 +_020E3B10: + ldr r0, _020E42FC ; =__upper_mapC + ldrb r0, [r0, r1] +_020E3B18: + cmp r0, #0x45 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3B44: + cmp r1, #0x2b + bne _020E3B68 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E3B90 +_020E3B68: + cmp r1, #0x2d + bne _020E3B90 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x24] +_020E3B90: + mov r5, #0x100 + b _020E4104 +_020E3B98: + cmp r1, #0x0 + blt _020E3BA8 + cmp r1, #0x80 + blt _020E3BB0 +_020E3BA8: + mov r0, #0x0 + b _020E3BC0 +_020E3BB0: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3BC0: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x200 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3BF8: + cmp r1, #0x30 + movne r5, #0x400 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C20: + cmp r1, #0x0 + blt _020E3C30 + cmp r1, #0x80 + blt _020E3C38 +_020E3C30: + mov r0, #0x0 + b _020E3C48 +_020E3C38: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3C48: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x20] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + ldr r1, _020E4304 ; =0x00007FFF + str r0, [sp, #0x20] + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3C98: + cmp r10, #0x20 + bgt _020E3CE8 + bge _020E3FBC + cmp r10, #0x8 + bgt _020E3CDC + cmp r10, #0x0 + addge pc, pc, r10, lsl #0x2 + b _020E4104 + b _020E4104 ; case 0 + b _020E3D0C ; case 1 + b _020E3D5C ; case 2 + b _020E4104 ; case 3 + b _020E3D84 ; case 4 + b _020E4104 ; case 5 + b _020E4104 ; case 6 + b _020E4104 ; case 7 + b _020E3E94 ; case 8 +_020E3CDC: + cmp r10, #0x10 + beq _020E3F70 + b _020E4104 +_020E3CE8: + cmp r10, #0x80 + bgt _020E3D00 + bge _020E4064 + cmp r10, #0x40 + beq _020E4004 + b _020E4104 +_020E3D00: + cmp r10, #0x100 + beq _020E408C + b _020E4104 +_020E3D0C: + mov r1, #0x0 + add r0, sp, #0x45 + str r0, [sp, #0x14] + strb r1, [r0, #0x0] + strb r1, [r0, #0x1] + strb r1, [r0, #0x2] + strb r1, [r0, #0x3] + strb r1, [r0, #0x4] + strb r1, [r0, #0x5] + strb r1, [r0, #0x6] + strb r1, [r0, #0x7] + mov r0, r8 + mov r2, r1 + str r1, [sp, #0x8] + mov r11, r1 + mov r10, #0x2 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D5C: + cmp r1, #0x30 + movne r10, #0x4 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D84: + cmp r1, #0x0 + blt _020E3D94 + cmp r1, #0x80 + blt _020E3D9C +_020E3D94: + mov r0, #0x0 + b _020E3DAC +_020E3D9C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3DAC: + cmp r0, #0x0 + bne _020E3DE0 + cmp r1, #0x2e + movne r10, #0x10 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x8 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3DE0: + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3E78 + mov r0, r2 + add r0, r0, #0x1 + str r0, [sp, #0x8] + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3E20 + cmp r1, #0x80 + bge _020E3E20 + ldr r2, _020E42FC ; =__upper_mapC + ldrb r1, [r2, r1] +_020E3E20: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E78: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E94: + cmp r1, #0x0 + blt _020E3EA4 + cmp r1, #0x80 + blt _020E3EAC +_020E3EA4: + mov r0, #0x0 + b _020E3EBC +_020E3EAC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3EBC: + cmp r0, #0x0 + moveq r10, #0x10 + beq _020E4104 + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3F54 + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3EFC + cmp r1, #0x80 + bge _020E3EFC + ldr r2, _020E42FC ; =__upper_mapC + ldrb r1, [r2, r1] +_020E3EFC: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3F54: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3F70: + cmp r1, #0x0 + blt _020E3F80 + cmp r1, #0x80 + blt _020E3F88 +_020E3F80: + mov r0, r1 + b _020E3F90 +_020E3F88: + ldr r0, _020E42FC ; =__upper_mapC + ldrb r0, [r0, r1] +_020E3F90: + cmp r0, #0x50 + movne r5, #0x800 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3FBC: + cmp r1, #0x2d + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E3FE4 + cmp r1, #0x2b + beq _020E3FE4 + mov r0, r8 + mov r2, #0x1 + blx r9 + sub r4, r4, #0x1 +_020E3FE4: + mov r10, #0x40 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4004: + cmp r1, #0x0 + blt _020E4014 + cmp r1, #0x80 + blt _020E401C +_020E4014: + mov r0, #0x0 + b _020E402C +_020E401C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E402C: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x80 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E4064: + cmp r1, #0x30 + movne r10, #0x100 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E408C: + cmp r1, #0x0 + blt _020E409C + cmp r1, #0x80 + blt _020E40A4 +_020E409C: + mov r0, #0x0 + b _020E40B4 +_020E40A4: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =__msl_digit + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E40B4: + cmp r0, #0x0 + moveq r5, #0x800 + beq _020E4104 + ldr r0, [sp, #0x10] + sub r2, r1, #0x30 + mov r1, #0xa + mla r0, r1, r0, r2 + str r0, [sp, #0x10] + ldr r1, _020E4304 ; =0x00007FFF + ldr r0, [sp, #0x20] + add r4, r4, #0x1 + cmp r0, r1 + ldrgt r0, [sp, #0xd0] + movgt r1, #0x1 + strgt r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 +_020E4104: + ldr r0, [sp, #0x0] + cmp r4, r0 + bgt _020E4124 + mvn r0, #0x0 + cmp r1, r0 + beq _020E4124 + tst r5, #0x1800 + beq _020E3418 +_020E4124: + cmp r5, #0x8000 + beq _020E4140 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + moveq r0, #0x1 + movne r0, #0x0 + b _020E4164 +_020E4140: + sub r0, r4, #0x1 + cmp r0, #0x2 + ble _020E4158 + ldr r0, _020E430C ; =0x0000018E + tst r10, r0 + bne _020E4160 +_020E4158: + mov r0, #0x1 + b _020E4164 +_020E4160: + mov r0, #0x0 +_020E4164: + cmp r0, #0x0 + movne r2, #0x0 + ldrne r0, [sp, #0x4] + bne _020E4184 + ldr r0, [sp, #0x2c] + sub r2, r4, #0x1 + add r2, r2, r0 + ldr r0, [sp, #0x4] +_020E4184: + str r2, [r0, #0x0] + mov r0, r8 + mov r2, #0x1 + blx r9 + cmp r10, #0x0 + bne _020E4388 + ldr r0, [sp, #0x24] + ldrb r2, [sp, #0x84] + cmp r0, #0x0 + ldrne r0, [sp, #0x20] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x20] + add r0, sp, #0x85 + add r1, r0, r2 + b _020E41CC +_020E41C0: + ldr r0, [sp, #0x1c] + add r0, r0, #0x1 + str r0, [sp, #0x1c] +_020E41CC: + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020E41E4 + ldrb r0, [r1, #-0x1]! + cmp r0, #0x30 + beq _020E41C0 +_020E41E4: + add r0, r2, #0x1 + strb r0, [sp, #0x84] + ands r2, r0, #0xff + bne _020E4208 + add r1, r2, #0x1 + strb r1, [sp, #0x84] + add r0, sp, #0x85 + mov r1, #0x30 + strb r1, [r0, r2] +_020E4208: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x1c] + mov r2, #0x8000 + add r0, r1, r0 + rsb r2, r2, #0x0 + str r0, [sp, #0x20] + cmp r0, r2 + blt _020E4230 + cmp r0, r2, lsr #0x11 + ble _020E423C +_020E4230: + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E423C: + ldr r0, [sp, #0xd0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020E4298 + ldr r0, [sp, #0x24] + cmp r0, #0x0 + movne r0, #0x0 + addne sp, sp, #0xa8 + movne r1, r0 + ldmneia sp!, {r3-r11,pc} + ldr r0, [sp, #0x28] + cmp r0, #0x0 + ldreq r1, _020E4310 ; =__double_huge + addeq sp, sp, #0xa8 + ldmeqia r1, {r0-r1} + ldmeqia sp!, {r3-r11,pc} + ldr r1, _020E4310 ; =__double_huge + mov r0, #0x0 + ldmia r1, {r2-r3} + mov r1, r0 + bl _dsub + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} +_020E4298: + ldr r1, [sp, #0x20] + add r0, sp, #0x80 + strh r1, [sp, #0x82] + bl __dec2num + mov r4, r0 + mov r6, r1 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dneq + beq _020E4318 + mov r0, r4 + mov r1, r6 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + bhs _020E4318 + ldr r0, [sp, #0xd0] + mov r1, #0x1 + str r1, [r0, #0x0] + b _020E4344 + .balign 4 +_020E42F0: .word model$4439 +_020E42F4: .word model$4434 +_020E42F8: .word __msl_digit +_020E42FC: .word __upper_mapC +_020E4300: .word __float_huge +_020E4304: .word 0x00007FFF +_020E4308: .word 0x00000E2C +_020E430C: .word 0x0000018E +_020E4310: .word __double_huge +_020E4314: .word 0x7FEFFFFF +_020E4318: + ldr r3, _020E4314 ; =0x7FEFFFFF + mov r0, r4 + mov r1, r6 + mvn r2, #0x0 + bl _dgr + bls _020E4344 + ldr r0, [sp, #0xd0] + mov r2, #0x1 + ldr r1, _020E4310 ; =__double_huge + str r2, [r0, #0x0] + ldmia r1, {r4,r6} +_020E4344: + ldr r0, [sp, #0x28] + cmp r0, #0x0 + beq _020E4378 + ldr r0, _020E4308 ; =0x00000E2C + tst r5, r0 + beq _020E4378 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r6 + bl _dsub + mov r4, r0 + mov r6, r1 +_020E4378: + add sp, sp, #0xa8 + mov r0, r4 + mov r1, r6 + ldmia sp!, {r3-r11,pc} +_020E4388: + ldr r0, [sp, #0xc] + add r4, sp, #0x38 + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + ldrb r3, [sp, #0x45] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x10] + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x8] + mov r2, #0x0 + add r0, r1, r0, lsl #0x2 + str r0, [sp, #0x10] + mov r1, #0x80 + b _020E43D0 +_020E43C0: + ldr r0, [sp, #0x10] + add r2, r2, #0x1 + sub r0, r0, #0x1 + str r0, [sp, #0x10] +_020E43D0: + cmp r2, #0x4 + bhs _020E43E0 + tst r3, r1, asr r2 + beq _020E43C0 +_020E43E0: + adds r5, r2, #0x1 + beq _020E442C + add r0, sp, #0x4c + add r3, sp, #0x45 + str r0, [sp, #0x14] + mov r1, #0x0 + cmp r0, r3 + blo _020E442C + rsb r6, r5, #0x8 +_020E4404: + ldr r0, [sp, #0x14] + ldrb r0, [r0, #0x0] + orr r2, r1, r0, lsl r5 + mov r1, r0, asr r6 + ldr r0, [sp, #0x14] + and r1, r1, #0xff + strb r2, [r0], #-0x1 + str r0, [sp, #0x14] + cmp r0, r3 + bhs _020E4404 +_020E442C: + mov r2, #0x0 + mov r6, r2 + strb r2, [r4, #0x0] + strb r2, [r4, #0x1] + strb r2, [r4, #0x2] + strb r2, [r4, #0x3] + strb r2, [r4, #0x4] + strb r2, [r4, #0x5] + strb r2, [r4, #0x6] + strb r2, [r4, #0x7] + mov r3, #0xc + mov r7, #0x1 + mov r0, #0xff + add r1, sp, #0x45 +_020E4464: + add r5, r2, #0x8 + cmp r5, #0x34 + ldrb r5, [r1, r6] + rsbhi r8, r2, #0x34 + and r11, r3, #0x7 + andhi r5, r5, r0, lsl r8 + andhi r5, r5, #0xff + mov r8, r5, asr r11 + and r9, r8, #0xff + ldrb r10, [r4, r7] + rsb r8, r11, #0x8 + mov r5, r5, lsl r8 + orr r9, r10, r9 + strb r9, [r4, r7] + add r7, r7, #0x1 + add r2, r2, #0x8 + ldrb r8, [r4, r7] + and r5, r5, #0xff + cmp r2, #0x34 + orr r5, r8, r5 + strb r5, [r4, r7] + add r3, r3, #0x8 + add r6, r6, #0x1 + blo _020E4464 + ldr r0, [sp, #0x10] + mov r1, #0x800 + add r0, r0, #0xfe + add r2, r0, #0x300 + rsb r1, r1, #0x0 + tst r2, r1 + beq _020E44FC + ldr r2, [sp, #0xd0] + mov r3, #0x1 + mov r0, #0x0 + add sp, sp, #0xa8 + mov r1, r0 + str r3, [r2, #0x0] + ldmia sp!, {r3-r11,pc} +_020E44FC: + ldrb r0, [r4, #0x1] + mov r2, r2, lsl #0x15 + ldrb r1, [r4, #0x0] + orr r0, r0, r2, lsr #0x11 + strb r0, [r4, #0x1] + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsr #0x19 + cmp r0, #0x0 + andne r0, r1, #0xff + strb r1, [r4, #0x0] + orrne r0, r0, #0x80 + strneb r0, [r4, #0x0] + mov r3, #0x0 +_020E4530: + rsb r1, r3, #0x7 + ldrb r2, [r4, r3] + ldrb r0, [r4, r1] + strb r0, [r4, r3] + add r3, r3, #0x1 + strb r2, [r4, r1] + cmp r3, #0x4 + blt _020E4530 + ldmia r4, {r0-r1} + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} + arm_func_end __strtold + + arm_func_start strtold +strtold: ; 0x020E455C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [sp, #0x8] + add r4, sp, #0xc + str r7, [sp, #0x4] + ldr r1, _020E4630 ; =__StringRead + add r2, sp, #0x4 + add r3, sp, #0x10 + sub r0, r0, #0x80000001 + str r4, [sp, #0x0] + bl __strtold + mov r5, r1 + mov r4, r0 + cmp r6, #0x0 + ldrne r0, [sp, #0x10] + mov r1, r5 + addne r0, r7, r0 + strne r0, [r6, #0x0] + mov r0, r4 + bl fabs + ldr r2, [sp, #0xc] + mov r6, r0 + mov r7, r1 + cmp r2, #0x0 + bne _020E4614 + mov r0, #0x0 + mov r1, r0 + mov r2, r4 + mov r3, r5 + bl _dneq + beq _020E4620 + mov r0, r6 + mov r1, r7 + mov r2, #0x0 + mov r3, #0x100000 + bl _dls + blo _020E4614 + ldr r3, _020E4634 ; =0x7FEFFFFF + mov r0, r6 + mov r1, r7 + mvn r2, #0x0 + bl _dgr + bls _020E4620 +_020E4614: + ldr r0, _020E4638 ; =errno + mov r1, #0x22 + str r1, [r0, #0x0] +_020E4620: + mov r0, r4 + mov r1, r5 + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020E4630: .word __StringRead +_020E4634: .word 0x7FEFFFFF +_020E4638: .word errno + arm_func_end strtold + + arm_func_start atod +atod: ; 0x020E463C + ldr ip, _020E4648 ; =strtold + mov r1, #0x0 + bx r12 + .balign 4 +_020E4648: .word strtold + arm_func_end atod + + exception __strtold, 4684, UNK_020EC720 + exception strtold, 225, 0x00500F00 + exception atod, 17, 0x00000000 + + .section .exception,8 + +UNK_020EC720: ; 0x020EC720 + .byte 0x00, 0xFF, 0x01, 0xD0 + .balign 8 diff --git a/arm9/asm/MSL_Common_strtoul.s b/arm9/asm/MSL_Common_strtoul.s index c49a74689..311f00e8e 100644 --- a/arm9/asm/MSL_Common_strtoul.s +++ b/arm9/asm/MSL_Common_strtoul.s @@ -1,731 +1,731 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start __strtoul -__strtoul: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x38] - movs r9, r0 - ldr r0, [sp, #0x34] - str r4, [sp, #0x38] - mov r4, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x38] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0x4] - ldr r0, [sp, #0x34] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x30] - str r4, [sp, #0x8] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - str r0, [sp, #0x30] - mov r4, #0x1 - bmi _020E46CC - cmp r9, #0x1 - beq _020E46CC - cmp r9, #0x24 - bgt _020E46CC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E46D4 -_020E46CC: - mov r4, #0x40 - b _020E46F0 -_020E46D4: - ldr r1, [sp, #0x8] - mov r0, r7 - mov r3, r1 - mov r2, r1 - add r5, r3, #0x1 - blx r8 - mov r6, r0 -_020E46F0: - cmp r9, #0x0 - beq _020E4708 - mov r1, r9 - mvn r0, #0x0 - bl _u32_div_f - str r0, [sp, #0x4] -_020E4708: - mvn r11, #0x0 - b _020E49C8 -_020E4710: - cmp r4, #0x8 - bgt _020E4748 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E49C8 - b _020E49C8 - b _020E4754 - b _020E4800 - b _020E49C8 - b _020E483C - b _020E49C8 - b _020E49C8 - b _020E49C8 - b _020E487C -_020E4748: - cmp r4, #0x10 - beq _020E487C - b _020E49C8 -_020E4754: - cmp r6, #0x0 - blt _020E4764 - cmp r6, #0x80 - blt _020E476C -_020E4764: - mov r0, #0x0 - b _020E477C -_020E476C: - ldr r0, _020E4A2C ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E477C: - cmp r0, #0x0 - beq _020E47A8 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - blx r8 - mov r6, r0 - ldr r0, [sp, #0x8] - add r0, r0, #0x1 - str r0, [sp, #0x8] - b _020E49C8 -_020E47A8: - cmp r6, #0x2b - bne _020E47CC - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E47F8 -_020E47CC: - cmp r6, #0x2d - bne _020E47F8 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - ldr r0, [sp, #0x34] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E47F8: - mov r4, #0x2 - b _020E49C8 -_020E4800: - cmp r9, #0x0 - cmpne r9, #0x10 - bne _020E4834 - cmp r6, #0x30 - bne _020E4834 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - mov r4, #0x4 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E49C8 -_020E4834: - mov r4, #0x8 - b _020E49C8 -_020E483C: - cmp r6, #0x58 - cmpne r6, #0x78 - bne _020E486C - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - mov r9, #0x10 - mov r4, #0x8 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E49C8 -_020E486C: - cmp r9, #0x0 - moveq r9, #0x8 - mov r4, #0x10 - b _020E49C8 -_020E487C: - ldr r0, [sp, #0x4] - cmp r9, #0x0 - moveq r9, #0xa - cmp r0, #0x0 - bne _020E48A0 - mov r0, r11 - mov r1, r9 - bl _u32_div_f - str r0, [sp, #0x4] -_020E48A0: - cmp r6, #0x0 - blt _020E48B0 - cmp r6, #0x80 - blt _020E48B8 -_020E48B0: - mov r0, #0x0 - b _020E48C8 -_020E48B8: - ldr r0, _020E4A2C ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E48C8: - cmp r0, #0x0 - beq _020E48F0 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4978 - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E49C8 -_020E48F0: - cmp r6, #0x0 - blt _020E4900 - cmp r6, #0x80 - blt _020E4908 -_020E4900: - mov r0, #0x0 - b _020E4918 -_020E4908: - ldr r0, _020E4A2C ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4918: - cmp r0, #0x0 - beq _020E494C - cmp r6, #0x0 - blt _020E4930 - cmp r6, #0x80 - blt _020E4938 -_020E4930: - mov r0, r6 - b _020E4940 -_020E4938: - ldr r0, _020E4A30 ; =__upper_mapC - ldrb r0, [r0, r6] -_020E4940: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E495C -_020E494C: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E49C8 -_020E495C: - cmp r6, #0x0 - blt _020E4974 - cmp r6, #0x80 - bge _020E4974 - ldr r0, _020E4A30 ; =__upper_mapC - ldrb r6, [r0, r6] -_020E4974: - sub r6, r6, #0x37 -_020E4978: - ldr r0, [sp, #0x4] - mov r4, #0x10 - cmp r10, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mul r0, r10, r9 - mov r10, r0 - sub r0, r11, r0 - cmp r6, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r10, r10, r6 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E49C8: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E49E4 - cmp r6, r11 - beq _020E49E4 - tst r4, #0x60 - beq _020E4710 -_020E49E4: - tst r4, #0x34 - bne _020E49FC - ldr r0, [sp, #0x30] - mov r10, #0x0 - str r10, [r0, #0x0] - b _020E4A10 -_020E49FC: - ldr r0, [sp, #0x8] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x30] - str r1, [r0, #0x0] -_020E4A10: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4A2C: .word __msl_digit -_020E4A30: .word __upper_mapC - arm_func_end __strtoul - - arm_func_start __strtoull -__strtoull: ; 0x020E4A34 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r4, [sp, #0x48] - movs r9, r0 - ldr r0, [sp, #0x44] - str r4, [sp, #0x48] - mov r4, #0x0 - str r0, [sp, #0x44] - ldr r0, [sp, #0x48] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0xc] - str r0, [sp, #0x8] - ldr r0, [sp, #0x44] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x40] - str r4, [sp, #0x14] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - mov r11, r4 - str r0, [sp, #0x40] - mov r4, #0x1 - bmi _020E4ABC - cmp r9, #0x1 - beq _020E4ABC - cmp r9, #0x24 - bgt _020E4ABC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E4AC4 -_020E4ABC: - mov r4, #0x40 - b _020E4ADC -_020E4AC4: - ldr r1, [sp, #0x14] - mov r0, r7 - mov r2, r1 - add r5, r1, #0x1 - blx r8 - mov r6, r0 -_020E4ADC: - cmp r9, #0x0 - beq _020E4B00 - mvn r0, #0x0 - mov r1, r0 - mov r3, r9, asr #0x1f - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4B00: - mvn r0, #0x0 - str r0, [sp, #0x18] - b _020E4E08 -_020E4B0C: - cmp r4, #0x8 - bgt _020E4B44 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E4E08 - b _020E4E08 - b _020E4B50 - b _020E4BFC - b _020E4E08 - b _020E4C38 - b _020E4E08 - b _020E4E08 - b _020E4E08 - b _020E4C78 -_020E4B44: - cmp r4, #0x10 - beq _020E4C78 - b _020E4E08 -_020E4B50: - cmp r6, #0x0 - blt _020E4B60 - cmp r6, #0x80 - blt _020E4B68 -_020E4B60: - mov r0, #0x0 - b _020E4B78 -_020E4B68: - ldr r0, _020E4E78 ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E4B78: - cmp r0, #0x0 - beq _020E4BA4 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - blx r8 - mov r6, r0 - ldr r0, [sp, #0x14] - add r0, r0, #0x1 - str r0, [sp, #0x14] - b _020E4E08 -_020E4BA4: - cmp r6, #0x2b - bne _020E4BC8 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E4BF4 -_020E4BC8: - cmp r6, #0x2d - bne _020E4BF4 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - ldr r0, [sp, #0x44] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E4BF4: - mov r4, #0x2 - b _020E4E08 -_020E4BFC: - cmp r9, #0x0 - cmpne r9, #0x10 - bne _020E4C30 - cmp r6, #0x30 - bne _020E4C30 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - mov r4, #0x4 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E4E08 -_020E4C30: - mov r4, #0x8 - b _020E4E08 -_020E4C38: - cmp r6, #0x58 - cmpne r6, #0x78 - bne _020E4C68 - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - mov r9, #0x10 - mov r4, #0x8 - add r5, r5, #0x1 - blx r8 - mov r6, r0 - b _020E4E08 -_020E4C68: - cmp r9, #0x0 - moveq r9, #0x8 - mov r4, #0x10 - b _020E4E08 -_020E4C78: - ldr r1, [sp, #0x8] - mov r0, #0x0 - cmp r9, #0x0 - moveq r9, #0xa - cmp r1, r0 - ldr r1, [sp, #0xc] - cmpeq r1, r0 - bne _020E4CB4 - ldr r0, [sp, #0x18] - mov r3, r9, asr #0x1f - mov r1, r0 - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4CB4: - cmp r6, #0x0 - blt _020E4CC4 - cmp r6, #0x80 - blt _020E4CCC -_020E4CC4: - mov r0, #0x0 - b _020E4CDC -_020E4CCC: - ldr r0, _020E4E78 ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E4CDC: - cmp r0, #0x0 - beq _020E4D04 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4D8C - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E4E08 -_020E4D04: - cmp r6, #0x0 - blt _020E4D14 - cmp r6, #0x80 - blt _020E4D1C -_020E4D14: - mov r0, #0x0 - b _020E4D2C -_020E4D1C: - ldr r0, _020E4E78 ; =__msl_digit - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4D2C: - cmp r0, #0x0 - beq _020E4D60 - cmp r6, #0x0 - blt _020E4D44 - cmp r6, #0x80 - blt _020E4D4C -_020E4D44: - mov r0, r6 - b _020E4D54 -_020E4D4C: - ldr r0, _020E4E7C ; =__upper_mapC - ldrb r0, [r0, r6] -_020E4D54: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E4D70 -_020E4D60: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E4E08 -_020E4D70: - cmp r6, #0x0 - blt _020E4D88 - cmp r6, #0x80 - bge _020E4D88 - ldr r0, _020E4E7C ; =__upper_mapC - ldrb r6, [r0, r6] -_020E4D88: - sub r6, r6, #0x37 -_020E4D8C: - ldr r0, [sp, #0x8] - umull r2, r3, r10, r9 - cmp r11, r0 - ldr r0, [sp, #0xc] - mov r4, #0x10 - cmpeq r10, r0 - ldrhi r0, [sp, #0x48] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, r9, asr #0x1f - mla r3, r10, r1, r3 - mla r3, r11, r9, r3 - ldr r1, [sp, #0x18] - mov r10, r2 - subs r2, r1, r2 - mov r0, r6, asr #0x1f - sbc r1, r1, r3 - cmp r0, r1 - cmpeq r6, r2 - ldrhi r1, [sp, #0x48] - movhi r2, #0x1 - strhi r2, [r1, #0x0] - mov r1, #0x0 - mov r11, r3 - adds r10, r10, r6 - adc r11, r11, r0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E4E08: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E4E28 - ldr r0, [sp, #0x18] - cmp r6, r0 - beq _020E4E28 - tst r4, #0x60 - beq _020E4B0C -_020E4E28: - tst r4, #0x34 - bne _020E4E44 - ldr r0, [sp, #0x40] - mov r10, #0x0 - mov r11, r10 - str r10, [r0, #0x0] - b _020E4E58 -_020E4E44: - ldr r0, [sp, #0x14] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x40] - str r1, [r0, #0x0] -_020E4E58: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - mov r1, r11 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4E78: .word __msl_digit -_020E4E7C: .word __upper_mapC - arm_func_end __strtoull - - arm_func_start strtoul -strtoul: ; 0x020E4E80 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4F10 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul - cmp r4, #0x0 - ldrne r1, [sp, #0x1c] - addne r1, r5, r1 - strne r1, [r4, #0x0] - ldr r1, [sp, #0x14] - cmp r1, #0x0 - beq _020E4EFC - ldr r0, _020E4F14 ; =errno - mov r1, #0x22 - str r1, [r0, #0x0] - add sp, sp, #0x20 - mvn r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E4EFC: - ldr r1, [sp, #0x18] - cmp r1, #0x0 - rsbne r0, r0, #0x0 - add sp, sp, #0x20 - ldmia sp!, {r3-r5,pc} - .balign 4 -_020E4F10: .word __StringRead -_020E4F14: .word errno - arm_func_end strtoul - - arm_func_start strtol -strtol: ; 0x020E4F18 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4FD8 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul - cmp r4, #0x0 - ldrne r1, [sp, #0x1c] - addne r1, r5, r1 - strne r1, [r4, #0x0] - ldr r1, [sp, #0x14] - cmp r1, #0x0 - bne _020E4FA4 - ldr r2, [sp, #0x18] - cmp r2, #0x0 - bne _020E4F94 - mvn r1, #0x80000000 - cmp r0, r1 - bhi _020E4FA4 -_020E4F94: - cmp r2, #0x0 - beq _020E4FC8 - cmp r0, #0x80000000 - bls _020E4FC8 -_020E4FA4: - ldr r0, [sp, #0x18] - ldr r1, _020E4FDC ; =errno - mov r2, #0x22 - cmp r0, #0x0 - movne r0, #0x80000000 - str r2, [r1, #0x0] - add sp, sp, #0x20 - mvneq r0, #0x80000000 - ldmia sp!, {r3-r5,pc} -_020E4FC8: - cmp r2, #0x0 - rsbne r0, r0, #0x0 - add sp, sp, #0x20 - ldmia sp!, {r3-r5,pc} - .balign 4 -_020E4FD8: .word __StringRead -_020E4FDC: .word errno - arm_func_end strtol - - arm_func_start atol -atol: ; 0x020E4FE0 - ldr ip, _020E4FF0 ; =strtol - mov r1, #0x0 - mov r2, #0xa - bx r12 - .balign 4 -_020E4FF0: .word strtol - arm_func_end atol - - exception __strtoul, 1001, 0x0060FF00 - exception __strtoull, 1101, 0x0080FF00 - exception strtoul, 153, 0x00600300 - exception strtol, 201, 0x00600300 - exception atol, 21, 0x00000000 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start __strtoul +__strtoul: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x38] + movs r9, r0 + ldr r0, [sp, #0x34] + str r4, [sp, #0x38] + mov r4, #0x0 + str r0, [sp, #0x34] + ldr r0, [sp, #0x38] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0x4] + ldr r0, [sp, #0x34] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x30] + str r4, [sp, #0x8] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + str r0, [sp, #0x30] + mov r4, #0x1 + bmi _020E46CC + cmp r9, #0x1 + beq _020E46CC + cmp r9, #0x24 + bgt _020E46CC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E46D4 +_020E46CC: + mov r4, #0x40 + b _020E46F0 +_020E46D4: + ldr r1, [sp, #0x8] + mov r0, r7 + mov r3, r1 + mov r2, r1 + add r5, r3, #0x1 + blx r8 + mov r6, r0 +_020E46F0: + cmp r9, #0x0 + beq _020E4708 + mov r1, r9 + mvn r0, #0x0 + bl _u32_div_f + str r0, [sp, #0x4] +_020E4708: + mvn r11, #0x0 + b _020E49C8 +_020E4710: + cmp r4, #0x8 + bgt _020E4748 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E49C8 + b _020E49C8 + b _020E4754 + b _020E4800 + b _020E49C8 + b _020E483C + b _020E49C8 + b _020E49C8 + b _020E49C8 + b _020E487C +_020E4748: + cmp r4, #0x10 + beq _020E487C + b _020E49C8 +_020E4754: + cmp r6, #0x0 + blt _020E4764 + cmp r6, #0x80 + blt _020E476C +_020E4764: + mov r0, #0x0 + b _020E477C +_020E476C: + ldr r0, _020E4A2C ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E477C: + cmp r0, #0x0 + beq _020E47A8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x8] + add r0, r0, #0x1 + str r0, [sp, #0x8] + b _020E49C8 +_020E47A8: + cmp r6, #0x2b + bne _020E47CC + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E47F8 +_020E47CC: + cmp r6, #0x2d + bne _020E47F8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x34] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E47F8: + mov r4, #0x2 + b _020E49C8 +_020E4800: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4834 + cmp r6, #0x30 + bne _020E4834 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E4834: + mov r4, #0x8 + b _020E49C8 +_020E483C: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E486C + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E486C: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E49C8 +_020E487C: + ldr r0, [sp, #0x4] + cmp r9, #0x0 + moveq r9, #0xa + cmp r0, #0x0 + bne _020E48A0 + mov r0, r11 + mov r1, r9 + bl _u32_div_f + str r0, [sp, #0x4] +_020E48A0: + cmp r6, #0x0 + blt _020E48B0 + cmp r6, #0x80 + blt _020E48B8 +_020E48B0: + mov r0, #0x0 + b _020E48C8 +_020E48B8: + ldr r0, _020E4A2C ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E48C8: + cmp r0, #0x0 + beq _020E48F0 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4978 + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E49C8 +_020E48F0: + cmp r6, #0x0 + blt _020E4900 + cmp r6, #0x80 + blt _020E4908 +_020E4900: + mov r0, #0x0 + b _020E4918 +_020E4908: + ldr r0, _020E4A2C ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4918: + cmp r0, #0x0 + beq _020E494C + cmp r6, #0x0 + blt _020E4930 + cmp r6, #0x80 + blt _020E4938 +_020E4930: + mov r0, r6 + b _020E4940 +_020E4938: + ldr r0, _020E4A30 ; =__upper_mapC + ldrb r0, [r0, r6] +_020E4940: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E495C +_020E494C: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E49C8 +_020E495C: + cmp r6, #0x0 + blt _020E4974 + cmp r6, #0x80 + bge _020E4974 + ldr r0, _020E4A30 ; =__upper_mapC + ldrb r6, [r0, r6] +_020E4974: + sub r6, r6, #0x37 +_020E4978: + ldr r0, [sp, #0x4] + mov r4, #0x10 + cmp r10, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mul r0, r10, r9 + mov r10, r0 + sub r0, r11, r0 + cmp r6, r0 + ldrhi r0, [sp, #0x38] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r10, r10, r6 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E49C8: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E49E4 + cmp r6, r11 + beq _020E49E4 + tst r4, #0x60 + beq _020E4710 +_020E49E4: + tst r4, #0x34 + bne _020E49FC + ldr r0, [sp, #0x30] + mov r10, #0x0 + str r10, [r0, #0x0] + b _020E4A10 +_020E49FC: + ldr r0, [sp, #0x8] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x30] + str r1, [r0, #0x0] +_020E4A10: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4A2C: .word __msl_digit +_020E4A30: .word __upper_mapC + arm_func_end __strtoul + + arm_func_start __strtoull +__strtoull: ; 0x020E4A34 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, [sp, #0x48] + movs r9, r0 + ldr r0, [sp, #0x44] + str r4, [sp, #0x48] + mov r4, #0x0 + str r0, [sp, #0x44] + ldr r0, [sp, #0x48] + str r1, [sp, #0x0] + str r4, [r0, #0x0] + mov r0, r4 + str r0, [sp, #0xc] + str r0, [sp, #0x8] + ldr r0, [sp, #0x44] + mov r1, r4 + str r1, [r0, #0x0] + ldr r0, [sp, #0x40] + str r4, [sp, #0x14] + mov r8, r2 + mov r7, r3 + mov r5, r4 + mov r10, r4 + mov r11, r4 + str r0, [sp, #0x40] + mov r4, #0x1 + bmi _020E4ABC + cmp r9, #0x1 + beq _020E4ABC + cmp r9, #0x24 + bgt _020E4ABC + ldr r0, [sp, #0x0] + cmp r0, #0x1 + bge _020E4AC4 +_020E4ABC: + mov r4, #0x40 + b _020E4ADC +_020E4AC4: + ldr r1, [sp, #0x14] + mov r0, r7 + mov r2, r1 + add r5, r1, #0x1 + blx r8 + mov r6, r0 +_020E4ADC: + cmp r9, #0x0 + beq _020E4B00 + mvn r0, #0x0 + mov r1, r0 + mov r3, r9, asr #0x1f + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4B00: + mvn r0, #0x0 + str r0, [sp, #0x18] + b _020E4E08 +_020E4B0C: + cmp r4, #0x8 + bgt _020E4B44 + cmp r4, #0x0 + addge pc, pc, r4, lsl #0x2 + b _020E4E08 + b _020E4E08 + b _020E4B50 + b _020E4BFC + b _020E4E08 + b _020E4C38 + b _020E4E08 + b _020E4E08 + b _020E4E08 + b _020E4C78 +_020E4B44: + cmp r4, #0x10 + beq _020E4C78 + b _020E4E08 +_020E4B50: + cmp r6, #0x0 + blt _020E4B60 + cmp r6, #0x80 + blt _020E4B68 +_020E4B60: + mov r0, #0x0 + b _020E4B78 +_020E4B68: + ldr r0, _020E4E78 ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E4B78: + cmp r0, #0x0 + beq _020E4BA4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x14] + add r0, r0, #0x1 + str r0, [sp, #0x14] + b _020E4E08 +_020E4BA4: + cmp r6, #0x2b + bne _020E4BC8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4BF4 +_020E4BC8: + cmp r6, #0x2d + bne _020E4BF4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x44] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E4BF4: + mov r4, #0x2 + b _020E4E08 +_020E4BFC: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4C30 + cmp r6, #0x30 + bne _020E4C30 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C30: + mov r4, #0x8 + b _020E4E08 +_020E4C38: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E4C68 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C68: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E4E08 +_020E4C78: + ldr r1, [sp, #0x8] + mov r0, #0x0 + cmp r9, #0x0 + moveq r9, #0xa + cmp r1, r0 + ldr r1, [sp, #0xc] + cmpeq r1, r0 + bne _020E4CB4 + ldr r0, [sp, #0x18] + mov r3, r9, asr #0x1f + mov r1, r0 + mov r2, r9 + bl _ll_udiv + str r0, [sp, #0xc] + str r1, [sp, #0x8] +_020E4CB4: + cmp r6, #0x0 + blt _020E4CC4 + cmp r6, #0x80 + blt _020E4CCC +_020E4CC4: + mov r0, #0x0 + b _020E4CDC +_020E4CCC: + ldr r0, _020E4E78 ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x8 +_020E4CDC: + cmp r0, #0x0 + beq _020E4D04 + sub r6, r6, #0x30 + cmp r6, r9 + blt _020E4D8C + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + add r6, r6, #0x30 + b _020E4E08 +_020E4D04: + cmp r6, #0x0 + blt _020E4D14 + cmp r6, #0x80 + blt _020E4D1C +_020E4D14: + mov r0, #0x0 + b _020E4D2C +_020E4D1C: + ldr r0, _020E4E78 ; =__msl_digit + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x1 +_020E4D2C: + cmp r0, #0x0 + beq _020E4D60 + cmp r6, #0x0 + blt _020E4D44 + cmp r6, #0x80 + blt _020E4D4C +_020E4D44: + mov r0, r6 + b _020E4D54 +_020E4D4C: + ldr r0, _020E4E7C ; =__upper_mapC + ldrb r0, [r0, r6] +_020E4D54: + sub r0, r0, #0x37 + cmp r0, r9 + blt _020E4D70 +_020E4D60: + cmp r4, #0x10 + moveq r4, #0x20 + movne r4, #0x40 + b _020E4E08 +_020E4D70: + cmp r6, #0x0 + blt _020E4D88 + cmp r6, #0x80 + bge _020E4D88 + ldr r0, _020E4E7C ; =__upper_mapC + ldrb r6, [r0, r6] +_020E4D88: + sub r6, r6, #0x37 +_020E4D8C: + ldr r0, [sp, #0x8] + umull r2, r3, r10, r9 + cmp r11, r0 + ldr r0, [sp, #0xc] + mov r4, #0x10 + cmpeq r10, r0 + ldrhi r0, [sp, #0x48] + movhi r1, #0x1 + strhi r1, [r0, #0x0] + mov r1, r9, asr #0x1f + mla r3, r10, r1, r3 + mla r3, r11, r9, r3 + ldr r1, [sp, #0x18] + mov r10, r2 + subs r2, r1, r2 + mov r0, r6, asr #0x1f + sbc r1, r1, r3 + cmp r0, r1 + cmpeq r6, r2 + ldrhi r1, [sp, #0x48] + movhi r2, #0x1 + strhi r2, [r1, #0x0] + mov r1, #0x0 + mov r11, r3 + adds r10, r10, r6 + adc r11, r11, r0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 +_020E4E08: + ldr r0, [sp, #0x0] + cmp r5, r0 + bgt _020E4E28 + ldr r0, [sp, #0x18] + cmp r6, r0 + beq _020E4E28 + tst r4, #0x60 + beq _020E4B0C +_020E4E28: + tst r4, #0x34 + bne _020E4E44 + ldr r0, [sp, #0x40] + mov r10, #0x0 + mov r11, r10 + str r10, [r0, #0x0] + b _020E4E58 +_020E4E44: + ldr r0, [sp, #0x14] + sub r1, r5, #0x1 + add r1, r1, r0 + ldr r0, [sp, #0x40] + str r1, [r0, #0x0] +_020E4E58: + mov r0, r7 + mov r1, r6 + mov r2, #0x1 + blx r8 + mov r0, r10 + mov r1, r11 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E4E78: .word __msl_digit +_020E4E7C: .word __upper_mapC + arm_func_end __strtoull + + arm_func_start strtoul +strtoul: ; 0x020E4E80 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4F10 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + beq _020E4EFC + ldr r0, _020E4F14 ; =errno + mov r1, #0x22 + str r1, [r0, #0x0] + add sp, sp, #0x20 + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E4EFC: + ldr r1, [sp, #0x18] + cmp r1, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E4F10: .word __StringRead +_020E4F14: .word errno + arm_func_end strtoul + + arm_func_start strtol +strtol: ; 0x020E4F18 + stmdb sp!, {r3-r5,lr} + sub sp, sp, #0x20 + mov r5, r0 + mov lr, #0x0 + mov r0, r2 + mov r4, r1 + add r2, sp, #0x1c + str r5, [sp, #0xc] + str lr, [sp, #0x10] + str r2, [sp, #0x0] + add r1, sp, #0x18 + str r1, [sp, #0x4] + add r12, sp, #0x14 + ldr r2, _020E4FD8 ; =__StringRead + add r3, sp, #0xc + sub r1, lr, #0x80000001 + str r12, [sp, #0x8] + bl __strtoul + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + bne _020E4FA4 + ldr r2, [sp, #0x18] + cmp r2, #0x0 + bne _020E4F94 + mvn r1, #0x80000000 + cmp r0, r1 + bhi _020E4FA4 +_020E4F94: + cmp r2, #0x0 + beq _020E4FC8 + cmp r0, #0x80000000 + bls _020E4FC8 +_020E4FA4: + ldr r0, [sp, #0x18] + ldr r1, _020E4FDC ; =errno + mov r2, #0x22 + cmp r0, #0x0 + movne r0, #0x80000000 + str r2, [r1, #0x0] + add sp, sp, #0x20 + mvneq r0, #0x80000000 + ldmia sp!, {r3-r5,pc} +_020E4FC8: + cmp r2, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020E4FD8: .word __StringRead +_020E4FDC: .word errno + arm_func_end strtol + + arm_func_start atol +atol: ; 0x020E4FE0 + ldr ip, _020E4FF0 ; =strtol + mov r1, #0x0 + mov r2, #0xa + bx r12 + .balign 4 +_020E4FF0: .word strtol + arm_func_end atol + + exception __strtoul, 1001, 0x0060FF00 + exception __strtoull, 1101, 0x0080FF00 + exception strtoul, 153, 0x00600300 + exception strtol, 201, 0x00600300 + exception atol, 21, 0x00000000 diff --git a/arm9/asm/MSL_Common_wchar_io.s b/arm9/asm/MSL_Common_wchar_io.s index 92f47ac43..fd36a3a34 100644 --- a/arm9/asm/MSL_Common_wchar_io.s +++ b/arm9/asm/MSL_Common_wchar_io.s @@ -1,43 +1,43 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start fwide -fwide: - cmp r0, #0x0 - beq _020E500C - ldr r3, [r0, #0x4] - mov r2, r3, lsl #0x16 - movs r2, r2, lsr #0x1d - bne _020E5014 -_020E500C: - mov r0, #0x0 - bx lr -_020E5014: - mov r2, r3, lsl #0x14 - movs r2, r2, lsr #0x1e - beq _020E5034 - cmp r2, #0x1 - beq _020E505C - cmp r2, #0x2 - moveq r1, #0x1 - b _020E5060 -_020E5034: - cmp r1, #0x0 - ble _020E504C - bic r2, r3, #0xc00 - orr r2, r2, #0x800 - str r2, [r0, #0x4] - b _020E5060 -_020E504C: - biclt r2, r3, #0xc00 - orrlt r2, r2, #0x400 - strlt r2, [r0, #0x4] - b _020E5060 -_020E505C: - mvn r1, #0x0 -_020E5060: - mov r0, r1 - bx lr - arm_func_end fwide + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start fwide +fwide: + cmp r0, #0x0 + beq _020E500C + ldr r3, [r0, #0x4] + mov r2, r3, lsl #0x16 + movs r2, r2, lsr #0x1d + bne _020E5014 +_020E500C: + mov r0, #0x0 + bx lr +_020E5014: + mov r2, r3, lsl #0x14 + movs r2, r2, lsr #0x1e + beq _020E5034 + cmp r2, #0x1 + beq _020E505C + cmp r2, #0x2 + moveq r1, #0x1 + b _020E5060 +_020E5034: + cmp r1, #0x0 + ble _020E504C + bic r2, r3, #0xc00 + orr r2, r2, #0x800 + str r2, [r0, #0x4] + b _020E5060 +_020E504C: + biclt r2, r3, #0xc00 + orrlt r2, r2, #0x400 + strlt r2, [r0, #0x4] + b _020E5060 +_020E505C: + mvn r1, #0x0 +_020E5060: + mov r0, r1 + bx lr + arm_func_end fwide diff --git a/arm9/asm/MSL_Common_wctype.s b/arm9/asm/MSL_Common_wctype.s index 7b6719409..ab77a51ce 100644 --- a/arm9/asm/MSL_Common_wctype.s +++ b/arm9/asm/MSL_Common_wctype.s @@ -1,61 +1,61 @@ - .include "asm/macros.inc" - .include "global.inc" - - .rodata - - .global __wlower_mapC -__wlower_mapC: ; 0x02104444 - .short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007 - .short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F - .short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017 - .short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F - .short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027 - .short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F - .short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037 - .short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F - .short 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067 - .short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F - .short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077 - .short 0x0078, 0x0079, 0x007A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F - .short 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067 - .short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F - .short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077 - .short 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F - - .global __wctype_mapC -__wctype_mapC: ; 0x02104544 - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004 - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 - .short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458 - .short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 - .short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 - .short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 - .short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004 - - .global __wupper_mapC -__wupper_mapC: ; 0x02104644 - .short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007 - .short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F - .short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017 - .short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F - .short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027 - .short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F - .short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037 - .short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F - .short 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047 - .short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F - .short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057 - .short 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F - .short 0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047 - .short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F - .short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057 - .short 0x0058, 0x0059, 0x005A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F + .include "asm/macros.inc" + .include "global.inc" + + .rodata + + .global __wlower_mapC +__wlower_mapC: ; 0x02104444 + .short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007 + .short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F + .short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017 + .short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F + .short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027 + .short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F + .short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037 + .short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F + .short 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067 + .short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F + .short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077 + .short 0x0078, 0x0079, 0x007A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F + .short 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067 + .short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F + .short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077 + .short 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F + + .global __wctype_mapC +__wctype_mapC: ; 0x02104544 + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004 + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004 + .short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458 + .short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251 + .short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0 + .short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071 + .short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004 + + .global __wupper_mapC +__wupper_mapC: ; 0x02104644 + .short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007 + .short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F + .short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017 + .short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F + .short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027 + .short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F + .short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037 + .short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F + .short 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047 + .short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F + .short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057 + .short 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F + .short 0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047 + .short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F + .short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057 + .short 0x0058, 0x0059, 0x005A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F diff --git a/arm9/asm/MSL_Common_wmem.s b/arm9/asm/MSL_Common_wmem.s index b09b5b668..ee5d1592c 100644 --- a/arm9/asm/MSL_Common_wmem.s +++ b/arm9/asm/MSL_Common_wmem.s @@ -1,31 +1,31 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start wmemcpy -wmemcpy: ; 0x020E5068 - ldr ip, _020E5074 ; =memcpy - mov r2, r2, lsl #0x1 - bx r12 - .balign 4 -_020E5074: .word memcpy - arm_func_end wmemcpy - - arm_func_start wmemchr -wmemchr: - cmp r2, #0x0 - beq _020E5098 -_020E5080: - ldrh r3, [r0, #0x0] - cmp r3, r1 - bxeq lr - add r0, r0, #0x2 - subs r2, r2, #0x1 - bne _020E5080 -_020E5098: - mov r0, #0x0 - bx lr - arm_func_end wmemchr - - exception wmemcpy, 17, 0x00000000 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start wmemcpy +wmemcpy: ; 0x020E5068 + ldr ip, _020E5074 ; =memcpy + mov r2, r2, lsl #0x1 + bx r12 + .balign 4 +_020E5074: .word memcpy + arm_func_end wmemcpy + + arm_func_start wmemchr +wmemchr: + cmp r2, #0x0 + beq _020E5098 +_020E5080: + ldrh r3, [r0, #0x0] + cmp r3, r1 + bxeq lr + add r0, r0, #0x2 + subs r2, r2, #0x1 + bne _020E5080 +_020E5098: + mov r0, #0x0 + bx lr + arm_func_end wmemchr + + exception wmemcpy, 17, 0x00000000 diff --git a/arm9/asm/MSL_Common_wprintf.s b/arm9/asm/MSL_Common_wprintf.s index 3c99e9219..8c2ce84f6 100644 --- a/arm9/asm/MSL_Common_wprintf.s +++ b/arm9/asm/MSL_Common_wprintf.s @@ -1,2349 +1,2349 @@ - .include "asm/macros.inc" - .include "global.inc" - - .data - -wstr$6DE4: ; 0x02106DE4 - ; L"0x0p0" - .short 0x0030, 0x0078, 0x0030, 0x0070, 0x0030, 0x0000 - -wstr$6DF0: ; 0x02106DF0 - ; L"-INF" - .short 0x002D, 0x0049, 0x004E, 0x0046, 0x0000, 0x0000 - -wstr$6DFC: ; 0x02106DFC - ; L"-inf" - .short 0x002D, 0x0069, 0x006E, 0x0066, 0x0000, 0x0000 - -wstr$6E08: ; 0x02106E08 - ; L"INF" - .short 0x0049, 0x004E, 0x0046, 0x0000 - -wstr$6E10: ; 0x02106E10 - ; L"inf" - .short 0x0069, 0x006E, 0x0066, 0x0000 - -wstr$6E18: ; 0x02106E18 - ; L"-NAN" - .short 0x002D, 0x004E, 0x0041, 0x004E, 0x0000, 0x0000 - -wstr$6E24: ; 0x02106E24 - ; L"-nan" - .short 0x002D, 0x006E, 0x0061, 0x006E, 0x0000, 0x0000 - -wstr$6E30: ; 0x02106E30 - ; L"NAN" - .short 0x004E, 0x0041, 0x004E, 0x0000 - -wstr$6E38: ; 0x02106E38 - ; L"nan" - .short 0x006E, 0x0061, 0x006E, 0x0000 - -buff_ptr$6E40: ; 0x02106E40 - .short 0x0000, 0x0000 - -strptr$6E44: ; 0x02106E44 - .asciz "" - - .text - - arm_func_start parse_format__wide -parse_format__wide: ; 0x020E50A0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrh r3, [r0, #0x2] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x2 - bne _020E50FC - add r0, sp, #0x0 - strh r3, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E50FC: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020E5110: - mov r8, r7 - cmp r3, #0x2b - bgt _020E5140 - bge _020E5168 - cmp r3, #0x23 - bgt _020E5198 - cmp r3, #0x20 - blt _020E5198 - beq _020E5170 - cmp r3, #0x23 - beq _020E5180 - b _020E5198 -_020E5140: - cmp r3, #0x30 - bgt _020E5198 - cmp r3, #0x2d - blt _020E5198 - beq _020E5160 - cmp r3, #0x30 - beq _020E5188 - b _020E5198 -_020E5160: - strb r6, [sp, #0x0] - b _020E519C -_020E5168: - strb r7, [sp, #0x1] - b _020E519C -_020E5170: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020E519C -_020E5180: - strb r7, [sp, #0x3] - b _020E519C -_020E5188: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020E519C -_020E5198: - mov r8, r0 -_020E519C: - cmp r8, #0x0 - ldrneh r3, [r12, #0x2]! - bne _020E5110 - cmp r3, #0x2a - bne _020E51E4 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020E51DC - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020E51DC: - ldrh r3, [r12, #0x2]! - b _020E5228 -_020E51E4: - mov r2, #0x0 - ldr r5, _020E560C ; =__wctype_mapC - mov r0, #0xa - b _020E5208 -_020E51F4: - ldr r4, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r4, r0, r3 - ldrh r3, [r12, #0x2]! - str r6, [sp, #0x8] -_020E5208: - cmp r3, #0x80 - movcs r4, r2 - bhs _020E5220 - mov r4, r3, lsl #0x1 - ldrh r4, [r5, r4] - and r4, r4, #0x8 -_020E5220: - cmp r4, #0x0 - bne _020E51F4 -_020E5228: - ldr r2, [sp, #0x8] - ldr r0, _020E5610 ; =0x000001FD - cmp r2, r0 - ble _020E5258 - ldr r1, _020E5614 ; =0x0000FFFF - add r0, sp, #0x0 - strh r1, [sp, #0x6] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x2 - ldmia sp!, {r4-r8,pc} -_020E5258: - cmp r3, #0x2e - bne _020E52E0 - ldrh r3, [r12, #0x2]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020E529C - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrh r3, [r12, #0x2]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020E52E0 -_020E529C: - mov r1, #0x0 - ldr r4, _020E560C ; =__wctype_mapC - mov r0, #0xa - b _020E52C0 -_020E52AC: - ldr r2, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r2, r0, r3 - ldrh r3, [r12, #0x2]! - str r5, [sp, #0xc] -_020E52C0: - cmp r3, #0x80 - movcs r2, r1 - bhs _020E52D8 - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020E52D8: - cmp r2, #0x0 - bne _020E52AC -_020E52E0: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020E5318 - cmp r3, #0x68 - blt _020E530C - beq _020E5334 - cmp r3, #0x6a - beq _020E5380 - cmp r3, #0x6c - beq _020E5350 - b _020E53A4 -_020E530C: - cmp r3, #0x4c - beq _020E5374 - b _020E53A4 -_020E5318: - cmp r3, #0x74 - bgt _020E5328 - beq _020E538C - b _020E53A4 -_020E5328: - cmp r3, #0x7a - beq _020E5398 - b _020E53A4 -_020E5334: - ldrh r1, [r12, #0x2] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqh r3, [r12, #0x2]! - b _020E53A8 -_020E5350: - ldrh r1, [r12, #0x2] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020E53A8 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrh r3, [r12, #0x2]! - b _020E53A8 -_020E5374: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5380: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020E53A8 -_020E538C: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020E53A8 -_020E5398: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020E53A8 -_020E53A4: - mov r0, #0x0 -_020E53A8: - cmp r0, #0x0 - ldrneh r3, [r12, #0x2]! - strh r3, [sp, #0x6] - cmp r3, #0x61 - bgt _020E53FC - bge _020E54E0 - cmp r3, #0x47 - bgt _020E53F0 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E55EC - b _020E54E0 - b _020E55EC - b _020E55EC - b _020E55EC - b _020E5528 - b _020E54A8 - b _020E5518 -_020E53F0: - cmp r3, #0x58 - beq _020E5470 - b _020E55EC -_020E53FC: - cmp r3, #0x63 - bgt _020E540C - beq _020E5588 - b _020E55EC -_020E540C: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020E55EC - b _020E5470 ; case - b _020E5528 ; case - b _020E54A8 ; case - b _020E5518 ; case - b _020E55EC ; case - b _020E5470 ; case - b _020E55EC ; case - b _020E55EC ; case - b _020E55EC ; case - b _020E55EC ; case - b _020E55D8 ; case - b _020E5470 ; case - b _020E5564 ; case - b _020E55EC ; case - b _020E55EC ; case - b _020E55B4 ; case - b _020E55EC ; case - b _020E5470 ; case - b _020E55EC ; case - b _020E55EC ; case - b _020E5470 ; case -_020E5470: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0x4 - streqb r0, [sp, #0x4] - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E55F4 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020E55F4 -_020E54A8: - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - ldreq r0, _020E5614 ; =0x0000FFFF - streqh r0, [sp, #0x6] - beq _020E55F4 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x6 - streq r0, [sp, #0xc] - b _020E55F4 -_020E54E0: - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - ldreq r0, _020E5614 ; =0x0000FFFF - streqh r0, [sp, #0x6] - b _020E55F4 -_020E5518: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] -_020E5528: - ldrb r0, [sp, #0x4] - cmp r0, #0x2 - cmpne r0, #0x6 - cmpne r0, #0x7 - cmpne r0, #0x8 - cmpne r0, #0x4 - cmpne r0, #0x1 - ldreq r0, _020E5614 ; =0x0000FFFF - streqh r0, [sp, #0x6] - beq _020E55F4 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x6 - streq r0, [sp, #0xc] - b _020E55F4 -_020E5564: - mov r3, #0x3 - mov r2, #0x1 - mov r1, #0x78 - mov r0, #0x8 - strb r3, [sp, #0x4] - strb r2, [sp, #0x3] - strh r1, [sp, #0x6] - str r0, [sp, #0xc] - b _020E55F4 -_020E5588: - ldrb r1, [sp, #0x4] - cmp r1, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020E55F4 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - ldrne r0, _020E5614 ; =0x0000FFFF - strneh r0, [sp, #0x6] - b _020E55F4 -_020E55B4: - ldrb r0, [sp, #0x4] - cmp r0, #0x3 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020E55F4 - cmp r0, #0x0 - ldrne r0, _020E5614 ; =0x0000FFFF - strneh r0, [sp, #0x6] - b _020E55F4 -_020E55D8: - ldrb r0, [sp, #0x4] - cmp r0, #0x9 - moveq r0, #0x4 - streqb r0, [sp, #0x4] - b _020E55F4 -_020E55EC: - ldr r0, _020E5614 ; =0x0000FFFF - strh r0, [sp, #0x6] -_020E55F4: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x2 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020E560C: .word __wctype_mapC -_020E5610: .word 0x000001FD -_020E5614: .word 0x0000FFFF - arm_func_end parse_format__wide - - arm_func_start long2str__wide -long2str__wide: ; 0x020E5618 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strh r0, [r5, #-0x2]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrh r8, [sp, #0x46] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020E568C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E5678 - cmp r8, #0x6f - beq _020E568C -_020E5678: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E568C: - cmp r8, #0x69 - bgt _020E56B4 - bge _020E56E8 - cmp r8, #0x58 - bgt _020E56A8 - beq _020E5714 - b _020E571C -_020E56A8: - cmp r8, #0x64 - beq _020E56E8 - b _020E571C -_020E56B4: - cmp r8, #0x6f - bgt _020E56C8 - moveq r4, #0x8 - moveq r11, #0x0 - b _020E571C -_020E56C8: - cmp r8, #0x78 - bgt _020E571C - cmp r8, #0x75 - blt _020E571C - beq _020E5708 - cmp r8, #0x78 - beq _020E5714 - b _020E571C -_020E56E8: - cmp r10, #0x0 - mov r4, #0xa - bge _020E571C - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020E571C -_020E5708: - mov r4, #0xa - mov r11, #0x0 - b _020E571C -_020E5714: - mov r4, #0x10 - mov r11, #0x0 -_020E571C: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020E5754 - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020E5754: - cmp r10, #0x0 - strh r9, [r5, #-0x2]! - add r6, r6, #0x1 - bne _020E571C - cmp r4, #0x8 - bne _020E5788 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r5, #-0x2]! - addne r6, r6, #0x1 -_020E5788: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020E57BC - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020E57BC - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020E57BC: - ldr r0, [sp, #0x0] - ldr r1, _020E5864 ; =0x000001FD - sub r0, r0, r5 - add r0, r0, r0, lsr #0x1f - add r0, r7, r0, asr #0x1 - cmp r0, r1 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020E5804 - mov r0, #0x30 -_020E57F4: - add r6, r6, #0x1 - cmp r6, r7 - strh r0, [r5, #-0x2]! - blt _020E57F4 -_020E5804: - cmp r4, #0x10 - bne _020E5820 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r5, #-0x2] - strneh r0, [r5, #-0x4]! -_020E5820: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r5, #-0x2]! - bne _020E5850 - cmp r11, #0x1 - moveq r0, #0x2b - streqh r0, [r5, #-0x2]! - beq _020E5850 - cmp r11, #0x2 - moveq r0, #0x20 - streqh r0, [r5, #-0x2]! -_020E5850: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5864: .word 0x000001FD - ; arm_func_end long2str__wide - - arm_func_start longlong2str__wide -longlong2str__wide: ; 0x020E5868 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strh r0, [r6, #-0x2]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrh r8, [sp, #0x52] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020E58F8 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E58E4 - cmp r8, #0x6f - beq _020E58F8 -_020E58E4: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E58F8: - cmp r8, #0x69 - bgt _020E5920 - bge _020E5950 - cmp r8, #0x58 - bgt _020E5914 - beq _020E59A4 - b _020E59B0 -_020E5914: - cmp r8, #0x64 - beq _020E5950 - b _020E59B0 -_020E5920: - cmp r8, #0x6f - bgt _020E5930 - beq _020E5984 - b _020E59B0 -_020E5930: - cmp r8, #0x78 - bgt _020E59B0 - cmp r8, #0x75 - blt _020E59B0 - beq _020E5994 - cmp r8, #0x78 - beq _020E59A4 - b _020E59B0 -_020E5950: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020E59B0 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020E5978 - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020E5978: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020E59B0 -_020E5984: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020E59B0 -_020E5994: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020E59B0 -_020E59A4: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020E59B0: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020E59FC - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020E59FC: - strh r0, [r6, #-0x2]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020E59B0 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020E5A3C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrneh r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneh r0, [r6, #-0x2]! - addne r7, r7, #0x1 -_020E5A3C: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E5A8C - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5A8C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E5A8C: - ldr r0, [sp, #0x0] - ldr r2, _020E5B48 ; =0x000001FD - sub r0, r0, r6 - add r1, r0, r0, lsr #0x1f - ldr r0, [sp, #0x10] - add r0, r0, r1, asr #0x1 - cmp r0, r2 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E5AE0 - mov r1, #0x30 -_020E5ACC: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strh r1, [r6, #-0x2]! - blt _020E5ACC -_020E5AE0: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E5B00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneh r8, [r6, #-0x2] - strneh r0, [r6, #-0x4]! -_020E5B00: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneh r0, [r6, #-0x2]! - bne _020E5B34 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqh r0, [r6, #-0x2]! - beq _020E5B34 - cmp r0, #0x2 - moveq r0, #0x20 - streqh r0, [r6, #-0x2]! -_020E5B34: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5B48: .word 0x000001FD - ; arm_func_end longlong2str__wide - - arm_func_start double2hex__wide -double2hex__wide: ; 0x020E5B4C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E5EB8 ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrh r6, [sp, #0x7a] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E5BF4 - sub r4, r8, #0xc - ldr r1, _020E5EBC ; =wstr$6DE4 - mov r0, r4 - bl wcscpy - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5BF4: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E5C74 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5C38 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5C28 - ldr r1, _020E5EC0 ; =wstr$6DF0 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C28: - ldr r1, _020E5EC4 ; =wstr$6DFC - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C38: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5C54 - ldr r1, _020E5EC8 ; =wstr$6E08 - mov r0, r4 - bl wcscpy - b _020E5C60 -_020E5C54: - ldr r1, _020E5ECC ; =wstr$6E10 - mov r0, r4 - bl wcscpy -_020E5C60: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5C74: - cmp r0, #0x4e - bne _020E5CF0 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E5CB4 - cmp r6, #0x41 - sub r4, r8, #0xa - bne _020E5CA4 - ldr r1, _020E5ED0 ; =wstr$6E18 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CA4: - ldr r1, _020E5ED4 ; =wstr$6E24 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CB4: - cmp r6, #0x41 - sub r4, r8, #0x8 - bne _020E5CD0 - ldr r1, _020E5ED8 ; =wstr$6E30 - mov r0, r4 - bl wcscpy - b _020E5CDC -_020E5CD0: - ldr r1, _020E5EDC ; =wstr$6E38 - mov r0, r4 - bl wcscpy -_020E5CDC: - add sp, sp, #0x44 - mov r0, r4 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E5CF0: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strh r0, [sp, #0x3a] -_020E5D20: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E5D20 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E5EE0 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str__wide - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strh r1, [r0, #-0x2]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E5E30 - mov r9, #0x30 -_020E5DA8: - cmp r8, #0x40 - bge _020E5E18 - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E5DEC - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E5DEC: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E5E1C - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E5E1C -_020E5E18: - mov r1, r9 -_020E5E1C: - sub lr, lr, #0x1 - cmp lr, #0x1 - strh r1, [r0, #-0x2]! - sub r8, r8, #0x4 - bge _020E5DA8 -_020E5E30: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneh r1, [r0, #-0x2]! - mov r1, #0x31 - strh r1, [r0, #-0x2] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strh r1, [r0, #-0x4]! - mov r1, #0x30 - strh r1, [r0, #-0x2]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneh r1, [r0, #-0x2]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqh r1, [r0, #-0x2]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqh r1, [r0, #-0x2]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E5EB8: .word 0x000001FD -_020E5EBC: .word wstr$6DE4 -_020E5EC0: .word wstr$6DF0 -_020E5EC4: .word wstr$6DFC -_020E5EC8: .word wstr$6E08 -_020E5ECC: .word wstr$6E10 -_020E5ED0: .word wstr$6E18 -_020E5ED4: .word wstr$6E24 -_020E5ED8: .word wstr$6E30 -_020E5EDC: .word wstr$6E38 -_020E5EE0: .word 0x000007FF - ; arm_func_end double2hex__wide - - arm_func_start round_decimal__wide -round_decimal__wide: ; 0x020E5EE4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E5F0C -_020E5EF0: - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E5F0C: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} - add r12, r0, #0x5 - add r2, r12, r1 - add r2, r2, #0x1 - ldrsb r3, [r2, #-0x1]! - sub r3, r3, #0x30 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #0x5 - bne _020E5F6C - add r12, r12, lr -_020E5F40: - sub r12, r12, #0x1 - cmp r12, r2 - bls _020E5F58 - ldrsb r3, [r12, #0x0] - cmp r3, #0x30 - beq _020E5F40 -_020E5F58: - cmp r12, r2 - ldreqsb r3, [r2, #-0x1] - andeq r4, r3, #0x1 - movne r4, #0x1 - b _020E5F74 -_020E5F6C: - movgt r4, #0x1 - movle r4, #0x0 -_020E5F74: - cmp r1, #0x0 - beq _020E5FD0 - mov r12, #0x0 - mov lr, #0x1 -_020E5F84: - ldrsb r3, [r2, #-0x1]! - sub r3, r3, #0x30 - add r3, r3, r4 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #0x9 - movgt r4, lr - movle r4, r12 - cmp r4, #0x0 - bne _020E5FB4 - cmp r3, #0x0 - bne _020E5FBC -_020E5FB4: - sub r1, r1, #0x1 - b _020E5FC8 -_020E5FBC: - add r3, r3, #0x30 - strb r3, [r2, #0x0] - b _020E5FD0 -_020E5FC8: - cmp r1, #0x0 - bne _020E5F84 -_020E5FD0: - cmp r4, #0x0 - beq _020E5FF8 - ldrsh r3, [r0, #0x2] - mov r2, #0x1 - mov r1, #0x31 - add r3, r3, #0x1 - strh r3, [r0, #0x2] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E5FF8: - cmp r1, #0x0 - beq _020E5EF0 - strb r1, [r0, #0x4] - ldmia sp!, {r4,pc} - arm_func_end round_decimal__wide - - arm_func_start float2str__wide -float2str__wide: ; 0x020E6008 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r10, r0 - add r0, sp, #0x250 - ldr r7, [sp, #0x268] - ldr r3, _020E6628 ; =0x000001FD - ldrh r6, [r0, #0x12] - cmp r7, r3 - ldrb r5, [sp, #0x25f] - ldrb r4, [sp, #0x25d] - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E609C -_020E6084: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E609C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E60B4 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E6084 -_020E60B4: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E60D4 - cmp r0, #0x49 - beq _020E60E0 - cmp r0, #0x4e - beq _020E6198 - b _020E6244 -_020E60D4: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E6244 -_020E60E0: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E6140 - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E6118 - ldr r0, _020E662C ; =__wctype_mapC - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6118: - cmp r0, #0x0 - beq _020E6130 - ldr r1, _020E6630 ; =wstr$6DF0 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6130: - ldr r1, _020E6634 ; =wstr$6DFC - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6140: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E6160 - ldr r0, _020E662C ; =__wctype_mapC - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E6160: - cmp r0, #0x0 - beq _020E6178 - ldr r1, _020E6638 ; =wstr$6E08 - mov r0, r4 - bl wcscpy - b _020E6184 -_020E6178: - ldr r1, _020E663C ; =wstr$6E10 - mov r0, r4 - bl wcscpy -_020E6184: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6198: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E61EC - cmp r6, #0x80 - sub r4, r9, #0xa - movcs r0, #0x0 - bhs _020E61C4 - ldr r0, _020E662C ; =__wctype_mapC - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E61C4: - cmp r0, #0x0 - beq _020E61DC - ldr r1, _020E6640 ; =wstr$6E18 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61DC: - ldr r1, _020E6644 ; =wstr$6E24 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E61EC: - cmp r6, #0x80 - sub r4, r9, #0x8 - movcs r0, #0x0 - bhs _020E620C - ldr r0, _020E662C ; =__wctype_mapC - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x200 -_020E620C: - cmp r0, #0x0 - beq _020E6224 - ldr r1, _020E6648 ; =wstr$6E30 - mov r0, r4 - bl wcscpy - b _020E6230 -_020E6224: - ldr r1, _020E664C ; =wstr$6E38 - mov r0, r4 - bl wcscpy -_020E6230: - add sp, sp, #0x22c - mov r0, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6244: - ldrb r1, [sp, #0x8] - ldrsh r2, [sp, #0x6] - add r0, sp, #0x200 - sub r1, r1, #0x1 - add r0, r0, #0x2a - add r1, r2, r1 - sub r8, r0, #0x1 - strh r1, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E62A0 - bge _020E632C - cmp r6, #0x47 - bgt _020E65EC - cmp r6, #0x45 - blt _020E65EC - beq _020E632C - cmp r6, #0x46 - beq _020E6478 - cmp r6, #0x47 - beq _020E62B8 - b _020E65EC -_020E62A0: - cmp r6, #0x66 - bgt _020E62B0 - beq _020E6478 - b _020E65EC -_020E62B0: - cmp r6, #0x67 - bne _020E65EC -_020E62B8: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E62D0 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal__wide -_020E62D0: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E62E8 - cmp r2, r7 - blt _020E6308 -_020E62E8: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E632C -_020E6308: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E6478 - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E6478 -_020E632C: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E6344 - add r0, sp, #0x4 - bl round_decimal__wide -_020E6344: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E6650 ; =0x66666667 - mov r0, #0xa - b _020E6398 -_020E6368: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E6398: - cmp lr, #0x0 - bne _020E6368 - cmp r10, #0x2 - blt _020E6368 - add r0, sp, #0x2a - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r0, r8 - ldr r0, _020E6628 ; =0x000001FD - add r1, r1, r7 - cmp r1, r0 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E6408 - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E6408 - mov r0, #0x30 -_020E63FC: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E63FC -_020E6408: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E642C -_020E641C: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E641C -_020E642C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E65EC -_020E6478: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E64B8 - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal__wide - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E64B8: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E6628 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x22c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r10, #0x0 - ble _020E650C - mov r3, #0x30 -_020E64FC: - add r10, r10, #0x1 - cmp r10, r6 - strb r3, [r8, #-0x1]! - blt _020E64FC -_020E650C: - mov r6, #0x0 - b _020E6520 -_020E6514: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E6520: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E6514 - cmp r6, r1 - bge _020E654C - mov r3, #0x30 -_020E653C: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E653C -_020E654C: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E65B4 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E6594 - mov r3, #0x30 -_020E657C: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E657C -_020E6594: - cmp r5, r0 - bge _020E65BC -_020E659C: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E659C - b _020E65BC -_020E65B4: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E65BC: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E65EC - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E65EC - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E65EC: - mov r0, r8 - bl strlen - sub r1, r9, r0, lsl #0x1 - mov r0, r8 - sub r4, r1, #0x2 - bl strlen - mov r2, r0 - mov r0, r4 - mov r1, r8 - bl mbstowcs - mov r0, r4 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6628: .word 0x000001FD -_020E662C: .word __wctype_mapC -_020E6630: .word wstr$6DF0 -_020E6634: .word wstr$6DFC -_020E6638: .word wstr$6E08 -_020E663C: .word wstr$6E10 -_020E6640: .word wstr$6E18 -_020E6644: .word wstr$6E24 -_020E6648: .word wstr$6E30 -_020E664C: .word wstr$6E38 -_020E6650: .word 0x66666667 - ; arm_func_end float2str__wide - - arm_func_start __wpformatter -__wpformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x430 - mov r3, #0x20 - mov r11, r2 - strh r3, [sp, #0x1c] - ldrh r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r4, #0x0 - beq _020E6F24 -_020E6684: - mov r0, r11 - mov r1, #0x25 - bl wcschr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E66D8 - mov r0, r11 - bl wcslen - movs r2, r0 - add r4, r4, r2 - beq _020E6F24 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E6F24 - add sp, sp, #0x430 - mvn r0, #0x0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E66D8: - sub r0, r0, r11 - add r0, r0, r0, lsr #0x1f - movs r2, r0, asr #0x1 - add r4, r4, r2 - beq _020E6710 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6710: - add r1, sp, #0x400 - ldr r0, [sp, #0xc] - add r1, r1, #0x64 - add r2, sp, #0x20 - bl parse_format__wide - ldrh r1, [sp, #0x26] - mov r11, r0 - cmp r1, #0x61 - bgt _020E6780 - bge _020E6AEC - cmp r1, #0x47 - bgt _020E6774 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E6768 - b _020E6AEC - b _020E6D90 - b _020E6D90 - b _020E6D90 - b _020E6A7C - b _020E6A7C - b _020E6A7C -_020E6768: - cmp r1, #0x25 - beq _020E6D7C - b _020E6D90 -_020E6774: - cmp r1, #0x58 - beq _020E6940 - b _020E6D90 -_020E6780: - cmp r1, #0x75 - bgt _020E67E8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E67DC - b _020E6804 - b _020E6A7C - b _020E6A7C - b _020E6A7C - b _020E6D90 - b _020E6804 - b _020E6D90 - b _020E6D90 - b _020E6D90 - b _020E6D90 - b _020E6C98 - b _020E6940 - b _020E6D90 - b _020E6D90 - b _020E6D90 - b _020E6B5C - b _020E6D90 - b _020E6940 -_020E67DC: - cmp r1, #0x63 - beq _020E6D24 - b _020E6D90 -_020E67E8: - cmp r1, #0x78 - bgt _020E67F8 - beq _020E6940 - b _020E6D90 -_020E67F8: - ldr r0, _020E6F38 ; =0x0000FFFF - cmp r1, r0 - b _020E6D90 -_020E6804: - ldrb r0, [sp, #0x24] - cmp r0, #0x3 - bne _020E6824 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E68BC -_020E6824: - cmp r0, #0x4 - bne _020E684C - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E68BC -_020E684C: - cmp r0, #0x6 - bne _020E6874 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E68BC -_020E6874: - cmp r0, #0x7 - bne _020E6890 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E68BC -_020E6890: - cmp r0, #0x8 - bne _020E68AC - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E68BC -_020E68AC: - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] -_020E68BC: - cmp r0, #0x2 - moveq r1, r10, lsl #0x10 - moveq r10, r1, asr #0x10 - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x20 - bne _020E6904 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x430 - bl longlong2str__wide - movs r6, r0 - beq _020E6D90 - b _020E6928 -_020E6904: - sub r5, sp, #0x8 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - add r1, sp, #0x430 - mov r0, r10 - ldmia r5, {r2-r3} - bl long2str__wide - movs r6, r0 - beq _020E6D90 -_020E6928: - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6940: - ldrb r0, [sp, #0x24] - cmp r0, #0x3 - bne _020E6960 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E6960: - cmp r0, #0x4 - bne _020E6988 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E6988: - cmp r0, #0x6 - bne _020E69B0 - ldr r1, [sp, #0x464] - add r2, r1, #0x8 - str r2, [sp, #0x464] - ldr r1, [r2, #-0x8] - str r1, [sp, #0x10] - ldr r1, [r2, #-0x4] - str r1, [sp, #0x14] - b _020E69F8 -_020E69B0: - cmp r0, #0x7 - bne _020E69CC - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69CC: - cmp r0, #0x8 - bne _020E69E8 - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] - b _020E69F8 -_020E69E8: - ldr r1, [sp, #0x464] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r10, [r1, #-0x4] -_020E69F8: - cmp r0, #0x2 - moveq r1, r10, lsl #0x10 - moveq r10, r1, lsr #0x10 - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x20 - bne _020E6A40 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x430 - bl longlong2str__wide - movs r6, r0 - beq _020E6D90 - b _020E6A64 -_020E6A40: - sub r5, sp, #0x8 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - add r1, sp, #0x430 - mov r0, r10 - ldmia r5, {r2-r3} - bl long2str__wide - movs r6, r0 - beq _020E6D90 -_020E6A64: - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6A7C: - ldrb r0, [sp, #0x24] - cmp r0, #0x9 - ldrne r0, [sp, #0x464] - addne r0, r0, #0x8 - strne r0, [sp, #0x464] - bne _020E6AA0 - ldr r0, [sp, #0x464] - add r0, r0, #0x8 - str r0, [sp, #0x464] -_020E6AA0: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x20 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x430 - bl float2str__wide - movs r6, r0 - beq _020E6D90 - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6AEC: - ldrb r0, [sp, #0x24] - cmp r0, #0x9 - ldrne r0, [sp, #0x464] - addne r0, r0, #0x8 - strne r0, [sp, #0x464] - bne _020E6B10 - ldr r0, [sp, #0x464] - add r0, r0, #0x8 - str r0, [sp, #0x464] -_020E6B10: - ldr r7, [r0, #-0x8] - ldr r6, [r0, #-0x4] - add r0, sp, #0x20 - sub r5, sp, #0x4 - ldmia r0, {r0-r3} - stmia r5, {r0-r3} - ldr r3, [r5, #0x0] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x430 - bl double2hex__wide - movs r6, r0 - beq _020E6D90 - add r0, sp, #0x400 - add r0, r0, #0x2e - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6B5C: - ldrb r0, [sp, #0x24] - cmp r0, #0x5 - bne _020E6BF8 - ldr r0, [sp, #0x464] - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r6, [r0, #-0x4] - ldrb r0, [sp, #0x23] - cmp r6, #0x0 - ldreq r6, _020E6F3C ; =buff_ptr$6E40 - cmp r0, #0x0 - beq _020E6BB0 - ldrh r1, [r6], #0x2 - ldrb r0, [sp, #0x22] - and r7, r1, #0xff - cmp r0, #0x0 - beq _020E6DDC - ldr r0, [sp, #0x2c] - cmp r7, r0 - movgt r7, r0 - b _020E6DDC -_020E6BB0: - ldrb r0, [sp, #0x22] - cmp r0, #0x0 - beq _020E6BE8 - ldr r7, [sp, #0x2c] - mov r0, r6 - mov r2, r7 - mov r1, #0x0 - bl wmemchr - cmp r0, #0x0 - beq _020E6DDC - sub r0, r0, r6 - add r0, r0, r0, lsr #0x1f - mov r7, r0, asr #0x1 - b _020E6DDC -_020E6BE8: - mov r0, r6 - bl wcslen - mov r7, r0 - b _020E6DDC -_020E6BF8: - ldr r0, [sp, #0x464] - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r5, [r0, #-0x4] - ldrb r0, [sp, #0x23] - cmp r5, #0x0 - ldreq r5, _020E6F40 ; =strptr$6E44 - cmp r0, #0x0 - beq _020E6C40 - ldrh r1, [r6, #0x0] - ldrb r0, [sp, #0x22] - and r6, r1, #0xff - cmp r0, #0x0 - beq _020E6C78 - ldr r0, [sp, #0x2c] - cmp r6, r0 - movgt r6, r0 - b _020E6C78 -_020E6C40: - ldrb r0, [sp, #0x22] - cmp r0, #0x0 - beq _020E6C6C - ldr r6, [sp, #0x2c] - mov r0, r5 - mov r2, r6 - mov r1, #0x0 - bl memchr - cmp r0, #0x0 - subne r6, r0, r5 - b _020E6C78 -_020E6C6C: - mov r0, r5 - bl strlen - mov r6, r0 -_020E6C78: - add r0, sp, #0x30 - mov r1, r5 - mov r2, r6 - bl mbstowcs - movs r7, r0 - bmi _020E6D90 - add r6, sp, #0x30 - b _020E6DDC -_020E6C98: - ldr r1, [sp, #0x464] - ldrb r0, [sp, #0x24] - add r1, r1, #0x4 - str r1, [sp, #0x464] - ldr r6, [r1, #-0x4] - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020E6F18 - b _020E6CDC ; case - b _020E6F18 ; case - b _020E6CE4 ; case - b _020E6CEC ; case - b _020E6D14 ; case - b _020E6F18 ; case - b _020E6CF4 ; case - b _020E6D04 ; case - b _020E6D0C ; case -_020E6CDC: - str r4, [r6, #0x0] - b _020E6F18 -_020E6CE4: - strh r4, [r6, #0x0] - b _020E6F18 -_020E6CEC: - str r4, [r6, #0x0] - b _020E6F18 -_020E6CF4: - str r4, [r6, #0x0] - mov r0, r4, asr #0x1f - str r0, [r6, #0x4] - b _020E6F18 -_020E6D04: - str r4, [r6, #0x0] - b _020E6F18 -_020E6D0C: - str r4, [r6, #0x0] - b _020E6F18 -_020E6D14: - str r4, [r6, #0x0] - mov r0, r4, asr #0x1f - str r0, [r6, #0x4] - b _020E6F18 -_020E6D24: - ldrb r0, [sp, #0x24] - add r6, sp, #0x30 - cmp r0, #0x5 - bne _020E6D50 - ldr r0, [sp, #0x464] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r0, [r0, #-0x4] - strh r0, [r6, #0x0] - b _020E6DDC -_020E6D50: - ldr r0, [sp, #0x464] - add r1, sp, #0x18 - add r0, r0, #0x4 - str r0, [sp, #0x464] - ldr r3, [r0, #-0x4] - mov r0, r6 - mov r2, #0x1 - strb r3, [sp, #0x18] - bl mbtowc - mov r7, r0 - b _020E6DDC -_020E6D7C: - mov r0, #0x25 - strh r0, [sp, #0x30] - add r6, sp, #0x30 - mov r7, #0x1 - b _020E6DDC -_020E6D90: - ldr r0, [sp, #0xc] - bl wcslen - movs r5, r0 - beq _020E6DC8 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r5 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6DC8: - add sp, sp, #0x430 - add r0, r4, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E6DDC: - ldrb r0, [sp, #0x20] - mov r5, r7 - cmp r0, #0x0 - beq _020E6E8C - cmp r0, #0x2 - moveq r1, #0x30 - movne r1, #0x20 - strh r1, [sp, #0x1c] - ldrh r0, [r6, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E6E48 - cmp r1, #0x30 - bne _020E6E48 - mov r0, r8 - mov r1, r6 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r6, r6, #0x2 - sub r7, r7, #0x1 -_020E6E48: - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6E8C -_020E6E54: - mov r0, r8 - add r1, sp, #0x1c - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6E54 -_020E6E8C: - cmp r7, #0x0 - beq _020E6EBC - mov r0, r8 - mov r1, r6 - mov r2, r7 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E6EBC: - ldrb r0, [sp, #0x20] - cmp r0, #0x0 - bne _020E6F14 - ldr r0, [sp, #0x28] - cmp r5, r0 - bge _020E6F14 - mov r7, #0x20 -_020E6ED8: - mov r0, r8 - add r1, sp, #0x1a - mov r2, #0x1 - strh r7, [sp, #0x1a] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x430 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x28] - add r5, r5, #0x1 - cmp r5, r0 - blt _020E6ED8 -_020E6F14: - add r4, r4, r5 -_020E6F18: - ldrh r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E6684 -_020E6F24: - mov r0, r4 - add sp, sp, #0x430 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E6F38: .word 0x0000FFFF -_020E6F3C: .word buff_ptr$6E40 -_020E6F40: .word strptr$6E44 - arm_func_end __wpformatter - - arm_func_start __wStringWrite -__wStringWrite: ; 0x020E6F44 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3, lsl #0x1 - bl wmemcpy - ldr r1, [r4, #0x8] - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - arm_func_end __wStringWrite - - arm_func_start swprintf -swprintf: ; 0x020E6F84 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vswprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - arm_func_end swprintf - - arm_func_start vswprintf -vswprintf: ; 0x020E6FAC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E7018 ; =__wStringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __wpformatter - cmp r0, #0x0 - addlt sp, sp, #0xc - ldmltia sp!, {r4-r5,pc} - cmp r0, r4 - bhs _020E7000 - mov r1, r0, lsl #0x1 - mov r2, #0x0 - add sp, sp, #0xc - strh r2, [r5, r1] - ldmia sp!, {r4-r5,pc} -_020E7000: - mov r1, #0x0 - add r0, r5, r4, lsl #0x1 - strh r1, [r0, #-0x2] - sub r0, r1, #0x1 - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - .balign 4 -_020E7018: .word __wStringWrite - arm_func_end vswprintf - - exception long2str__wide, 593, 0x0090FF20 - exception longlong2str__wide, 741, 0x00A0FF20 - exception double2hex__wide, 921, 0x00F07F20 - exception float2str__wide, 1612, UNK_020EC728 - exception __wpformatter, 2288, UNK_020EC730 - exception __wStringWrite, 65, 0x00200300 - exception swprintf, 41, 0x00300020 - exception vswprintf, 113, 0x00300300 - - .section .exception,8 - -UNK_020EC728: ; 0x020EC728 - .byte 0x20, 0xFF, 0x09, 0x60 - .balign 8 - - .section .exception,8 - -UNK_020EC730: ; 0x020EC730 - .byte 0x20, 0xFF, 0x11, 0x68 - .balign 8 + .include "asm/macros.inc" + .include "global.inc" + + .data + +wstr$6DE4: ; 0x02106DE4 + ; L"0x0p0" + .short 0x0030, 0x0078, 0x0030, 0x0070, 0x0030, 0x0000 + +wstr$6DF0: ; 0x02106DF0 + ; L"-INF" + .short 0x002D, 0x0049, 0x004E, 0x0046, 0x0000, 0x0000 + +wstr$6DFC: ; 0x02106DFC + ; L"-inf" + .short 0x002D, 0x0069, 0x006E, 0x0066, 0x0000, 0x0000 + +wstr$6E08: ; 0x02106E08 + ; L"INF" + .short 0x0049, 0x004E, 0x0046, 0x0000 + +wstr$6E10: ; 0x02106E10 + ; L"inf" + .short 0x0069, 0x006E, 0x0066, 0x0000 + +wstr$6E18: ; 0x02106E18 + ; L"-NAN" + .short 0x002D, 0x004E, 0x0041, 0x004E, 0x0000, 0x0000 + +wstr$6E24: ; 0x02106E24 + ; L"-nan" + .short 0x002D, 0x006E, 0x0061, 0x006E, 0x0000, 0x0000 + +wstr$6E30: ; 0x02106E30 + ; L"NAN" + .short 0x004E, 0x0041, 0x004E, 0x0000 + +wstr$6E38: ; 0x02106E38 + ; L"nan" + .short 0x006E, 0x0061, 0x006E, 0x0000 + +buff_ptr$6E40: ; 0x02106E40 + .short 0x0000, 0x0000 + +strptr$6E44: ; 0x02106E44 + .asciz "" + + .text + + arm_func_start parse_format__wide +parse_format__wide: ; 0x020E50A0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldrh r3, [r0, #0x2] + mov r4, #0x0 + mov r5, #0x1 + mov lr, r2 + strb r5, [sp, #0x0] + strb r4, [sp, #0x1] + strb r4, [sp, #0x2] + strb r4, [sp, #0x3] + strb r4, [sp, #0x4] + str r4, [sp, #0x8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add r12, r0, #0x2 + bne _020E50FC + add r0, sp, #0x0 + strh r3, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E50FC: + mov r2, #0x2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #0x1 +_020E5110: + mov r8, r7 + cmp r3, #0x2b + bgt _020E5140 + bge _020E5168 + cmp r3, #0x23 + bgt _020E5198 + cmp r3, #0x20 + blt _020E5198 + beq _020E5170 + cmp r3, #0x23 + beq _020E5180 + b _020E5198 +_020E5140: + cmp r3, #0x30 + bgt _020E5198 + cmp r3, #0x2d + blt _020E5198 + beq _020E5160 + cmp r3, #0x30 + beq _020E5188 + b _020E5198 +_020E5160: + strb r6, [sp, #0x0] + b _020E519C +_020E5168: + strb r7, [sp, #0x1] + b _020E519C +_020E5170: + ldrb r4, [sp, #0x1] + cmp r4, #0x1 + strneb r5, [sp, #0x1] + b _020E519C +_020E5180: + strb r7, [sp, #0x3] + b _020E519C +_020E5188: + ldrb r4, [sp, #0x0] + cmp r4, #0x0 + strneb r2, [sp, #0x0] + b _020E519C +_020E5198: + mov r8, r0 +_020E519C: + cmp r8, #0x0 + ldrneh r3, [r12, #0x2]! + bne _020E5110 + cmp r3, #0x2a + bne _020E51E4 + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + str r0, [sp, #0x8] + cmp r0, #0x0 + bge _020E51DC + rsb r0, r0, #0x0 + mov r2, #0x0 + strb r2, [sp, #0x0] + str r0, [sp, #0x8] +_020E51DC: + ldrh r3, [r12, #0x2]! + b _020E5228 +_020E51E4: + mov r2, #0x0 + ldr r5, _020E560C ; =__wctype_mapC + mov r0, #0xa + b _020E5208 +_020E51F4: + ldr r4, [sp, #0x8] + sub r3, r3, #0x30 + mla r6, r4, r0, r3 + ldrh r3, [r12, #0x2]! + str r6, [sp, #0x8] +_020E5208: + cmp r3, #0x80 + movcs r4, r2 + bhs _020E5220 + mov r4, r3, lsl #0x1 + ldrh r4, [r5, r4] + and r4, r4, #0x8 +_020E5220: + cmp r4, #0x0 + bne _020E51F4 +_020E5228: + ldr r2, [sp, #0x8] + ldr r0, _020E5610 ; =0x000001FD + cmp r2, r0 + ble _020E5258 + ldr r1, _020E5614 ; =0x0000FFFF + add r0, sp, #0x0 + strh r1, [sp, #0x6] + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add sp, sp, #0x10 + add r0, r12, #0x2 + ldmia sp!, {r4-r8,pc} +_020E5258: + cmp r3, #0x2e + bne _020E52E0 + ldrh r3, [r12, #0x2]! + mov r0, #0x1 + strb r0, [sp, #0x2] + cmp r3, #0x2a + bne _020E529C + ldr r0, [r1, #0x0] + add r0, r0, #0x4 + str r0, [r1, #0x0] + ldr r0, [r0, #-0x4] + ldrh r3, [r12, #0x2]! + str r0, [sp, #0xc] + cmp r0, #0x0 + movlt r0, #0x0 + strltb r0, [sp, #0x2] + b _020E52E0 +_020E529C: + mov r1, #0x0 + ldr r4, _020E560C ; =__wctype_mapC + mov r0, #0xa + b _020E52C0 +_020E52AC: + ldr r2, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r2, r0, r3 + ldrh r3, [r12, #0x2]! + str r5, [sp, #0xc] +_020E52C0: + cmp r3, #0x80 + movcs r2, r1 + bhs _020E52D8 + mov r2, r3, lsl #0x1 + ldrh r2, [r4, r2] + and r2, r2, #0x8 +_020E52D8: + cmp r2, #0x0 + bne _020E52AC +_020E52E0: + cmp r3, #0x6c + mov r0, #0x1 + bgt _020E5318 + cmp r3, #0x68 + blt _020E530C + beq _020E5334 + cmp r3, #0x6a + beq _020E5380 + cmp r3, #0x6c + beq _020E5350 + b _020E53A4 +_020E530C: + cmp r3, #0x4c + beq _020E5374 + b _020E53A4 +_020E5318: + cmp r3, #0x74 + bgt _020E5328 + beq _020E538C + b _020E53A4 +_020E5328: + cmp r3, #0x7a + beq _020E5398 + b _020E53A4 +_020E5334: + ldrh r1, [r12, #0x2] + mov r2, #0x2 + strb r2, [sp, #0x4] + cmp r1, #0x68 + streqb r0, [sp, #0x4] + ldreqh r3, [r12, #0x2]! + b _020E53A8 +_020E5350: + ldrh r1, [r12, #0x2] + mov r2, #0x3 + strb r2, [sp, #0x4] + cmp r1, #0x6c + bne _020E53A8 + mov r1, #0x4 + strb r1, [sp, #0x4] + ldrh r3, [r12, #0x2]! + b _020E53A8 +_020E5374: + mov r1, #0x9 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5380: + mov r1, #0x6 + strb r1, [sp, #0x4] + b _020E53A8 +_020E538C: + mov r1, #0x8 + strb r1, [sp, #0x4] + b _020E53A8 +_020E5398: + mov r1, #0x7 + strb r1, [sp, #0x4] + b _020E53A8 +_020E53A4: + mov r0, #0x0 +_020E53A8: + cmp r0, #0x0 + ldrneh r3, [r12, #0x2]! + strh r3, [sp, #0x6] + cmp r3, #0x61 + bgt _020E53FC + bge _020E54E0 + cmp r3, #0x47 + bgt _020E53F0 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E55EC + b _020E54E0 + b _020E55EC + b _020E55EC + b _020E55EC + b _020E5528 + b _020E54A8 + b _020E5518 +_020E53F0: + cmp r3, #0x58 + beq _020E5470 + b _020E55EC +_020E53FC: + cmp r3, #0x63 + bgt _020E540C + beq _020E5588 + b _020E55EC +_020E540C: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #0x2 + b _020E55EC + b _020E5470 ; case + b _020E5528 ; case + b _020E54A8 ; case + b _020E5518 ; case + b _020E55EC ; case + b _020E5470 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55D8 ; case + b _020E5470 ; case + b _020E5564 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55B4 ; case + b _020E55EC ; case + b _020E5470 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E5470 ; case +_020E5470: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] + beq _020E55F4 + ldrb r0, [sp, #0x0] + cmp r0, #0x2 + moveq r0, #0x1 + streqb r0, [sp, #0x0] + b _020E55F4 +_020E54A8: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 +_020E54E0: + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + b _020E55F4 +_020E5518: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020E5528: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 +_020E5564: + mov r3, #0x3 + mov r2, #0x1 + mov r1, #0x78 + mov r0, #0x8 + strb r3, [sp, #0x4] + strb r2, [sp, #0x3] + strh r1, [sp, #0x6] + str r0, [sp, #0xc] + b _020E55F4 +_020E5588: + ldrb r1, [sp, #0x4] + cmp r1, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + cmpeq r1, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55B4: + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + cmp r0, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55D8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + b _020E55F4 +_020E55EC: + ldr r0, _020E5614 ; =0x0000FFFF + strh r0, [sp, #0x6] +_020E55F4: + add r0, sp, #0x0 + ldmia r0, {r0-r3} + stmia lr, {r0-r3} + add r0, r12, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020E560C: .word __wctype_mapC +_020E5610: .word 0x000001FD +_020E5614: .word 0x0000FFFF + arm_func_end parse_format__wide + + arm_func_start long2str__wide +long2str__wide: ; 0x020E5618 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x10 + movs r10, r0 + mov r0, #0x0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strh r0, [r5, #-0x2]! + ldrb r0, [sp, #0x43] + str r1, [sp, #0x0] + ldrh r8, [sp, #0x46] + str r0, [sp, #0x4] + ldr r0, [sp, #0x48] + ldrb r11, [sp, #0x41] + str r0, [sp, #0x8] + cmpeq r7, #0x0 + bne _020E568C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E5678 + cmp r8, #0x6f + beq _020E568C +_020E5678: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E568C: + cmp r8, #0x69 + bgt _020E56B4 + bge _020E56E8 + cmp r8, #0x58 + bgt _020E56A8 + beq _020E5714 + b _020E571C +_020E56A8: + cmp r8, #0x64 + beq _020E56E8 + b _020E571C +_020E56B4: + cmp r8, #0x6f + bgt _020E56C8 + moveq r4, #0x8 + moveq r11, #0x0 + b _020E571C +_020E56C8: + cmp r8, #0x78 + bgt _020E571C + cmp r8, #0x75 + blt _020E571C + beq _020E5708 + cmp r8, #0x78 + beq _020E5714 + b _020E571C +_020E56E8: + cmp r10, #0x0 + mov r4, #0xa + bge _020E571C + mov r0, #0x1 + cmp r10, #0x80000000 + rsbne r10, r10, #0x0 + str r0, [sp, #0xc] + b _020E571C +_020E5708: + mov r4, #0xa + mov r11, #0x0 + b _020E571C +_020E5714: + mov r4, #0x10 + mov r11, #0x0 +_020E571C: + mov r0, r10 + mov r1, r4 + bl _u32_div_f + mov r9, r1 + mov r0, r10 + mov r1, r4 + bl _u32_div_f + cmp r9, #0xa + mov r10, r0 + addlt r9, r9, #0x30 + blt _020E5754 + cmp r8, #0x78 + addeq r9, r9, #0x57 + addne r9, r9, #0x37 +_020E5754: + cmp r10, #0x0 + strh r9, [r5, #-0x2]! + add r6, r6, #0x1 + bne _020E571C + cmp r4, #0x8 + bne _020E5788 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r5, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r5, #-0x2]! + addne r6, r6, #0x1 +_020E5788: + ldrb r0, [sp, #0x40] + cmp r0, #0x2 + bne _020E57BC + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x8] + cmp r0, #0x0 + cmpeq r11, #0x0 + subne r7, r7, #0x1 + cmp r4, #0x10 + bne _020E57BC + ldr r0, [sp, #0x4] + cmp r0, #0x0 + subne r7, r7, #0x2 +_020E57BC: + ldr r0, [sp, #0x0] + ldr r1, _020E5864 ; =0x000001FD + sub r0, r0, r5 + add r0, r0, r0, lsr #0x1f + add r0, r7, r0, asr #0x1 + cmp r0, r1 + addgt sp, sp, #0x10 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _020E5804 + mov r0, #0x30 +_020E57F4: + add r6, r6, #0x1 + cmp r6, r7 + strh r0, [r5, #-0x2]! + blt _020E57F4 +_020E5804: + cmp r4, #0x10 + bne _020E5820 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r5, #-0x2] + strneh r0, [r5, #-0x4]! +_020E5820: + ldr r0, [sp, #0xc] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r5, #-0x2]! + bne _020E5850 + cmp r11, #0x1 + moveq r0, #0x2b + streqh r0, [r5, #-0x2]! + beq _020E5850 + cmp r11, #0x2 + moveq r0, #0x20 + streqh r0, [r5, #-0x2]! +_020E5850: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5864: .word 0x000001FD + ; arm_func_end long2str__wide + + arm_func_start longlong2str__wide +longlong2str__wide: ; 0x020E5868 + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x18 + mov r9, r1 + mov r1, #0x0 + mov r10, r0 + mov r6, r2 + mov r0, r1 + strh r0, [r6, #-0x2]! + ldr r0, [sp, #0x58] + cmp r9, #0x0 + str r0, [sp, #0x10] + ldrb r0, [sp, #0x4f] + cmpeq r10, #0x0 + str r2, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x54] + str r1, [sp, #0x14] + str r0, [sp, #0x8] + ldrb r0, [sp, #0x4d] + mov r7, r1 + ldrh r8, [sp, #0x52] + str r0, [sp, #0xc] + ldreq r0, [sp, #0x10] + cmpeq r0, #0x0 + bne _020E58F8 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E58E4 + cmp r8, #0x6f + beq _020E58F8 +_020E58E4: + add sp, sp, #0x18 + mov r0, r6 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E58F8: + cmp r8, #0x69 + bgt _020E5920 + bge _020E5950 + cmp r8, #0x58 + bgt _020E5914 + beq _020E59A4 + b _020E59B0 +_020E5914: + cmp r8, #0x64 + beq _020E5950 + b _020E59B0 +_020E5920: + cmp r8, #0x6f + bgt _020E5930 + beq _020E5984 + b _020E59B0 +_020E5930: + cmp r8, #0x78 + bgt _020E59B0 + cmp r8, #0x75 + blt _020E59B0 + beq _020E5994 + cmp r8, #0x78 + beq _020E59A4 + b _020E59B0 +_020E5950: + subs r0, r10, #0x0 + sbcs r0, r9, #0x0 + mov r11, #0xa + mov r5, #0x0 + bge _020E59B0 + cmp r9, #0x80000000 + cmpeq r10, r5 + beq _020E5978 + rsbs r10, r10, #0x0 + rsc r9, r9, #0x0 +_020E5978: + mov r0, #0x1 + str r0, [sp, #0x14] + b _020E59B0 +_020E5984: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x8 + b _020E59B0 +_020E5994: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0xa + b _020E59B0 +_020E59A4: + mov r5, #0x0 + str r5, [sp, #0xc] + mov r11, #0x10 +_020E59B0: + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ull_mod + mov r4, r0 + mov r0, r10 + mov r1, r9 + mov r2, r11 + mov r3, r5 + bl _ll_udiv + mov r10, r0 + cmp r4, #0xa + mov r9, r1 + addlt r0, r4, #0x30 + blt _020E59FC + cmp r8, #0x78 + addeq r0, r4, #0x57 + addne r0, r4, #0x37 +_020E59FC: + strh r0, [r6, #-0x2]! + mov r0, #0x0 + cmp r9, r0 + cmpeq r10, r0 + add r7, r7, #0x1 + bne _020E59B0 + cmp r5, #0x0 + cmpeq r11, #0x8 + bne _020E5A3C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrneh r0, [r6, #0x0] + cmpne r0, #0x30 + movne r0, #0x30 + strneh r0, [r6, #-0x2]! + addne r7, r7, #0x1 +_020E5A3C: + ldrb r0, [sp, #0x4c] + cmp r0, #0x2 + bne _020E5A8C + ldr r0, [sp, #0x8] + str r0, [sp, #0x10] + ldr r0, [sp, #0x14] + cmp r0, #0x0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x1 + strne r0, [sp, #0x10] + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5A8C + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r0, [sp, #0x10] + subne r0, r0, #0x2 + strne r0, [sp, #0x10] +_020E5A8C: + ldr r0, [sp, #0x0] + ldr r2, _020E5B48 ; =0x000001FD + sub r0, r0, r6 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x10] + add r0, r0, r1, asr #0x1 + cmp r0, r2 + addgt sp, sp, #0x18 + movgt r0, #0x0 + ldmgtia sp!, {r3-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x10] + cmp r7, r0 + bge _020E5AE0 + mov r1, #0x30 +_020E5ACC: + ldr r0, [sp, #0x10] + add r7, r7, #0x1 + cmp r7, r0 + strh r1, [r6, #-0x2]! + blt _020E5ACC +_020E5AE0: + cmp r5, #0x0 + cmpeq r11, #0x10 + bne _020E5B00 + ldr r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x30 + strneh r8, [r6, #-0x2] + strneh r0, [r6, #-0x4]! +_020E5B00: + ldr r0, [sp, #0x14] + cmp r0, #0x0 + movne r0, #0x2d + strneh r0, [r6, #-0x2]! + bne _020E5B34 + ldr r0, [sp, #0xc] + cmp r0, #0x1 + moveq r0, #0x2b + streqh r0, [r6, #-0x2]! + beq _020E5B34 + cmp r0, #0x2 + moveq r0, #0x20 + streqh r0, [r6, #-0x2]! +_020E5B34: + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5B48: .word 0x000001FD + ; arm_func_end longlong2str__wide + + arm_func_start double2hex__wide +double2hex__wide: ; 0x020E5B4C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r10,lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020E5EB8 ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrh r6, [sp, #0x7a] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0x0 + ldmgtia sp!, {r3-r10,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r10, #0x0 + mov r9, #0x20 + add r0, sp, #0x8 + add r3, sp, #0xc + strb r10, [sp, #0x8] + strh r9, [sp, #0xa] + bl __num2dec_internal2 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl fabs + mov r2, r0 + mov r0, r10 + mov r3, r1 + mov r1, r0 + bl _deq + bne _020E5BF4 + sub r4, r8, #0xc + ldr r1, _020E5EBC ; =wstr$6DE4 + mov r0, r4 + bl wcscpy + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5BF4: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020E5C74 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5C38 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5C28 + ldr r1, _020E5EC0 ; =wstr$6DF0 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C28: + ldr r1, _020E5EC4 ; =wstr$6DFC + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C38: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5C54 + ldr r1, _020E5EC8 ; =wstr$6E08 + mov r0, r4 + bl wcscpy + b _020E5C60 +_020E5C54: + ldr r1, _020E5ECC ; =wstr$6E10 + mov r0, r4 + bl wcscpy +_020E5C60: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5C74: + cmp r0, #0x4e + bne _020E5CF0 + ldrsb r0, [sp, #0xc] + cmp r0, #0x0 + beq _020E5CB4 + cmp r6, #0x41 + sub r4, r8, #0xa + bne _020E5CA4 + ldr r1, _020E5ED0 ; =wstr$6E18 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CA4: + ldr r1, _020E5ED4 ; =wstr$6E24 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CB4: + cmp r6, #0x41 + sub r4, r8, #0x8 + bne _020E5CD0 + ldr r1, _020E5ED8 ; =wstr$6E30 + mov r0, r4 + bl wcscpy + b _020E5CDC +_020E5CD0: + ldr r1, _020E5EDC ; =wstr$6E38 + mov r0, r4 + bl wcscpy +_020E5CDC: + add sp, sp, #0x44 + mov r0, r4 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr +_020E5CF0: + mov r3, r10 + mov r1, #0x1 + mov r0, #0x64 + add r9, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strh r0, [sp, #0x3a] +_020E5D20: + rsb r1, r3, #0x7 + ldrsb r2, [r9, r3] + ldrsb r0, [r9, r1] + strb r0, [r9, r3] + add r3, r3, #0x1 + strb r2, [r9, r1] + cmp r3, #0x4 + blt _020E5D20 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020E5EE0 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #0x19 + add r0, sp, #0x34 + and lr, r9, r1, lsr #0x15 + sub r12, sp, #0x8 + ldmia r0, {r0-r3} + stmia r12, {r0-r3} + rsb r0, r9, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia r12, {r2-r3} + bl long2str__wide + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strh r1, [r0, #-0x2]! + mov r1, r7, lsl #0x2 + mov lr, r7 + cmp r7, #0x1 + add r8, r1, #0xb + add r12, sp, #0x68 + blt _020E5E30 + mov r9, #0x30 +_020E5DA8: + cmp r8, #0x40 + bge _020E5E18 + ldrb r1, [r12, r8, asr #0x3] + and r2, r8, #0x7 + rsb r3, r2, #0x7 + mov r2, r1, asr r3 + sub r10, r8, #0x4 + bic r1, r8, #0x7 + bic r10, r10, #0x7 + cmp r1, r10 + add r10, r12, r8, asr #0x3 + and r1, r2, #0xff + beq _020E5DEC + ldrb r2, [r10, #-0x1] + mov r2, r2, lsl #0x8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020E5DEC: + and r1, r1, #0xf + cmp r1, #0xa + addcc r1, r1, #0x30 + andcc r1, r1, #0xff + blo _020E5E1C + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _020E5E1C +_020E5E18: + mov r1, r9 +_020E5E1C: + sub lr, lr, #0x1 + cmp lr, #0x1 + strh r1, [r0, #-0x2]! + sub r8, r8, #0x4 + bge _020E5DA8 +_020E5E30: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneh r1, [r0, #-0x2]! + mov r1, #0x31 + strh r1, [r0, #-0x2] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strh r1, [r0, #-0x4]! + mov r1, #0x30 + strh r1, [r0, #-0x2]! + ldrsb r1, [sp, #0xc] + cmp r1, #0x0 + movne r1, #0x2d + strneh r1, [r0, #-0x2]! + addne sp, sp, #0x44 + ldmneia sp!, {r3-r10,lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #0x1 + moveq r1, #0x2b + streqh r1, [r0, #-0x2]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3-r10,lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #0x2 + moveq r1, #0x20 + streqh r1, [r0, #-0x2]! + add sp, sp, #0x44 + ldmia sp!, {r3-r10,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E5EB8: .word 0x000001FD +_020E5EBC: .word wstr$6DE4 +_020E5EC0: .word wstr$6DF0 +_020E5EC4: .word wstr$6DFC +_020E5EC8: .word wstr$6E08 +_020E5ECC: .word wstr$6E10 +_020E5ED0: .word wstr$6E18 +_020E5ED4: .word wstr$6E24 +_020E5ED8: .word wstr$6E30 +_020E5EDC: .word wstr$6E38 +_020E5EE0: .word 0x000007FF + ; arm_func_end double2hex__wide + + arm_func_start round_decimal__wide +round_decimal__wide: ; 0x020E5EE4 + stmdb sp!, {r4,lr} + cmp r1, #0x0 + bge _020E5F0C +_020E5EF0: + mov r1, #0x0 + strh r1, [r0, #0x2] + mov r1, #0x1 + strb r1, [r0, #0x4] + mov r1, #0x30 + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5F0C: + ldrb lr, [r0, #0x4] + cmp r1, lr + ldmgeia sp!, {r4,pc} + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E5F6C + add r12, r12, lr +_020E5F40: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E5F58 + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E5F40 +_020E5F58: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E5F74 +_020E5F6C: + movgt r4, #0x1 + movle r4, #0x0 +_020E5F74: + cmp r1, #0x0 + beq _020E5FD0 + mov r12, #0x0 + mov lr, #0x1 +_020E5F84: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E5FB4 + cmp r3, #0x0 + bne _020E5FBC +_020E5FB4: + sub r1, r1, #0x1 + b _020E5FC8 +_020E5FBC: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E5FD0 +_020E5FC8: + cmp r1, #0x0 + bne _020E5F84 +_020E5FD0: + cmp r4, #0x0 + beq _020E5FF8 + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5FF8: + cmp r1, #0x0 + beq _020E5EF0 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} + arm_func_end round_decimal__wide + + arm_func_start float2str__wide +float2str__wide: ; 0x020E6008 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x22c + mov r10, r0 + add r0, sp, #0x250 + ldr r7, [sp, #0x268] + ldr r3, _020E6628 ; =0x000001FD + ldrh r6, [r0, #0x12] + cmp r7, r3 + ldrb r5, [sp, #0x25f] + ldrb r4, [sp, #0x25d] + mov r8, r1 + mov r9, r2 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + mov r12, #0x0 + mov r11, #0x20 + add r0, sp, #0x0 + add r3, sp, #0x4 + mov r1, r10 + mov r2, r8 + strb r12, [sp, #0x0] + strh r11, [sp, #0x2] + bl __num2dec_internal2 + ldrb r0, [sp, #0x8] + add r1, sp, #0x9 + add r0, r1, r0 + b _020E609C +_020E6084: + ldrb r2, [sp, #0x8] + ldrsh r1, [sp, #0x6] + sub r2, r2, #0x1 + add r1, r1, #0x1 + strb r2, [sp, #0x8] + strh r1, [sp, #0x6] +_020E609C: + ldrb r1, [sp, #0x8] + cmp r1, #0x1 + bls _020E60B4 + ldrsb r1, [r0, #-0x1]! + cmp r1, #0x30 + beq _020E6084 +_020E60B4: + ldrb r0, [sp, #0x9] + cmp r0, #0x30 + beq _020E60D4 + cmp r0, #0x49 + beq _020E60E0 + cmp r0, #0x4e + beq _020E6198 + b _020E6244 +_020E60D4: + mov r0, #0x0 + strh r0, [sp, #0x6] + b _020E6244 +_020E60E0: + mov r2, #0x0 + mov r0, r10 + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020E6140 + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E6118 + ldr r0, _020E662C ; =__wctype_mapC + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6118: + cmp r0, #0x0 + beq _020E6130 + ldr r1, _020E6630 ; =wstr$6DF0 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6130: + ldr r1, _020E6634 ; =wstr$6DFC + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6140: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E6160 + ldr r0, _020E662C ; =__wctype_mapC + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E6160: + cmp r0, #0x0 + beq _020E6178 + ldr r1, _020E6638 ; =wstr$6E08 + mov r0, r4 + bl wcscpy + b _020E6184 +_020E6178: + ldr r1, _020E663C ; =wstr$6E10 + mov r0, r4 + bl wcscpy +_020E6184: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6198: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + beq _020E61EC + cmp r6, #0x80 + sub r4, r9, #0xa + movcs r0, #0x0 + bhs _020E61C4 + ldr r0, _020E662C ; =__wctype_mapC + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E61C4: + cmp r0, #0x0 + beq _020E61DC + ldr r1, _020E6640 ; =wstr$6E18 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61DC: + ldr r1, _020E6644 ; =wstr$6E24 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E61EC: + cmp r6, #0x80 + sub r4, r9, #0x8 + movcs r0, #0x0 + bhs _020E620C + ldr r0, _020E662C ; =__wctype_mapC + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x200 +_020E620C: + cmp r0, #0x0 + beq _020E6224 + ldr r1, _020E6648 ; =wstr$6E30 + mov r0, r4 + bl wcscpy + b _020E6230 +_020E6224: + ldr r1, _020E664C ; =wstr$6E38 + mov r0, r4 + bl wcscpy +_020E6230: + add sp, sp, #0x22c + mov r0, r4 + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6244: + ldrb r1, [sp, #0x8] + ldrsh r2, [sp, #0x6] + add r0, sp, #0x200 + sub r1, r1, #0x1 + add r0, r0, #0x2a + add r1, r2, r1 + sub r8, r0, #0x1 + strh r1, [sp, #0x6] + mov r0, #0x0 + strb r0, [r8, #0x0] + cmp r6, #0x65 + bgt _020E62A0 + bge _020E632C + cmp r6, #0x47 + bgt _020E65EC + cmp r6, #0x45 + blt _020E65EC + beq _020E632C + cmp r6, #0x46 + beq _020E6478 + cmp r6, #0x47 + beq _020E62B8 + b _020E65EC +_020E62A0: + cmp r6, #0x66 + bgt _020E62B0 + beq _020E6478 + b _020E65EC +_020E62B0: + cmp r6, #0x67 + bne _020E65EC +_020E62B8: + ldrb r0, [sp, #0x8] + cmp r0, r7 + ble _020E62D0 + add r0, sp, #0x4 + mov r1, r7 + bl round_decimal__wide +_020E62D0: + ldrsh r2, [sp, #0x6] + mvn r0, #0x3 + cmp r2, r0 + blt _020E62E8 + cmp r2, r7 + blt _020E6308 +_020E62E8: + cmp r5, #0x0 + ldreqb r0, [sp, #0x8] + subne r7, r7, #0x1 + subeq r7, r0, #0x1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _020E632C +_020E6308: + cmp r5, #0x0 + addne r0, r2, #0x1 + subne r7, r7, r0 + bne _020E6478 + ldrb r1, [sp, #0x8] + add r0, r2, #0x1 + subs r7, r1, r0 + movmi r7, #0x0 + b _020E6478 +_020E632C: + ldrb r0, [sp, #0x8] + add r1, r7, #0x1 + cmp r0, r1 + ble _020E6344 + add r0, sp, #0x4 + bl round_decimal__wide +_020E6344: + ldrsh lr, [sp, #0x6] + mov r11, #0x2b + mov r10, #0x0 + cmp lr, #0x0 + rsblt lr, lr, #0x0 + movlt r11, #0x2d + ldr r3, _020E6650 ; =0x66666667 + mov r0, #0xa + b _020E6398 +_020E6368: + mov r1, lr, lsr #0x1f + smull r2, r12, r3, lr + add r12, r1, r12, asr #0x2 + smull r1, r2, r0, r12 + sub r12, lr, r1 + add r1, r12, #0x30 + strb r1, [r8, #-0x1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #0x2 + add r10, r10, #0x1 +_020E6398: + cmp lr, #0x0 + bne _020E6368 + cmp r10, #0x2 + blt _020E6368 + add r0, sp, #0x2a + strb r11, [r8, #-0x1] + strb r6, [r8, #-0x2]! + sub r1, r0, r8 + ldr r0, _020E6628 ; =0x000001FD + add r1, r1, r7 + cmp r1, r0 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #0x8] + add r0, r7, #0x1 + cmp r1, r0 + bge _020E6408 + add r0, r7, #0x2 + sub r0, r0, r1 + subs r1, r0, #0x1 + beq _020E6408 + mov r0, #0x30 +_020E63FC: + strb r0, [r8, #-0x1]! + subs r1, r1, #0x1 + bne _020E63FC +_020E6408: + ldrb r1, [sp, #0x8] + add r0, sp, #0x9 + add r2, r0, r1 + subs r1, r1, #0x1 + beq _020E642C +_020E641C: + ldrsb r0, [r2, #-0x1]! + subs r1, r1, #0x1 + strb r0, [r8, #-0x1]! + bne _020E641C +_020E642C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r0, #0x2e + strneb r0, [r8, #-0x1]! + ldrb r0, [sp, #0x9] + strb r0, [r8, #-0x1]! + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! + b _020E65EC +_020E6478: + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 + cmp r1, r7 + ble _020E64B8 + sub r1, r1, r7 + add r0, sp, #0x4 + sub r1, r2, r1 + bl round_decimal__wide + ldrsh r3, [sp, #0x6] + ldrb r2, [sp, #0x8] + sub r0, r2, r3 + subs r1, r0, #0x1 + movmi r1, #0x0 +_020E64B8: + adds r0, r3, #0x1 + movmi r0, #0x0 + ldr r3, _020E6628 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x22c + movgt r0, #0x0 + ldmgtia sp!, {r4-r11,lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #0x9 + sub r6, r7, r1 + cmp r6, #0x0 + add r2, r3, r2 + mov r10, #0x0 + ble _020E650C + mov r3, #0x30 +_020E64FC: + add r10, r10, #0x1 + cmp r10, r6 + strb r3, [r8, #-0x1]! + blt _020E64FC +_020E650C: + mov r6, #0x0 + b _020E6520 +_020E6514: + ldrsb r3, [r2, #-0x1]! + add r6, r6, #0x1 + strb r3, [r8, #-0x1]! +_020E6520: + cmp r6, r1 + ldrltb r3, [sp, #0x8] + cmplt r6, r3 + blt _020E6514 + cmp r6, r1 + bge _020E654C + mov r3, #0x30 +_020E653C: + add r6, r6, #0x1 + cmp r6, r1 + strb r3, [r8, #-0x1]! + blt _020E653C +_020E654C: + cmp r7, #0x0 + cmpeq r5, #0x0 + movne r1, #0x2e + strneb r1, [r8, #-0x1]! + cmp r0, #0x0 + beq _020E65B4 + ldrb r1, [sp, #0x8] + mov r5, #0x0 + sub r1, r0, r1 + cmp r1, #0x0 + ble _020E6594 + mov r3, #0x30 +_020E657C: + strb r3, [r8, #-0x1]! + ldrb r1, [sp, #0x8] + add r5, r5, #0x1 + sub r1, r0, r1 + cmp r5, r1 + blt _020E657C +_020E6594: + cmp r5, r0 + bge _020E65BC +_020E659C: + ldrsb r1, [r2, #-0x1]! + add r5, r5, #0x1 + cmp r5, r0 + strb r1, [r8, #-0x1]! + blt _020E659C + b _020E65BC +_020E65B4: + mov r0, #0x30 + strb r0, [r8, #-0x1]! +_020E65BC: + ldrsb r0, [sp, #0x4] + cmp r0, #0x0 + movne r0, #0x2d + strneb r0, [r8, #-0x1]! + bne _020E65EC + cmp r4, #0x1 + moveq r0, #0x2b + streqb r0, [r8, #-0x1]! + beq _020E65EC + cmp r4, #0x2 + moveq r0, #0x20 + streqb r0, [r8, #-0x1]! +_020E65EC: + mov r0, r8 + bl strlen + sub r1, r9, r0, lsl #0x1 + mov r0, r8 + sub r4, r1, #0x2 + bl strlen + mov r2, r0 + mov r0, r4 + mov r1, r8 + bl mbstowcs + mov r0, r4 + add sp, sp, #0x22c + ldmia sp!, {r4-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6628: .word 0x000001FD +_020E662C: .word __wctype_mapC +_020E6630: .word wstr$6DF0 +_020E6634: .word wstr$6DFC +_020E6638: .word wstr$6E08 +_020E663C: .word wstr$6E10 +_020E6640: .word wstr$6E18 +_020E6644: .word wstr$6E24 +_020E6648: .word wstr$6E30 +_020E664C: .word wstr$6E38 +_020E6650: .word 0x66666667 + ; arm_func_end float2str__wide + + arm_func_start __wpformatter +__wpformatter: + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x430 + mov r3, #0x20 + mov r11, r2 + strh r3, [sp, #0x1c] + ldrh r2, [r11, #0x0] + mov r9, r0 + mov r8, r1 + cmp r2, #0x0 + mov r4, #0x0 + beq _020E6F24 +_020E6684: + mov r0, r11 + mov r1, #0x25 + bl wcschr + str r0, [sp, #0xc] + cmp r0, #0x0 + bne _020E66D8 + mov r0, r11 + bl wcslen + movs r2, r0 + add r4, r4, r2 + beq _020E6F24 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + bne _020E6F24 + add sp, sp, #0x430 + mvn r0, #0x0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E66D8: + sub r0, r0, r11 + add r0, r0, r0, lsr #0x1f + movs r2, r0, asr #0x1 + add r4, r4, r2 + beq _020E6710 + mov r0, r8 + mov r1, r11 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6710: + add r1, sp, #0x400 + ldr r0, [sp, #0xc] + add r1, r1, #0x64 + add r2, sp, #0x20 + bl parse_format__wide + ldrh r1, [sp, #0x26] + mov r11, r0 + cmp r1, #0x61 + bgt _020E6780 + bge _020E6AEC + cmp r1, #0x47 + bgt _020E6774 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #0x2 + b _020E6768 + b _020E6AEC + b _020E6D90 + b _020E6D90 + b _020E6D90 + b _020E6A7C + b _020E6A7C + b _020E6A7C +_020E6768: + cmp r1, #0x25 + beq _020E6D7C + b _020E6D90 +_020E6774: + cmp r1, #0x58 + beq _020E6940 + b _020E6D90 +_020E6780: + cmp r1, #0x75 + bgt _020E67E8 + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #0x2 + b _020E67DC + b _020E6804 + b _020E6A7C + b _020E6A7C + b _020E6A7C + b _020E6D90 + b _020E6804 + b _020E6D90 + b _020E6D90 + b _020E6D90 + b _020E6D90 + b _020E6C98 + b _020E6940 + b _020E6D90 + b _020E6D90 + b _020E6D90 + b _020E6B5C + b _020E6D90 + b _020E6940 +_020E67DC: + cmp r1, #0x63 + beq _020E6D24 + b _020E6D90 +_020E67E8: + cmp r1, #0x78 + bgt _020E67F8 + beq _020E6940 + b _020E6D90 +_020E67F8: + ldr r0, _020E6F38 ; =0x0000FFFF + cmp r1, r0 + b _020E6D90 +_020E6804: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6824 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6824: + cmp r0, #0x4 + bne _020E684C + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E684C: + cmp r0, #0x6 + bne _020E6874 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E6874: + cmp r0, #0x7 + bne _020E6890 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6890: + cmp r0, #0x8 + bne _020E68AC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E68AC: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E68BC: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, asr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6904 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str__wide + movs r6, r0 + beq _020E6D90 + b _020E6928 +_020E6904: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str__wide + movs r6, r0 + beq _020E6D90 +_020E6928: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6940: + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6960 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E6960: + cmp r0, #0x4 + bne _020E6988 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E6988: + cmp r0, #0x6 + bne _020E69B0 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E69F8 +_020E69B0: + cmp r0, #0x7 + bne _020E69CC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69CC: + cmp r0, #0x8 + bne _020E69E8 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E69F8 +_020E69E8: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E69F8: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, lsr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6A40 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str__wide + movs r6, r0 + beq _020E6D90 + b _020E6A64 +_020E6A40: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str__wide + movs r6, r0 + beq _020E6D90 +_020E6A64: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6A7C: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6AA0 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6AA0: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl float2str__wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6AEC: + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6B10 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6B10: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl double2hex__wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6B5C: + ldrb r0, [sp, #0x24] + cmp r0, #0x5 + bne _020E6BF8 + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r6, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r6, #0x0 + ldreq r6, _020E6F3C ; =buff_ptr$6E40 + cmp r0, #0x0 + beq _020E6BB0 + ldrh r1, [r6], #0x2 + ldrb r0, [sp, #0x22] + and r7, r1, #0xff + cmp r0, #0x0 + beq _020E6DDC + ldr r0, [sp, #0x2c] + cmp r7, r0 + movgt r7, r0 + b _020E6DDC +_020E6BB0: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6BE8 + ldr r7, [sp, #0x2c] + mov r0, r6 + mov r2, r7 + mov r1, #0x0 + bl wmemchr + cmp r0, #0x0 + beq _020E6DDC + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6BE8: + mov r0, r6 + bl wcslen + mov r7, r0 + b _020E6DDC +_020E6BF8: + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r5, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r5, #0x0 + ldreq r5, _020E6F40 ; =strptr$6E44 + cmp r0, #0x0 + beq _020E6C40 + ldrh r1, [r6, #0x0] + ldrb r0, [sp, #0x22] + and r6, r1, #0xff + cmp r0, #0x0 + beq _020E6C78 + ldr r0, [sp, #0x2c] + cmp r6, r0 + movgt r6, r0 + b _020E6C78 +_020E6C40: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6C6C + ldr r6, [sp, #0x2c] + mov r0, r5 + mov r2, r6 + mov r1, #0x0 + bl memchr + cmp r0, #0x0 + subne r6, r0, r5 + b _020E6C78 +_020E6C6C: + mov r0, r5 + bl strlen + mov r6, r0 +_020E6C78: + add r0, sp, #0x30 + mov r1, r5 + mov r2, r6 + bl mbstowcs + movs r7, r0 + bmi _020E6D90 + add r6, sp, #0x30 + b _020E6DDC +_020E6C98: + ldr r1, [sp, #0x464] + ldrb r0, [sp, #0x24] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r6, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E6F18 + b _020E6CDC ; case + b _020E6F18 ; case + b _020E6CE4 ; case + b _020E6CEC ; case + b _020E6D14 ; case + b _020E6F18 ; case + b _020E6CF4 ; case + b _020E6D04 ; case + b _020E6D0C ; case +_020E6CDC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CE4: + strh r4, [r6, #0x0] + b _020E6F18 +_020E6CEC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CF4: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 +_020E6D04: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D0C: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D14: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 +_020E6D24: + ldrb r0, [sp, #0x24] + add r6, sp, #0x30 + cmp r0, #0x5 + bne _020E6D50 + ldr r0, [sp, #0x464] + mov r7, #0x1 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r0, [r0, #-0x4] + strh r0, [r6, #0x0] + b _020E6DDC +_020E6D50: + ldr r0, [sp, #0x464] + add r1, sp, #0x18 + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r3, [r0, #-0x4] + mov r0, r6 + mov r2, #0x1 + strb r3, [sp, #0x18] + bl mbtowc + mov r7, r0 + b _020E6DDC +_020E6D7C: + mov r0, #0x25 + strh r0, [sp, #0x30] + add r6, sp, #0x30 + mov r7, #0x1 + b _020E6DDC +_020E6D90: + ldr r0, [sp, #0xc] + bl wcslen + movs r5, r0 + beq _020E6DC8 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r5 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6DC8: + add sp, sp, #0x430 + add r0, r4, r5 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E6DDC: + ldrb r0, [sp, #0x20] + mov r5, r7 + cmp r0, #0x0 + beq _020E6E8C + cmp r0, #0x2 + moveq r1, #0x30 + movne r1, #0x20 + strh r1, [sp, #0x1c] + ldrh r0, [r6, #0x0] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _020E6E48 + cmp r1, #0x30 + bne _020E6E48 + mov r0, r8 + mov r1, r6 + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + add r6, r6, #0x2 + sub r7, r7, #0x1 +_020E6E48: + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6E8C +_020E6E54: + mov r0, r8 + add r1, sp, #0x1c + mov r2, #0x1 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6E54 +_020E6E8C: + cmp r7, #0x0 + beq _020E6EBC + mov r0, r8 + mov r1, r6 + mov r2, r7 + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr +_020E6EBC: + ldrb r0, [sp, #0x20] + cmp r0, #0x0 + bne _020E6F14 + ldr r0, [sp, #0x28] + cmp r5, r0 + bge _020E6F14 + mov r7, #0x20 +_020E6ED8: + mov r0, r8 + add r1, sp, #0x1a + mov r2, #0x1 + strh r7, [sp, #0x1a] + blx r9 + cmp r0, #0x0 + addeq sp, sp, #0x430 + mvneq r0, #0x0 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + add r5, r5, #0x1 + cmp r5, r0 + blt _020E6ED8 +_020E6F14: + add r4, r4, r5 +_020E6F18: + ldrh r0, [r11, #0x0] + cmp r0, #0x0 + bne _020E6684 +_020E6F24: + mov r0, r4 + add sp, sp, #0x430 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E6F38: .word 0x0000FFFF +_020E6F3C: .word buff_ptr$6E40 +_020E6F40: .word strptr$6E44 + arm_func_end __wpformatter + + arm_func_start __wStringWrite +__wStringWrite: ; 0x020E6F44 + stmdb sp!, {r3-r5,lr} + mov r4, r0 + ldr r3, [r4, #0x8] + mov r5, r2 + ldr r2, [r4, #0x4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4, #0x0] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3, lsl #0x1 + bl wmemcpy + ldr r1, [r4, #0x8] + add r1, r1, r5 + str r1, [r4, #0x8] + ldmia sp!, {r3-r5,pc} + arm_func_end __wStringWrite + + arm_func_start swprintf +swprintf: ; 0x020E6F84 + stmdb sp!, {r0-r3} + stmdb sp!, {r3,lr} + add r3, sp, #0x10 + bic r3, r3, #0x3 + ldr r2, [sp, #0x10] + add r3, r3, #0x4 + bl vswprintf + ldmia sp!, {r3,lr} + add sp, sp, #0x10 + bx lr + arm_func_end swprintf + + arm_func_start vswprintf +vswprintf: ; 0x020E6FAC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov r12, #0x0 + ldr r0, _020E7018 ; =__wStringWrite + add r1, sp, #0x0 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str r12, [sp, #0x8] + bl __wpformatter + cmp r0, #0x0 + addlt sp, sp, #0xc + ldmltia sp!, {r4-r5,pc} + cmp r0, r4 + bhs _020E7000 + mov r1, r0, lsl #0x1 + mov r2, #0x0 + add sp, sp, #0xc + strh r2, [r5, r1] + ldmia sp!, {r4-r5,pc} +_020E7000: + mov r1, #0x0 + add r0, r5, r4, lsl #0x1 + strh r1, [r0, #-0x2] + sub r0, r1, #0x1 + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E7018: .word __wStringWrite + arm_func_end vswprintf + + exception long2str__wide, 593, 0x0090FF20 + exception longlong2str__wide, 741, 0x00A0FF20 + exception double2hex__wide, 921, 0x00F07F20 + exception float2str__wide, 1612, UNK_020EC728 + exception __wpformatter, 2288, UNK_020EC730 + exception __wStringWrite, 65, 0x00200300 + exception swprintf, 41, 0x00300020 + exception vswprintf, 113, 0x00300300 + + .section .exception,8 + +UNK_020EC728: ; 0x020EC728 + .byte 0x20, 0xFF, 0x09, 0x60 + .balign 8 + + .section .exception,8 + +UNK_020EC730: ; 0x020EC730 + .byte 0x20, 0xFF, 0x11, 0x68 + .balign 8 diff --git a/arm9/asm/MSL_Common_wstring.s b/arm9/asm/MSL_Common_wstring.s index d01c034b6..2d9f001a9 100644 --- a/arm9/asm/MSL_Common_wstring.s +++ b/arm9/asm/MSL_Common_wstring.s @@ -1,48 +1,48 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start wcslen -wcslen: ; 0x020E701C - mvn r2, #0x0 -_020E7020: - ldrh r1, [r0], #0x2 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E7020 - mov r0, r2 - bx lr - arm_func_end wcslen - - arm_func_start wcscpy -wcscpy: ; 0x020E7038 - mov r3, r0 -_020E703C: - ldrh r2, [r1], #0x2 - mov r12, r3 - strh r2, [r3], #0x2 - ldrh r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E703C - bx lr - arm_func_end wcscpy - - arm_func_start wcschr -wcschr: ; 0x020E7058 - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - beq _020E707C -_020E7064: - cmp r2, r1 - subeq r0, r0, #0x2 - bxeq lr - ldrh r2, [r0], #0x2 - cmp r2, #0x0 - bne _020E7064 -_020E707C: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x2 - bx lr - arm_func_end wcschr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start wcslen +wcslen: ; 0x020E701C + mvn r2, #0x0 +_020E7020: + ldrh r1, [r0], #0x2 + add r2, r2, #0x1 + cmp r1, #0x0 + bne _020E7020 + mov r0, r2 + bx lr + arm_func_end wcslen + + arm_func_start wcscpy +wcscpy: ; 0x020E7038 + mov r3, r0 +_020E703C: + ldrh r2, [r1], #0x2 + mov r12, r3 + strh r2, [r3], #0x2 + ldrh r2, [r12, #0x0] + cmp r2, #0x0 + bne _020E703C + bx lr + arm_func_end wcscpy + + arm_func_start wcschr +wcschr: ; 0x020E7058 + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + beq _020E707C +_020E7064: + cmp r2, r1 + subeq r0, r0, #0x2 + bxeq lr + ldrh r2, [r0], #0x2 + cmp r2, #0x0 + bne _020E7064 +_020E707C: + cmp r1, #0x0 + movne r0, #0x0 + subeq r0, r0, #0x2 + bx lr + arm_func_end wcschr diff --git a/arm9/asm/MSL_DPMath_e_pow.s b/arm9/asm/MSL_DPMath_e_pow.s index 132716e6c..c3a72e7eb 100644 --- a/arm9/asm/MSL_DPMath_e_pow.s +++ b/arm9/asm/MSL_DPMath_e_pow.s @@ -1,1190 +1,1190 @@ - .include "asm/macros.inc" - .include "global.inc" - - .rodata - - .global UNK_02104744 -UNK_02104744: ; 0x02104744 - .word 0x00000000, 0x00000000 - .word 0x40000000, 0x3FE2B803 - .size UNK_02104744,.-UNK_02104744 - - .global UNK_02104754 -UNK_02104754: ; 0x02104754 - .word 0x00000000, 0x3FF00000 - .word 0x00000000, 0x3FF80000 - .size UNK_02104754,.-UNK_02104754 - - .global UNK_02104764 -UNK_02104764: ; 0x02104764 - .word 0x00000000, 0x00000000 - .word 0x43CFD006, 0x3E4CFDEB - .size UNK_02104764,.-UNK_02104764 - - .text - - arm_func_start __ieee754_pow -__ieee754_pow: ; 0x020E708C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x80 - ldr r8, [sp, #0xb4] - ldr r6, [sp, #0xac] - ldr r0, [sp, #0xb0] - bic r9, r8, #0x80000000 - orrs r1, r9, r0 - ldr r7, [sp, #0xa8] - bic r4, r6, #0x80000000 - addeq sp, sp, #0x80 - moveq r0, #0x0 - ldreq r1, _020E7638 ; =0x3FF00000 - ldmeqia sp!, {r3-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r1, _020E763C ; =0x7FF00000 - cmp r4, r1 - bgt _020E70FC - bne _020E70E4 - cmp r7, #0x0 - bne _020E70FC -_020E70E4: - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bgt _020E70FC - bne _020E7120 - cmp r0, #0x0 - beq _020E7120 -_020E70FC: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - bl _dadd - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7120: - cmp r6, #0x0 - mov r5, #0x0 - bge _020E7188 - ldr r1, _020E7640 ; =0x43400000 - cmp r9, r1 - movge r5, #0x2 - bge _020E7188 - sub r1, r1, #0x3500000 - cmp r9, r1 - blt _020E7188 - ldr r1, _020E7644 ; =0xFFFFFC01 - add r1, r1, r9, asr #0x14 - cmp r1, #0x14 - ble _020E7170 - rsb r2, r1, #0x34 - mov r1, r0, lsr r2 - cmp r0, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 - b _020E7188 -_020E7170: - cmp r0, #0x0 - rsbeq r2, r1, #0x14 - moveq r1, r9, asr r2 - cmpeq r9, r1, lsl r2 - andeq r1, r1, #0x1 - rsbeq r5, r1, #0x2 -_020E7188: - cmp r0, #0x0 - bne _020E72E4 - ldr r1, _020E763C ; =0x7FF00000 - cmp r9, r1 - bne _020E723C - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r7 - bne _020E71D0 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r0 - mov r3, r1 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E71D0: - sub r0, r1, #0x40000000 - cmp r4, r0 - blt _020E7200 - cmp r8, #0x0 - ldrge r0, [sp, #0xb0] - ldrge r1, [sp, #0xb4] - movlt r0, #0x0 - add sp, sp, #0x80 - movlt r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7200: - cmp r8, #0x0 - mov r0, #0x0 - addge sp, sp, #0x80 - movge r1, r0 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xb0] - ldr r3, [sp, #0xb4] - mov r1, r0 - bl _dsub - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E723C: - sub r0, r1, #0x40000000 - cmp r9, r0 - bne _020E7288 - cmp r8, #0x0 - ldrge r0, [sp, #0xa8] - ldrge r1, [sp, #0xac] - addge sp, sp, #0x80 - ldmgeia sp!, {r3-r11,lr} - addge sp, sp, #0x10 - bxge lr - ldr r2, [sp, #0xa8] - ldr r3, [sp, #0xac] - sub r1, r1, #0x40000000 - mov r0, #0x0 - bl _ddiv - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7288: - cmp r8, #0x40000000 - bne _020E72B4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - mov r2, r0 - mov r3, r1 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72B4: - ldr r0, _020E7648 ; =0x3FE00000 - cmp r8, r0 - bne _020E72E4 - cmp r6, #0x0 - blt _020E72E4 - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl _dsqrt - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E72E4: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - bl fabs - str r0, [sp, #0x70] - str r1, [sp, #0x74] - cmp r7, #0x0 - bne _020E73E8 - ldr r0, _020E763C ; =0x7FF00000 - cmp r4, r0 - cmpne r4, #0x0 - subne r0, r0, #0x40000000 - cmpne r4, r0 - bne _020E73E8 - ldr r2, [sp, #0x70] - ldr r3, [sp, #0x74] - str r2, [sp, #0x78] - str r3, [sp, #0x7c] - cmp r8, #0x0 - bge _020E7344 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E7344: - cmp r6, #0x0 - bge _020E73D0 - add r0, r4, #0x100000 - add r0, r0, #0xc0000000 - orrs r0, r0, r5 - bne _020E73AC - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r4, r0 - mov r5, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r5 - bl _ddiv - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - b _020E73D0 -_020E73AC: - cmp r5, #0x1 - bne _020E73D0 - mov r0, #0x0 - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r1, r0 - bl _dsub - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E73D0: - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E73E8: - mov r0, r6, asr #0x1f - add r7, r0, #0x1 - orrs r0, r7, r5 - bne _020E7420 - ldr r0, _020E764C ; =__float_nan - ldr r1, _020E7650 ; =errno - ldr r0, [r0, #0x0] - mov r2, #0x21 - str r2, [r1, #0x0] - bl _f2d - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7420: - ldr r3, _020E7654 ; =0x41E00000 - cmp r9, r3 - ble _020E7724 - add r0, r3, #0x2100000 - cmp r9, r0 - ble _020E7490 - ldr r1, _020E7658 ; =0x3FEFFFFF - cmp r4, r1 - bgt _020E7464 - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r1, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7464: - add r0, r1, #0x1 - cmp r4, r0 - blt _020E7490 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r1, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7490: - ldr r2, _020E7658 ; =0x3FEFFFFF - cmp r4, r2 - bge _020E74BC - cmp r8, #0x0 - mov r0, #0x0 - addlt r1, r2, #0x40000001 - add sp, sp, #0x80 - movge r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74BC: - add r0, r2, #0x1 - cmp r4, r0 - ble _020E74E8 - cmp r8, #0x0 - mov r0, #0x0 - addgt r1, r2, #0x40000001 - add sp, sp, #0x80 - movle r1, r0 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E74E8: - ldr r0, [sp, #0xa8] - ldr r1, [sp, #0xac] - add r3, r2, #0x1 - mov r2, #0x0 - bl _dsub - mov r2, r0 - mov r3, r1 - str r0, [sp, #0x50] - str r1, [sp, #0x54] - bl _dmul - mov r6, r1 - mov r4, r0 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - ldr r1, _020E765C ; =0x3FD00000 - mov r0, #0x0 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7660 ; =0x55555555 - sub r1, r0, #0x15800000 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E7648 ; =0x3FE00000 - bl _dsub - mov r2, r0 - mov r0, r4 - mov r3, r1 - mov r1, r6 - bl _dmul - mov r6, r0 - mov r8, r1 - mov r0, #0x60000000 - ldr r1, _020E7664 ; =0x3FF71547 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r4, r0 - mov r9, r1 - ldr r0, _020E7668 ; =0xF85DDF44 - ldr r1, _020E766C ; =0x3E54AE0B - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r11, r0 - mov r10, r1 - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E7664 ; =0x3FF71547 - mov r2, r6 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r11 - mov r1, r10 - bl _dsub - mov r6, r0 - mov r8, r1 - mov r0, r4 - mov r1, r9 - mov r2, r6 - mov r3, r8 - bl _dadd - mov r2, r4 - mov r3, r9 - str r1, [sp, #0x5c] - mov r0, #0x0 - str r0, [sp, #0x58] - bl _dsub - mov r2, r0 - mov r0, r6 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r4, r0 - mov r8, r1 - b _020E7C80 - .balign 4 -_020E7638: .word 0x3FF00000 -_020E763C: .word 0x7FF00000 -_020E7640: .word 0x43400000 -_020E7644: .word 0xFFFFFC01 -_020E7648: .word 0x3FE00000 -_020E764C: .word __float_nan -_020E7650: .word errno -_020E7654: .word 0x41E00000 -_020E7658: .word 0x3FEFFFFF -_020E765C: .word 0x3FD00000 -_020E7660: .word 0x55555555 -_020E7664: .word 0x3FF71547 -_020E7668: .word 0xF85DDF44 -_020E766C: .word 0x3E54AE0B -_020E7670: .word 0x652B82FE -_020E7674: .word 0x0003988E -_020E7678: .word 0x000BB67A -_020E767C: .word UNK_02104754 -_020E7680: .word 0x4A454EEF -_020E7684: .word 0x3FCA7E28 -_020E7688: .word 0x93C9DB65 -_020E768C: .word 0x3FCD864A -_020E7690: .word 0xA91D4101 -_020E7694: .word 0x3FD17460 -_020E7698: .word 0x518F264D -_020E769C: .word 0x3FD55555 -_020E76A0: .word 0xDB6FABFF -_020E76A4: .word 0x3FDB6DB6 -_020E76A8: .word 0x33333303 -_020E76AC: .word 0x3FE33333 -_020E76B0: .word 0x40080000 -_020E76B4: .word 0x3FEEC709 -_020E76B8: .word 0x145B01F5 -_020E76BC: .word 0xBE3E2FE0 -_020E76C0: .word 0xDC3A03FD -_020E76C4: .word UNK_02104764 -_020E76C8: .word UNK_02104744 -_020E76CC: .word 0x40900000 -_020E76D0: .word 0x8800759C -_020E76D4: .word 0x7E37E43C -_020E76D8: .word 0x3C971547 -_020E76DC: .word 0x3F6F3400 -_020E76E0: .word 0xC2F8F359 -_020E76E4: .word 0x01A56E1F -_020E76E8: .word 0x3FE62E43 -_020E76EC: .word 0xFEFA39EF -_020E76F0: .word 0x3FE62E42 -_020E76F4: .word 0x0CA86C39 -_020E76F8: .word 0xBE205C61 -_020E76FC: .word 0x72BEA4D0 -_020E7700: .word 0x3E663769 -_020E7704: .word 0xC5D26BF1 -_020E7708: .word 0xBEBBBD41 -_020E770C: .word 0xAF25DE2C -_020E7710: .word 0x3F11566A -_020E7714: .word 0x16BEBD93 -_020E7718: .word 0xBF66C16C -_020E771C: .word 0x5555553E -_020E7720: .word 0x3FC55555 -_020E7724: - cmp r4, #0x100000 - mov r6, #0x0 - bge _020E7754 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - mov r2, r6 - add r3, r3, #0x1600000 - bl _dmul - mov r4, r1 - str r0, [sp, #0x70] - str r4, [sp, #0x74] - sub r6, r6, #0x35 -_020E7754: - ldr r0, _020E7644 ; =0xFFFFFC01 - ldr r1, _020E7674 ; =0x0003988E - and r2, r4, r0, lsr #0xc - add r0, r0, r4, asr #0x14 - orr r9, r2, #0xff00000 - cmp r2, r1 - add r6, r6, r0 - orr r9, r9, #0x30000000 - movle r8, #0x0 - ble _020E7794 - ldr r0, _020E7678 ; =0x000BB67A - cmp r2, r0 - movlt r8, #0x1 - addge r6, r6, #0x1 - subge r9, r9, #0x100000 - movge r8, #0x0 -_020E7794: - ldr r2, _020E767C ; =UNK_02104754 - ldr r0, [sp, #0x70] - add r1, r2, r8, lsl #0x3 - ldr r3, [r1, #0x4] - ldr r2, [r2, r8, lsl #0x3] - mov r1, r9 - str r9, [sp, #0x74] - bl _dsub - ldr r2, _020E767C ; =UNK_02104754 - mov r10, r0 - add r3, r2, r8, lsl #0x3 - mov r4, r1 - ldr r0, [sp, #0x70] - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - mov r1, r9 - bl _dadd - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _ddiv - str r1, [sp, #0x24] - mov r11, r0 - ldr r3, [sp, #0x24] - mov r0, r10 - mov r1, r4 - mov r2, r11 - bl _dmul - mov r2, r9, asr #0x1 - orr r2, r2, #0x20000000 - mov r9, r1 - add r2, r2, #0x80000 - add r1, r2, r8, lsl #0x12 - ldr r2, _020E767C ; =UNK_02104754 - str r0, [sp, #0x28] - add r3, r2, r8, lsl #0x3 - mov r0, #0x0 - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - str r9, [sp, #0x4c] - str r1, [sp, #0x44] - str r0, [sp, #0x48] - str r0, [sp, #0x40] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x70] - ldr r1, [sp, #0x74] - bl _dsub - str r0, [sp, #0x2c] - str r1, [sp, #0x1c] - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x40] - ldr r3, [sp, #0x44] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r10, r0 - mov r4, r1 - ldr r2, [sp, #0x2c] - ldr r3, [sp, #0x1c] - ldr r0, [sp, #0x48] - mov r1, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r10 - mov r1, r4 - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, [sp, #0x24] - mov r0, r11 - bl _dmul - str r0, [sp, #0x30] - ldr r0, [sp, #0x28] - str r1, [sp, #0x14] - mov r1, r9 - mov r2, r0 - mov r3, r9 - bl _dmul - mov r4, r0 - mov r10, r1 - mov r2, r4 - mov r3, r10 - bl _dmul - str r0, [sp, #0x34] - mov r11, r1 - ldr r0, _020E7680 ; =0x4A454EEF - ldr r1, _020E7684 ; =0x3FCA7E28 - mov r2, r4 - mov r3, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7688 ; =0x93C9DB65 - ldr r1, _020E768C ; =0x3FCD864A - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7690 ; =0xA91D4101 - ldr r1, _020E7694 ; =0x3FD17460 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7698 ; =0x518F264D - ldr r1, _020E769C ; =0x3FD55555 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A0 ; =0xDB6FABFF - ldr r1, _020E76A4 ; =0x3FDB6DB6 - bl _dadd - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76A8 ; =0x33333303 - ldr r1, _020E76AC ; =0x3FE33333 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x34] - mov r1, r11 - bl _dmul - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x28] - mov r1, r9 - mov r3, r9 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x30] - ldr r1, [sp, #0x14] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dadd - mov r4, r0 - ldr r0, [sp, #0x48] - mov r10, r1 - mov r1, r9 - mov r2, r0 - mov r3, r1 - bl _dmul - str r1, [sp, #0xc] - mov r11, r0 - ldr r1, _020E76B0 ; =0x40080000 - ldr r3, [sp, #0xc] - mov r0, #0x0 - mov r2, r11 - bl _dadd - mov r2, r4 - mov r3, r10 - bl _dadd - mov r0, #0x0 - ldr r3, _020E76B0 ; =0x40080000 - mov r2, r0 - str r1, [sp, #0x44] - str r0, [sp, #0x40] - bl _dsub - ldr r3, [sp, #0xc] - mov r2, r11 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dsub - str r0, [sp, #0x38] - str r1, [sp, #0x4] - ldr r0, [sp, #0x48] - ldr r2, [sp, #0x40] - ldr r3, [sp, #0x44] - mov r1, r9 - bl _dmul - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x30] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x40] - ldr r3, [sp, #0x44] - bl _dmul - str r0, [sp, #0x3c] - mov r11, r1 - ldr r0, [sp, #0x38] - ldr r1, [sp, #0x4] - ldr r2, [sp, #0x28] - mov r3, r9 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x3c] - mov r1, r11 - bl _dadd - mov r9, r0 - mov r11, r1 - mov r0, r4 - mov r1, r10 - mov r2, r9 - mov r3, r11 - bl _dadd - mov r0, #0x0 - mov r2, r4 - mov r3, r10 - str r1, [sp, #0x6c] - str r0, [sp, #0x68] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r9 - mov r1, r11 - bl _dsub - mov r10, r1 - mov r11, r0 - ldr r1, _020E76B4 ; =0x3FEEC709 - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r0, #0xe0000000 - bl _dmul - mov r4, r0 - mov r9, r1 - ldr r0, _020E76B8 ; =0x145B01F5 - ldr r1, _020E76BC ; =0xBE3E2FE0 - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dmul - mov r2, r11 - mov r3, r10 - mov r11, r0 - mov r10, r1 - ldr r0, _020E76C0 ; =0xDC3A03FD - ldr r1, _020E76B4 ; =0x3FEEC709 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r11 - mov r1, r10 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, _020E76C4 ; =UNK_02104764 - add r1, r0, r8, lsl #0x3 - ldr r0, [r0, r8, lsl #0x3] - ldr r1, [r1, #0x4] - bl _dadd - mov r11, r0 - mov r10, r1 - mov r0, r6 - bl _dflt - str r0, [sp, #0x50] - str r1, [sp, #0x54] - mov r0, r4 - mov r1, r9 - mov r2, r11 - mov r3, r10 - bl _dadd - ldr r2, _020E76C8 ; =UNK_02104744 - add r3, r2, r8, lsl #0x3 - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dadd - str r1, [sp, #0x5c] - mov r0, #0x0 - str r0, [sp, #0x58] - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dsub - ldr r2, _020E76C8 ; =UNK_02104744 - add r3, r2, r8, lsl #0x3 - ldr r2, [r2, r8, lsl #0x3] - ldr r3, [r3, #0x4] - bl _dsub - mov r2, r4 - mov r3, r9 - bl _dsub - mov r2, r0 - mov r0, r11 - mov r3, r1 - mov r1, r10 - bl _dsub - mov r4, r0 - mov r8, r1 -_020E7C80: - sub r0, r5, #0x1 - ldr r1, [sp, #0xb4] - orrs r0, r7, r0 - ldr r5, _020E7638 ; =0x3FF00000 - mov r2, #0x0 - ldr r0, [sp, #0xb0] - mov r3, r1 - mov r6, #0x0 - subeq r5, r5, #0x80000000 - str r1, [sp, #0x64] - str r2, [sp, #0x60] - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - bl _dmul - mov r7, r0 - mov r9, r1 - ldr r0, [sp, #0xb0] - ldr r1, [sp, #0xb4] - mov r2, r4 - mov r3, r8 - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r9 - bl _dadd - mov r7, r0 - mov r8, r1 - ldr r0, [sp, #0x60] - ldr r1, [sp, #0x64] - ldr r2, [sp, #0x58] - ldr r3, [sp, #0x5c] - bl _dmul - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - str r2, [sp, #0x68] - str r3, [sp, #0x6c] - bl _dadd - mov r9, r1 - ldr r2, _020E76CC ; =0x40900000 - str r0, [sp, #0x78] - str r9, [sp, #0x7c] - cmp r9, r2 - blt _020E7E0C - add r1, r9, #0xf700000 - add r1, r1, #0xb0000000 - orrs r0, r1, r0 - beq _020E7D8C - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7D8C: - ldr r0, _020E7670 ; =0x652B82FE - ldr r1, _020E76D8 ; =0x3C971547 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r4, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r1, r9 - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r10 - bl _dgr - bls _020E7EC0 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76D0 ; =0x8800759C - ldr r1, _020E76D4 ; =0x7E37E43C - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E0C: - bic r3, r9, #0x80000000 - add r2, r2, #0xcc00 - cmp r3, r2 - blt _020E7EC0 - ldr r2, _020E76DC ; =0x3F6F3400 - add r2, r9, r2 - orrs r2, r2, r0 - beq _020E7E64 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7E64: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dleq - bhi _020E7EC0 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - mov r2, r6 - mov r3, r5 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E76E0 ; =0xC2F8F359 - ldr r1, _020E76E4 ; =0x01A56E1F - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020E7EC0: - ldr r0, _020E7644 ; =0xFFFFFC01 - bic r3, r9, #0x80000000 - ldr r1, _020E7648 ; =0x3FE00000 - add r2, r0, r3, asr #0x14 - cmp r3, r1 - mov r4, #0x0 - ble _020E7F3C - mov r1, #0x100000 - add r2, r2, #0x1 - add r2, r9, r1, asr r2 - bic r3, r2, #0x80000000 - add r0, r0, r3, asr #0x14 - sub r3, r1, #0x1 - mvn r3, r3, asr r0 - sub r1, r1, #0x1 - and r1, r2, r1 - and r2, r2, r3 - str r2, [sp, #0x54] - str r4, [sp, #0x50] - orr r1, r1, #0x100000 - rsb r0, r0, #0x14 - mov r4, r1, asr r0 - cmp r9, #0x0 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - rsblt r4, r4, #0x0 - bl _dsub - str r0, [sp, #0x68] - str r1, [sp, #0x6c] -_020E7F3C: - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - mov r0, r7 - mov r1, r8 - bl _dadd - mov r3, r1 - mov r0, #0x0 - ldr r1, _020E76E8 ; =0x3FE62E43 - mov r2, r0 - str r3, [sp, #0x54] - str r0, [sp, #0x50] - bl _dmul - mov r9, r0 - mov r10, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - ldr r2, [sp, #0x68] - ldr r3, [sp, #0x6c] - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dsub - mov r2, r0 - mov r3, r1 - ldr r0, _020E76EC ; =0xFEFA39EF - ldr r1, _020E76F0 ; =0x3FE62E42 - bl _dmul - mov r7, r0 - mov r8, r1 - ldr r0, _020E76F4 ; =0x0CA86C39 - ldr r1, _020E76F8 ; =0xBE205C61 - ldr r2, [sp, #0x50] - ldr r3, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r8 - bl _dadd - mov r7, r0 - mov r8, r1 - mov r0, r9 - mov r1, r10 - mov r2, r7 - mov r3, r8 - bl _dadd - mov r2, r9 - mov r3, r10 - str r0, [sp, #0x78] - str r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - mov r3, r1 - mov r0, r7 - mov r1, r8 - bl _dsub - mov r8, r0 - mov r9, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r0 - mov r3, r1 - bl _dmul - mov r2, r0 - str r2, [sp, #0x50] - mov r3, r1 - str r3, [sp, #0x54] - ldr r0, _020E76FC ; =0x72BEA4D0 - ldr r1, _020E7700 ; =0x3E663769 - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7704 ; =0xC5D26BF1 - ldr r1, _020E7708 ; =0xBEBBBD41 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E770C ; =0xAF25DE2C - ldr r1, _020E7710 ; =0x3F11566A - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E7714 ; =0x16BEBD93 - ldr r1, _020E7718 ; =0xBF66C16C - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, _020E771C ; =0x5555553E - ldr r1, _020E7720 ; =0x3FC55555 - bl _dadd - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x50] - ldr r1, [sp, #0x54] - bl _dmul - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dsub - mov r2, r0 - str r2, [sp, #0x58] - mov r3, r1 - str r3, [sp, #0x5c] - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - bl _dmul - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x5c] - mov r2, #0x0 - mov r3, #0x40000000 - bl _dsub - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _ddiv - mov r7, r0 - mov r10, r1 - ldr r0, [sp, #0x78] - ldr r1, [sp, #0x7c] - mov r2, r8 - mov r3, r9 - bl _dmul - mov r2, r0 - mov r0, r8 - mov r3, r1 - mov r1, r9 - bl _dadd - mov r2, r0 - mov r0, r7 - mov r3, r1 - mov r1, r10 - bl _dsub - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - bl _dsub - mov r3, r1 - mov r2, r0 - ldr r1, _020E7638 ; =0x3FF00000 - mov r0, #0x0 - bl _dsub - add r3, r1, r4, lsl #0x14 - mov r2, r3, asr #0x14 - str r0, [sp, #0x78] - cmp r2, #0x0 - str r1, [sp, #0x7c] - addgt r0, sp, #0x78 - strgt r3, [r0, #0x4] - bgt _020E81F0 - mov r2, r4 - bl scalbn - str r0, [sp, #0x78] - str r1, [sp, #0x7c] -_020E81F0: - ldr r2, [sp, #0x78] - ldr r3, [sp, #0x7c] - mov r0, r6 - mov r1, r5 - bl _dmul - add sp, sp, #0x80 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - arm_func_end __ieee754_pow - - exception __ieee754_pow, 4488, UNK_020EC738 - - .section .exception,8 - - .global UNK_020EC738 -UNK_020EC738: ; 0x020EC738 - .byte 0x20, 0xFF, 0x01, 0xB8 - .balign 8 + .include "asm/macros.inc" + .include "global.inc" + + .rodata + + .global UNK_02104744 +UNK_02104744: ; 0x02104744 + .word 0x00000000, 0x00000000 + .word 0x40000000, 0x3FE2B803 + .size UNK_02104744,.-UNK_02104744 + + .global UNK_02104754 +UNK_02104754: ; 0x02104754 + .word 0x00000000, 0x3FF00000 + .word 0x00000000, 0x3FF80000 + .size UNK_02104754,.-UNK_02104754 + + .global UNK_02104764 +UNK_02104764: ; 0x02104764 + .word 0x00000000, 0x00000000 + .word 0x43CFD006, 0x3E4CFDEB + .size UNK_02104764,.-UNK_02104764 + + .text + + arm_func_start __ieee754_pow +__ieee754_pow: ; 0x020E708C + stmdb sp!, {r0-r3} + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x80 + ldr r8, [sp, #0xb4] + ldr r6, [sp, #0xac] + ldr r0, [sp, #0xb0] + bic r9, r8, #0x80000000 + orrs r1, r9, r0 + ldr r7, [sp, #0xa8] + bic r4, r6, #0x80000000 + addeq sp, sp, #0x80 + moveq r0, #0x0 + ldreq r1, _020E7638 ; =0x3FF00000 + ldmeqia sp!, {r3-r11,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, _020E763C ; =0x7FF00000 + cmp r4, r1 + bgt _020E70FC + bne _020E70E4 + cmp r7, #0x0 + bne _020E70FC +_020E70E4: + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bgt _020E70FC + bne _020E7120 + cmp r0, #0x0 + beq _020E7120 +_020E70FC: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + bl _dadd + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7120: + cmp r6, #0x0 + mov r5, #0x0 + bge _020E7188 + ldr r1, _020E7640 ; =0x43400000 + cmp r9, r1 + movge r5, #0x2 + bge _020E7188 + sub r1, r1, #0x3500000 + cmp r9, r1 + blt _020E7188 + ldr r1, _020E7644 ; =0xFFFFFC01 + add r1, r1, r9, asr #0x14 + cmp r1, #0x14 + ble _020E7170 + rsb r2, r1, #0x34 + mov r1, r0, lsr r2 + cmp r0, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 + b _020E7188 +_020E7170: + cmp r0, #0x0 + rsbeq r2, r1, #0x14 + moveq r1, r9, asr r2 + cmpeq r9, r1, lsl r2 + andeq r1, r1, #0x1 + rsbeq r5, r1, #0x2 +_020E7188: + cmp r0, #0x0 + bne _020E72E4 + ldr r1, _020E763C ; =0x7FF00000 + cmp r9, r1 + bne _020E723C + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r7 + bne _020E71D0 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r0 + mov r3, r1 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E71D0: + sub r0, r1, #0x40000000 + cmp r4, r0 + blt _020E7200 + cmp r8, #0x0 + ldrge r0, [sp, #0xb0] + ldrge r1, [sp, #0xb4] + movlt r0, #0x0 + add sp, sp, #0x80 + movlt r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7200: + cmp r8, #0x0 + mov r0, #0x0 + addge sp, sp, #0x80 + movge r1, r0 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xb0] + ldr r3, [sp, #0xb4] + mov r1, r0 + bl _dsub + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E723C: + sub r0, r1, #0x40000000 + cmp r9, r0 + bne _020E7288 + cmp r8, #0x0 + ldrge r0, [sp, #0xa8] + ldrge r1, [sp, #0xac] + addge sp, sp, #0x80 + ldmgeia sp!, {r3-r11,lr} + addge sp, sp, #0x10 + bxge lr + ldr r2, [sp, #0xa8] + ldr r3, [sp, #0xac] + sub r1, r1, #0x40000000 + mov r0, #0x0 + bl _ddiv + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7288: + cmp r8, #0x40000000 + bne _020E72B4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + mov r2, r0 + mov r3, r1 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72B4: + ldr r0, _020E7648 ; =0x3FE00000 + cmp r8, r0 + bne _020E72E4 + cmp r6, #0x0 + blt _020E72E4 + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl _dsqrt + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E72E4: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + bl fabs + str r0, [sp, #0x70] + str r1, [sp, #0x74] + cmp r7, #0x0 + bne _020E73E8 + ldr r0, _020E763C ; =0x7FF00000 + cmp r4, r0 + cmpne r4, #0x0 + subne r0, r0, #0x40000000 + cmpne r4, r0 + bne _020E73E8 + ldr r2, [sp, #0x70] + ldr r3, [sp, #0x74] + str r2, [sp, #0x78] + str r3, [sp, #0x7c] + cmp r8, #0x0 + bge _020E7344 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E7344: + cmp r6, #0x0 + bge _020E73D0 + add r0, r4, #0x100000 + add r0, r0, #0xc0000000 + orrs r0, r0, r5 + bne _020E73AC + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r4, r0 + mov r5, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r5 + bl _ddiv + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + b _020E73D0 +_020E73AC: + cmp r5, #0x1 + bne _020E73D0 + mov r0, #0x0 + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r1, r0 + bl _dsub + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E73D0: + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E73E8: + mov r0, r6, asr #0x1f + add r7, r0, #0x1 + orrs r0, r7, r5 + bne _020E7420 + ldr r0, _020E764C ; =__float_nan + ldr r1, _020E7650 ; =errno + ldr r0, [r0, #0x0] + mov r2, #0x21 + str r2, [r1, #0x0] + bl _f2d + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7420: + ldr r3, _020E7654 ; =0x41E00000 + cmp r9, r3 + ble _020E7724 + add r0, r3, #0x2100000 + cmp r9, r0 + ble _020E7490 + ldr r1, _020E7658 ; =0x3FEFFFFF + cmp r4, r1 + bgt _020E7464 + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r1, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7464: + add r0, r1, #0x1 + cmp r4, r0 + blt _020E7490 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r1, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7490: + ldr r2, _020E7658 ; =0x3FEFFFFF + cmp r4, r2 + bge _020E74BC + cmp r8, #0x0 + mov r0, #0x0 + addlt r1, r2, #0x40000001 + add sp, sp, #0x80 + movge r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74BC: + add r0, r2, #0x1 + cmp r4, r0 + ble _020E74E8 + cmp r8, #0x0 + mov r0, #0x0 + addgt r1, r2, #0x40000001 + add sp, sp, #0x80 + movle r1, r0 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E74E8: + ldr r0, [sp, #0xa8] + ldr r1, [sp, #0xac] + add r3, r2, #0x1 + mov r2, #0x0 + bl _dsub + mov r2, r0 + mov r3, r1 + str r0, [sp, #0x50] + str r1, [sp, #0x54] + bl _dmul + mov r6, r1 + mov r4, r0 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + ldr r1, _020E765C ; =0x3FD00000 + mov r0, #0x0 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7660 ; =0x55555555 + sub r1, r0, #0x15800000 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E7648 ; =0x3FE00000 + bl _dsub + mov r2, r0 + mov r0, r4 + mov r3, r1 + mov r1, r6 + bl _dmul + mov r6, r0 + mov r8, r1 + mov r0, #0x60000000 + ldr r1, _020E7664 ; =0x3FF71547 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E7668 ; =0xF85DDF44 + ldr r1, _020E766C ; =0x3E54AE0B + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r11, r0 + mov r10, r1 + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E7664 ; =0x3FF71547 + mov r2, r6 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dsub + mov r6, r0 + mov r8, r1 + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r8 + bl _dadd + mov r2, r4 + mov r3, r9 + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + bl _dsub + mov r2, r0 + mov r0, r6 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r4, r0 + mov r8, r1 + b _020E7C80 + .balign 4 +_020E7638: .word 0x3FF00000 +_020E763C: .word 0x7FF00000 +_020E7640: .word 0x43400000 +_020E7644: .word 0xFFFFFC01 +_020E7648: .word 0x3FE00000 +_020E764C: .word __float_nan +_020E7650: .word errno +_020E7654: .word 0x41E00000 +_020E7658: .word 0x3FEFFFFF +_020E765C: .word 0x3FD00000 +_020E7660: .word 0x55555555 +_020E7664: .word 0x3FF71547 +_020E7668: .word 0xF85DDF44 +_020E766C: .word 0x3E54AE0B +_020E7670: .word 0x652B82FE +_020E7674: .word 0x0003988E +_020E7678: .word 0x000BB67A +_020E767C: .word UNK_02104754 +_020E7680: .word 0x4A454EEF +_020E7684: .word 0x3FCA7E28 +_020E7688: .word 0x93C9DB65 +_020E768C: .word 0x3FCD864A +_020E7690: .word 0xA91D4101 +_020E7694: .word 0x3FD17460 +_020E7698: .word 0x518F264D +_020E769C: .word 0x3FD55555 +_020E76A0: .word 0xDB6FABFF +_020E76A4: .word 0x3FDB6DB6 +_020E76A8: .word 0x33333303 +_020E76AC: .word 0x3FE33333 +_020E76B0: .word 0x40080000 +_020E76B4: .word 0x3FEEC709 +_020E76B8: .word 0x145B01F5 +_020E76BC: .word 0xBE3E2FE0 +_020E76C0: .word 0xDC3A03FD +_020E76C4: .word UNK_02104764 +_020E76C8: .word UNK_02104744 +_020E76CC: .word 0x40900000 +_020E76D0: .word 0x8800759C +_020E76D4: .word 0x7E37E43C +_020E76D8: .word 0x3C971547 +_020E76DC: .word 0x3F6F3400 +_020E76E0: .word 0xC2F8F359 +_020E76E4: .word 0x01A56E1F +_020E76E8: .word 0x3FE62E43 +_020E76EC: .word 0xFEFA39EF +_020E76F0: .word 0x3FE62E42 +_020E76F4: .word 0x0CA86C39 +_020E76F8: .word 0xBE205C61 +_020E76FC: .word 0x72BEA4D0 +_020E7700: .word 0x3E663769 +_020E7704: .word 0xC5D26BF1 +_020E7708: .word 0xBEBBBD41 +_020E770C: .word 0xAF25DE2C +_020E7710: .word 0x3F11566A +_020E7714: .word 0x16BEBD93 +_020E7718: .word 0xBF66C16C +_020E771C: .word 0x5555553E +_020E7720: .word 0x3FC55555 +_020E7724: + cmp r4, #0x100000 + mov r6, #0x0 + bge _020E7754 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + mov r2, r6 + add r3, r3, #0x1600000 + bl _dmul + mov r4, r1 + str r0, [sp, #0x70] + str r4, [sp, #0x74] + sub r6, r6, #0x35 +_020E7754: + ldr r0, _020E7644 ; =0xFFFFFC01 + ldr r1, _020E7674 ; =0x0003988E + and r2, r4, r0, lsr #0xc + add r0, r0, r4, asr #0x14 + orr r9, r2, #0xff00000 + cmp r2, r1 + add r6, r6, r0 + orr r9, r9, #0x30000000 + movle r8, #0x0 + ble _020E7794 + ldr r0, _020E7678 ; =0x000BB67A + cmp r2, r0 + movlt r8, #0x1 + addge r6, r6, #0x1 + subge r9, r9, #0x100000 + movge r8, #0x0 +_020E7794: + ldr r2, _020E767C ; =UNK_02104754 + ldr r0, [sp, #0x70] + add r1, r2, r8, lsl #0x3 + ldr r3, [r1, #0x4] + ldr r2, [r2, r8, lsl #0x3] + mov r1, r9 + str r9, [sp, #0x74] + bl _dsub + ldr r2, _020E767C ; =UNK_02104754 + mov r10, r0 + add r3, r2, r8, lsl #0x3 + mov r4, r1 + ldr r0, [sp, #0x70] + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + mov r1, r9 + bl _dadd + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _ddiv + str r1, [sp, #0x24] + mov r11, r0 + ldr r3, [sp, #0x24] + mov r0, r10 + mov r1, r4 + mov r2, r11 + bl _dmul + mov r2, r9, asr #0x1 + orr r2, r2, #0x20000000 + mov r9, r1 + add r2, r2, #0x80000 + add r1, r2, r8, lsl #0x12 + ldr r2, _020E767C ; =UNK_02104754 + str r0, [sp, #0x28] + add r3, r2, r8, lsl #0x3 + mov r0, #0x0 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + str r9, [sp, #0x4c] + str r1, [sp, #0x44] + str r0, [sp, #0x48] + str r0, [sp, #0x40] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x70] + ldr r1, [sp, #0x74] + bl _dsub + str r0, [sp, #0x2c] + str r1, [sp, #0x1c] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r10, r0 + mov r4, r1 + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x48] + mov r1, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r10 + mov r1, r4 + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, [sp, #0x24] + mov r0, r11 + bl _dmul + str r0, [sp, #0x30] + ldr r0, [sp, #0x28] + str r1, [sp, #0x14] + mov r1, r9 + mov r2, r0 + mov r3, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + mov r2, r4 + mov r3, r10 + bl _dmul + str r0, [sp, #0x34] + mov r11, r1 + ldr r0, _020E7680 ; =0x4A454EEF + ldr r1, _020E7684 ; =0x3FCA7E28 + mov r2, r4 + mov r3, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7688 ; =0x93C9DB65 + ldr r1, _020E768C ; =0x3FCD864A + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7690 ; =0xA91D4101 + ldr r1, _020E7694 ; =0x3FD17460 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7698 ; =0x518F264D + ldr r1, _020E769C ; =0x3FD55555 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A0 ; =0xDB6FABFF + ldr r1, _020E76A4 ; =0x3FDB6DB6 + bl _dadd + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76A8 ; =0x33333303 + ldr r1, _020E76AC ; =0x3FE33333 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x34] + mov r1, r11 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x28] + mov r1, r9 + mov r3, r9 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dadd + mov r4, r0 + ldr r0, [sp, #0x48] + mov r10, r1 + mov r1, r9 + mov r2, r0 + mov r3, r1 + bl _dmul + str r1, [sp, #0xc] + mov r11, r0 + ldr r1, _020E76B0 ; =0x40080000 + ldr r3, [sp, #0xc] + mov r0, #0x0 + mov r2, r11 + bl _dadd + mov r2, r4 + mov r3, r10 + bl _dadd + mov r0, #0x0 + ldr r3, _020E76B0 ; =0x40080000 + mov r2, r0 + str r1, [sp, #0x44] + str r0, [sp, #0x40] + bl _dsub + ldr r3, [sp, #0xc] + mov r2, r11 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dsub + str r0, [sp, #0x38] + str r1, [sp, #0x4] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + bl _dmul + str r0, [sp, #0x3c] + mov r11, r1 + ldr r0, [sp, #0x38] + ldr r1, [sp, #0x4] + ldr r2, [sp, #0x28] + mov r3, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x3c] + mov r1, r11 + bl _dadd + mov r9, r0 + mov r11, r1 + mov r0, r4 + mov r1, r10 + mov r2, r9 + mov r3, r11 + bl _dadd + mov r0, #0x0 + mov r2, r4 + mov r3, r10 + str r1, [sp, #0x6c] + str r0, [sp, #0x68] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r9 + mov r1, r11 + bl _dsub + mov r10, r1 + mov r11, r0 + ldr r1, _020E76B4 ; =0x3FEEC709 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, #0xe0000000 + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E76B8 ; =0x145B01F5 + ldr r1, _020E76BC ; =0xBE3E2FE0 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dmul + mov r2, r11 + mov r3, r10 + mov r11, r0 + mov r10, r1 + ldr r0, _020E76C0 ; =0xDC3A03FD + ldr r1, _020E76B4 ; =0x3FEEC709 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, _020E76C4 ; =UNK_02104764 + add r1, r0, r8, lsl #0x3 + ldr r0, [r0, r8, lsl #0x3] + ldr r1, [r1, #0x4] + bl _dadd + mov r11, r0 + mov r10, r1 + mov r0, r6 + bl _dflt + str r0, [sp, #0x50] + str r1, [sp, #0x54] + mov r0, r4 + mov r1, r9 + mov r2, r11 + mov r3, r10 + bl _dadd + ldr r2, _020E76C8 ; =UNK_02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dadd + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dsub + ldr r2, _020E76C8 ; =UNK_02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dsub + mov r2, r4 + mov r3, r9 + bl _dsub + mov r2, r0 + mov r0, r11 + mov r3, r1 + mov r1, r10 + bl _dsub + mov r4, r0 + mov r8, r1 +_020E7C80: + sub r0, r5, #0x1 + ldr r1, [sp, #0xb4] + orrs r0, r7, r0 + ldr r5, _020E7638 ; =0x3FF00000 + mov r2, #0x0 + ldr r0, [sp, #0xb0] + mov r3, r1 + mov r6, #0x0 + subeq r5, r5, #0x80000000 + str r1, [sp, #0x64] + str r2, [sp, #0x60] + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + bl _dmul + mov r7, r0 + mov r9, r1 + ldr r0, [sp, #0xb0] + ldr r1, [sp, #0xb4] + mov r2, r4 + mov r3, r8 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r9 + bl _dadd + mov r7, r0 + mov r8, r1 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x64] + ldr r2, [sp, #0x58] + ldr r3, [sp, #0x5c] + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + str r2, [sp, #0x68] + str r3, [sp, #0x6c] + bl _dadd + mov r9, r1 + ldr r2, _020E76CC ; =0x40900000 + str r0, [sp, #0x78] + str r9, [sp, #0x7c] + cmp r9, r2 + blt _020E7E0C + add r1, r9, #0xf700000 + add r1, r1, #0xb0000000 + orrs r0, r1, r0 + beq _020E7D8C + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7D8C: + ldr r0, _020E7670 ; =0x652B82FE + ldr r1, _020E76D8 ; =0x3C971547 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r1, r9 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dgr + bls _020E7EC0 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76D0 ; =0x8800759C + ldr r1, _020E76D4 ; =0x7E37E43C + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E0C: + bic r3, r9, #0x80000000 + add r2, r2, #0xcc00 + cmp r3, r2 + blt _020E7EC0 + ldr r2, _020E76DC ; =0x3F6F3400 + add r2, r9, r2 + orrs r2, r2, r0 + beq _020E7E64 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7E64: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dleq + bhi _020E7EC0 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + mov r2, r6 + mov r3, r5 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E76E0 ; =0xC2F8F359 + ldr r1, _020E76E4 ; =0x01A56E1F + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr +_020E7EC0: + ldr r0, _020E7644 ; =0xFFFFFC01 + bic r3, r9, #0x80000000 + ldr r1, _020E7648 ; =0x3FE00000 + add r2, r0, r3, asr #0x14 + cmp r3, r1 + mov r4, #0x0 + ble _020E7F3C + mov r1, #0x100000 + add r2, r2, #0x1 + add r2, r9, r1, asr r2 + bic r3, r2, #0x80000000 + add r0, r0, r3, asr #0x14 + sub r3, r1, #0x1 + mvn r3, r3, asr r0 + sub r1, r1, #0x1 + and r1, r2, r1 + and r2, r2, r3 + str r2, [sp, #0x54] + str r4, [sp, #0x50] + orr r1, r1, #0x100000 + rsb r0, r0, #0x14 + mov r4, r1, asr r0 + cmp r9, #0x0 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + rsblt r4, r4, #0x0 + bl _dsub + str r0, [sp, #0x68] + str r1, [sp, #0x6c] +_020E7F3C: + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, r7 + mov r1, r8 + bl _dadd + mov r3, r1 + mov r0, #0x0 + ldr r1, _020E76E8 ; =0x3FE62E43 + mov r2, r0 + str r3, [sp, #0x54] + str r0, [sp, #0x50] + bl _dmul + mov r9, r0 + mov r10, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dsub + mov r2, r0 + mov r3, r1 + ldr r0, _020E76EC ; =0xFEFA39EF + ldr r1, _020E76F0 ; =0x3FE62E42 + bl _dmul + mov r7, r0 + mov r8, r1 + ldr r0, _020E76F4 ; =0x0CA86C39 + ldr r1, _020E76F8 ; =0xBE205C61 + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r8 + bl _dadd + mov r7, r0 + mov r8, r1 + mov r0, r9 + mov r1, r10 + mov r2, r7 + mov r3, r8 + bl _dadd + mov r2, r9 + mov r3, r10 + str r0, [sp, #0x78] + str r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r7 + mov r1, r8 + bl _dsub + mov r8, r0 + mov r9, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r0 + mov r3, r1 + bl _dmul + mov r2, r0 + str r2, [sp, #0x50] + mov r3, r1 + str r3, [sp, #0x54] + ldr r0, _020E76FC ; =0x72BEA4D0 + ldr r1, _020E7700 ; =0x3E663769 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7704 ; =0xC5D26BF1 + ldr r1, _020E7708 ; =0xBEBBBD41 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E770C ; =0xAF25DE2C + ldr r1, _020E7710 ; =0x3F11566A + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E7714 ; =0x16BEBD93 + ldr r1, _020E7718 ; =0xBF66C16C + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, _020E771C ; =0x5555553E + ldr r1, _020E7720 ; =0x3FC55555 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dsub + mov r2, r0 + str r2, [sp, #0x58] + mov r3, r1 + str r3, [sp, #0x5c] + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + bl _dmul + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x58] + ldr r1, [sp, #0x5c] + mov r2, #0x0 + mov r3, #0x40000000 + bl _dsub + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _ddiv + mov r7, r0 + mov r10, r1 + ldr r0, [sp, #0x78] + ldr r1, [sp, #0x7c] + mov r2, r8 + mov r3, r9 + bl _dmul + mov r2, r0 + mov r0, r8 + mov r3, r1 + mov r1, r9 + bl _dadd + mov r2, r0 + mov r0, r7 + mov r3, r1 + mov r1, r10 + bl _dsub + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + bl _dsub + mov r3, r1 + mov r2, r0 + ldr r1, _020E7638 ; =0x3FF00000 + mov r0, #0x0 + bl _dsub + add r3, r1, r4, lsl #0x14 + mov r2, r3, asr #0x14 + str r0, [sp, #0x78] + cmp r2, #0x0 + str r1, [sp, #0x7c] + addgt r0, sp, #0x78 + strgt r3, [r0, #0x4] + bgt _020E81F0 + mov r2, r4 + bl scalbn + str r0, [sp, #0x78] + str r1, [sp, #0x7c] +_020E81F0: + ldr r2, [sp, #0x78] + ldr r3, [sp, #0x7c] + mov r0, r6 + mov r1, r5 + bl _dmul + add sp, sp, #0x80 + ldmia sp!, {r3-r11,lr} + add sp, sp, #0x10 + bx lr + arm_func_end __ieee754_pow + + exception __ieee754_pow, 4488, UNK_020EC738 + + .section .exception,8 + + .global UNK_020EC738 +UNK_020EC738: ; 0x020EC738 + .byte 0x20, 0xFF, 0x01, 0xB8 + .balign 8 diff --git a/arm9/asm/MSL_DPMath_s_copysign.s b/arm9/asm/MSL_DPMath_s_copysign.s index b8afdb31a..b798bcbf0 100644 --- a/arm9/asm/MSL_DPMath_s_copysign.s +++ b/arm9/asm/MSL_DPMath_s_copysign.s @@ -1,18 +1,18 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start copysign -copysign: ; 0x020E8214 - stmdb sp!, {r0-r3} - ldr r1, [sp, #0x4] - ldr r0, [sp, #0xc] - bic r1, r1, #0x80000000 - and r0, r0, #0x80000000 - orr r1, r1, r0 - ldr r0, [sp, #0x0] - str r1, [sp, #0x4] - add sp, sp, #0x10 - bx lr - arm_func_end copysign + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start copysign +copysign: ; 0x020E8214 + stmdb sp!, {r0-r3} + ldr r1, [sp, #0x4] + ldr r0, [sp, #0xc] + bic r1, r1, #0x80000000 + and r0, r0, #0x80000000 + orr r1, r1, r0 + ldr r0, [sp, #0x0] + str r1, [sp, #0x4] + add sp, sp, #0x10 + bx lr + arm_func_end copysign diff --git a/arm9/asm/MSL_DPMath_s_fabs.s b/arm9/asm/MSL_DPMath_s_fabs.s index 049675a42..d51fee8e2 100644 --- a/arm9/asm/MSL_DPMath_s_fabs.s +++ b/arm9/asm/MSL_DPMath_s_fabs.s @@ -1,16 +1,16 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start fabs -fabs: ; 0x020E823C - stmdb sp!, {r0-r3} - add r2, sp, #0x0 - ldr r1, [r2, #0x4] - ldr r0, [sp, #0x0] - bic r1, r1, #0x80000000 - str r1, [r2, #0x4] - add sp, sp, #0x10 - bx lr - arm_func_end fabs + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start fabs +fabs: ; 0x020E823C + stmdb sp!, {r0-r3} + add r2, sp, #0x0 + ldr r1, [r2, #0x4] + ldr r0, [sp, #0x0] + bic r1, r1, #0x80000000 + str r1, [r2, #0x4] + add sp, sp, #0x10 + bx lr + arm_func_end fabs diff --git a/arm9/asm/MSL_DPMath_s_frexp.s b/arm9/asm/MSL_DPMath_s_frexp.s index b07ce1d6c..dbc512586 100644 --- a/arm9/asm/MSL_DPMath_s_frexp.s +++ b/arm9/asm/MSL_DPMath_s_frexp.s @@ -1,61 +1,61 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start frexp -frexp: ; 0x020E825C - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r1, [sp, #0xc] - ldr r0, _020E8308 ; =0x7FF00000 - mov r4, r2 - bic r3, r1, #0x80000000 - mov r2, #0x0 - str r2, [r4, #0x0] - cmp r3, r0 - ldr r0, [sp, #0x8] - bge _020E8290 - orrs r0, r3, r0 - bne _020E82A4 -_020E8290: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E82A4: - cmp r3, #0x100000 - bge _020E82D0 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E830C ; =0x43500000 - bl _dmul - mvn r2, #0x35 - str r0, [sp, #0x8] - str r1, [sp, #0xc] - str r2, [r4, #0x0] - bic r3, r1, #0x80000000 -_020E82D0: - ldr r2, _020E8310 ; =0x800FFFFF - ldr r0, _020E8314 ; =0xFFFFFC02 - and r1, r1, r2 - orr r1, r1, #0xfe00000 - orr r1, r1, #0x30000000 - ldr r2, [r4, #0x0] - add r0, r0, r3, asr #0x14 - add r2, r2, r0 - ldr r0, [sp, #0x8] - str r2, [r4, #0x0] - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8308: .word 0x7FF00000 -_020E830C: .word 0x43500000 -_020E8310: .word 0x800FFFFF -_020E8314: .word 0xFFFFFC02 - arm_func_end frexp - - exception frexp, 189, 0x00300120 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start frexp +frexp: ; 0x020E825C + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r1, [sp, #0xc] + ldr r0, _020E8308 ; =0x7FF00000 + mov r4, r2 + bic r3, r1, #0x80000000 + mov r2, #0x0 + str r2, [r4, #0x0] + cmp r3, r0 + ldr r0, [sp, #0x8] + bge _020E8290 + orrs r0, r3, r0 + bne _020E82A4 +_020E8290: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E82A4: + cmp r3, #0x100000 + bge _020E82D0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E830C ; =0x43500000 + bl _dmul + mvn r2, #0x35 + str r0, [sp, #0x8] + str r1, [sp, #0xc] + str r2, [r4, #0x0] + bic r3, r1, #0x80000000 +_020E82D0: + ldr r2, _020E8310 ; =0x800FFFFF + ldr r0, _020E8314 ; =0xFFFFFC02 + and r1, r1, r2 + orr r1, r1, #0xfe00000 + orr r1, r1, #0x30000000 + ldr r2, [r4, #0x0] + add r0, r0, r3, asr #0x14 + add r2, r2, r0 + ldr r0, [sp, #0x8] + str r2, [r4, #0x0] + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8308: .word 0x7FF00000 +_020E830C: .word 0x43500000 +_020E8310: .word 0x800FFFFF +_020E8314: .word 0xFFFFFC02 + arm_func_end frexp + + exception frexp, 189, 0x00300120 diff --git a/arm9/asm/MSL_DPMath_s_ldexp.s b/arm9/asm/MSL_DPMath_s_ldexp.s index 131fe52ff..509b1774a 100644 --- a/arm9/asm/MSL_DPMath_s_ldexp.s +++ b/arm9/asm/MSL_DPMath_s_ldexp.s @@ -1,166 +1,166 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start ldexp -ldexp: ; 0x020E8318 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r4, r2 - bl __fpclassifyf - cmp r0, #0x2 - ble _020E8350 - mov r0, #0x0 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r1, r0 - bl _deq - bne _020E8364 -_020E8350: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8364: - ldr r3, [sp, #0xc] - ldr r0, _020E8538 ; =0x7FF00000 - ldr r1, [sp, #0x8] - and r0, r3, r0 - movs r12, r0, asr #0x14 - bne _020E83F0 - bic r0, r3, #0x80000000 - orrs r0, r1, r0 - ldreq r0, [sp, #0x8] - ldreq r1, [sp, #0xc] - ldmeqia sp!, {r4,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - ldr r3, _020E853C ; =0x43500000 - mov r2, #0x0 - bl _dmul - mov r3, r1 - ldr r1, _020E8538 ; =0x7FF00000 - ldr ip, _020E8540 ; =0xFFFF3CB0 - and r1, r3, r1 - mov r2, r0 - mov r0, r1, asr #0x14 - str r2, [sp, #0x8] - str r3, [sp, #0xc] - cmp r4, r12 - sub r12, r0, #0x36 - bge _020E83F0 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E83F0: - ldr r0, _020E854C ; =0x000007FF - cmp r12, r0 - bne _020E841C - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r2, r0 - mov r3, r1 - bl _dadd - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E841C: - add r2, r12, r4 - sub r0, r0, #0x1 - cmp r2, r0 - ble _020E8460 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8460: - cmp r2, #0x0 - ble _020E8488 - ldr r1, _020E8558 ; =0x800FFFFF - ldr r0, [sp, #0x8] - and r1, r3, r1 - orr r1, r1, r2, lsl #0x14 - str r1, [sp, #0xc] - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8488: - mvn r0, #0x35 - cmp r2, r0 - bgt _020E8508 - ldr r0, _020E855C ; =0x0000C350 - cmp r4, r0 - ble _020E84D4 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8550 ; =0x8800759C - ldr r1, _020E8554 ; =0x7E37E43C - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E84D4: - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl copysign - mov r2, r0 - mov r3, r1 - ldr r0, _020E8544 ; =0xC2F8F359 - ldr r1, _020E8548 ; =0x01A56E1F - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr -_020E8508: - ldr r0, _020E8558 ; =0x800FFFFF - add r1, r2, #0x36 - and r0, r3, r0 - orr r3, r0, r1, lsl #0x14 - ldr r2, [sp, #0x8] - ldr r1, _020E8560 ; =0x3C900000 - mov r0, #0x0 - str r3, [sp, #0xc] - bl _dmul - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E8538: .word 0x7FF00000 -_020E853C: .word 0x43500000 -_020E8540: .word 0xFFFF3CB0 -_020E8544: .word 0xC2F8F359 -_020E8548: .word 0x01A56E1F -_020E854C: .word 0x000007FF -_020E8550: .word 0x8800759C -_020E8554: .word 0x7E37E43C -_020E8558: .word 0x800FFFFF -_020E855C: .word 0x0000C350 -_020E8560: .word 0x3C900000 - arm_func_end ldexp - - exception ldexp, 589, 0x00300120 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start ldexp +ldexp: ; 0x020E8318 + stmdb sp!, {r0-r3} + stmdb sp!, {r4,lr} + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r4, r2 + bl __fpclassifyf + cmp r0, #0x2 + ble _020E8350 + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _deq + bne _020E8364 +_020E8350: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8364: + ldr r3, [sp, #0xc] + ldr r0, _020E8538 ; =0x7FF00000 + ldr r1, [sp, #0x8] + and r0, r3, r0 + movs r12, r0, asr #0x14 + bne _020E83F0 + bic r0, r3, #0x80000000 + orrs r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreq r1, [sp, #0xc] + ldmeqia sp!, {r4,lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + ldr r3, _020E853C ; =0x43500000 + mov r2, #0x0 + bl _dmul + mov r3, r1 + ldr r1, _020E8538 ; =0x7FF00000 + ldr ip, _020E8540 ; =0xFFFF3CB0 + and r1, r3, r1 + mov r2, r0 + mov r0, r1, asr #0x14 + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, r12 + sub r12, r0, #0x36 + bge _020E83F0 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E83F0: + ldr r0, _020E854C ; =0x000007FF + cmp r12, r0 + bne _020E841C + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r0 + mov r3, r1 + bl _dadd + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E841C: + add r2, r12, r4 + sub r0, r0, #0x1 + cmp r2, r0 + ble _020E8460 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8460: + cmp r2, #0x0 + ble _020E8488 + ldr r1, _020E8558 ; =0x800FFFFF + ldr r0, [sp, #0x8] + and r1, r3, r1 + orr r1, r1, r2, lsl #0x14 + str r1, [sp, #0xc] + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8488: + mvn r0, #0x35 + cmp r2, r0 + bgt _020E8508 + ldr r0, _020E855C ; =0x0000C350 + cmp r4, r0 + ble _020E84D4 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8550 ; =0x8800759C + ldr r1, _020E8554 ; =0x7E37E43C + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E84D4: + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl copysign + mov r2, r0 + mov r3, r1 + ldr r0, _020E8544 ; =0xC2F8F359 + ldr r1, _020E8548 ; =0x01A56E1F + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr +_020E8508: + ldr r0, _020E8558 ; =0x800FFFFF + add r1, r2, #0x36 + and r0, r3, r0 + orr r3, r0, r1, lsl #0x14 + ldr r2, [sp, #0x8] + ldr r1, _020E8560 ; =0x3C900000 + mov r0, #0x0 + str r3, [sp, #0xc] + bl _dmul + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020E8538: .word 0x7FF00000 +_020E853C: .word 0x43500000 +_020E8540: .word 0xFFFF3CB0 +_020E8544: .word 0xC2F8F359 +_020E8548: .word 0x01A56E1F +_020E854C: .word 0x000007FF +_020E8550: .word 0x8800759C +_020E8554: .word 0x7E37E43C +_020E8558: .word 0x800FFFFF +_020E855C: .word 0x0000C350 +_020E8560: .word 0x3C900000 + arm_func_end ldexp + + exception ldexp, 589, 0x00300120 diff --git a/arm9/asm/MSL_DPMath_w_pow.s b/arm9/asm/MSL_DPMath_w_pow.s index c0f6346b5..512fcf3a2 100644 --- a/arm9/asm/MSL_DPMath_w_pow.s +++ b/arm9/asm/MSL_DPMath_w_pow.s @@ -1,14 +1,14 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start pow -pow: ; 0x020E8564 - ldr ip, _020E856C ; =__ieee754_pow - bx r12 - .balign 4 -_020E856C: .word __ieee754_pow - arm_func_end pow - - exception pow, 13, 0x00000000 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start pow +pow: ; 0x020E8564 + ldr ip, _020E856C ; =__ieee754_pow + bx r12 + .balign 4 +_020E856C: .word __ieee754_pow + arm_func_end pow + + exception pow, 13, 0x00000000 diff --git a/arm9/asm/MSL_fp_ansi.s b/arm9/asm/MSL_fp_ansi.s index 734e3090d..daa30223f 100644 --- a/arm9/asm/MSL_fp_ansi.s +++ b/arm9/asm/MSL_fp_ansi.s @@ -1,1609 +1,1609 @@ - .include "global.inc" - .include "asm/macros.inc" - - .data - - .global UNK_02106E48 -UNK_02106E48: ; 0x02106E48 - .word 0x00000000, 0x40240000 - .word 0x00000000, 0x40590000 - .word 0x00000000, 0x408F4000 - .word 0x00000000, 0x40C38800 - .word 0x00000000, 0x40F86A00 - .word 0x00000000, 0x412E8480 - .word 0x00000000, 0x416312D0 - .word 0x00000000, 0x4197D784 - - .global UNK_02106E88 -UNK_02106E88: ; 0x02106E88 - .asciz "542101086242752217003726400434970855712890625" - - .balign 4, 0 - .global UNK_02106EB8 -UNK_02106EB8: ; 0x02106EB8 - .asciz "11102230246251565404236316680908203125" - - .balign 4, 0 - .global UNK_02106EE0 -UNK_02106EE0: ; 0x02106EE0 - .asciz "23283064365386962890625" - - .balign 4, 0 - .global UNK_02106EF8 -UNK_02106EF8: ; 0x02106EF8 - .asciz "152587890625" - - .balign 4, 0 - .global UNK_02106F08 -UNK_02106F08: ; 0x02106F08 - .asciz "390625" - - .balign 4, 0 - .global UNK_02106F10 -UNK_02106F10: ; 0x02106F10 - .asciz "78125" - - .balign 4, 0 - .global UNK_02106F18 -UNK_02106F18: ; 0x02106F18 - .asciz "15625" - - .balign 4, 0 - .global UNK_02106F20 -UNK_02106F20: ; 0x02106F20 - .asciz "3125" - - .balign 4, 0 - .global UNK_02106F28 -UNK_02106F28: ; 0x02106F28 - .asciz "625" - - .balign 4, 0 - .global UNK_02106F2C -UNK_02106F2C: ; 0x02106F2C - .asciz "125" - - .balign 4, 0 - .global UNK_02106F30 -UNK_02106F30: ; 0x02106F30 - .asciz "25" - - .balign 4, 0 - .global UNK_02106F34 -UNK_02106F34: ; 0x02106F34 - .asciz "5" - - .balign 4, 0 - .global UNK_02106F38 -UNK_02106F38: ; 0x02106F38 - .asciz "1" - - .balign 4, 0 - .global UNK_02106F3C -UNK_02106F3C: ; 0x02106F3C - .asciz "2" - - .balign 4, 0 - .global UNK_02106F40 -UNK_02106F40: ; 0x02106F40 - .asciz "4" - - .balign 4, 0 - .global UNK_02106F44 -UNK_02106F44: ; 0x02106F44 - .asciz "8" - - .balign 4, 0 - .global UNK_02106F48 -UNK_02106F48: ; 0x02106F48 - .asciz "16" - - .balign 4, 0 - .global UNK_02106F4C -UNK_02106F4C: ; 0x02106F4C - .asciz "32" - - .balign 4, 0 - .global UNK_02106F50 -UNK_02106F50: ; 0x02106F50 - .asciz "64" - - .balign 4, 0 - .global UNK_02106F54 -UNK_02106F54: ; 0x02106F54 - .asciz "128" - - .balign 4, 0 - .global UNK_02106F58 -UNK_02106F58: ; 0x02106F58 - .asciz "256" - - .balign 4, 0 - .global UNK_02106F5C -UNK_02106F5C: ; 0x02106F5C - .asciz "179769313486231580793728714053034151" - - .text - - arm_func_start __must_round -__must_round: ; 0x020E8570 - add r3, r0, #0x5 - ldrb r2, [r3, r1] - add r12, r3, r1 - cmp r2, #0x5 - movhi r0, #0x1 - bxhi lr - mvncc r0, #0x0 - bxcc lr - ldrb r2, [r0, #0x4] - add r12, r12, #0x1 - add r3, r3, r2 - cmp r12, r3 - bhs _020E85C0 -_020E85A4: - ldrb r2, [r12, #0x0] - cmp r2, #0x0 - movne r0, #0x1 - bxne lr - add r12, r12, #0x1 - cmp r12, r3 - blo _020E85A4 -_020E85C0: - sub r1, r1, #0x1 - add r0, r0, r1 - ldrb r0, [r0, #0x5] - tst r0, #0x1 - movne r0, #0x1 - mvneq r0, #0x0 - bx lr - arm_func_end __must_round - - arm_func_start __dorounddecup -__dorounddecup: ; 0x020E85DC - add r3, r0, #0x5 - add r1, r3, r1 - sub r12, r1, #0x1 - mov r1, #0x0 -_020E85EC: - ldrb r2, [r12, #0x0] - cmp r2, #0x9 - addcc r0, r2, #0x1 - strccb r0, [r12, #0x0] - bxcc lr - cmp r12, r3 - bne _020E8620 - mov r1, #0x1 - strb r1, [r12, #0x0] - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] - bx lr -_020E8620: - strb r1, [r12], #-0x1 - b _020E85EC - bx lr - arm_func_end __dorounddecup - - arm_func_start __rounddec -__rounddec: ; 0x020E862C - stmdb sp!, {r3-r5,lr} - mov r4, r1 - mov r5, r0 - cmp r4, #0x0 - ldmleia sp!, {r3-r5,pc} - ldrb r2, [r5, #0x4] - cmp r4, r2 - ldmgeia sp!, {r3-r5,pc} - bl __must_round - strb r4, [r5, #0x4] - cmp r0, #0x0 - ldmltia sp!, {r3-r5,pc} - mov r0, r5 - mov r1, r4 - bl __dorounddecup - ldmia sp!, {r3-r5,pc} - arm_func_end __rounddec - - arm_func_start __ull2dec -__ull2dec: ; 0x020E866C - stmdb sp!, {r3-r11,lr} - mov r10, r0 - mov r0, #0x0 - mov r8, r2 - strb r0, [r10, #0x0] - mov r9, r1 - cmp r8, #0x0 - strb r0, [r10, #0x4] - cmpeq r9, #0x0 - beq _020E86F8 - mov r6, #0xa - mov r11, r0 - mov r5, r0 - mov r4, r0 -_020E86A4: - ldrb r1, [r10, #0x4] - mov r0, r9 - mov r2, r6 - add r3, r1, #0x1 - mov r7, r1 - strb r3, [r10, #0x4] - mov r1, r8 - mov r3, r11 - bl _ull_mod - add r1, r10, r7 - strb r0, [r1, #0x5] - mov r0, r9 - mov r1, r8 - mov r2, #0xa - mov r3, #0x0 - bl _ll_udiv - mov r8, r1 - mov r9, r0 - cmp r8, r5 - cmpeq r9, r4 - bne _020E86A4 -_020E86F8: - ldrb r0, [r10, #0x4] - add r2, r10, #0x5 - add r0, r2, r0 - sub r3, r0, #0x1 - cmp r2, r3 - bhs _020E8728 -_020E8710: - ldrb r0, [r3, #0x0] - ldrb r1, [r2, #0x0] - strb r0, [r2], #0x1 - strb r1, [r3], #-0x1 - cmp r2, r3 - blo _020E8710 -_020E8728: - ldrb r0, [r10, #0x4] - sub r0, r0, #0x1 - strh r0, [r10, #0x2] - ldmia sp!, {r3-r11,pc} - arm_func_end __ull2dec - - arm_func_start __timesdec -__timesdec: ; 0x020E8738 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x40 - ldrb r6, [r1, #0x4] - ldrb r5, [r2, #0x4] - mov r4, #0x0 - add r3, sp, #0x0 - add r5, r6, r5 - sub r5, r5, #0x1 - add r3, r3, r5 - add r6, r3, #0x1 - mov r7, r6 - strb r4, [r0, #0x0] - cmp r5, #0x0 - ble _020E8800 - add lr, r1, #0x5 - add r11, r2, #0x5 -_020E8778: - ldrb r3, [r2, #0x4] - sub r10, r3, #0x1 - sub r3, r5, r10 - subs r9, r3, #0x1 - ldrb r3, [r1, #0x4] - movmi r9, #0x0 - submi r10, r5, #0x1 - add r8, r10, #0x1 - sub r3, r3, r9 - cmp r8, r3 - movgt r8, r3 - add r10, r11, r10 - add r9, lr, r9 - cmp r8, #0x0 - ble _020E87CC -_020E87B4: - ldrb r12, [r9], #0x1 - ldrb r3, [r10], #-0x1 - sub r8, r8, #0x1 - cmp r8, #0x0 - mla r4, r12, r3, r4 - bgt _020E87B4 -_020E87CC: - ldr r3, _020E88B8 ; =0xCCCCCCCD - sub r5, r5, #0x1 - umull r8, r9, r4, r3 - mov r9, r9, lsr #0x3 - cmp r5, #0x0 - mov r10, #0xa - umull r8, r9, r10, r9 - sub r9, r4, r8 - strb r9, [r6, #-0x1]! - mov r8, r4 - umull r3, r4, r8, r3 - mov r4, r4, lsr #0x3 - bgt _020E8778 -_020E8800: - ldrsh r3, [r1, #0x2] - ldrsh r1, [r2, #0x2] - cmp r4, #0x0 - add r1, r3, r1 - strh r1, [r0, #0x2] - beq _020E8828 - strb r4, [r6, #-0x1]! - ldrsh r1, [r0, #0x2] - add r1, r1, #0x1 - strh r1, [r0, #0x2] -_020E8828: - mov r3, #0x0 - b _020E8840 -_020E8830: - ldrb r2, [r6], #0x1 - add r1, r0, r3 - add r3, r3, #0x1 - strb r2, [r1, #0x5] -_020E8840: - cmp r3, #0x20 - bge _020E8850 - cmp r6, r7 - blo _020E8830 -_020E8850: - cmp r6, r7 - addcs sp, sp, #0x40 - strb r3, [r0, #0x4] - ldmcsia sp!, {r3-r11,pc} - ldrb r1, [r6, #0x0] - cmp r1, #0x5 - addcc sp, sp, #0x40 - ldmccia sp!, {r3-r11,pc} - bne _020E88A8 - add r2, r6, #0x1 - cmp r2, r7 - bhs _020E8898 -_020E8880: - ldrb r1, [r2, #0x0] - cmp r1, #0x0 - bne _020E88A8 - add r2, r2, #0x1 - cmp r2, r7 - blo _020E8880 -_020E8898: - ldrb r1, [r6, #-0x1] - tst r1, #0x1 - addeq sp, sp, #0x40 - ldmeqia sp!, {r3-r11,pc} -_020E88A8: - ldrb r1, [r0, #0x4] - bl __dorounddecup - add sp, sp, #0x40 - ldmia sp!, {r3-r11,pc} - .balign 4 -_020E88B8: .word 0xCCCCCCCD - arm_func_end __timesdec - - arm_func_start __str2dec -__str2dec: ; 0x020E88BC - stmdb sp!, {r3,lr} - strh r2, [r0, #0x2] - mov r12, #0x0 - strb r12, [r0, #0x0] - b _020E88E4 -_020E88D0: - ldrsb r3, [r1], #0x1 - add r2, r0, r12 - add r12, r12, #0x1 - sub r3, r3, #0x30 - strb r3, [r2, #0x5] -_020E88E4: - cmp r12, #0x20 - bge _020E88F8 - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E88D0 -_020E88F8: - strb r12, [r0, #0x4] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} - cmp r2, #0x5 - ldmltia sp!, {r3,pc} - bgt _020E894C - ldrsb r2, [r1, #0x1] - add r1, r1, #0x1 - cmp r2, #0x0 - beq _020E8938 -_020E8924: - cmp r2, #0x30 - bne _020E894C - ldrsb r2, [r1, #0x1]! - cmp r2, #0x0 - bne _020E8924 -_020E8938: - sub r1, r12, #0x1 - add r1, r0, r1 - ldrb r1, [r1, #0x5] - tst r1, #0x1 - ldmeqia sp!, {r3,pc} -_020E894C: - ldrb r1, [r0, #0x4] - bl __dorounddecup - ldmia sp!, {r3,pc} - arm_func_end __str2dec - - arm_func_start __two_exp -__two_exp: ; 0x020E8958 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4c - mov r4, r1 - mvn r2, #0x34 - mov r5, r0 - cmp r4, r2 - bgt _020E8988 - bge _020E8A54 - sub r0, r2, #0xb - cmp r4, r0 - beq _020E8A3C - b _020E8BE4 -_020E8988: - add r1, r4, #0x20 - cmp r1, #0x28 - addls pc, pc, r1, lsl #0x2 - b _020E8BE4 - b _020E8A68 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8A7C ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8BE4 ; case - b _020E8A90 ; case - b _020E8AA4 ; case - b _020E8AB8 ; case - b _020E8ACC ; case - b _020E8AE0 ; case - b _020E8AF4 ; case - b _020E8B08 ; case - b _020E8B1C ; case - b _020E8B30 ; case - b _020E8B44 ; case - b _020E8B58 ; case - b _020E8B6C ; case - b _020E8B80 ; case - b _020E8B94 ; case - b _020E8BA8 ; case - b _020E8BBC ; case - b _020E8BD0 ; case -_020E8A3C: - ldr r1, _020E8C88 ; =UNK_02106E88 - mov r0, r5 - mvn r2, #0x13 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A54: - ldr r1, _020E8C8C ; =UNK_02106EB8 - add r2, r2, #0x25 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A68: - ldr r1, _020E8C90 ; =UNK_02106EE0 - add r2, r2, #0x2b - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A7C: - ldr r1, _020E8C94 ; =UNK_02106EF8 - add r2, r2, #0x30 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8A90: - ldr r1, _020E8C98 ; =UNK_02106F08 - add r2, r2, #0x32 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8AA4: - ldr r1, _020E8C9C ; =UNK_02106F10 - add r2, r2, #0x32 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8AB8: - ldr r1, _020E8CA0 ; =UNK_02106F18 - add r2, r2, #0x33 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8ACC: - ldr r1, _020E8CA4 ; =UNK_02106F20 - add r2, r2, #0x33 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8AE0: - ldr r1, _020E8CA8 ; =UNK_02106F28 - add r2, r2, #0x33 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8AF4: - ldr r1, _020E8CAC ; =UNK_02106F2C - add r2, r2, #0x34 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B08: - ldr r1, _020E8CB0 ; =UNK_02106F30 - add r2, r2, #0x34 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B1C: - ldr r1, _020E8CB4 ; =UNK_02106F34 - add r2, r2, #0x34 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B30: - ldr r1, _020E8CB8 ; =UNK_02106F38 - mov r2, #0x0 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B44: - ldr r1, _020E8CBC ; =UNK_02106F3C - mov r2, #0x0 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B58: - ldr r1, _020E8CC0 ; =UNK_02106F40 - mov r2, #0x0 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B6C: - ldr r1, _020E8CC4 ; =UNK_02106F44 - mov r2, #0x0 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B80: - ldr r1, _020E8CC8 ; =UNK_02106F48 - mov r2, #0x1 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8B94: - ldr r1, _020E8CCC ; =UNK_02106F4C - mov r2, #0x1 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8BA8: - ldr r1, _020E8CD0 ; =UNK_02106F50 - mov r2, #0x1 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8BBC: - ldr r1, _020E8CD4 ; =UNK_02106F54 - mov r2, #0x2 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8BD0: - ldr r1, _020E8CD8 ; =UNK_02106F58 - mov r2, #0x2 - bl __str2dec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} -_020E8BE4: - and r0, r4, #0x80000000 - add r1, r4, r0, lsr #0x1f - add r0, sp, #0x26 - mov r1, r1, asr #0x1 - bl __two_exp - add r1, sp, #0x26 - mov r0, r5 - mov r2, r1 - bl __timesdec - tst r4, #0x1 - addeq sp, sp, #0x4c - ldmeqia sp!, {r4-r5,pc} - add r3, sp, #0x0 - mov r12, r5 - mov r2, #0x9 -_020E8C20: - ldrh r1, [r12, #0x0] - ldrh r0, [r12, #0x2] - add r12, r12, #0x4 - subs r2, r2, #0x1 - strh r1, [r3, #0x0] - strh r0, [r3, #0x2] - add r3, r3, #0x4 - bne _020E8C20 - ldrh r0, [r12, #0x0] - cmp r4, #0x0 - strh r0, [r3, #0x0] - add r0, sp, #0x26 - ble _020E8C64 - ldr r1, _020E8CBC ; =UNK_02106F3C - mov r2, #0x0 - bl __str2dec - b _020E8C70 -_020E8C64: - ldr r1, _020E8CB4 ; =UNK_02106F34 - mvn r2, #0x0 - bl __str2dec -_020E8C70: - add r1, sp, #0x0 - add r2, sp, #0x26 - mov r0, r5 - bl __timesdec - add sp, sp, #0x4c - ldmia sp!, {r4-r5,pc} - .balign 4 -_020E8C88: .word UNK_02106E88 -_020E8C8C: .word UNK_02106EB8 -_020E8C90: .word UNK_02106EE0 -_020E8C94: .word UNK_02106EF8 -_020E8C98: .word UNK_02106F08 -_020E8C9C: .word UNK_02106F10 -_020E8CA0: .word UNK_02106F18 -_020E8CA4: .word UNK_02106F20 -_020E8CA8: .word UNK_02106F28 -_020E8CAC: .word UNK_02106F2C -_020E8CB0: .word UNK_02106F30 -_020E8CB4: .word UNK_02106F34 -_020E8CB8: .word UNK_02106F38 -_020E8CBC: .word UNK_02106F3C -_020E8CC0: .word UNK_02106F40 -_020E8CC4: .word UNK_02106F44 -_020E8CC8: .word UNK_02106F48 -_020E8CCC: .word UNK_02106F4C -_020E8CD0: .word UNK_02106F50 -_020E8CD4: .word UNK_02106F54 -_020E8CD8: .word UNK_02106F58 - arm_func_end __two_exp - - arm_func_start __equals_dec -__equals_dec: - stmdb sp!, {r4,lr} - ldrb r3, [r0, #0x5] - cmp r3, #0x0 - bne _020E8D00 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D00: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - bne _020E8D1C - cmp r3, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4,pc} -_020E8D1C: - ldrsh r3, [r0, #0x2] - ldrsh r2, [r1, #0x2] - cmp r3, r2 - bne _020E8DB4 - ldrb r4, [r0, #0x4] - ldrb r2, [r1, #0x4] - mov r12, #0x0 - mov lr, r4 - cmp r4, r2 - movgt lr, r2 - cmp lr, #0x0 - ble _020E8D74 -_020E8D4C: - add r3, r0, r12 - add r2, r1, r12 - ldrb r3, [r3, #0x5] - ldrb r2, [r2, #0x5] - cmp r3, r2 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - add r12, r12, #0x1 - cmp r12, lr - blt _020E8D4C -_020E8D74: - cmp lr, r4 - moveq r0, r1 - ldrb r1, [r0, #0x4] - cmp r12, r1 - bge _020E8DAC -_020E8D88: - add r1, r0, r12 - ldrb r1, [r1, #0x5] - cmp r1, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - ldrb r1, [r0, #0x4] - add r12, r12, #0x1 - cmp r12, r1 - blt _020E8D88 -_020E8DAC: - mov r0, #0x1 - ldmia sp!, {r4,pc} -_020E8DB4: - mov r0, #0x0 - ldmia sp!, {r4,pc} - arm_func_end __equals_dec - - arm_func_start __less_dec -__less_dec: - stmdb sp!, {r3-r5,lr} - ldrb r2, [r0, #0x5] - cmp r2, #0x0 - bne _020E8DE0 - ldrb r0, [r1, #0x5] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E8DE0: - ldrb r2, [r1, #0x5] - cmp r2, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} - ldrsh r3, [r1, #0x2] - ldrsh r2, [r0, #0x2] - cmp r2, r3 - bne _020E8E90 - ldrb r5, [r0, #0x4] - ldrb r4, [r1, #0x4] - mov r12, #0x0 - mov lr, r5 - cmp r5, r4 - movgt lr, r4 - cmp lr, #0x0 - ble _020E8E54 -_020E8E20: - add r3, r1, r12 - add r2, r0, r12 - ldrb r3, [r3, #0x5] - ldrb r2, [r2, #0x5] - cmp r2, r3 - movcc r0, #0x1 - ldmccia sp!, {r3-r5,pc} - cmp r3, r2 - movcc r0, #0x0 - ldmccia sp!, {r3-r5,pc} - add r12, r12, #0x1 - cmp r12, lr - blt _020E8E20 -_020E8E54: - cmp lr, r5 - bne _020E8E88 - cmp r12, r4 - bge _020E8E88 -_020E8E64: - add r0, r1, r12 - ldrb r0, [r0, #0x5] - cmp r0, #0x0 - movne r0, #0x1 - ldmneia sp!, {r3-r5,pc} - ldrb r0, [r1, #0x4] - add r12, r12, #0x1 - cmp r12, r0 - blt _020E8E64 -_020E8E88: - mov r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E8E90: - movlt r0, #0x1 - movge r0, #0x0 - ldmia sp!, {r3-r5,pc} - arm_func_end __less_dec - - arm_func_start __minus_dec -__minus_dec: ; 0x020E8E9C - stmdb sp!, {r3-r7,lr} - mov r6, r0 - mov r5, #0x9 -_020E8EA8: - ldrh r4, [r1, #0x0] - ldrh r3, [r1, #0x2] - add r1, r1, #0x4 - subs r5, r5, #0x1 - strh r4, [r6, #0x0] - strh r3, [r6, #0x2] - add r6, r6, #0x4 - bne _020E8EA8 - ldrh r1, [r1, #0x0] - strh r1, [r6, #0x0] - ldrb r1, [r2, #0x5] - cmp r1, #0x0 - ldmeqia sp!, {r3-r7,pc} - ldrb r7, [r0, #0x4] - ldrb r3, [r2, #0x4] - ldrsh r4, [r0, #0x2] - mov r1, r7 - cmp r7, r3 - movlt r1, r3 - ldrsh r3, [r2, #0x2] - sub r6, r4, r3 - add r1, r1, r6 - cmp r1, #0x20 - movgt r1, #0x20 - cmp r7, r1 - bge _020E8F34 - mov r4, #0x0 -_020E8F14: - ldrb r5, [r0, #0x4] - add r3, r0, r7 - add r5, r5, #0x1 - strb r5, [r0, #0x4] - strb r4, [r3, #0x5] - ldrb r7, [r0, #0x4] - cmp r7, r1 - blt _020E8F14 -_020E8F34: - ldrb r4, [r2, #0x4] - add r3, r0, #0x5 - add r12, r3, r1 - add r4, r4, r6 - cmp r4, r1 - addlt r12, r3, r4 - sub r4, r12, r3 - add r1, r2, #0x5 - sub r4, r4, r6 - add lr, r1, r4 - mov r4, lr - b _020E8FC8 -_020E8F64: - ldrb r7, [r12, #-0x1]! - ldrb r5, [lr, #-0x1]! - cmp r7, r5 - bhs _020E8FB8 - ldrb r7, [r12, #-0x1] - sub r5, r12, #0x1 - cmp r7, #0x0 - bne _020E8F90 -_020E8F84: - ldrb r7, [r5, #-0x1]! - cmp r7, #0x0 - beq _020E8F84 -_020E8F90: - cmp r5, r12 - beq _020E8FB8 -_020E8F98: - ldrb r7, [r5, #0x0] - sub r7, r7, #0x1 - strb r7, [r5, #0x0] - ldrb r7, [r5, #0x1]! - cmp r5, r12 - add r7, r7, #0xa - strb r7, [r5, #0x0] - bne _020E8F98 -_020E8FB8: - ldrb r7, [r12, #0x0] - ldrb r5, [lr, #0x0] - sub r5, r7, r5 - strb r5, [r12, #0x0] -_020E8FC8: - cmp r12, r3 - cmphi lr, r1 - bhi _020E8F64 - ldrb r5, [r2, #0x4] - sub lr, r4, r1 - cmp lr, r5 - bge _020E90A4 - ldrb r1, [r4, #0x0] - mov r7, #0x0 - cmp r1, #0x5 - movcc r7, #0x1 - blo _020E9040 - bne _020E9040 - add r1, r2, #0x5 - add r2, r1, r5 - add r4, r4, #0x1 - cmp r4, r2 - bhs _020E9028 -_020E9010: - ldrb r1, [r4, #0x0] - cmp r1, #0x0 - bne _020E90A4 - add r4, r4, #0x1 - cmp r4, r2 - blo _020E9010 -_020E9028: - add r1, r3, lr - add r2, r1, r6 - ldrb r1, [r2, #-0x1] - sub r12, r2, #0x1 - tst r1, #0x1 - movne r7, #0x1 -_020E9040: - cmp r7, #0x0 - beq _020E90A4 - ldrb r1, [r12, #0x0] - cmp r1, #0x1 - bhs _020E9098 - ldrb r1, [r12, #-0x1] - sub r2, r12, #0x1 - cmp r1, #0x0 - bne _020E9070 -_020E9064: - ldrb r1, [r2, #-0x1]! - cmp r1, #0x0 - beq _020E9064 -_020E9070: - cmp r2, r12 - beq _020E9098 -_020E9078: - ldrb r1, [r2, #0x0] - sub r1, r1, #0x1 - strb r1, [r2, #0x0] - ldrb r1, [r2, #0x1]! - cmp r2, r12 - add r1, r1, #0xa - strb r1, [r2, #0x0] - bne _020E9078 -_020E9098: - ldrb r1, [r12, #0x0] - sub r1, r1, #0x1 - strb r1, [r12, #0x0] -_020E90A4: - ldrb r1, [r3, #0x0] - mov r5, r3 - cmp r1, #0x0 - bne _020E90C0 -_020E90B4: - ldrb r1, [r5, #0x1]! - cmp r1, #0x0 - beq _020E90B4 -_020E90C0: - cmp r5, r3 - bls _020E9108 - ldrsh r1, [r0, #0x2] - sub r2, r5, r3 - and r4, r2, #0xff - sub r1, r1, r4 - strh r1, [r0, #0x2] - ldrb r1, [r0, #0x4] - add r2, r3, r1 - cmp r5, r2 - bhs _020E90FC -_020E90EC: - ldrb r1, [r5], #0x1 - cmp r5, r2 - strb r1, [r3], #0x1 - blo _020E90EC -_020E90FC: - ldrb r1, [r0, #0x4] - sub r1, r1, r4 - strb r1, [r0, #0x4] -_020E9108: - ldrb r1, [r0, #0x4] - add r2, r0, #0x5 - add r3, r2, r1 - cmp r3, r2 - bls _020E9130 -_020E911C: - ldrb r1, [r3, #-0x1]! - cmp r1, #0x0 - bne _020E9130 - cmp r3, r2 - bhi _020E911C -_020E9130: - sub r1, r3, r2 - add r1, r1, #0x1 - strb r1, [r0, #0x4] - ldmia sp!, {r3-r7,pc} - arm_func_end __minus_dec - - arm_func_start __num2dec_internal -__num2dec_internal: - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x58 - mov r8, r1 - mov r6, r2 - mov r7, r0 - mov r0, r8 - mov r1, r6 - bl __signbitf - cmp r0, #0x0 - movne r1, #0x1 - moveq r1, #0x0 - mov r4, r1, lsl #0x18 - mov r0, #0x0 - mov r1, r0 - mov r2, r8 - mov r3, r6 - mov r5, r4, asr #0x18 - bl _deq - bne _020E91AC - strb r5, [r7, #0x0] - mov r1, #0x0 - strh r1, [r7, #0x2] - mov r0, #0x1 - strb r0, [r7, #0x4] - add sp, sp, #0x58 - strb r1, [r7, #0x5] - ldmia sp!, {r4-r8,pc} -_020E91AC: - mov r0, r8 - mov r1, r6 - bl __fpclassifyf - cmp r0, #0x2 - bgt _020E91F8 - strb r5, [r7, #0x0] - mov r2, #0x0 - strh r2, [r7, #0x2] - mov r2, #0x1 - mov r0, r8 - mov r1, r6 - strb r2, [r7, #0x4] - bl __fpclassifyf - cmp r0, #0x1 - moveq r0, #0x4e - movne r0, #0x49 - add sp, sp, #0x58 - strb r0, [r7, #0x5] - ldmia sp!, {r4-r8,pc} -_020E91F8: - cmp r5, #0x0 - beq _020E921C - mov r0, #0x0 - mov r1, r0 - mov r2, r8 - mov r3, r6 - bl _dsub - mov r8, r0 - mov r6, r1 -_020E921C: - add r2, sp, #0x8 - mov r0, r8 - mov r1, r6 - bl frexp - mov r4, r0 - mov r6, r1 - orr r12, r4, #0x0 - rsbs r2, r12, #0x0 - orr r3, r6, #0x100000 - rsc r1, r3, #0x0 - mov r0, #0x0 - and r3, r3, r1 - sub r1, r0, #0x1 - and r12, r12, r2 - mov r2, r1 - adds r0, r12, r1 - adc r1, r3, r2 - str r4, [sp, #0x0] - str r6, [sp, #0x4] - bl __msl_generic_count_bits64 - rsb r8, r0, #0x35 - ldr r1, [sp, #0x8] - add r0, sp, #0xc - sub r1, r1, r8 - bl __two_exp - mov r0, r4 - mov r1, r6 - mov r2, r8 - bl ldexp - bl _ll_ufrom_d - mov r2, r1 - mov r1, r0 - add r0, sp, #0x32 - bl __ull2dec - mov r0, r7 - add r1, sp, #0x32 - add r2, sp, #0xc - bl __timesdec - strb r5, [r7, #0x0] - add sp, sp, #0x58 - ldmia sp!, {r4-r8,pc} - arm_func_end __num2dec_internal - - arm_func_start __num2dec_internal2 -__num2dec_internal2: ; 0x020E92C0 - stmdb sp!, {r3-r5,lr} - mov r4, r3 - ldrsh r5, [r0, #0x2] - mov r0, r4 - bl __num2dec_internal - ldrb r0, [r4, #0x5] - cmp r0, #0x9 - ldmhiia sp!, {r3-r5,pc} - cmp r5, #0x20 - movgt r5, #0x20 - mov r0, r4 - mov r1, r5 - bl __rounddec - ldrb r0, [r4, #0x4] - cmp r0, r5 - bge _020E9324 - mov r1, #0x0 -_020E9304: - ldrb r2, [r4, #0x4] - add r0, r4, r0 - add r2, r2, #0x1 - strb r2, [r4, #0x4] - strb r1, [r0, #0x5] - ldrb r0, [r4, #0x4] - cmp r0, r5 - blt _020E9304 -_020E9324: - ldrsh r1, [r4, #0x2] - sub r0, r0, #0x1 - mov r2, #0x0 - sub r0, r1, r0 - strh r0, [r4, #0x2] - ldrb r0, [r4, #0x4] - cmp r0, #0x0 - ldmleia sp!, {r3-r5,pc} -_020E9344: - add r1, r4, r2 - ldrb r0, [r1, #0x5] - add r2, r2, #0x1 - add r0, r0, #0x30 - strb r0, [r1, #0x5] - ldrb r0, [r4, #0x4] - cmp r2, r0 - blt _020E9344 - ldmia sp!, {r3-r5,pc} - arm_func_end __num2dec_internal2 - - arm_func_start __dec2num -__dec2num: ; 0x020E9368 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xfc - mov r4, r0 - ldrb r0, [r4, #0x4] - cmp r0, #0x0 - bne _020E93A8 - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93A8: - ldrb r0, [r4, #0x5] - cmp r0, #0x30 - beq _020E93C8 - cmp r0, #0x49 - beq _020E93F0 - cmp r0, #0x4e - beq _020E9424 - b _020E946C -_020E93C8: - ldrsb r0, [r4, #0x0] - mov r2, #0x0 - cmp r0, #0x0 - ldreq r3, _020E996C ; =0x3FF00000 - mov r0, #0x0 - ldrne r3, _020E9970 ; =0xBFF00000 - mov r1, r0 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E93F0: - ldrsb r0, [r4, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =__float_huge - ldrne r4, _020E9970 ; =0xBFF00000 - ldr r0, [r0, #0x0] - bl _f2d - mov r2, r5 - mov r3, r4 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E9424: - ldr r1, _020E9978 ; =0x7FF00000 - add r3, sp, #0x10 - mov r2, #0x0 - str r2, [r3, #0x0] - str r1, [r3, #0x4] - ldrsb r0, [r4, #0x0] - cmp r0, #0x0 - beq _020E9454 - orr r0, r1, #0x80000000 - orr r1, r2, r2 - str r1, [r3, #0x0] - str r0, [r3, #0x4] -_020E9454: - ldmia r3, {r0-r1} - orr r0, r0, #0x0 - orr r1, r1, #0x80000 - stmia r3, {r0-r1} - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E946C: - add r3, sp, #0xd6 - mov r5, r4 - mov r2, #0x9 -_020E9478: - ldrh r1, [r5, #0x0] - ldrh r0, [r5, #0x2] - add r5, r5, #0x4 - subs r2, r2, #0x1 - strh r1, [r3, #0x0] - strh r0, [r3, #0x2] - add r3, r3, #0x4 - bne _020E9478 - ldrh r0, [r5, #0x0] - add r1, sp, #0xdb - strh r0, [r3, #0x0] - ldrb r0, [sp, #0xda] - add r5, r1, r0 - cmp r1, r5 - bhs _020E94C8 -_020E94B4: - ldrb r0, [r1, #0x0] - sub r0, r0, #0x30 - strb r0, [r1], #0x1 - cmp r1, r5 - blo _020E94B4 -_020E94C8: - ldrb r1, [sp, #0xda] - ldrsh r2, [sp, #0xd8] - add r0, sp, #0xb0 - sub r1, r1, #0x1 - add r1, r2, r1 - strh r1, [sp, #0xd8] - ldr r1, _020E997C ; =UNK_02106F5C - mov r2, #0x134 - ldrsh r11, [sp, #0xd8] - bl __str2dec - add r0, sp, #0xb0 - add r1, sp, #0xd6 - bl __less_dec - cmp r0, #0x0 - beq _020E9538 - ldrsb r0, [r4, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =__float_huge - ldrne r4, _020E9970 ; =0xBFF00000 - ldr r0, [r0, #0x0] - bl _f2d - mov r2, r5 - mov r3, r4 - bl copysign - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} -_020E9538: - add r1, sp, #0xdb - ldrb r0, [r1, #0x0] - add r8, r1, #0x1 - bl _dfltu - str r0, [sp, #0x8] - str r1, [sp, #0xc] - cmp r8, r5 - bhs _020E9610 -_020E9558: - sub r0, r5, r8 - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #0x1d - adds r7, r1, r0, ror #0x1d - moveq r7, #0x8 - mov r6, #0x0 - mov r2, #0x0 - cmp r7, #0x0 - ble _020E9594 - mov r0, #0xa -_020E9580: - ldrb r1, [r8], #0x1 - add r2, r2, #0x1 - cmp r2, r7 - mla r6, r0, r6, r1 - blt _020E9580 -_020E9594: - ldr r0, _020E9980 ; =UNK_02106E48 - ldr r1, [sp, #0xc] - add r3, r0, r7, lsl #0x3 - ldr r2, [r3, #-0x8] - ldr r0, [sp, #0x8] - ldr r3, [r3, #-0x4] - bl _dmul - mov r4, r0 - mov r9, r1 - mov r0, r6 - bl _dfltu - mov r2, r0 - mov r3, r1 - mov r0, r4 - mov r1, r9 - bl _dadd - cmp r6, #0x0 - mov r6, r0 - mov r10, r1 - beq _020E95FC - mov r0, r4 - mov r1, r9 - mov r2, r6 - mov r3, r10 - bl _deq - beq _020E9610 -_020E95FC: - str r6, [sp, #0x8] - str r10, [sp, #0xc] - cmp r8, r5 - sub r11, r11, r7 - blo _020E9558 -_020E9610: - cmp r11, #0x0 - bge _020E9654 - rsb r0, r11, #0x0 - bl _dflt - mov r3, r1 - mov r2, r0 - ldr r1, _020E9984 ; =0x40140000 - mov r0, #0x0 - bl pow - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - bl _ddiv - str r0, [sp, #0x8] - str r1, [sp, #0xc] - b _020E968C -_020E9654: - mov r0, r11 - bl _dflt - mov r3, r1 - mov r2, r0 - ldr r1, _020E9984 ; =0x40140000 - mov r0, #0x0 - bl pow - mov r2, r0 - mov r3, r1 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - bl _dmul - str r0, [sp, #0x8] - str r1, [sp, #0xc] -_020E968C: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - mov r2, r11 - bl ldexp - str r0, [sp, #0x8] - str r1, [sp, #0xc] - bl __fpclassifyf - cmp r0, #0x2 - bne _020E96C0 - ldr r0, _020E9988 ; =0x7FEFFFFF - mvn r1, #0x0 - str r1, [sp, #0x8] - str r0, [sp, #0xc] -_020E96C0: - ldr r1, [sp, #0x8] - ldr r2, [sp, #0xc] - add r0, sp, #0x8a - add r4, sp, #0x0 - mov r5, #0x0 - bl __num2dec_internal - add r0, sp, #0x8a - add r1, sp, #0xd6 - bl __equals_dec - cmp r0, #0x0 - bne _020E9934 - add r0, sp, #0x8a - add r1, sp, #0xd6 - bl __less_dec - cmp r0, #0x0 - movne r5, #0x1 - ldr r1, [sp, #0x8] - ldr r0, [sp, #0xc] - cmp r5, #0x0 - moveq r6, #0x1 - str r1, [sp, #0x0] - str r0, [sp, #0x4] - movne r6, #0x0 -_020E971C: - cmp r6, #0x0 - bne _020E9744 - ldmia r4, {r0-r1} - adds r0, r0, #0x1 - adc r1, r1, #0x0 - stmia r4, {r0-r1} - bl __fpclassifyf - cmp r0, #0x2 - beq _020E9934 - b _020E975C -_020E9744: - ldr r1, [r4, #0x0] - ldr r0, [r4, #0x4] - subs r1, r1, #0x1 - sbc r0, r0, #0x0 - str r1, [r4, #0x0] - str r0, [r4, #0x4] -_020E975C: - ldr r1, [sp, #0x0] - ldr r2, [sp, #0x4] - add r0, sp, #0x64 - bl __num2dec_internal - cmp r5, #0x0 - beq _020E9788 - add r0, sp, #0x64 - add r1, sp, #0xd6 - bl __less_dec - cmp r0, #0x0 - beq _020E98AC -_020E9788: - cmp r5, #0x0 - bne _020E9864 - add r0, sp, #0xd6 - add r1, sp, #0x64 - bl __less_dec - cmp r0, #0x0 - bne _020E9864 - add r3, sp, #0x8a - add r5, sp, #0x3e - mov r2, #0x9 -_020E97B0: - ldrh r1, [r3, #0x0] - ldrh r0, [r3, #0x2] - add r3, r3, #0x4 - strh r1, [r5, #0x0] - strh r0, [r5, #0x2] - add r5, r5, #0x4 - subs r2, r2, #0x1 - bne _020E97B0 - ldrh r0, [r3, #0x0] - add r3, sp, #0x64 - add r4, sp, #0x8a - strh r0, [r5, #0x0] - mov r2, #0x9 -_020E97E4: - ldrh r1, [r3, #0x0] - ldrh r0, [r3, #0x2] - add r3, r3, #0x4 - strh r1, [r4, #0x0] - strh r0, [r4, #0x2] - add r4, r4, #0x4 - subs r2, r2, #0x1 - bne _020E97E4 - ldrh r0, [r3, #0x0] - add r3, sp, #0x3e - add r5, sp, #0x64 - strh r0, [r4, #0x0] - mov r2, #0x9 -_020E9818: - ldrh r1, [r3, #0x0] - ldrh r0, [r3, #0x2] - add r3, r3, #0x4 - strh r1, [r5, #0x0] - strh r0, [r5, #0x2] - add r5, r5, #0x4 - subs r2, r2, #0x1 - bne _020E9818 - ldrh r4, [r3, #0x0] - ldr r3, [sp, #0x8] - ldr r1, [sp, #0x0] - ldr r2, [sp, #0xc] - ldr r0, [sp, #0x4] - strh r4, [r5, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - str r3, [sp, #0x0] - str r2, [sp, #0x4] - b _020E98AC -_020E9864: - add r7, sp, #0x64 - add r3, sp, #0x8a - mov r2, #0x9 -_020E9870: - ldrh r1, [r7, #0x0] - ldrh r0, [r7, #0x2] - add r7, r7, #0x4 - strh r1, [r3, #0x0] - strh r0, [r3, #0x2] - add r3, r3, #0x4 - subs r2, r2, #0x1 - bne _020E9870 - ldrh r2, [r7, #0x0] - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - strh r2, [r3, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - b _020E971C -_020E98AC: - add r0, sp, #0x3e - add r1, sp, #0xd6 - add r2, sp, #0x8a - bl __minus_dec - add r0, sp, #0x18 - add r1, sp, #0x64 - add r2, sp, #0xd6 - bl __minus_dec - add r0, sp, #0x3e - add r1, sp, #0x18 - bl __equals_dec - cmp r0, #0x0 - beq _020E9910 - ldr r1, [sp, #0x8] - ldr r0, [sp, #0xc] - and r1, r1, #0x1 - and r0, r0, #0x0 - cmp r0, #0x0 - cmpeq r1, #0x0 - beq _020E9934 - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - b _020E9934 -_020E9910: - add r0, sp, #0x3e - add r1, sp, #0x18 - bl __less_dec - cmp r0, #0x0 - bne _020E9934 - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r1, [sp, #0x8] - str r0, [sp, #0xc] -_020E9934: - ldrsb r0, [sp, #0xd6] - cmp r0, #0x0 - beq _020E995C - mov r0, #0x0 - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r1, r0 - bl _dsub - str r0, [sp, #0x8] - str r1, [sp, #0xc] -_020E995C: - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - add sp, sp, #0xfc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E996C: .word 0x3FF00000 -_020E9970: .word 0xBFF00000 -_020E9974: .word __float_huge -_020E9978: .word 0x7FF00000 -_020E997C: .word UNK_02106F5C -_020E9980: .word UNK_02106E48 -_020E9984: .word 0x40140000 -_020E9988: .word 0x7FEFFFFF - arm_func_end __dec2num - - .section .exception,8 - - .global UNK_020EC740 -UNK_020EC740: ; 0x020EC740 - .byte 0x00, 0xFF, 0x05, 0x20 - .balign 8 - - exception __rounddec, 65, 0x00200300 - exception __ull2dec, 205, 0x0050FF00 - exception __timesdec, 389, 0x00D0FF00 - exception __str2dec, 157, 0x00100000 - exception __two_exp, 901, 0x00B00300 - exception __num2dec_internal, 385, 0x00E01F00 - exception __num2dec_internal2, 169, 0x00200300 - exception __dec2num, 1572, UNK_020EC740 + .include "global.inc" + .include "asm/macros.inc" + + .data + + .global UNK_02106E48 +UNK_02106E48: ; 0x02106E48 + .word 0x00000000, 0x40240000 + .word 0x00000000, 0x40590000 + .word 0x00000000, 0x408F4000 + .word 0x00000000, 0x40C38800 + .word 0x00000000, 0x40F86A00 + .word 0x00000000, 0x412E8480 + .word 0x00000000, 0x416312D0 + .word 0x00000000, 0x4197D784 + + .global UNK_02106E88 +UNK_02106E88: ; 0x02106E88 + .asciz "542101086242752217003726400434970855712890625" + + .balign 4, 0 + .global UNK_02106EB8 +UNK_02106EB8: ; 0x02106EB8 + .asciz "11102230246251565404236316680908203125" + + .balign 4, 0 + .global UNK_02106EE0 +UNK_02106EE0: ; 0x02106EE0 + .asciz "23283064365386962890625" + + .balign 4, 0 + .global UNK_02106EF8 +UNK_02106EF8: ; 0x02106EF8 + .asciz "152587890625" + + .balign 4, 0 + .global UNK_02106F08 +UNK_02106F08: ; 0x02106F08 + .asciz "390625" + + .balign 4, 0 + .global UNK_02106F10 +UNK_02106F10: ; 0x02106F10 + .asciz "78125" + + .balign 4, 0 + .global UNK_02106F18 +UNK_02106F18: ; 0x02106F18 + .asciz "15625" + + .balign 4, 0 + .global UNK_02106F20 +UNK_02106F20: ; 0x02106F20 + .asciz "3125" + + .balign 4, 0 + .global UNK_02106F28 +UNK_02106F28: ; 0x02106F28 + .asciz "625" + + .balign 4, 0 + .global UNK_02106F2C +UNK_02106F2C: ; 0x02106F2C + .asciz "125" + + .balign 4, 0 + .global UNK_02106F30 +UNK_02106F30: ; 0x02106F30 + .asciz "25" + + .balign 4, 0 + .global UNK_02106F34 +UNK_02106F34: ; 0x02106F34 + .asciz "5" + + .balign 4, 0 + .global UNK_02106F38 +UNK_02106F38: ; 0x02106F38 + .asciz "1" + + .balign 4, 0 + .global UNK_02106F3C +UNK_02106F3C: ; 0x02106F3C + .asciz "2" + + .balign 4, 0 + .global UNK_02106F40 +UNK_02106F40: ; 0x02106F40 + .asciz "4" + + .balign 4, 0 + .global UNK_02106F44 +UNK_02106F44: ; 0x02106F44 + .asciz "8" + + .balign 4, 0 + .global UNK_02106F48 +UNK_02106F48: ; 0x02106F48 + .asciz "16" + + .balign 4, 0 + .global UNK_02106F4C +UNK_02106F4C: ; 0x02106F4C + .asciz "32" + + .balign 4, 0 + .global UNK_02106F50 +UNK_02106F50: ; 0x02106F50 + .asciz "64" + + .balign 4, 0 + .global UNK_02106F54 +UNK_02106F54: ; 0x02106F54 + .asciz "128" + + .balign 4, 0 + .global UNK_02106F58 +UNK_02106F58: ; 0x02106F58 + .asciz "256" + + .balign 4, 0 + .global UNK_02106F5C +UNK_02106F5C: ; 0x02106F5C + .asciz "179769313486231580793728714053034151" + + .text + + arm_func_start __must_round +__must_round: ; 0x020E8570 + add r3, r0, #0x5 + ldrb r2, [r3, r1] + add r12, r3, r1 + cmp r2, #0x5 + movhi r0, #0x1 + bxhi lr + mvncc r0, #0x0 + bxcc lr + ldrb r2, [r0, #0x4] + add r12, r12, #0x1 + add r3, r3, r2 + cmp r12, r3 + bhs _020E85C0 +_020E85A4: + ldrb r2, [r12, #0x0] + cmp r2, #0x0 + movne r0, #0x1 + bxne lr + add r12, r12, #0x1 + cmp r12, r3 + blo _020E85A4 +_020E85C0: + sub r1, r1, #0x1 + add r0, r0, r1 + ldrb r0, [r0, #0x5] + tst r0, #0x1 + movne r0, #0x1 + mvneq r0, #0x0 + bx lr + arm_func_end __must_round + + arm_func_start __dorounddecup +__dorounddecup: ; 0x020E85DC + add r3, r0, #0x5 + add r1, r3, r1 + sub r12, r1, #0x1 + mov r1, #0x0 +_020E85EC: + ldrb r2, [r12, #0x0] + cmp r2, #0x9 + addcc r0, r2, #0x1 + strccb r0, [r12, #0x0] + bxcc lr + cmp r12, r3 + bne _020E8620 + mov r1, #0x1 + strb r1, [r12, #0x0] + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] + bx lr +_020E8620: + strb r1, [r12], #-0x1 + b _020E85EC + bx lr + arm_func_end __dorounddecup + + arm_func_start __rounddec +__rounddec: ; 0x020E862C + stmdb sp!, {r3-r5,lr} + mov r4, r1 + mov r5, r0 + cmp r4, #0x0 + ldmleia sp!, {r3-r5,pc} + ldrb r2, [r5, #0x4] + cmp r4, r2 + ldmgeia sp!, {r3-r5,pc} + bl __must_round + strb r4, [r5, #0x4] + cmp r0, #0x0 + ldmltia sp!, {r3-r5,pc} + mov r0, r5 + mov r1, r4 + bl __dorounddecup + ldmia sp!, {r3-r5,pc} + arm_func_end __rounddec + + arm_func_start __ull2dec +__ull2dec: ; 0x020E866C + stmdb sp!, {r3-r11,lr} + mov r10, r0 + mov r0, #0x0 + mov r8, r2 + strb r0, [r10, #0x0] + mov r9, r1 + cmp r8, #0x0 + strb r0, [r10, #0x4] + cmpeq r9, #0x0 + beq _020E86F8 + mov r6, #0xa + mov r11, r0 + mov r5, r0 + mov r4, r0 +_020E86A4: + ldrb r1, [r10, #0x4] + mov r0, r9 + mov r2, r6 + add r3, r1, #0x1 + mov r7, r1 + strb r3, [r10, #0x4] + mov r1, r8 + mov r3, r11 + bl _ull_mod + add r1, r10, r7 + strb r0, [r1, #0x5] + mov r0, r9 + mov r1, r8 + mov r2, #0xa + mov r3, #0x0 + bl _ll_udiv + mov r8, r1 + mov r9, r0 + cmp r8, r5 + cmpeq r9, r4 + bne _020E86A4 +_020E86F8: + ldrb r0, [r10, #0x4] + add r2, r10, #0x5 + add r0, r2, r0 + sub r3, r0, #0x1 + cmp r2, r3 + bhs _020E8728 +_020E8710: + ldrb r0, [r3, #0x0] + ldrb r1, [r2, #0x0] + strb r0, [r2], #0x1 + strb r1, [r3], #-0x1 + cmp r2, r3 + blo _020E8710 +_020E8728: + ldrb r0, [r10, #0x4] + sub r0, r0, #0x1 + strh r0, [r10, #0x2] + ldmia sp!, {r3-r11,pc} + arm_func_end __ull2dec + + arm_func_start __timesdec +__timesdec: ; 0x020E8738 + stmdb sp!, {r3-r11,lr} + sub sp, sp, #0x40 + ldrb r6, [r1, #0x4] + ldrb r5, [r2, #0x4] + mov r4, #0x0 + add r3, sp, #0x0 + add r5, r6, r5 + sub r5, r5, #0x1 + add r3, r3, r5 + add r6, r3, #0x1 + mov r7, r6 + strb r4, [r0, #0x0] + cmp r5, #0x0 + ble _020E8800 + add lr, r1, #0x5 + add r11, r2, #0x5 +_020E8778: + ldrb r3, [r2, #0x4] + sub r10, r3, #0x1 + sub r3, r5, r10 + subs r9, r3, #0x1 + ldrb r3, [r1, #0x4] + movmi r9, #0x0 + submi r10, r5, #0x1 + add r8, r10, #0x1 + sub r3, r3, r9 + cmp r8, r3 + movgt r8, r3 + add r10, r11, r10 + add r9, lr, r9 + cmp r8, #0x0 + ble _020E87CC +_020E87B4: + ldrb r12, [r9], #0x1 + ldrb r3, [r10], #-0x1 + sub r8, r8, #0x1 + cmp r8, #0x0 + mla r4, r12, r3, r4 + bgt _020E87B4 +_020E87CC: + ldr r3, _020E88B8 ; =0xCCCCCCCD + sub r5, r5, #0x1 + umull r8, r9, r4, r3 + mov r9, r9, lsr #0x3 + cmp r5, #0x0 + mov r10, #0xa + umull r8, r9, r10, r9 + sub r9, r4, r8 + strb r9, [r6, #-0x1]! + mov r8, r4 + umull r3, r4, r8, r3 + mov r4, r4, lsr #0x3 + bgt _020E8778 +_020E8800: + ldrsh r3, [r1, #0x2] + ldrsh r1, [r2, #0x2] + cmp r4, #0x0 + add r1, r3, r1 + strh r1, [r0, #0x2] + beq _020E8828 + strb r4, [r6, #-0x1]! + ldrsh r1, [r0, #0x2] + add r1, r1, #0x1 + strh r1, [r0, #0x2] +_020E8828: + mov r3, #0x0 + b _020E8840 +_020E8830: + ldrb r2, [r6], #0x1 + add r1, r0, r3 + add r3, r3, #0x1 + strb r2, [r1, #0x5] +_020E8840: + cmp r3, #0x20 + bge _020E8850 + cmp r6, r7 + blo _020E8830 +_020E8850: + cmp r6, r7 + addcs sp, sp, #0x40 + strb r3, [r0, #0x4] + ldmcsia sp!, {r3-r11,pc} + ldrb r1, [r6, #0x0] + cmp r1, #0x5 + addcc sp, sp, #0x40 + ldmccia sp!, {r3-r11,pc} + bne _020E88A8 + add r2, r6, #0x1 + cmp r2, r7 + bhs _020E8898 +_020E8880: + ldrb r1, [r2, #0x0] + cmp r1, #0x0 + bne _020E88A8 + add r2, r2, #0x1 + cmp r2, r7 + blo _020E8880 +_020E8898: + ldrb r1, [r6, #-0x1] + tst r1, #0x1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r3-r11,pc} +_020E88A8: + ldrb r1, [r0, #0x4] + bl __dorounddecup + add sp, sp, #0x40 + ldmia sp!, {r3-r11,pc} + .balign 4 +_020E88B8: .word 0xCCCCCCCD + arm_func_end __timesdec + + arm_func_start __str2dec +__str2dec: ; 0x020E88BC + stmdb sp!, {r3,lr} + strh r2, [r0, #0x2] + mov r12, #0x0 + strb r12, [r0, #0x0] + b _020E88E4 +_020E88D0: + ldrsb r3, [r1], #0x1 + add r2, r0, r12 + add r12, r12, #0x1 + sub r3, r3, #0x30 + strb r3, [r2, #0x5] +_020E88E4: + cmp r12, #0x20 + bge _020E88F8 + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + bne _020E88D0 +_020E88F8: + strb r12, [r0, #0x4] + ldrsb r2, [r1, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3,pc} + cmp r2, #0x5 + ldmltia sp!, {r3,pc} + bgt _020E894C + ldrsb r2, [r1, #0x1] + add r1, r1, #0x1 + cmp r2, #0x0 + beq _020E8938 +_020E8924: + cmp r2, #0x30 + bne _020E894C + ldrsb r2, [r1, #0x1]! + cmp r2, #0x0 + bne _020E8924 +_020E8938: + sub r1, r12, #0x1 + add r1, r0, r1 + ldrb r1, [r1, #0x5] + tst r1, #0x1 + ldmeqia sp!, {r3,pc} +_020E894C: + ldrb r1, [r0, #0x4] + bl __dorounddecup + ldmia sp!, {r3,pc} + arm_func_end __str2dec + + arm_func_start __two_exp +__two_exp: ; 0x020E8958 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4c + mov r4, r1 + mvn r2, #0x34 + mov r5, r0 + cmp r4, r2 + bgt _020E8988 + bge _020E8A54 + sub r0, r2, #0xb + cmp r4, r0 + beq _020E8A3C + b _020E8BE4 +_020E8988: + add r1, r4, #0x20 + cmp r1, #0x28 + addls pc, pc, r1, lsl #0x2 + b _020E8BE4 + b _020E8A68 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8A7C ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8A90 ; case + b _020E8AA4 ; case + b _020E8AB8 ; case + b _020E8ACC ; case + b _020E8AE0 ; case + b _020E8AF4 ; case + b _020E8B08 ; case + b _020E8B1C ; case + b _020E8B30 ; case + b _020E8B44 ; case + b _020E8B58 ; case + b _020E8B6C ; case + b _020E8B80 ; case + b _020E8B94 ; case + b _020E8BA8 ; case + b _020E8BBC ; case + b _020E8BD0 ; case +_020E8A3C: + ldr r1, _020E8C88 ; =UNK_02106E88 + mov r0, r5 + mvn r2, #0x13 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A54: + ldr r1, _020E8C8C ; =UNK_02106EB8 + add r2, r2, #0x25 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A68: + ldr r1, _020E8C90 ; =UNK_02106EE0 + add r2, r2, #0x2b + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A7C: + ldr r1, _020E8C94 ; =UNK_02106EF8 + add r2, r2, #0x30 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A90: + ldr r1, _020E8C98 ; =UNK_02106F08 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AA4: + ldr r1, _020E8C9C ; =UNK_02106F10 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AB8: + ldr r1, _020E8CA0 ; =UNK_02106F18 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8ACC: + ldr r1, _020E8CA4 ; =UNK_02106F20 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AE0: + ldr r1, _020E8CA8 ; =UNK_02106F28 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AF4: + ldr r1, _020E8CAC ; =UNK_02106F2C + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B08: + ldr r1, _020E8CB0 ; =UNK_02106F30 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B1C: + ldr r1, _020E8CB4 ; =UNK_02106F34 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B30: + ldr r1, _020E8CB8 ; =UNK_02106F38 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B44: + ldr r1, _020E8CBC ; =UNK_02106F3C + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B58: + ldr r1, _020E8CC0 ; =UNK_02106F40 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B6C: + ldr r1, _020E8CC4 ; =UNK_02106F44 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B80: + ldr r1, _020E8CC8 ; =UNK_02106F48 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B94: + ldr r1, _020E8CCC ; =UNK_02106F4C + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BA8: + ldr r1, _020E8CD0 ; =UNK_02106F50 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BBC: + ldr r1, _020E8CD4 ; =UNK_02106F54 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BD0: + ldr r1, _020E8CD8 ; =UNK_02106F58 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BE4: + and r0, r4, #0x80000000 + add r1, r4, r0, lsr #0x1f + add r0, sp, #0x26 + mov r1, r1, asr #0x1 + bl __two_exp + add r1, sp, #0x26 + mov r0, r5 + mov r2, r1 + bl __timesdec + tst r4, #0x1 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r5,pc} + add r3, sp, #0x0 + mov r12, r5 + mov r2, #0x9 +_020E8C20: + ldrh r1, [r12, #0x0] + ldrh r0, [r12, #0x2] + add r12, r12, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E8C20 + ldrh r0, [r12, #0x0] + cmp r4, #0x0 + strh r0, [r3, #0x0] + add r0, sp, #0x26 + ble _020E8C64 + ldr r1, _020E8CBC ; =UNK_02106F3C + mov r2, #0x0 + bl __str2dec + b _020E8C70 +_020E8C64: + ldr r1, _020E8CB4 ; =UNK_02106F34 + mvn r2, #0x0 + bl __str2dec +_020E8C70: + add r1, sp, #0x0 + add r2, sp, #0x26 + mov r0, r5 + bl __timesdec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020E8C88: .word UNK_02106E88 +_020E8C8C: .word UNK_02106EB8 +_020E8C90: .word UNK_02106EE0 +_020E8C94: .word UNK_02106EF8 +_020E8C98: .word UNK_02106F08 +_020E8C9C: .word UNK_02106F10 +_020E8CA0: .word UNK_02106F18 +_020E8CA4: .word UNK_02106F20 +_020E8CA8: .word UNK_02106F28 +_020E8CAC: .word UNK_02106F2C +_020E8CB0: .word UNK_02106F30 +_020E8CB4: .word UNK_02106F34 +_020E8CB8: .word UNK_02106F38 +_020E8CBC: .word UNK_02106F3C +_020E8CC0: .word UNK_02106F40 +_020E8CC4: .word UNK_02106F44 +_020E8CC8: .word UNK_02106F48 +_020E8CCC: .word UNK_02106F4C +_020E8CD0: .word UNK_02106F50 +_020E8CD4: .word UNK_02106F54 +_020E8CD8: .word UNK_02106F58 + arm_func_end __two_exp + + arm_func_start __equals_dec +__equals_dec: + stmdb sp!, {r4,lr} + ldrb r3, [r0, #0x5] + cmp r3, #0x0 + bne _020E8D00 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D00: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + bne _020E8D1C + cmp r3, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4,pc} +_020E8D1C: + ldrsh r3, [r0, #0x2] + ldrsh r2, [r1, #0x2] + cmp r3, r2 + bne _020E8DB4 + ldrb r4, [r0, #0x4] + ldrb r2, [r1, #0x4] + mov r12, #0x0 + mov lr, r4 + cmp r4, r2 + movgt lr, r2 + cmp lr, #0x0 + ble _020E8D74 +_020E8D4C: + add r3, r0, r12 + add r2, r1, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r3, r2 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + add r12, r12, #0x1 + cmp r12, lr + blt _020E8D4C +_020E8D74: + cmp lr, r4 + moveq r0, r1 + ldrb r1, [r0, #0x4] + cmp r12, r1 + bge _020E8DAC +_020E8D88: + add r1, r0, r12 + ldrb r1, [r1, #0x5] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + ldrb r1, [r0, #0x4] + add r12, r12, #0x1 + cmp r12, r1 + blt _020E8D88 +_020E8DAC: + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020E8DB4: + mov r0, #0x0 + ldmia sp!, {r4,pc} + arm_func_end __equals_dec + + arm_func_start __less_dec +__less_dec: + stmdb sp!, {r3-r5,lr} + ldrb r2, [r0, #0x5] + cmp r2, #0x0 + bne _020E8DE0 + ldrb r0, [r1, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8DE0: + ldrb r2, [r1, #0x5] + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} + ldrsh r3, [r1, #0x2] + ldrsh r2, [r0, #0x2] + cmp r2, r3 + bne _020E8E90 + ldrb r5, [r0, #0x4] + ldrb r4, [r1, #0x4] + mov r12, #0x0 + mov lr, r5 + cmp r5, r4 + movgt lr, r4 + cmp lr, #0x0 + ble _020E8E54 +_020E8E20: + add r3, r1, r12 + add r2, r0, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r2, r3 + movcc r0, #0x1 + ldmccia sp!, {r3-r5,pc} + cmp r3, r2 + movcc r0, #0x0 + ldmccia sp!, {r3-r5,pc} + add r12, r12, #0x1 + cmp r12, lr + blt _020E8E20 +_020E8E54: + cmp lr, r5 + bne _020E8E88 + cmp r12, r4 + bge _020E8E88 +_020E8E64: + add r0, r1, r12 + ldrb r0, [r0, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r3-r5,pc} + ldrb r0, [r1, #0x4] + add r12, r12, #0x1 + cmp r12, r0 + blt _020E8E64 +_020E8E88: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8E90: + movlt r0, #0x1 + movge r0, #0x0 + ldmia sp!, {r3-r5,pc} + arm_func_end __less_dec + + arm_func_start __minus_dec +__minus_dec: ; 0x020E8E9C + stmdb sp!, {r3-r7,lr} + mov r6, r0 + mov r5, #0x9 +_020E8EA8: + ldrh r4, [r1, #0x0] + ldrh r3, [r1, #0x2] + add r1, r1, #0x4 + subs r5, r5, #0x1 + strh r4, [r6, #0x0] + strh r3, [r6, #0x2] + add r6, r6, #0x4 + bne _020E8EA8 + ldrh r1, [r1, #0x0] + strh r1, [r6, #0x0] + ldrb r1, [r2, #0x5] + cmp r1, #0x0 + ldmeqia sp!, {r3-r7,pc} + ldrb r7, [r0, #0x4] + ldrb r3, [r2, #0x4] + ldrsh r4, [r0, #0x2] + mov r1, r7 + cmp r7, r3 + movlt r1, r3 + ldrsh r3, [r2, #0x2] + sub r6, r4, r3 + add r1, r1, r6 + cmp r1, #0x20 + movgt r1, #0x20 + cmp r7, r1 + bge _020E8F34 + mov r4, #0x0 +_020E8F14: + ldrb r5, [r0, #0x4] + add r3, r0, r7 + add r5, r5, #0x1 + strb r5, [r0, #0x4] + strb r4, [r3, #0x5] + ldrb r7, [r0, #0x4] + cmp r7, r1 + blt _020E8F14 +_020E8F34: + ldrb r4, [r2, #0x4] + add r3, r0, #0x5 + add r12, r3, r1 + add r4, r4, r6 + cmp r4, r1 + addlt r12, r3, r4 + sub r4, r12, r3 + add r1, r2, #0x5 + sub r4, r4, r6 + add lr, r1, r4 + mov r4, lr + b _020E8FC8 +_020E8F64: + ldrb r7, [r12, #-0x1]! + ldrb r5, [lr, #-0x1]! + cmp r7, r5 + bhs _020E8FB8 + ldrb r7, [r12, #-0x1] + sub r5, r12, #0x1 + cmp r7, #0x0 + bne _020E8F90 +_020E8F84: + ldrb r7, [r5, #-0x1]! + cmp r7, #0x0 + beq _020E8F84 +_020E8F90: + cmp r5, r12 + beq _020E8FB8 +_020E8F98: + ldrb r7, [r5, #0x0] + sub r7, r7, #0x1 + strb r7, [r5, #0x0] + ldrb r7, [r5, #0x1]! + cmp r5, r12 + add r7, r7, #0xa + strb r7, [r5, #0x0] + bne _020E8F98 +_020E8FB8: + ldrb r7, [r12, #0x0] + ldrb r5, [lr, #0x0] + sub r5, r7, r5 + strb r5, [r12, #0x0] +_020E8FC8: + cmp r12, r3 + cmphi lr, r1 + bhi _020E8F64 + ldrb r5, [r2, #0x4] + sub lr, r4, r1 + cmp lr, r5 + bge _020E90A4 + ldrb r1, [r4, #0x0] + mov r7, #0x0 + cmp r1, #0x5 + movcc r7, #0x1 + blo _020E9040 + bne _020E9040 + add r1, r2, #0x5 + add r2, r1, r5 + add r4, r4, #0x1 + cmp r4, r2 + bhs _020E9028 +_020E9010: + ldrb r1, [r4, #0x0] + cmp r1, #0x0 + bne _020E90A4 + add r4, r4, #0x1 + cmp r4, r2 + blo _020E9010 +_020E9028: + add r1, r3, lr + add r2, r1, r6 + ldrb r1, [r2, #-0x1] + sub r12, r2, #0x1 + tst r1, #0x1 + movne r7, #0x1 +_020E9040: + cmp r7, #0x0 + beq _020E90A4 + ldrb r1, [r12, #0x0] + cmp r1, #0x1 + bhs _020E9098 + ldrb r1, [r12, #-0x1] + sub r2, r12, #0x1 + cmp r1, #0x0 + bne _020E9070 +_020E9064: + ldrb r1, [r2, #-0x1]! + cmp r1, #0x0 + beq _020E9064 +_020E9070: + cmp r2, r12 + beq _020E9098 +_020E9078: + ldrb r1, [r2, #0x0] + sub r1, r1, #0x1 + strb r1, [r2, #0x0] + ldrb r1, [r2, #0x1]! + cmp r2, r12 + add r1, r1, #0xa + strb r1, [r2, #0x0] + bne _020E9078 +_020E9098: + ldrb r1, [r12, #0x0] + sub r1, r1, #0x1 + strb r1, [r12, #0x0] +_020E90A4: + ldrb r1, [r3, #0x0] + mov r5, r3 + cmp r1, #0x0 + bne _020E90C0 +_020E90B4: + ldrb r1, [r5, #0x1]! + cmp r1, #0x0 + beq _020E90B4 +_020E90C0: + cmp r5, r3 + bls _020E9108 + ldrsh r1, [r0, #0x2] + sub r2, r5, r3 + and r4, r2, #0xff + sub r1, r1, r4 + strh r1, [r0, #0x2] + ldrb r1, [r0, #0x4] + add r2, r3, r1 + cmp r5, r2 + bhs _020E90FC +_020E90EC: + ldrb r1, [r5], #0x1 + cmp r5, r2 + strb r1, [r3], #0x1 + blo _020E90EC +_020E90FC: + ldrb r1, [r0, #0x4] + sub r1, r1, r4 + strb r1, [r0, #0x4] +_020E9108: + ldrb r1, [r0, #0x4] + add r2, r0, #0x5 + add r3, r2, r1 + cmp r3, r2 + bls _020E9130 +_020E911C: + ldrb r1, [r3, #-0x1]! + cmp r1, #0x0 + bne _020E9130 + cmp r3, r2 + bhi _020E911C +_020E9130: + sub r1, r3, r2 + add r1, r1, #0x1 + strb r1, [r0, #0x4] + ldmia sp!, {r3-r7,pc} + arm_func_end __minus_dec + + arm_func_start __num2dec_internal +__num2dec_internal: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x58 + mov r8, r1 + mov r6, r2 + mov r7, r0 + mov r0, r8 + mov r1, r6 + bl __signbitf + cmp r0, #0x0 + movne r1, #0x1 + moveq r1, #0x0 + mov r4, r1, lsl #0x18 + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + mov r5, r4, asr #0x18 + bl _deq + bne _020E91AC + strb r5, [r7, #0x0] + mov r1, #0x0 + strh r1, [r7, #0x2] + mov r0, #0x1 + strb r0, [r7, #0x4] + add sp, sp, #0x58 + strb r1, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91AC: + mov r0, r8 + mov r1, r6 + bl __fpclassifyf + cmp r0, #0x2 + bgt _020E91F8 + strb r5, [r7, #0x0] + mov r2, #0x0 + strh r2, [r7, #0x2] + mov r2, #0x1 + mov r0, r8 + mov r1, r6 + strb r2, [r7, #0x4] + bl __fpclassifyf + cmp r0, #0x1 + moveq r0, #0x4e + movne r0, #0x49 + add sp, sp, #0x58 + strb r0, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91F8: + cmp r5, #0x0 + beq _020E921C + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + bl _dsub + mov r8, r0 + mov r6, r1 +_020E921C: + add r2, sp, #0x8 + mov r0, r8 + mov r1, r6 + bl frexp + mov r4, r0 + mov r6, r1 + orr r12, r4, #0x0 + rsbs r2, r12, #0x0 + orr r3, r6, #0x100000 + rsc r1, r3, #0x0 + mov r0, #0x0 + and r3, r3, r1 + sub r1, r0, #0x1 + and r12, r12, r2 + mov r2, r1 + adds r0, r12, r1 + adc r1, r3, r2 + str r4, [sp, #0x0] + str r6, [sp, #0x4] + bl __msl_generic_count_bits64 + rsb r8, r0, #0x35 + ldr r1, [sp, #0x8] + add r0, sp, #0xc + sub r1, r1, r8 + bl __two_exp + mov r0, r4 + mov r1, r6 + mov r2, r8 + bl ldexp + bl _ll_ufrom_d + mov r2, r1 + mov r1, r0 + add r0, sp, #0x32 + bl __ull2dec + mov r0, r7 + add r1, sp, #0x32 + add r2, sp, #0xc + bl __timesdec + strb r5, [r7, #0x0] + add sp, sp, #0x58 + ldmia sp!, {r4-r8,pc} + arm_func_end __num2dec_internal + + arm_func_start __num2dec_internal2 +__num2dec_internal2: ; 0x020E92C0 + stmdb sp!, {r3-r5,lr} + mov r4, r3 + ldrsh r5, [r0, #0x2] + mov r0, r4 + bl __num2dec_internal + ldrb r0, [r4, #0x5] + cmp r0, #0x9 + ldmhiia sp!, {r3-r5,pc} + cmp r5, #0x20 + movgt r5, #0x20 + mov r0, r4 + mov r1, r5 + bl __rounddec + ldrb r0, [r4, #0x4] + cmp r0, r5 + bge _020E9324 + mov r1, #0x0 +_020E9304: + ldrb r2, [r4, #0x4] + add r0, r4, r0 + add r2, r2, #0x1 + strb r2, [r4, #0x4] + strb r1, [r0, #0x5] + ldrb r0, [r4, #0x4] + cmp r0, r5 + blt _020E9304 +_020E9324: + ldrsh r1, [r4, #0x2] + sub r0, r0, #0x1 + mov r2, #0x0 + sub r0, r1, r0 + strh r0, [r4, #0x2] + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E9344: + add r1, r4, r2 + ldrb r0, [r1, #0x5] + add r2, r2, #0x1 + add r0, r0, #0x30 + strb r0, [r1, #0x5] + ldrb r0, [r4, #0x4] + cmp r2, r0 + blt _020E9344 + ldmia sp!, {r3-r5,pc} + arm_func_end __num2dec_internal2 + + arm_func_start __dec2num +__dec2num: ; 0x020E9368 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xfc + mov r4, r0 + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + bne _020E93A8 + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93A8: + ldrb r0, [r4, #0x5] + cmp r0, #0x30 + beq _020E93C8 + cmp r0, #0x49 + beq _020E93F0 + cmp r0, #0x4e + beq _020E9424 + b _020E946C +_020E93C8: + ldrsb r0, [r4, #0x0] + mov r2, #0x0 + cmp r0, #0x0 + ldreq r3, _020E996C ; =0x3FF00000 + mov r0, #0x0 + ldrne r3, _020E9970 ; =0xBFF00000 + mov r1, r0 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E93F0: + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =__float_huge + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9424: + ldr r1, _020E9978 ; =0x7FF00000 + add r3, sp, #0x10 + mov r2, #0x0 + str r2, [r3, #0x0] + str r1, [r3, #0x4] + ldrsb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020E9454 + orr r0, r1, #0x80000000 + orr r1, r2, r2 + str r1, [r3, #0x0] + str r0, [r3, #0x4] +_020E9454: + ldmia r3, {r0-r1} + orr r0, r0, #0x0 + orr r1, r1, #0x80000 + stmia r3, {r0-r1} + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E946C: + add r3, sp, #0xd6 + mov r5, r4 + mov r2, #0x9 +_020E9478: + ldrh r1, [r5, #0x0] + ldrh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E9478 + ldrh r0, [r5, #0x0] + add r1, sp, #0xdb + strh r0, [r3, #0x0] + ldrb r0, [sp, #0xda] + add r5, r1, r0 + cmp r1, r5 + bhs _020E94C8 +_020E94B4: + ldrb r0, [r1, #0x0] + sub r0, r0, #0x30 + strb r0, [r1], #0x1 + cmp r1, r5 + blo _020E94B4 +_020E94C8: + ldrb r1, [sp, #0xda] + ldrsh r2, [sp, #0xd8] + add r0, sp, #0xb0 + sub r1, r1, #0x1 + add r1, r2, r1 + strh r1, [sp, #0xd8] + ldr r1, _020E997C ; =UNK_02106F5C + mov r2, #0x134 + ldrsh r11, [sp, #0xd8] + bl __str2dec + add r0, sp, #0xb0 + add r1, sp, #0xd6 + bl __less_dec + cmp r0, #0x0 + beq _020E9538 + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =__float_huge + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9538: + add r1, sp, #0xdb + ldrb r0, [r1, #0x0] + add r8, r1, #0x1 + bl _dfltu + str r0, [sp, #0x8] + str r1, [sp, #0xc] + cmp r8, r5 + bhs _020E9610 +_020E9558: + sub r0, r5, r8 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1d + adds r7, r1, r0, ror #0x1d + moveq r7, #0x8 + mov r6, #0x0 + mov r2, #0x0 + cmp r7, #0x0 + ble _020E9594 + mov r0, #0xa +_020E9580: + ldrb r1, [r8], #0x1 + add r2, r2, #0x1 + cmp r2, r7 + mla r6, r0, r6, r1 + blt _020E9580 +_020E9594: + ldr r0, _020E9980 ; =UNK_02106E48 + ldr r1, [sp, #0xc] + add r3, r0, r7, lsl #0x3 + ldr r2, [r3, #-0x8] + ldr r0, [sp, #0x8] + ldr r3, [r3, #-0x4] + bl _dmul + mov r4, r0 + mov r9, r1 + mov r0, r6 + bl _dfltu + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r9 + bl _dadd + cmp r6, #0x0 + mov r6, r0 + mov r10, r1 + beq _020E95FC + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r10 + bl _deq + beq _020E9610 +_020E95FC: + str r6, [sp, #0x8] + str r10, [sp, #0xc] + cmp r8, r5 + sub r11, r11, r7 + blo _020E9558 +_020E9610: + cmp r11, #0x0 + bge _020E9654 + rsb r0, r11, #0x0 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _ddiv + str r0, [sp, #0x8] + str r1, [sp, #0xc] + b _020E968C +_020E9654: + mov r0, r11 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _dmul + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E968C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r11 + bl ldexp + str r0, [sp, #0x8] + str r1, [sp, #0xc] + bl __fpclassifyf + cmp r0, #0x2 + bne _020E96C0 + ldr r0, _020E9988 ; =0x7FEFFFFF + mvn r1, #0x0 + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E96C0: + ldr r1, [sp, #0x8] + ldr r2, [sp, #0xc] + add r0, sp, #0x8a + add r4, sp, #0x0 + mov r5, #0x0 + bl __num2dec_internal + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __equals_dec + cmp r0, #0x0 + bne _020E9934 + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __less_dec + cmp r0, #0x0 + movne r5, #0x1 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + cmp r5, #0x0 + moveq r6, #0x1 + str r1, [sp, #0x0] + str r0, [sp, #0x4] + movne r6, #0x0 +_020E971C: + cmp r6, #0x0 + bne _020E9744 + ldmia r4, {r0-r1} + adds r0, r0, #0x1 + adc r1, r1, #0x0 + stmia r4, {r0-r1} + bl __fpclassifyf + cmp r0, #0x2 + beq _020E9934 + b _020E975C +_020E9744: + ldr r1, [r4, #0x0] + ldr r0, [r4, #0x4] + subs r1, r1, #0x1 + sbc r0, r0, #0x0 + str r1, [r4, #0x0] + str r0, [r4, #0x4] +_020E975C: + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + add r0, sp, #0x64 + bl __num2dec_internal + cmp r5, #0x0 + beq _020E9788 + add r0, sp, #0x64 + add r1, sp, #0xd6 + bl __less_dec + cmp r0, #0x0 + beq _020E98AC +_020E9788: + cmp r5, #0x0 + bne _020E9864 + add r0, sp, #0xd6 + add r1, sp, #0x64 + bl __less_dec + cmp r0, #0x0 + bne _020E9864 + add r3, sp, #0x8a + add r5, sp, #0x3e + mov r2, #0x9 +_020E97B0: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E97B0 + ldrh r0, [r3, #0x0] + add r3, sp, #0x64 + add r4, sp, #0x8a + strh r0, [r5, #0x0] + mov r2, #0x9 +_020E97E4: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r4, #0x0] + strh r0, [r4, #0x2] + add r4, r4, #0x4 + subs r2, r2, #0x1 + bne _020E97E4 + ldrh r0, [r3, #0x0] + add r3, sp, #0x3e + add r5, sp, #0x64 + strh r0, [r4, #0x0] + mov r2, #0x9 +_020E9818: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E9818 + ldrh r4, [r3, #0x0] + ldr r3, [sp, #0x8] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0xc] + ldr r0, [sp, #0x4] + strh r4, [r5, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + str r3, [sp, #0x0] + str r2, [sp, #0x4] + b _020E98AC +_020E9864: + add r7, sp, #0x64 + add r3, sp, #0x8a + mov r2, #0x9 +_020E9870: + ldrh r1, [r7, #0x0] + ldrh r0, [r7, #0x2] + add r7, r7, #0x4 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + subs r2, r2, #0x1 + bne _020E9870 + ldrh r2, [r7, #0x0] + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + strh r2, [r3, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E971C +_020E98AC: + add r0, sp, #0x3e + add r1, sp, #0xd6 + add r2, sp, #0x8a + bl __minus_dec + add r0, sp, #0x18 + add r1, sp, #0x64 + add r2, sp, #0xd6 + bl __minus_dec + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __equals_dec + cmp r0, #0x0 + beq _020E9910 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + and r1, r1, #0x1 + and r0, r0, #0x0 + cmp r0, #0x0 + cmpeq r1, #0x0 + beq _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E9934 +_020E9910: + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __less_dec + cmp r0, #0x0 + bne _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E9934: + ldrsb r0, [sp, #0xd6] + cmp r0, #0x0 + beq _020E995C + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _dsub + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E995C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020E996C: .word 0x3FF00000 +_020E9970: .word 0xBFF00000 +_020E9974: .word __float_huge +_020E9978: .word 0x7FF00000 +_020E997C: .word UNK_02106F5C +_020E9980: .word UNK_02106E48 +_020E9984: .word 0x40140000 +_020E9988: .word 0x7FEFFFFF + arm_func_end __dec2num + + .section .exception,8 + + .global UNK_020EC740 +UNK_020EC740: ; 0x020EC740 + .byte 0x00, 0xFF, 0x05, 0x20 + .balign 8 + + exception __rounddec, 65, 0x00200300 + exception __ull2dec, 205, 0x0050FF00 + exception __timesdec, 389, 0x00D0FF00 + exception __str2dec, 157, 0x00100000 + exception __two_exp, 901, 0x00B00300 + exception __num2dec_internal, 385, 0x00E01F00 + exception __num2dec_internal2, 169, 0x00200300 + exception __dec2num, 1572, UNK_020EC740 diff --git a/arm9/asm/MSL_math.s b/arm9/asm/MSL_math.s index 1278b0244..718ea9376 100644 --- a/arm9/asm/MSL_math.s +++ b/arm9/asm/MSL_math.s @@ -1,107 +1,107 @@ - .include "global.inc" - .include "asm/macros.inc" - - .text - - arm_func_start __msl_generic_count_bits64 -__msl_generic_count_bits64: ; 0x020E998C - mov r3, r0, lsr #0x1 - ldr r2, _020E9A14 ; =0x55555555 - orr r3, r3, r1, lsl #0x1f - and r3, r3, r2 - subs r12, r0, r3 - and r2, r2, r1, lsr #0x1 - ldr r0, _020E9A18 ; =0x33333333 - sbc r3, r1, r2 - mov r1, r12, lsr #0x2 - orr r1, r1, r3, lsl #0x1e - and r2, r12, r0 - and r1, r1, r0 - adds r2, r2, r1 - and r1, r3, r0 - and r0, r0, r3, lsr #0x2 - adc r1, r1, r0 - mov r0, r2, lsr #0x4 - orr r0, r0, r1, lsl #0x1c - adds r2, r2, r0 - ldr r0, _020E9A1C ; =0x0F0F0F0F - adc r1, r1, r1, lsr #0x4 - and r3, r2, r0 - and r2, r1, r0 - mov r0, r3, lsr #0x8 - orr r0, r0, r2, lsl #0x18 - adds r1, r3, r0 - adc r2, r2, r2, lsr #0x8 - mov r0, r1, lsr #0x10 - orr r0, r0, r2, lsl #0x10 - adds r1, r1, r0 - adc r0, r2, r2, lsr #0x10 - adds r0, r1, r0 - and r0, r0, #0xff - bx lr - .balign 4 -_020E9A14: .word 0x55555555 -_020E9A18: .word 0x33333333 -_020E9A1C: .word 0x0F0F0F0F - arm_func_end __msl_generic_count_bits64 - - arm_func_start __signbitf -__signbitf: - stmdb sp!, {r0-r3} - ldr r0, [sp, #0x4] - and r0, r0, #0x80000000 - add sp, sp, #0x10 - bx lr - arm_func_end __signbitf - - arm_func_start __fpclassifyf -__fpclassifyf: ; 0x020E9A34 - stmdb sp!, {r0-r3} - ldr r2, [sp, #0x4] - ldr r0, _020E9A9C ; =0x7FF00000 - ands r1, r2, r0 - beq _020E9A70 - cmp r1, r0 - bne _020E9A90 - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x1 - moveq r0, #0x2 - bx lr -_020E9A70: - ldr r0, _020E9AA0 ; =0x000FFFFF - tst r2, r0 - ldreq r0, [sp, #0x0] - add sp, sp, #0x10 - cmpeq r0, #0x0 - movne r0, #0x5 - moveq r0, #0x3 - bx lr -_020E9A90: - mov r0, #0x4 - add sp, sp, #0x10 - bx lr - .balign 4 -_020E9A9C: .word 0x7FF00000 -_020E9AA0: .word 0x000FFFFF - arm_func_end __fpclassifyf - - arm_func_start scalbn -scalbn: ; 0x020E9AA4 - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r2 - add r2, sp, #0x0 - bl frexp - ldr r2, [sp, #0x0] - add r2, r2, r4 - str r2, [sp, #0x0] - bl ldexp - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - arm_func_end scalbn - - exception scalbn, 45, 0x00200100 + .include "global.inc" + .include "asm/macros.inc" + + .text + + arm_func_start __msl_generic_count_bits64 +__msl_generic_count_bits64: ; 0x020E998C + mov r3, r0, lsr #0x1 + ldr r2, _020E9A14 ; =0x55555555 + orr r3, r3, r1, lsl #0x1f + and r3, r3, r2 + subs r12, r0, r3 + and r2, r2, r1, lsr #0x1 + ldr r0, _020E9A18 ; =0x33333333 + sbc r3, r1, r2 + mov r1, r12, lsr #0x2 + orr r1, r1, r3, lsl #0x1e + and r2, r12, r0 + and r1, r1, r0 + adds r2, r2, r1 + and r1, r3, r0 + and r0, r0, r3, lsr #0x2 + adc r1, r1, r0 + mov r0, r2, lsr #0x4 + orr r0, r0, r1, lsl #0x1c + adds r2, r2, r0 + ldr r0, _020E9A1C ; =0x0F0F0F0F + adc r1, r1, r1, lsr #0x4 + and r3, r2, r0 + and r2, r1, r0 + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + adds r1, r3, r0 + adc r2, r2, r2, lsr #0x8 + mov r0, r1, lsr #0x10 + orr r0, r0, r2, lsl #0x10 + adds r1, r1, r0 + adc r0, r2, r2, lsr #0x10 + adds r0, r1, r0 + and r0, r0, #0xff + bx lr + .balign 4 +_020E9A14: .word 0x55555555 +_020E9A18: .word 0x33333333 +_020E9A1C: .word 0x0F0F0F0F + arm_func_end __msl_generic_count_bits64 + + arm_func_start __signbitf +__signbitf: + stmdb sp!, {r0-r3} + ldr r0, [sp, #0x4] + and r0, r0, #0x80000000 + add sp, sp, #0x10 + bx lr + arm_func_end __signbitf + + arm_func_start __fpclassifyf +__fpclassifyf: ; 0x020E9A34 + stmdb sp!, {r0-r3} + ldr r2, [sp, #0x4] + ldr r0, _020E9A9C ; =0x7FF00000 + ands r1, r2, r0 + beq _020E9A70 + cmp r1, r0 + bne _020E9A90 + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x1 + moveq r0, #0x2 + bx lr +_020E9A70: + ldr r0, _020E9AA0 ; =0x000FFFFF + tst r2, r0 + ldreq r0, [sp, #0x0] + add sp, sp, #0x10 + cmpeq r0, #0x0 + movne r0, #0x5 + moveq r0, #0x3 + bx lr +_020E9A90: + mov r0, #0x4 + add sp, sp, #0x10 + bx lr + .balign 4 +_020E9A9C: .word 0x7FF00000 +_020E9AA0: .word 0x000FFFFF + arm_func_end __fpclassifyf + + arm_func_start scalbn +scalbn: ; 0x020E9AA4 + stmdb sp!, {r3-r4,lr} + sub sp, sp, #0x4 + mov r4, r2 + add r2, sp, #0x0 + bl frexp + ldr r2, [sp, #0x0] + add r2, r2, r4 + str r2, [sp, #0x0] + bl ldexp + add sp, sp, #0x4 + ldmia sp!, {r3-r4,pc} + arm_func_end scalbn + + exception scalbn, 45, 0x00200100 diff --git a/arm9/asm/RUNTIME_ARM_semihosted_console_io.s b/arm9/asm/RUNTIME_ARM_semihosted_console_io.s index b36cee701..0b0887990 100644 --- a/arm9/asm/RUNTIME_ARM_semihosted_console_io.s +++ b/arm9/asm/RUNTIME_ARM_semihosted_console_io.s @@ -1,78 +1,78 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start sys_writec -sys_writec: ; 0x020EC5D0 - str lr, [sp, #-0x4]! - mov r1, r0 - mov r0, #0x3 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_readc -sys_readc: ; 0x020EC5E4 - str lr, [sp, #-0x4]! - mov r1, #0x0 - mov r0, #0x7 - swi 0x123456 - ldr pc, [sp], #0x4 - - arm_func_start sys_exit -sys_exit: ; 0x020EC5F8 - mov r1, #0x0 - mov r0, #0x18 - swi 0x123456 - mov pc, lr - - arm_func_start __read_console -__read_console: ; 0x020EC608 - stmdb sp!, {r3-r7,lr} - mov r6, r2 - ldr r5, [r6, #0x0] - mov r7, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC650 -_020EC624: - bl sys_readc - and r1, r0, #0xff - cmp r1, #0xd - strb r0, [r7, r4] - cmpne r1, #0xa - addeq r0, r4, #0x1 - streq r0, [r6, #0x0] - beq _020EC650 - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC624 -_020EC650: - mov r0, #0x0 - ldmia sp!, {r3-r7,pc} - - arm_func_start __write_console -__write_console: ; 0x020EC658 - stmdb sp!, {r4-r6,lr} - ldr r5, [r2, #0x0] - mov r6, r1 - cmp r5, #0x0 - mov r4, #0x0 - bls _020EC684 -_020EC670: - add r0, r6, r4 - bl sys_writec - add r4, r4, #0x1 - cmp r4, r5 - blo _020EC670 -_020EC684: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start __close_console -__close_console: ; 0x020EC68C - mov r0, #0x0 - bx lr - - exception __read_console, 81, 0x00300F00 - exception __write_console, 53, 0x00200700 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start sys_writec +sys_writec: ; 0x020EC5D0 + str lr, [sp, #-0x4]! + mov r1, r0 + mov r0, #0x3 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_readc +sys_readc: ; 0x020EC5E4 + str lr, [sp, #-0x4]! + mov r1, #0x0 + mov r0, #0x7 + swi 0x123456 + ldr pc, [sp], #0x4 + + arm_func_start sys_exit +sys_exit: ; 0x020EC5F8 + mov r1, #0x0 + mov r0, #0x18 + swi 0x123456 + mov pc, lr + + arm_func_start __read_console +__read_console: ; 0x020EC608 + stmdb sp!, {r3-r7,lr} + mov r6, r2 + ldr r5, [r6, #0x0] + mov r7, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC650 +_020EC624: + bl sys_readc + and r1, r0, #0xff + cmp r1, #0xd + strb r0, [r7, r4] + cmpne r1, #0xa + addeq r0, r4, #0x1 + streq r0, [r6, #0x0] + beq _020EC650 + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC624 +_020EC650: + mov r0, #0x0 + ldmia sp!, {r3-r7,pc} + + arm_func_start __write_console +__write_console: ; 0x020EC658 + stmdb sp!, {r4-r6,lr} + ldr r5, [r2, #0x0] + mov r6, r1 + cmp r5, #0x0 + mov r4, #0x0 + bls _020EC684 +_020EC670: + add r0, r6, r4 + bl sys_writec + add r4, r4, #0x1 + cmp r4, r5 + blo _020EC670 +_020EC684: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start __close_console +__close_console: ; 0x020EC68C + mov r0, #0x0 + bx lr + + exception __read_console, 81, 0x00300F00 + exception __write_console, 53, 0x00200700 diff --git a/arm9/asm/RUNTIME_CPLUS_StaticInitializers.s b/arm9/asm/RUNTIME_CPLUS_StaticInitializers.s index 1c0caeb8c..706375130 100644 --- a/arm9/asm/RUNTIME_CPLUS_StaticInitializers.s +++ b/arm9/asm/RUNTIME_CPLUS_StaticInitializers.s @@ -1,54 +1,54 @@ - .include "asm/macros.inc" - .include "global.inc" - - .bss - - .global __global_destructor_chain -__global_destructor_chain: ; 0x021D74C8 - .space 0xC - - .text - - .extern __sinit__ - arm_func_start __call_static_initializers -__call_static_initializers: ; 0x020EC694 - stmdb sp!, {r4,lr} - ldr r4, _020EC6BC ; =__sinit__ - b _020EC6A8 -_020EC6A0: - blx r0 - add r4, r4, #0x4 -_020EC6A8: - cmp r4, #0x0 - ldrne r0, [r4, #0x0] - cmpne r0, #0x0 - bne _020EC6A0 - ldmia sp!, {r4,pc} - .balign 4 -_020EC6BC: .word __sinit__ - - arm_func_start __destroy_global_chain -__destroy_global_chain: ; 0x020EC6C0 - stmdb sp!, {r3-r5,lr} - ldr r4, _020EC700 ; =__global_destructor_chain - ldr r2, [r4, #0x0] - cmp r2, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020EC6D4: ; 0x020EC6D4 - mvn r5, #0x0 -_020EC6D8: - ldr r0, [r2, #0x0] - mov r1, r5 - str r0, [r4, #0x0] - ldr r0, [r2, #0x8] - ldr r2, [r2, #0x4] - blx r2 - ldr r2, [r4, #0x0] - cmp r2, #0x0 - bne _020EC6D8 - ldmia sp!, {r3-r5,pc} - .balign 4 -_020EC700: .word __global_destructor_chain - - exception __call_static_initializers, 45, 0x00100100 - exception __destroy_global_chain, 69, 0x00200300 + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global __global_destructor_chain +__global_destructor_chain: ; 0x021D74C8 + .space 0xC + + .text + + .extern __sinit__ + arm_func_start __call_static_initializers +__call_static_initializers: ; 0x020EC694 + stmdb sp!, {r4,lr} + ldr r4, _020EC6BC ; =__sinit__ + b _020EC6A8 +_020EC6A0: + blx r0 + add r4, r4, #0x4 +_020EC6A8: + cmp r4, #0x0 + ldrne r0, [r4, #0x0] + cmpne r0, #0x0 + bne _020EC6A0 + ldmia sp!, {r4,pc} + .balign 4 +_020EC6BC: .word __sinit__ + + arm_func_start __destroy_global_chain +__destroy_global_chain: ; 0x020EC6C0 + stmdb sp!, {r3-r5,lr} + ldr r4, _020EC700 ; =__global_destructor_chain + ldr r2, [r4, #0x0] + cmp r2, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020EC6D4: ; 0x020EC6D4 + mvn r5, #0x0 +_020EC6D8: + ldr r0, [r2, #0x0] + mov r1, r5 + str r0, [r4, #0x0] + ldr r0, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + bne _020EC6D8 + ldmia sp!, {r3-r5,pc} + .balign 4 +_020EC700: .word __global_destructor_chain + + exception __call_static_initializers, 45, 0x00100100 + exception __destroy_global_chain, 69, 0x00200300 diff --git a/arm9/asm/RUNTIME_d_add.s b/arm9/asm/RUNTIME_d_add.s index 3d2e24b13..6920a32fb 100644 --- a/arm9/asm/RUNTIME_d_add.s +++ b/arm9/asm/RUNTIME_d_add.s @@ -1,231 +1,231 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern __dsub_start - - .text - - arm_func_start _dadd -_dadd: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi __dsub_start - .global __dadd_start -__dadd_start: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020E9B70 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020E9B70: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020E9C6C - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020E9CB4 -_020E9BA8: - subs r4, r12, r4 - beq _020E9C00 - cmp r4, #0x20 - ble _020E9BE4 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - adds r0, r0, r2 - adcs r1, r1, #0x0 - blo _020E9C28 - b _020E9C0C -_020E9BE4: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 -_020E9C00: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9C28 -_020E9C0C: - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - orr r0, r4, r0, rrx - mov lr, r12, lsl #0x15 - cmn lr, #0x200000 - beq _020E9E38 -_020E9C28: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9C6C: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020E9CD8 - orrs r4, r0, r1, lsl #0x1 - bne _020E9E14 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020E9E00 - cmn r4, #0x200000 - bne _020E9E00 - orrs r4, r2, r3, lsl #0x1 - beq _020E9E00 - b _020E9E14 -_020E9CB4: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020E9D44 - orrs r4, r2, r3, lsl #0x1 - bne _020E9E14 - b _020E9E00 -_020E9CD8: - orrs r4, r0, r1, lsl #0x1 - beq _020E9D18 - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020E9CB4 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020E9BA8 -_020E9D18: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020E9DCC - cmn r4, #0x200000 - bne _020E9DCC - orrs r4, r0, r1, lsl #0x1 - beq _020E9E00 - b _020E9E18 -_020E9D44: - orrs r4, r2, r3, lsl #0x1 - beq _020E9DDC - mov r4, #0x1 - bic r3, r3, #0x80000000 - cmp r1, #0x0 - bpl _020E9D68 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020E9BA8 -_020E9D68: - adds r0, r0, r2 - adcs r1, r1, r3 - blo _020E9D88 - add r12, r12, #0x1 - and r4, r0, #0x1 - movs r1, r1, rrx - mov r0, r0, rrx - orr r0, r0, r4 -_020E9D88: - cmp r1, #0x0 - subges r12, r12, #0x1 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr -_020E9DCC: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020E9DDC: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020E9E00: - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020E9E14: - mov r1, r3 -_020E9E18: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020E9E28: ; 0x020E9E28 - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020E9E38: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - ldr r1, _020E9E58 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020E9E58: .word 0x7FF00000 - arm_func_end _dadd + .include "asm/macros.inc" + .include "global.inc" + + .extern __dsub_start + + .text + + arm_func_start _dadd +_dadd: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi __dsub_start + .global __dadd_start +__dadd_start: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020E9B70 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020E9B70: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020E9C6C + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020E9CB4 +_020E9BA8: + subs r4, r12, r4 + beq _020E9C00 + cmp r4, #0x20 + ble _020E9BE4 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + adds r0, r0, r2 + adcs r1, r1, #0x0 + blo _020E9C28 + b _020E9C0C +_020E9BE4: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 +_020E9C00: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9C28 +_020E9C0C: + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + orr r0, r4, r0, rrx + mov lr, r12, lsl #0x15 + cmn lr, #0x200000 + beq _020E9E38 +_020E9C28: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9C6C: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020E9CD8 + orrs r4, r0, r1, lsl #0x1 + bne _020E9E14 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020E9E00 + cmn r4, #0x200000 + bne _020E9E00 + orrs r4, r2, r3, lsl #0x1 + beq _020E9E00 + b _020E9E14 +_020E9CB4: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020E9D44 + orrs r4, r2, r3, lsl #0x1 + bne _020E9E14 + b _020E9E00 +_020E9CD8: + orrs r4, r0, r1, lsl #0x1 + beq _020E9D18 + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020E9CB4 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020E9BA8 +_020E9D18: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020E9DCC + cmn r4, #0x200000 + bne _020E9DCC + orrs r4, r0, r1, lsl #0x1 + beq _020E9E00 + b _020E9E18 +_020E9D44: + orrs r4, r2, r3, lsl #0x1 + beq _020E9DDC + mov r4, #0x1 + bic r3, r3, #0x80000000 + cmp r1, #0x0 + bpl _020E9D68 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020E9BA8 +_020E9D68: + adds r0, r0, r2 + adcs r1, r1, r3 + blo _020E9D88 + add r12, r12, #0x1 + and r4, r0, #0x1 + movs r1, r1, rrx + mov r0, r0, rrx + orr r0, r0, r4 +_020E9D88: + cmp r1, #0x0 + subges r12, r12, #0x1 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_020E9DCC: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020E9DDC: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020E9E00: + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020E9E14: + mov r1, r3 +_020E9E18: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E28: ; 0x020E9E28 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020E9E38: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + ldr r1, _020E9E58 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020E9E58: .word 0x7FF00000 + arm_func_end _dadd diff --git a/arm9/asm/RUNTIME_d_div.s b/arm9/asm/RUNTIME_d_div.s index 0259c5289..6c83b0258 100644 --- a/arm9/asm/RUNTIME_d_div.s +++ b/arm9/asm/RUNTIME_d_div.s @@ -1,333 +1,333 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _drdiv -_drdiv: ; 0x020EC070 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 - - arm_func_start _ddiv -_ddiv: ; 0x020EC088 - stmdb sp!, {r4-r6,lr} - ldr lr, _020EC5C8 ; =0x00000FFE - eor r4, r1, r3 - ands r12, lr, r1, lsr #0x13 - cmpne r12, lr - beq _020EC434 - bic r1, r1, lr, lsl #0x14 - orr r1, r1, #0x100000 - add r12, r12, r4, lsr #0x1f -_020EC0AC: - ands r4, lr, r3, lsr #0x13 - cmpne r4, lr - beq _020EC4CC - bic r3, r3, lr, lsl #0x14 - orr r3, r3, #0x100000 -_020EC0C0: - sub r12, r12, r4 - cmp r1, r3 - cmpeq r0, r2 - bhs _020EC0DC - adds r0, r0, r0 - adc r1, r1, r1 - sub r12, r12, #0x2 -_020EC0DC: - sub r4, pc, #0x24 ; _020EC1C0 - #0x100 - ldrb lr, [r4, r3, lsr #0xc] - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - mov r4, #0x20000000 - mla r5, lr, r3, r4 - mov r6, r3, lsl #0xa - mov r5, r5, lsr #0x7 - mul lr, r5, lr - orr r6, r6, r2, lsr #0x16 - mov lr, lr, lsr #0xd - mul r5, lr, r6 - mov r6, r1, lsl #0xa - orr r6, r6, r0, lsr #0x16 - mov r5, r5, lsr #0x10 - mul r5, lr, r5 - mov lr, lr, lsl #0xe - add lr, lr, r5, lsr #0x10 - umull r5, r6, lr, r6 - umull r4, r5, r6, r2 - mla r5, r3, r6, r5 - mov r4, r4, lsr #0x1a - orr r4, r4, r5, lsl #0x6 - add r4, r4, r0, lsl #0x2 - umull lr, r5, r4, lr - mov r4, #0x0 - adds r5, r5, r6, lsl #0x18 - adc r4, r4, r6, lsr #0x8 - cmp r12, #0x800 - bge _020EC2C0 - add r12, r12, #0x7f0 - adds r12, r12, #0xc - bmi _020EC2D8 - orr r1, r4, r12, lsl #0x1f - bic r12, r12, #0x1 - add r1, r1, r12, lsl #0x13 - tst lr, #0x80000000 - bne _020EC1B0 - rsbs r2, r2, #0x0 - mov r4, r4, lsl #0x1 - add r4, r4, r5, lsr #0x1f - mul lr, r2, r4 - mov r6, #0x0 - mov r4, r5, lsl #0x1 - orr r4, r4, #0x1 - umlal r6, lr, r4, r2 - rsc r3, r3, #0x0 - mla lr, r4, r3, lr - cmp lr, r0, lsl #0x15 - bmi _020EC1B0 - mov r0, r5 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1B0: - adds r0, r5, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC1C0: ; not code - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 - .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 - .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 - .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD - .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 - .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA - .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 - .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB - .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 - .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E - .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 - .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 - .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D - .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 - .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 - .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EC2C0: - movs r1, r12, lsl #0x1f - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf00000 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC2D8: - mvn r6, r12, asr #0x1 - cmp r6, #0x34 - bgt _020EC424 - beq _020EC400 - cmp r6, #0x14 - bge _020EC320 - rsb r6, r6, #0x13 - mov lr, r0, lsl r6 - rsb r6, r6, #0x14 - mov r0, r5, lsr r6 - rsb r6, r6, #0x20 - orr r0, r0, r4, lsl r6 - rsb r6, r6, #0x20 - mov r4, r4, lsr r6 - orr r1, r4, r12, lsl #0x1f - mov r12, lr - mov lr, #0x0 - b _020EC350 -_020EC320: - rsb r6, r6, #0x33 - mov lr, r1, lsl r6 - mov r1, r12, lsl #0x1f - rsb r6, r6, #0x20 - orr r12, lr, r0, lsr r6 - rsb r6, r6, #0x20 - mov lr, r0, lsl r6 - mov r5, r5, lsr #0x15 - orr r5, r5, r4, lsl #0xb - rsb r6, r6, #0x1f - mov r0, r5, lsr r6 - mov r4, #0x0 -_020EC350: - rsbs r2, r2, #0x0 - mul r4, r2, r4 - mov r5, #0x0 - umlal r5, r4, r2, r0 - rsc r3, r3, #0x0 - mla r4, r0, r3, r4 - cmp r4, r12 - cmpeq r5, lr - ldmeqia sp!, {r4-r6,lr} - bxeq lr - adds r5, r5, r2 - adc r4, r4, r3 - cmp r4, r12 - bmi _020EC3F4 - bne _020EC398 - cmp r5, lr - beq _020EC3E4 - blo _020EC3F4 -_020EC398: - subs r5, r5, r2 - sbc r4, r4, r3 -_020EC3A0: - adds r5, r5, r5 - adc r4, r4, r4 - adds r5, r5, r2 - adc r4, r4, r3 - adds lr, lr, lr - adc r12, r12, r12 - cmp r4, r12 - bmi _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - cmp r5, lr - blo _020EC3E4 - ldmneia sp!, {r4-r6,lr} - bxne lr - tst r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EC3E4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC3F4: - adds r0, r0, #0x1 - adc r1, r1, #0x0 - b _020EC3A0 -_020EC400: - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 - cmp r1, r3 - cmpeq r0, r2 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - movne r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC424: - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC434: - orrs r5, r0, r1, lsl #0x1 - beq _020EC558 - cmp r12, lr - beq _020EC49C - movs r1, r1, lsl #0xc - beq _020EC478 - clz r5, r1 - movs r1, r1, lsl r5 - sub r12, r12, r5 - add r5, r12, #0x1f - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r5 - rsb r5, r5, #0x20 - mov r0, r0, lsl r5 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC478: - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - mov r12, r12, lsl #0x1 - orr r12, r12, r4, lsr #0x1f - b _020EC0AC -_020EC49C: - orrs r5, r0, r1, lsl #0xc - bne _020EC580 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - bhs _020EC4C0 - and r5, r3, #0x80000000 - eor r1, r5, r1 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC4C0: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - b _020EC5B8 -_020EC4CC: - orrs r5, r2, r3, lsl #0x1 - beq _020EC544 - cmp r4, lr - beq _020EC52C - movs r3, r3, lsl #0xc - beq _020EC50C - clz r5, r3 - movs r3, r3, lsl r5 - sub r4, r4, r5 - add r5, r4, #0x1f - mov r3, r3, lsr #0xb - orr r3, r3, r2, lsr r5 - rsb r5, r5, #0x20 - mov r2, r2, lsl r5 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC50C: - mvn r4, #0x13 - clz r5, r2 - movs r2, r2, lsl r5 - sub r4, r4, r5 - mov r3, r2, lsr #0xb - mov r2, r2, lsl #0x15 - mov r4, r4, lsl #0x1 - b _020EC0C0 -_020EC52C: - orrs r5, r2, r3, lsl #0xc - bne _020EC5A0 - mov r1, r12, lsl #0x1f - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC544: - mov r1, r12, lsl #0x1f - orr r1, r1, lr, lsl #0x13 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC558: - orrs r5, r2, r3, lsl #0x1 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - eor r1, r1, r3 - and r1, r1, #0x80000000 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC580: - tst r1, #0x80000 - beq _020EC5B8 - bic r5, r3, #0x80000000 - cmp r5, lr, lsl #0x13 - cmpeq r2, #0x0 - bhi _020EC5A0 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5A0: - tst r3, #0x80000 - beq _020EC5B8 - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4-r6,lr} - bx lr -_020EC5B8: - orr r1, r1, #0x7f000000 - orr r1, r1, #0xf80000 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EC5C8: .word 0x00000FFE + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _drdiv +_drdiv: ; 0x020EC070 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + + arm_func_start _ddiv +_ddiv: ; 0x020EC088 + stmdb sp!, {r4-r6,lr} + ldr lr, _020EC5C8 ; =0x00000FFE + eor r4, r1, r3 + ands r12, lr, r1, lsr #0x13 + cmpne r12, lr + beq _020EC434 + bic r1, r1, lr, lsl #0x14 + orr r1, r1, #0x100000 + add r12, r12, r4, lsr #0x1f +_020EC0AC: + ands r4, lr, r3, lsr #0x13 + cmpne r4, lr + beq _020EC4CC + bic r3, r3, lr, lsl #0x14 + orr r3, r3, #0x100000 +_020EC0C0: + sub r12, r12, r4 + cmp r1, r3 + cmpeq r0, r2 + bhs _020EC0DC + adds r0, r0, r0 + adc r1, r1, r1 + sub r12, r12, #0x2 +_020EC0DC: + sub r4, pc, #0x24 ; _020EC1C0 - #0x100 + ldrb lr, [r4, r3, lsr #0xc] + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + mov r4, #0x20000000 + mla r5, lr, r3, r4 + mov r6, r3, lsl #0xa + mov r5, r5, lsr #0x7 + mul lr, r5, lr + orr r6, r6, r2, lsr #0x16 + mov lr, lr, lsr #0xd + mul r5, lr, r6 + mov r6, r1, lsl #0xa + orr r6, r6, r0, lsr #0x16 + mov r5, r5, lsr #0x10 + mul r5, lr, r5 + mov lr, lr, lsl #0xe + add lr, lr, r5, lsr #0x10 + umull r5, r6, lr, r6 + umull r4, r5, r6, r2 + mla r5, r3, r6, r5 + mov r4, r4, lsr #0x1a + orr r4, r4, r5, lsl #0x6 + add r4, r4, r0, lsl #0x2 + umull lr, r5, r4, lr + mov r4, #0x0 + adds r5, r5, r6, lsl #0x18 + adc r4, r4, r6, lsr #0x8 + cmp r12, #0x800 + bge _020EC2C0 + add r12, r12, #0x7f0 + adds r12, r12, #0xc + bmi _020EC2D8 + orr r1, r4, r12, lsl #0x1f + bic r12, r12, #0x1 + add r1, r1, r12, lsl #0x13 + tst lr, #0x80000000 + bne _020EC1B0 + rsbs r2, r2, #0x0 + mov r4, r4, lsl #0x1 + add r4, r4, r5, lsr #0x1f + mul lr, r2, r4 + mov r6, #0x0 + mov r4, r5, lsl #0x1 + orr r4, r4, #0x1 + umlal r6, lr, r4, r2 + rsc r3, r3, #0x0 + mla lr, r4, r3, lr + cmp lr, r0, lsl #0x15 + bmi _020EC1B0 + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1B0: + adds r0, r5, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC1C0: ; not code + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 + .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 + .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 + .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD + .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3 + .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA + .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2 + .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB + .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4 + .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E + .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98 + .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92 + .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D + .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89 + .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84 + .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EC2C0: + movs r1, r12, lsl #0x1f + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf00000 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC2D8: + mvn r6, r12, asr #0x1 + cmp r6, #0x34 + bgt _020EC424 + beq _020EC400 + cmp r6, #0x14 + bge _020EC320 + rsb r6, r6, #0x13 + mov lr, r0, lsl r6 + rsb r6, r6, #0x14 + mov r0, r5, lsr r6 + rsb r6, r6, #0x20 + orr r0, r0, r4, lsl r6 + rsb r6, r6, #0x20 + mov r4, r4, lsr r6 + orr r1, r4, r12, lsl #0x1f + mov r12, lr + mov lr, #0x0 + b _020EC350 +_020EC320: + rsb r6, r6, #0x33 + mov lr, r1, lsl r6 + mov r1, r12, lsl #0x1f + rsb r6, r6, #0x20 + orr r12, lr, r0, lsr r6 + rsb r6, r6, #0x20 + mov lr, r0, lsl r6 + mov r5, r5, lsr #0x15 + orr r5, r5, r4, lsl #0xb + rsb r6, r6, #0x1f + mov r0, r5, lsr r6 + mov r4, #0x0 +_020EC350: + rsbs r2, r2, #0x0 + mul r4, r2, r4 + mov r5, #0x0 + umlal r5, r4, r2, r0 + rsc r3, r3, #0x0 + mla r4, r0, r3, r4 + cmp r4, r12 + cmpeq r5, lr + ldmeqia sp!, {r4-r6,lr} + bxeq lr + adds r5, r5, r2 + adc r4, r4, r3 + cmp r4, r12 + bmi _020EC3F4 + bne _020EC398 + cmp r5, lr + beq _020EC3E4 + blo _020EC3F4 +_020EC398: + subs r5, r5, r2 + sbc r4, r4, r3 +_020EC3A0: + adds r5, r5, r5 + adc r4, r4, r4 + adds r5, r5, r2 + adc r4, r4, r3 + adds lr, lr, lr + adc r12, r12, r12 + cmp r4, r12 + bmi _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, lr + blo _020EC3E4 + ldmneia sp!, {r4-r6,lr} + bxne lr + tst r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EC3E4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC3F4: + adds r0, r0, #0x1 + adc r1, r1, #0x0 + b _020EC3A0 +_020EC400: + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 + cmp r1, r3 + cmpeq r0, r2 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + movne r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC424: + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC434: + orrs r5, r0, r1, lsl #0x1 + beq _020EC558 + cmp r12, lr + beq _020EC49C + movs r1, r1, lsl #0xc + beq _020EC478 + clz r5, r1 + movs r1, r1, lsl r5 + sub r12, r12, r5 + add r5, r12, #0x1f + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r5 + rsb r5, r5, #0x20 + mov r0, r0, lsl r5 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC478: + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + mov r12, r12, lsl #0x1 + orr r12, r12, r4, lsr #0x1f + b _020EC0AC +_020EC49C: + orrs r5, r0, r1, lsl #0xc + bne _020EC580 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + bhs _020EC4C0 + and r5, r3, #0x80000000 + eor r1, r5, r1 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC4C0: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + b _020EC5B8 +_020EC4CC: + orrs r5, r2, r3, lsl #0x1 + beq _020EC544 + cmp r4, lr + beq _020EC52C + movs r3, r3, lsl #0xc + beq _020EC50C + clz r5, r3 + movs r3, r3, lsl r5 + sub r4, r4, r5 + add r5, r4, #0x1f + mov r3, r3, lsr #0xb + orr r3, r3, r2, lsr r5 + rsb r5, r5, #0x20 + mov r2, r2, lsl r5 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC50C: + mvn r4, #0x13 + clz r5, r2 + movs r2, r2, lsl r5 + sub r4, r4, r5 + mov r3, r2, lsr #0xb + mov r2, r2, lsl #0x15 + mov r4, r4, lsl #0x1 + b _020EC0C0 +_020EC52C: + orrs r5, r2, r3, lsl #0xc + bne _020EC5A0 + mov r1, r12, lsl #0x1f + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC544: + mov r1, r12, lsl #0x1f + orr r1, r1, lr, lsl #0x13 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC558: + orrs r5, r2, r3, lsl #0x1 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + eor r1, r1, r3 + and r1, r1, #0x80000000 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC580: + tst r1, #0x80000 + beq _020EC5B8 + bic r5, r3, #0x80000000 + cmp r5, lr, lsl #0x13 + cmpeq r2, #0x0 + bhi _020EC5A0 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5A0: + tst r3, #0x80000 + beq _020EC5B8 + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4-r6,lr} + bx lr +_020EC5B8: + orr r1, r1, #0x7f000000 + orr r1, r1, #0xf80000 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EC5C8: .word 0x00000FFE diff --git a/arm9/asm/RUNTIME_d_dtof.s b/arm9/asm/RUNTIME_d_dtof.s index b4e98ca98..10401a0f0 100644 --- a/arm9/asm/RUNTIME_d_dtof.s +++ b/arm9/asm/RUNTIME_d_dtof.s @@ -1,85 +1,85 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _d2f -_d2f: - and r2, r1, #0x80000000 - mov r12, r1, lsr #0x14 - bics r12, r12, #0x800 - beq _020E9ED4 - mov r3, r12, lsl #0x15 - cmn r3, #0x200000 - bhs _020E9EB8 - subs r12, r12, #0x380 - bls _020E9EE4 - cmp r12, #0xff - bge _020E9F54 - mov r1, r1, lsl #0xc - orr r3, r2, r1, lsr #0x9 - orr r3, r3, r0, lsr #0x1d - movs r1, r0, lsl #0x3 - orr r0, r3, r12, lsl #0x17 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9EB8: - orrs r3, r0, r1, lsl #0xc - bne _020E9ECC - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020E9ECC: - mvn r0, #0x80000000 - bx lr -_020E9ED4: - orrs r3, r0, r1, lsl #0xc - bne __f_underflow - .global __f_result_zero -__f_result_zero: - mov r0, r2 - bx lr -_020E9EE4: - cmn r12, #0x17 - beq _020E9F38 - bmi __f_underflow - mov r1, r1, lsl #0xb - orr r1, r1, #0x80000000 - mov r3, r1, lsr #0x8 - orr r3, r3, r0, lsr #0x1d - rsb r12, r12, #0x1 - movs r1, r0, lsl #0x3 - orr r0, r2, r3, lsr r12 - rsb r12, r12, #0x20 - mov r3, r3, lsl r12 - orrne r3, r3, #0x1 - movs r1, r3 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020E9F38: - orr r0, r0, r1, lsl #0xc - .global __f_very_tiny_result -__f_very_tiny_result: - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr - .global __f_underflow -__f_underflow: - mov r0, r2 - bx lr -_020E9F54: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr - arm_func_end _d2f + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _d2f +_d2f: + and r2, r1, #0x80000000 + mov r12, r1, lsr #0x14 + bics r12, r12, #0x800 + beq _020E9ED4 + mov r3, r12, lsl #0x15 + cmn r3, #0x200000 + bhs _020E9EB8 + subs r12, r12, #0x380 + bls _020E9EE4 + cmp r12, #0xff + bge _020E9F54 + mov r1, r1, lsl #0xc + orr r3, r2, r1, lsr #0x9 + orr r3, r3, r0, lsr #0x1d + movs r1, r0, lsl #0x3 + orr r0, r3, r12, lsl #0x17 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9EB8: + orrs r3, r0, r1, lsl #0xc + bne _020E9ECC + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020E9ECC: + mvn r0, #0x80000000 + bx lr +_020E9ED4: + orrs r3, r0, r1, lsl #0xc + bne __f_underflow + .global __f_result_zero +__f_result_zero: + mov r0, r2 + bx lr +_020E9EE4: + cmn r12, #0x17 + beq _020E9F38 + bmi __f_underflow + mov r1, r1, lsl #0xb + orr r1, r1, #0x80000000 + mov r3, r1, lsr #0x8 + orr r3, r3, r0, lsr #0x1d + rsb r12, r12, #0x1 + movs r1, r0, lsl #0x3 + orr r0, r2, r3, lsr r12 + rsb r12, r12, #0x20 + mov r3, r3, lsl r12 + orrne r3, r3, #0x1 + movs r1, r3 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020E9F38: + orr r0, r0, r1, lsl #0xc + .global __f_very_tiny_result +__f_very_tiny_result: + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr + .global __f_underflow +__f_underflow: + mov r0, r2 + bx lr +_020E9F54: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr + arm_func_end _d2f diff --git a/arm9/asm/RUNTIME_d_dtoi.s b/arm9/asm/RUNTIME_d_dtoi.s index 825c11cd4..a08ec44da 100644 --- a/arm9/asm/RUNTIME_d_dtoi.s +++ b/arm9/asm/RUNTIME_d_dtoi.s @@ -1,30 +1,30 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _dfix -_dfix: ; 0x020E9F60 - bic r3, r1, #0x80000000 - ldr r2, _020E9FA8 ; =0x0000041E - subs r2, r2, r3, lsr #0x14 - ble _020E9F9C - cmp r2, #0x20 - bge _020E9F94 - mov r3, r1, lsl #0xb - orr r3, r3, #0x80000000 - orr r3, r3, r0, lsr #0x15 - cmp r1, #0x0 - mov r0, r3, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020E9F94: - mov r0, #0x0 - bx lr -_020E9F9C: - mvn r0, r1, asr #0x1f - add r0, r0, #0x80000000 - bx lr - .balign 4 -_020E9FA8: .word 0x0000041E - arm_func_end _dfix + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _dfix +_dfix: ; 0x020E9F60 + bic r3, r1, #0x80000000 + ldr r2, _020E9FA8 ; =0x0000041E + subs r2, r2, r3, lsr #0x14 + ble _020E9F9C + cmp r2, #0x20 + bge _020E9F94 + mov r3, r1, lsl #0xb + orr r3, r3, #0x80000000 + orr r3, r3, r0, lsr #0x15 + cmp r1, #0x0 + mov r0, r3, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020E9F94: + mov r0, #0x0 + bx lr +_020E9F9C: + mvn r0, r1, asr #0x1f + add r0, r0, #0x80000000 + bx lr + .balign 4 +_020E9FA8: .word 0x0000041E + arm_func_end _dfix diff --git a/arm9/asm/RUNTIME_d_dtoull.s b/arm9/asm/RUNTIME_d_dtoull.s index c9ef3f7b5..ecdee685a 100644 --- a/arm9/asm/RUNTIME_d_dtoull.s +++ b/arm9/asm/RUNTIME_d_dtoull.s @@ -1,48 +1,48 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ll_ufrom_d -_ll_ufrom_d: ; 0x020E9FAC - tst r1, #0x80000000 - bne _020EA010 - ldr r2, _020EA034 ; =0x0000043E - subs r2, r2, r1, lsr #0x14 - blt _020EA028 - cmp r2, #0x40 - bge _020EA004 - mov r12, r1, lsl #0xb - orr r12, r12, #0x80000000 - orr r12, r12, r0, lsr #0x15 - cmp r2, #0x20 - ble _020E9FEC - sub r2, r2, #0x20 - mov r1, #0x0 - mov r0, r12, lsr r2 - bx lr -_020E9FEC: - mov r3, r0, lsl #0xb - mov r1, r12, lsr r2 - mov r0, r3, lsr r2 - rsb r2, r2, #0x20 - orr r0, r0, r12, lsl r2 - bx lr -_020EA004: - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA010: - cmn r1, #0x100000 - cmpeq r0, #0x0 - bhi _020EA028 - mov r1, #0x0 - mov r0, #0x0 - bx lr -_020EA028: - mvn r1, #0x0 - mvn r0, #0x0 - bx lr - .balign 4 -_020EA034: .word 0x0000043E - arm_func_end _ll_ufrom_d + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ll_ufrom_d +_ll_ufrom_d: ; 0x020E9FAC + tst r1, #0x80000000 + bne _020EA010 + ldr r2, _020EA034 ; =0x0000043E + subs r2, r2, r1, lsr #0x14 + blt _020EA028 + cmp r2, #0x40 + bge _020EA004 + mov r12, r1, lsl #0xb + orr r12, r12, #0x80000000 + orr r12, r12, r0, lsr #0x15 + cmp r2, #0x20 + ble _020E9FEC + sub r2, r2, #0x20 + mov r1, #0x0 + mov r0, r12, lsr r2 + bx lr +_020E9FEC: + mov r3, r0, lsl #0xb + mov r1, r12, lsr r2 + mov r0, r3, lsr r2 + rsb r2, r2, #0x20 + orr r0, r0, r12, lsl r2 + bx lr +_020EA004: + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA010: + cmn r1, #0x100000 + cmpeq r0, #0x0 + bhi _020EA028 + mov r1, #0x0 + mov r0, #0x0 + bx lr +_020EA028: + mvn r1, #0x0 + mvn r0, #0x0 + bx lr + .balign 4 +_020EA034: .word 0x0000043E + arm_func_end _ll_ufrom_d diff --git a/arm9/asm/RUNTIME_d_itod.s b/arm9/asm/RUNTIME_d_itod.s index 5a9c241de..c2b77ab07 100644 --- a/arm9/asm/RUNTIME_d_itod.s +++ b/arm9/asm/RUNTIME_d_itod.s @@ -1,48 +1,48 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _dflt -_dflt: ; 0x020EA038 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - .global __d_itod_common -__d_itod_common: - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - movs r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, r2, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - arm_func_end _dflt - - arm_func_start _dfltu -_dfltu: ; 0x020EA078 - cmp r0, #0x0 - .global __d_utod_common -__d_utod_common: - mov r1, #0x0 - bxeq lr - mov r3, #0x400 - add r3, r3, #0x1e - bmi _020EA09C - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EA09C: - mov r1, r0 - mov r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r3, lsl #0x14 - bx lr - arm_func_end _dfltu + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _dflt +_dflt: ; 0x020EA038 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + .global __d_itod_common +__d_itod_common: + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + movs r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, r2, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + arm_func_end _dflt + + arm_func_start _dfltu +_dfltu: ; 0x020EA078 + cmp r0, #0x0 + .global __d_utod_common +__d_utod_common: + mov r1, #0x0 + bxeq lr + mov r3, #0x400 + add r3, r3, #0x1e + bmi _020EA09C + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EA09C: + mov r1, r0 + mov r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r3, lsl #0x14 + bx lr + arm_func_end _dfltu diff --git a/arm9/asm/RUNTIME_d_mul.s b/arm9/asm/RUNTIME_d_mul.s index eb46c3aba..71f7d2ced 100644 --- a/arm9/asm/RUNTIME_d_mul.s +++ b/arm9/asm/RUNTIME_d_mul.s @@ -1,246 +1,246 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _dmul -_dmul: ; 0x020EA0B4 - stmdb sp!, {r4-r7,lr} - eor lr, r1, r3 - and lr, lr, #0x80000000 - mov r12, r1, lsr #0x14 - mov r1, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r6, r12, lsl #0x15 - cmnne r6, #0x200000 - beq _020EA1BC - orr r1, r1, #0x80000000 - bic r12, r12, #0x800 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 -_020EA108: - add r12, r4, r12 - umull r5, r4, r0, r2 - umull r7, r6, r0, r3 - adds r4, r7, r4 - adc r6, r6, #0x0 - umull r7, r0, r1, r2 - adds r4, r7, r4 - adcs r0, r0, r6 - umull r7, r2, r1, r3 - adc r1, r2, #0x0 - adds r0, r0, r7 - adc r1, r1, #0x0 - orrs r4, r4, r5 - orrne r0, r0, #0x1 - cmp r1, #0x0 - blt _020EA154 - sub r12, r12, #0x1 - adds r0, r0, r0 - adc r1, r1, r1 -_020EA154: - add r12, r12, #0x2 - subs r12, r12, #0x400 - bmi _020EA2F0 - beq _020EA2F0 - mov r6, r12, lsl #0x14 - cmn r6, #0x100000 - bmi _020EA3F0 - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA1BC: - bics r12, r12, #0x800 - beq _020EA218 - orrs r6, r0, r1, lsl #0x1 - bne _020EA3A4 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA1F8 - cmn r5, #0x200000 - bne _020EA390 - orrs r5, r2, r3, lsl #0x1 - beq _020EA390 - b _020EA3A4 -_020EA1F8: - orrs r5, r3, r2 - beq _020EA3B8 - b _020EA390 -_020EA204: - bics r4, r4, #0x800 - beq _020EA2AC - orrs r6, r2, r3, lsl #0x1 - bne _020EA3A4 - b _020EA390 -_020EA218: - orrs r6, r0, r1, lsl #0x1 - beq _020EA280 - mov r12, #0x1 - cmp r1, #0x0 - bne _020EA23C - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA258 -_020EA23C: - clz r6, r1 - movs r1, r1, lsl r6 - rsb r6, r6, #0x20 - orr r1, r1, r0, lsr r6 - rsb r6, r6, #0x20 - mov r0, r0, lsl r6 - sub r12, r12, r6 -_020EA258: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - cmnne r5, #0x200000 - beq _020EA204 - orr r3, r3, #0x80000000 - bic r4, r4, #0x800 - b _020EA108 -_020EA280: - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r5, r4, lsl #0x15 - beq _020EA404 - cmn r5, #0x200000 - bne _020EA404 - orrs r6, r2, r3, lsl #0x1 - beq _020EA3B8 - b _020EA3A4 -_020EA2AC: - orrs r5, r2, r3, lsl #0x1 - beq _020EA404 - mov r4, #0x1 - cmp r3, #0x0 - bne _020EA2D0 - sub r4, r4, #0x20 - movs r3, r2 - mov r2, #0x0 - bmi _020EA108 -_020EA2D0: - clz r6, r3 - movs r3, r3, lsl r6 - rsb r6, r6, #0x20 - orr r3, r3, r2, lsr r6 - rsb r6, r6, #0x20 - mov r2, r2, lsl r6 - sub r4, r4, r6 - b _020EA108 -_020EA2F0: - cmn r12, #0x34 - beq _020EA388 - bmi _020EA3E0 - mov r2, r1 - mov r3, r0 - add r4, r12, #0x34 - cmp r4, #0x20 - movge r2, r3 - movge r3, #0x0 - subge r4, r4, #0x20 - rsb r5, r4, #0x20 - mov r2, r2, lsl r4 - orr r2, r2, r3, lsr r5 - movs r3, r3, lsl r4 - orrne r2, r2, #0x1 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - cmp r2, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - tst r2, #0x80000000 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA388: - orr r0, r0, r1, lsl #0x1 - b _020EA3C8 -_020EA390: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3A4: - mov r1, r3 - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3B8: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3C8: - movs r2, r0 - mov r1, lr - mov r0, #0x0 - addne r0, r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3E0: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA3F0: - ldr r1, _020EA414 ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020EA404: - mov r1, lr - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020EA414: .word 0x7FF00000 - arm_func_end _dmul + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _dmul +_dmul: ; 0x020EA0B4 + stmdb sp!, {r4-r7,lr} + eor lr, r1, r3 + and lr, lr, #0x80000000 + mov r12, r1, lsr #0x14 + mov r1, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r6, r12, lsl #0x15 + cmnne r6, #0x200000 + beq _020EA1BC + orr r1, r1, #0x80000000 + bic r12, r12, #0x800 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 +_020EA108: + add r12, r4, r12 + umull r5, r4, r0, r2 + umull r7, r6, r0, r3 + adds r4, r7, r4 + adc r6, r6, #0x0 + umull r7, r0, r1, r2 + adds r4, r7, r4 + adcs r0, r0, r6 + umull r7, r2, r1, r3 + adc r1, r2, #0x0 + adds r0, r0, r7 + adc r1, r1, #0x0 + orrs r4, r4, r5 + orrne r0, r0, #0x1 + cmp r1, #0x0 + blt _020EA154 + sub r12, r12, #0x1 + adds r0, r0, r0 + adc r1, r1, r1 +_020EA154: + add r12, r12, #0x2 + subs r12, r12, #0x400 + bmi _020EA2F0 + beq _020EA2F0 + mov r6, r12, lsl #0x14 + cmn r6, #0x100000 + bmi _020EA3F0 + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA1BC: + bics r12, r12, #0x800 + beq _020EA218 + orrs r6, r0, r1, lsl #0x1 + bne _020EA3A4 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA1F8 + cmn r5, #0x200000 + bne _020EA390 + orrs r5, r2, r3, lsl #0x1 + beq _020EA390 + b _020EA3A4 +_020EA1F8: + orrs r5, r3, r2 + beq _020EA3B8 + b _020EA390 +_020EA204: + bics r4, r4, #0x800 + beq _020EA2AC + orrs r6, r2, r3, lsl #0x1 + bne _020EA3A4 + b _020EA390 +_020EA218: + orrs r6, r0, r1, lsl #0x1 + beq _020EA280 + mov r12, #0x1 + cmp r1, #0x0 + bne _020EA23C + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA258 +_020EA23C: + clz r6, r1 + movs r1, r1, lsl r6 + rsb r6, r6, #0x20 + orr r1, r1, r0, lsr r6 + rsb r6, r6, #0x20 + mov r0, r0, lsl r6 + sub r12, r12, r6 +_020EA258: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + cmnne r5, #0x200000 + beq _020EA204 + orr r3, r3, #0x80000000 + bic r4, r4, #0x800 + b _020EA108 +_020EA280: + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r5, r4, lsl #0x15 + beq _020EA404 + cmn r5, #0x200000 + bne _020EA404 + orrs r6, r2, r3, lsl #0x1 + beq _020EA3B8 + b _020EA3A4 +_020EA2AC: + orrs r5, r2, r3, lsl #0x1 + beq _020EA404 + mov r4, #0x1 + cmp r3, #0x0 + bne _020EA2D0 + sub r4, r4, #0x20 + movs r3, r2 + mov r2, #0x0 + bmi _020EA108 +_020EA2D0: + clz r6, r3 + movs r3, r3, lsl r6 + rsb r6, r6, #0x20 + orr r3, r3, r2, lsr r6 + rsb r6, r6, #0x20 + mov r2, r2, lsl r6 + sub r4, r4, r6 + b _020EA108 +_020EA2F0: + cmn r12, #0x34 + beq _020EA388 + bmi _020EA3E0 + mov r2, r1 + mov r3, r0 + add r4, r12, #0x34 + cmp r4, #0x20 + movge r2, r3 + movge r3, #0x0 + subge r4, r4, #0x20 + rsb r5, r4, #0x20 + mov r2, r2, lsl r4 + orr r2, r2, r3, lsr r5 + movs r3, r3, lsl r4 + orrne r2, r2, #0x1 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + cmp r2, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + tst r2, #0x80000000 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA388: + orr r0, r0, r1, lsl #0x1 + b _020EA3C8 +_020EA390: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3A4: + mov r1, r3 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3B8: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3C8: + movs r2, r0 + mov r1, lr + mov r0, #0x0 + addne r0, r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3E0: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA3F0: + ldr r1, _020EA414 ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020EA404: + mov r1, lr + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020EA414: .word 0x7FF00000 + arm_func_end _dmul diff --git a/arm9/asm/RUNTIME_d_sqrt.s b/arm9/asm/RUNTIME_d_sqrt.s index 8cc562a71..7e758fb45 100644 --- a/arm9/asm/RUNTIME_d_sqrt.s +++ b/arm9/asm/RUNTIME_d_sqrt.s @@ -1,123 +1,123 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _dsqrt -_dsqrt: ; 0x020EA418 - stmdb sp!, {r4-r6,lr} - ldr r2, _020EA5A8 ; =0x7FF00000 - cmp r1, r2 - bhs _020EA564 - movs r12, r1, lsr #0x14 - beq _020EA510 - bic r1, r1, r2 - orr r1, r1, #0x100000 -_020EA438: - movs r12, r12, asr #0x1 - bhs _020EA44C - sub r12, r12, #0x1 - movs r0, r0, lsl #0x1 - adc r1, r1, r1 -_020EA44C: - movs r3, r0, lsl #0x1 - adc r1, r1, r1 - mov r2, #0x0 - mov r4, #0x0 - mov lr, #0x200000 -_020EA460: - add r6, r4, lr - cmp r6, r1 - addle r4, r6, lr - suble r1, r1, r6 - addle r2, r2, lr - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA460 - mov r0, #0x0 - mov r5, #0x0 - cmp r1, r4 - cmpeq r3, #0x80000000 - blo _020EA4A8 - subs r3, r3, #0x80000000 - sbc r1, r1, r4 - add r4, r4, #0x1 - mov r0, #0x80000000 -_020EA4A8: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - mov lr, #0x40000000 -_020EA4B4: - add r6, r5, lr - cmp r4, r1 - cmpeq r6, r3 - bhi _020EA4D4 - add r5, r6, lr - subs r3, r3, r6 - sbc r1, r1, r4 - add r0, r0, lr -_020EA4D4: - movs r3, r3, lsl #0x1 - adc r1, r1, r1 - movs lr, lr, lsr #0x1 - bne _020EA4B4 - orrs r1, r1, r3 - biceq r0, r0, #0x1 - movs r1, r2, lsr #0x1 - movs r0, r0, rrx - adcs r0, r0, #0x0 - adc r1, r1, #0x0 - add r1, r1, #0x20000000 - sub r1, r1, #0x100000 - add r1, r1, r12, lsl #0x14 - ldmia sp!, {r4-r6,lr} - bx lr -_020EA510: - cmp r1, #0x0 - bne _020EA540 - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mvn r12, #0x13 - clz r5, r0 - movs r0, r0, lsl r5 - sub r12, r12, r5 - mov r1, r0, lsr #0xb - mov r0, r0, lsl #0x15 - b _020EA438 -_020EA540: - clz r2, r1 - movs r1, r1, lsl r2 - rsb r2, r2, #0x2b - mov r1, r1, lsr #0xb - orr r1, r1, r0, lsr r2 - rsb r2, r2, #0x20 - mov r0, r0, lsl r2 - rsb r12, r2, #0x1 - b _020EA438 -_020EA564: - tst r1, #0x80000000 - beq _020EA580 - bics r3, r1, #0x80000000 - cmpeq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - b _020EA58C -_020EA580: - orrs r2, r0, r1, lsl #0xc - ldmeqia sp!, {r4-r6,lr} - bxeq lr -_020EA58C: - ldr r2, _020EA5AC ; =0x7FF80000 - orr r1, r1, r2 - ldr r3, _020EA5B0 ; =errno - mov r4, #0x21 - str r4, [r3, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020EA5A8: .word 0x7FF00000 -_020EA5AC: .word 0x7FF80000 -_020EA5B0: .word errno - arm_func_end _dsqrt + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _dsqrt +_dsqrt: ; 0x020EA418 + stmdb sp!, {r4-r6,lr} + ldr r2, _020EA5A8 ; =0x7FF00000 + cmp r1, r2 + bhs _020EA564 + movs r12, r1, lsr #0x14 + beq _020EA510 + bic r1, r1, r2 + orr r1, r1, #0x100000 +_020EA438: + movs r12, r12, asr #0x1 + bhs _020EA44C + sub r12, r12, #0x1 + movs r0, r0, lsl #0x1 + adc r1, r1, r1 +_020EA44C: + movs r3, r0, lsl #0x1 + adc r1, r1, r1 + mov r2, #0x0 + mov r4, #0x0 + mov lr, #0x200000 +_020EA460: + add r6, r4, lr + cmp r6, r1 + addle r4, r6, lr + suble r1, r1, r6 + addle r2, r2, lr + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA460 + mov r0, #0x0 + mov r5, #0x0 + cmp r1, r4 + cmpeq r3, #0x80000000 + blo _020EA4A8 + subs r3, r3, #0x80000000 + sbc r1, r1, r4 + add r4, r4, #0x1 + mov r0, #0x80000000 +_020EA4A8: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + mov lr, #0x40000000 +_020EA4B4: + add r6, r5, lr + cmp r4, r1 + cmpeq r6, r3 + bhi _020EA4D4 + add r5, r6, lr + subs r3, r3, r6 + sbc r1, r1, r4 + add r0, r0, lr +_020EA4D4: + movs r3, r3, lsl #0x1 + adc r1, r1, r1 + movs lr, lr, lsr #0x1 + bne _020EA4B4 + orrs r1, r1, r3 + biceq r0, r0, #0x1 + movs r1, r2, lsr #0x1 + movs r0, r0, rrx + adcs r0, r0, #0x0 + adc r1, r1, #0x0 + add r1, r1, #0x20000000 + sub r1, r1, #0x100000 + add r1, r1, r12, lsl #0x14 + ldmia sp!, {r4-r6,lr} + bx lr +_020EA510: + cmp r1, #0x0 + bne _020EA540 + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mvn r12, #0x13 + clz r5, r0 + movs r0, r0, lsl r5 + sub r12, r12, r5 + mov r1, r0, lsr #0xb + mov r0, r0, lsl #0x15 + b _020EA438 +_020EA540: + clz r2, r1 + movs r1, r1, lsl r2 + rsb r2, r2, #0x2b + mov r1, r1, lsr #0xb + orr r1, r1, r0, lsr r2 + rsb r2, r2, #0x20 + mov r0, r0, lsl r2 + rsb r12, r2, #0x1 + b _020EA438 +_020EA564: + tst r1, #0x80000000 + beq _020EA580 + bics r3, r1, #0x80000000 + cmpeq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + b _020EA58C +_020EA580: + orrs r2, r0, r1, lsl #0xc + ldmeqia sp!, {r4-r6,lr} + bxeq lr +_020EA58C: + ldr r2, _020EA5AC ; =0x7FF80000 + orr r1, r1, r2 + ldr r3, _020EA5B0 ; =errno + mov r4, #0x21 + str r4, [r3, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020EA5A8: .word 0x7FF00000 +_020EA5AC: .word 0x7FF80000 +_020EA5B0: .word errno + arm_func_end _dsqrt diff --git a/arm9/asm/RUNTIME_d_sub.s b/arm9/asm/RUNTIME_d_sub.s index c9388ffac..4eb137a86 100644 --- a/arm9/asm/RUNTIME_d_sub.s +++ b/arm9/asm/RUNTIME_d_sub.s @@ -1,283 +1,283 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern __dadd_start - - .text - - arm_func_start _drsb -_drsb: ; 0x020EA5B4 - eor r1, r1, r3 - eor r3, r1, r3 - eor r1, r1, r3 - eor r0, r0, r2 - eor r2, r0, r2 - eor r0, r0, r2 - - arm_func_start _dsub -_dsub: - stmdb sp!, {r4,lr} - eors r12, r1, r3 - eormi r3, r3, #0x80000000 - bmi __dadd_start - .global __dsub_start -__dsub_start: - subs r12, r0, r2 - sbcs lr, r1, r3 - bhs _020EA5FC - eor lr, lr, #0x80000000 - adds r2, r2, r12 - adc r3, r3, lr - subs r0, r0, r12 - sbc r1, r1, lr -_020EA5FC: - mov lr, #0x80000000 - mov r12, r1, lsr #0x14 - orr r1, lr, r1, lsl #0xb - orr r1, r1, r0, lsr #0x15 - mov r0, r0, lsl #0xb - movs r4, r12, lsl #0x15 - cmnne r4, #0x200000 - beq _020EA800 - mov r4, r3, lsr #0x14 - orr r3, lr, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs lr, r4, lsl #0x15 - beq _020EA848 -_020EA634: - subs r4, r12, r4 - beq _020EA6DC - cmp r4, #0x20 - ble _020EA670 - cmp r4, #0x38 - movge r4, #0x3f - sub r4, r4, #0x20 - rsb lr, r4, #0x20 - orrs lr, r2, r3, lsl lr - mov r2, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, #0x0 - bmi _020EA698 - b _020EA788 -_020EA670: - rsb lr, r4, #0x20 - movs lr, r2, lsl lr - rsb lr, r4, #0x20 - mov r2, r2, lsr r4 - orr r2, r2, r3, lsl lr - mov r3, r3, lsr r4 - orrne r2, r2, #0x1 - subs r0, r0, r2 - sbcs r1, r1, r3 - bpl _020EA788 -_020EA698: - movs r2, r0, lsl #0x15 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - mov r1, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - tst r2, #0x80000000 - ldmeqia sp!, {r4,lr} - bxeq lr - movs r2, r2, lsl #0x1 - andeqs r2, r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - adds r0, r0, #0x1 - adc r1, r1, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA6DC: - subs r0, r0, r2 - sbc r1, r1, r3 - orrs lr, r1, r0 - beq _020EA96C - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bmi _020EA764 - bne _020EA714 - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA730 -_020EA714: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA730: - cmp r12, #0x0 - bgt _020EA76C - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA764: - cmp r1, #0x0 - subges r12, r12, #0x1 -_020EA76C: - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA788: - mov lr, r12, lsl #0x14 - and lr, lr, #0x80000000 - bic r12, r12, #0x800 - cmp r1, #0x0 - bne _020EA7AC - sub r12, r12, #0x20 - movs r1, r0 - mov r0, #0x0 - bmi _020EA7C8 -_020EA7AC: - clz r4, r1 - movs r1, r1, lsl r4 - rsb r4, r4, #0x20 - orr r1, r1, r0, lsr r4 - rsb r4, r4, #0x20 - mov r0, r0, lsl r4 - sub r12, r12, r4 -_020EA7C8: - cmp r12, #0x0 - orrgt r12, r12, lr, lsr #0x14 - bgt _020EA698 - rsb r12, r12, #0xc - cmp r12, #0x20 - movge r0, r1 - movge r1, #0x0 - subge r12, r12, #0x20 - rsb r4, r12, #0x20 - mov r0, r0, lsr r12 - orr r0, r0, r1, lsl r4 - orr r1, lr, r1, lsr r12 - ldmia sp!, {r4,lr} - bx lr -_020EA800: - cmp r12, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bics r12, r12, #0x800 - beq _020EA86C - orrs r4, r0, r1, lsl #0x1 - bne _020EA948 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - beq _020EA934 - cmn r4, #0x200000 - bne _020EA934 - orrs r4, r2, r3, lsl #0x1 - beq _020EA95C - b _020EA948 -_020EA848: - cmp r4, #0x800 - movge lr, #0x80000000 - movlt lr, #0x0 - bic r12, r12, #0x800 - bics r4, r4, #0x800 - beq _020EA8E4 - orrs r4, r2, r3, lsl #0x1 - bne _020EA948 - b _020EA934 -_020EA86C: - orrs r4, r0, r1, lsl #0x1 - beq _020EA8AC - mov r12, #0x1 - bic r1, r1, #0x80000000 - mov r4, r3, lsr #0x14 - mov r3, r3, lsl #0xb - orr r3, r3, r2, lsr #0x15 - mov r2, r2, lsl #0xb - movs r4, r4, lsl #0x15 - cmnne r4, #0x200000 - mov r4, r4, lsr #0x15 - orr r4, r4, lr, lsr #0x14 - beq _020EA848 - orr r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - b _020EA634 -_020EA8AC: - mov r12, r3, lsr #0x14 - mov r1, r3, lsl #0xb - orr r1, r1, r2, lsr #0x15 - mov r0, r2, lsl #0xb - movs r4, r12, lsl #0x15 - beq _020EA8D8 - cmn r4, #0x200000 - bne _020EA900 - orrs r4, r0, r1, lsl #0x1 - bne _020EA94C - b _020EA934 -_020EA8D8: - orrs r4, r0, r1, lsl #0x1 - beq _020EA96C - b _020EA900 -_020EA8E4: - orrs r4, r2, r3, lsl #0x1 - beq _020EA910 - mov r4, #0x1 - bic r3, r3, #0x80000000 - orr r12, r12, lr, lsr #0x14 - orr r4, r4, lr, lsr #0x14 - b _020EA634 -_020EA900: - mov r1, r3 - mov r0, r2 - ldmia sp!, {r4,lr} - bx lr -_020EA910: - cmp r1, #0x0 - subges r12, r12, #0x1 - mov r0, r0, lsr #0xb - orr r0, r0, r1, lsl #0x15 - add r1, r1, r1 - orr r1, lr, r1, lsr #0xc - orr r1, r1, r12, lsl #0x14 - ldmia sp!, {r4,lr} - bx lr -_020EA934: - ldr r1, _020EA97C ; =0x7FF00000 - orr r1, lr, r1 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020EA948: - mov r1, r3 -_020EA94C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA95C: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - ldmia sp!, {r4,lr} - bx lr -_020EA96C: - mov r1, #0x0 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020EA97C: .word 0x7FF00000 + .include "asm/macros.inc" + .include "global.inc" + + .extern __dadd_start + + .text + + arm_func_start _drsb +_drsb: ; 0x020EA5B4 + eor r1, r1, r3 + eor r3, r1, r3 + eor r1, r1, r3 + eor r0, r0, r2 + eor r2, r0, r2 + eor r0, r0, r2 + + arm_func_start _dsub +_dsub: + stmdb sp!, {r4,lr} + eors r12, r1, r3 + eormi r3, r3, #0x80000000 + bmi __dadd_start + .global __dsub_start +__dsub_start: + subs r12, r0, r2 + sbcs lr, r1, r3 + bhs _020EA5FC + eor lr, lr, #0x80000000 + adds r2, r2, r12 + adc r3, r3, lr + subs r0, r0, r12 + sbc r1, r1, lr +_020EA5FC: + mov lr, #0x80000000 + mov r12, r1, lsr #0x14 + orr r1, lr, r1, lsl #0xb + orr r1, r1, r0, lsr #0x15 + mov r0, r0, lsl #0xb + movs r4, r12, lsl #0x15 + cmnne r4, #0x200000 + beq _020EA800 + mov r4, r3, lsr #0x14 + orr r3, lr, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs lr, r4, lsl #0x15 + beq _020EA848 +_020EA634: + subs r4, r12, r4 + beq _020EA6DC + cmp r4, #0x20 + ble _020EA670 + cmp r4, #0x38 + movge r4, #0x3f + sub r4, r4, #0x20 + rsb lr, r4, #0x20 + orrs lr, r2, r3, lsl lr + mov r2, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, #0x0 + bmi _020EA698 + b _020EA788 +_020EA670: + rsb lr, r4, #0x20 + movs lr, r2, lsl lr + rsb lr, r4, #0x20 + mov r2, r2, lsr r4 + orr r2, r2, r3, lsl lr + mov r3, r3, lsr r4 + orrne r2, r2, #0x1 + subs r0, r0, r2 + sbcs r1, r1, r3 + bpl _020EA788 +_020EA698: + movs r2, r0, lsl #0x15 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + mov r1, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + tst r2, #0x80000000 + ldmeqia sp!, {r4,lr} + bxeq lr + movs r2, r2, lsl #0x1 + andeqs r2, r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + adds r0, r0, #0x1 + adc r1, r1, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA6DC: + subs r0, r0, r2 + sbc r1, r1, r3 + orrs lr, r1, r0 + beq _020EA96C + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bmi _020EA764 + bne _020EA714 + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA730 +_020EA714: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA730: + cmp r12, #0x0 + bgt _020EA76C + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA764: + cmp r1, #0x0 + subges r12, r12, #0x1 +_020EA76C: + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA788: + mov lr, r12, lsl #0x14 + and lr, lr, #0x80000000 + bic r12, r12, #0x800 + cmp r1, #0x0 + bne _020EA7AC + sub r12, r12, #0x20 + movs r1, r0 + mov r0, #0x0 + bmi _020EA7C8 +_020EA7AC: + clz r4, r1 + movs r1, r1, lsl r4 + rsb r4, r4, #0x20 + orr r1, r1, r0, lsr r4 + rsb r4, r4, #0x20 + mov r0, r0, lsl r4 + sub r12, r12, r4 +_020EA7C8: + cmp r12, #0x0 + orrgt r12, r12, lr, lsr #0x14 + bgt _020EA698 + rsb r12, r12, #0xc + cmp r12, #0x20 + movge r0, r1 + movge r1, #0x0 + subge r12, r12, #0x20 + rsb r4, r12, #0x20 + mov r0, r0, lsr r12 + orr r0, r0, r1, lsl r4 + orr r1, lr, r1, lsr r12 + ldmia sp!, {r4,lr} + bx lr +_020EA800: + cmp r12, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bics r12, r12, #0x800 + beq _020EA86C + orrs r4, r0, r1, lsl #0x1 + bne _020EA948 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + beq _020EA934 + cmn r4, #0x200000 + bne _020EA934 + orrs r4, r2, r3, lsl #0x1 + beq _020EA95C + b _020EA948 +_020EA848: + cmp r4, #0x800 + movge lr, #0x80000000 + movlt lr, #0x0 + bic r12, r12, #0x800 + bics r4, r4, #0x800 + beq _020EA8E4 + orrs r4, r2, r3, lsl #0x1 + bne _020EA948 + b _020EA934 +_020EA86C: + orrs r4, r0, r1, lsl #0x1 + beq _020EA8AC + mov r12, #0x1 + bic r1, r1, #0x80000000 + mov r4, r3, lsr #0x14 + mov r3, r3, lsl #0xb + orr r3, r3, r2, lsr #0x15 + mov r2, r2, lsl #0xb + movs r4, r4, lsl #0x15 + cmnne r4, #0x200000 + mov r4, r4, lsr #0x15 + orr r4, r4, lr, lsr #0x14 + beq _020EA848 + orr r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + b _020EA634 +_020EA8AC: + mov r12, r3, lsr #0x14 + mov r1, r3, lsl #0xb + orr r1, r1, r2, lsr #0x15 + mov r0, r2, lsl #0xb + movs r4, r12, lsl #0x15 + beq _020EA8D8 + cmn r4, #0x200000 + bne _020EA900 + orrs r4, r0, r1, lsl #0x1 + bne _020EA94C + b _020EA934 +_020EA8D8: + orrs r4, r0, r1, lsl #0x1 + beq _020EA96C + b _020EA900 +_020EA8E4: + orrs r4, r2, r3, lsl #0x1 + beq _020EA910 + mov r4, #0x1 + bic r3, r3, #0x80000000 + orr r12, r12, lr, lsr #0x14 + orr r4, r4, lr, lsr #0x14 + b _020EA634 +_020EA900: + mov r1, r3 + mov r0, r2 + ldmia sp!, {r4,lr} + bx lr +_020EA910: + cmp r1, #0x0 + subges r12, r12, #0x1 + mov r0, r0, lsr #0xb + orr r0, r0, r1, lsl #0x15 + add r1, r1, r1 + orr r1, lr, r1, lsr #0xc + orr r1, r1, r12, lsl #0x14 + ldmia sp!, {r4,lr} + bx lr +_020EA934: + ldr r1, _020EA97C ; =0x7FF00000 + orr r1, lr, r1 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020EA948: + mov r1, r3 +_020EA94C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA95C: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr +_020EA96C: + mov r1, #0x0 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020EA97C: .word 0x7FF00000 diff --git a/arm9/asm/RUNTIME_f_add.s b/arm9/asm/RUNTIME_f_add.s index f54dfb580..bc0ecaa50 100644 --- a/arm9/asm/RUNTIME_f_add.s +++ b/arm9/asm/RUNTIME_f_add.s @@ -1,165 +1,165 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern __fsub_start - - .text - - arm_func_start _fadd -_fadd: ; 0x020EA980 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi __fsub_start - .global __fadd_start -__fadd_start: - subs r12, r0, r1 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EAA20 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EAA60 -_020EA9C0: - subs r12, r3, r12 - beq _020EA9D8 - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 -_020EA9D8: - adds r0, r0, r1 - blo _020EA9F8 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r3, r3, #0x1 - and r2, r3, #0xff - cmp r2, #0xff - beq _020EAB68 -_020EA9F8: - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAA20: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EAA84 - movs r0, r0, lsl #0x1 - bne _020EAB94 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EAB88 - cmp r12, #0xff - blt _020EAB88 - cmp r1, #0x0 - beq _020EAB88 - b _020EAB94 -_020EAA60: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EAAE0 -_020EAA78: - movs r1, r1, lsl #0x1 - bne _020EAB94 - b _020EAB88 -_020EAA84: - movs r0, r0, lsl #0x1 - beq _020EAABC - mov r3, #0x1 - mov r0, r0, lsr #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EAAE0 - cmp r12, #0xff - beq _020EAA78 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EA9C0 -_020EAABC: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r3, r3, #0xff - beq _020EAB48 - cmp r3, #0xff - blt _020EAB48 - cmp r0, #0x0 - beq _020EAB88 - b _020EAB80 -_020EAAE0: - movs r1, r1, lsl #0x1 - beq _020EAB50 - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - cmp r0, #0x0 - bmi _020EA9C0 - adds r0, r0, r1 - blo _020EAB14 - and r1, r0, #0x1 - orr r0, r1, r0, rrx - add r12, r12, #0x1 -_020EAB14: - cmp r0, #0x0 - subge r12, r12, #0x1 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r12, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EAB48: - mov r0, r1 - bx lr -_020EAB50: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EAB68: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB80: - mvn r0, #0x80000000 - bx lr -_020EAB88: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EAB94: - mvn r0, #0x80000000 - bx lr -_020EAB9C: ; 0x020EAB9C - mvn r0, #0x80000000 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .extern __fsub_start + + .text + + arm_func_start _fadd +_fadd: ; 0x020EA980 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi __fsub_start + .global __fadd_start +__fadd_start: + subs r12, r0, r1 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EAA20 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EAA60 +_020EA9C0: + subs r12, r3, r12 + beq _020EA9D8 + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 +_020EA9D8: + adds r0, r0, r1 + blo _020EA9F8 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r3, r3, #0x1 + and r2, r3, #0xff + cmp r2, #0xff + beq _020EAB68 +_020EA9F8: + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAA20: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EAA84 + movs r0, r0, lsl #0x1 + bne _020EAB94 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EAB88 + cmp r12, #0xff + blt _020EAB88 + cmp r1, #0x0 + beq _020EAB88 + b _020EAB94 +_020EAA60: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EAAE0 +_020EAA78: + movs r1, r1, lsl #0x1 + bne _020EAB94 + b _020EAB88 +_020EAA84: + movs r0, r0, lsl #0x1 + beq _020EAABC + mov r3, #0x1 + mov r0, r0, lsr #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EAAE0 + cmp r12, #0xff + beq _020EAA78 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EA9C0 +_020EAABC: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r3, r3, #0xff + beq _020EAB48 + cmp r3, #0xff + blt _020EAB48 + cmp r0, #0x0 + beq _020EAB88 + b _020EAB80 +_020EAAE0: + movs r1, r1, lsl #0x1 + beq _020EAB50 + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + cmp r0, #0x0 + bmi _020EA9C0 + adds r0, r0, r1 + blo _020EAB14 + and r1, r0, #0x1 + orr r0, r1, r0, rrx + add r12, r12, #0x1 +_020EAB14: + cmp r0, #0x0 + subge r12, r12, #0x1 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r12, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EAB48: + mov r0, r1 + bx lr +_020EAB50: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EAB68: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB80: + mvn r0, #0x80000000 + bx lr +_020EAB88: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EAB94: + mvn r0, #0x80000000 + bx lr +_020EAB9C: ; 0x020EAB9C + mvn r0, #0x80000000 + bx lr diff --git a/arm9/asm/RUNTIME_f_cmp.s b/arm9/asm/RUNTIME_f_cmp.s index 696d0af1b..d13eb7c8c 100644 --- a/arm9/asm/RUNTIME_f_cmp.s +++ b/arm9/asm/RUNTIME_f_cmp.s @@ -1,376 +1,376 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _dgr -_dgr: ; 0x020EABA4 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAC18 - cmn r12, r3, lsl #0x1 - bhs _020EAC2C -_020EABB8: - orrs r12, r3, r1 - bmi _020EABE8 - cmp r1, r3 - cmpeq r0, r2 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EABD4: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EABE8: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movhi r0, #0x1 - movls r0, #0x0 - bx lr -_020EAC18: - bne _020EABD4 - cmp r0, #0x0 - bhi _020EABD4 - cmn r12, r3, lsl #0x1 - blo _020EABB8 -_020EAC2C: - bne _020EABD4 - cmp r2, #0x0 - bhi _020EABD4 - b _020EABB8 - - arm_func_start _dleq -_dleq: ; 0x020EAC3C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EACBC - cmn r12, r3, lsl #0x1 - bhs _020EACD0 -_020EAC50: - orrs r12, r3, r1 - bmi _020EAC84 - cmp r1, r3 - cmpeq r0, r2 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EAC6C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAC84: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bne _020EACA8 - mrs r12, cpsr - bic r12, r12, #0x20000000 - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bxeq lr -_020EACA8: - cmp r3, r1 - cmpeq r2, r0 - movls r0, #0x1 - movhi r0, #0x0 - bx lr -_020EACBC: - bne _020EAC6C - cmp r0, #0x0 - bhi _020EAC6C - cmn r12, r3, lsl #0x1 - blo _020EAC50 -_020EACD0: - bne _020EAC6C - cmp r2, #0x0 - bhi _020EAC6C - b _020EAC50 - - arm_func_start _dls -_dls: ; 0x020EACE0 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAD58 - cmn r12, r3, lsl #0x1 - bhs _020EAD6C -_020EACF4: - orrs r12, r3, r1 - bmi _020EAD24 - cmp r1, r3 - cmpeq r0, r2 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD10: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAD24: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bne _020EAD44 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bxeq lr -_020EAD44: - cmp r3, r1 - cmpeq r2, r0 - movcc r0, #0x1 - movcs r0, #0x0 - bx lr -_020EAD58: - bne _020EAD10 - cmp r0, #0x0 - bhi _020EAD10 - cmn r12, r3, lsl #0x1 - blo _020EACF4 -_020EAD6C: - bne _020EAD10 - cmp r2, #0x0 - bhi _020EAD10 - b _020EACF4 - - arm_func_start _deq -_deq: ; 0x020EAD7C - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EADE4 - cmn r12, r3, lsl #0x1 - bhs _020EADF8 -_020EAD90: - orrs r12, r3, r1 - bmi _020EADC0 - cmp r1, r3 - cmpeq r0, r2 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADAC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EADC0: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x1 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - moveq r0, #0x1 - movne r0, #0x0 - bx lr -_020EADE4: - bne _020EADAC - cmp r0, #0x0 - bhi _020EADAC - cmn r12, r3, lsl #0x1 - blo _020EAD90 -_020EADF8: - bne _020EADAC - cmp r2, #0x0 - bhi _020EADAC - b _020EAD90 - - arm_func_start _dneq -_dneq: ; 0x020EAE08 - mov r12, #0x200000 - cmn r12, r1, lsl #0x1 - bhs _020EAE70 - cmn r12, r3, lsl #0x1 - bhs _020EAE84 -_020EAE1C: - orrs r12, r3, r1 - bmi _020EAE4C - cmp r1, r3 - cmpeq r0, r2 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE38: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAE4C: - orr r12, r0, r12, lsl #0x1 - orrs r12, r12, r2 - moveq r0, #0x0 - bxeq lr - cmp r3, r1 - cmpeq r2, r0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr -_020EAE70: - bne _020EAE38 - cmp r0, #0x0 - bhi _020EAE38 - cmn r12, r3, lsl #0x1 - blo _020EAE1C -_020EAE84: - bne _020EAE38 - cmp r2, #0x0 - bhi _020EAE38 - b _020EAE1C - - arm_func_start _fgeq -_fgeq: ; 0x020EAE94 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAEDC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movge r0, #0x1 - movlt r0, #0x0 - mrs r12, cpsr - biclt r12, r12, #0x20000000 - orrge r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAEDC: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fgr -_fgr: ; 0x020EAEF0 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF38 - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movgt r0, #0x1 - movle r0, #0x0 - mrs r12, cpsr - bicle r12, r12, #0x20000000 - orrgt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAF38: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fleq -_fleq: ; 0x020EAF4C - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAF9C - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movle r0, #0x1 - movgt r0, #0x0 - mrs r12, cpsr - orrgt r12, r12, #0x20000000 - bicgt r12, r12, #0x40000000 - bicle r12, r12, #0x20000000 - orrle r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EAF9C: - mov r0, #0x0 - mrs r12, cpsr - bic r12, r12, #0x40000000 - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _fls -_fls: ; 0x020EAFB4 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - cmpcs r3, r1, lsl #0x1 - blo _020EAFFC - cmp r0, #0x0 - bicmi r0, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r1, #0x0 - bicmi r1, r1, #0x80000000 - rsbmi r1, r1, #0x0 - cmp r0, r1 - movlt r0, #0x1 - movge r0, #0x0 - mrs r12, cpsr - orrge r12, r12, #0x20000000 - biclt r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr -_020EAFFC: - mov r0, #0x0 - mrs r12, cpsr - orr r12, r12, #0x20000000 - msr cpsr_f, r12 - bx lr - - arm_func_start _feq -_feq: ; 0x020EB010 - mov r3, #0xff000000 - cmp r3, r0, lsl #0x1 - blo _020EB064 - cmp r3, r1, lsl #0x1 - blo _020EB064 - orr r3, r0, r1 - movs r3, r3, lsl #0x1 - moveq r0, #0x0 - bne _020EB044 - mrs r12, cpsr - orr r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB044: - cmp r0, r1 - movne r0, #0x1 - moveq r0, #0x0 - mrs r12, cpsr - bicne r12, r12, #0x40000000 - orreq r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr -_020EB064: - mov r0, #0x1 - mrs r12, cpsr - bic r12, r12, #0x40000000 - msr cpsr_f, r12 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _dgr +_dgr: ; 0x020EABA4 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAC18 + cmn r12, r3, lsl #0x1 + bhs _020EAC2C +_020EABB8: + orrs r12, r3, r1 + bmi _020EABE8 + cmp r1, r3 + cmpeq r0, r2 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EABD4: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EABE8: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movhi r0, #0x1 + movls r0, #0x0 + bx lr +_020EAC18: + bne _020EABD4 + cmp r0, #0x0 + bhi _020EABD4 + cmn r12, r3, lsl #0x1 + blo _020EABB8 +_020EAC2C: + bne _020EABD4 + cmp r2, #0x0 + bhi _020EABD4 + b _020EABB8 + + arm_func_start _dleq +_dleq: ; 0x020EAC3C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EACBC + cmn r12, r3, lsl #0x1 + bhs _020EACD0 +_020EAC50: + orrs r12, r3, r1 + bmi _020EAC84 + cmp r1, r3 + cmpeq r0, r2 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EAC6C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAC84: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bne _020EACA8 + mrs r12, cpsr + bic r12, r12, #0x20000000 + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bxeq lr +_020EACA8: + cmp r3, r1 + cmpeq r2, r0 + movls r0, #0x1 + movhi r0, #0x0 + bx lr +_020EACBC: + bne _020EAC6C + cmp r0, #0x0 + bhi _020EAC6C + cmn r12, r3, lsl #0x1 + blo _020EAC50 +_020EACD0: + bne _020EAC6C + cmp r2, #0x0 + bhi _020EAC6C + b _020EAC50 + + arm_func_start _dls +_dls: ; 0x020EACE0 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAD58 + cmn r12, r3, lsl #0x1 + bhs _020EAD6C +_020EACF4: + orrs r12, r3, r1 + bmi _020EAD24 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD10: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAD24: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bne _020EAD44 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bxeq lr +_020EAD44: + cmp r3, r1 + cmpeq r2, r0 + movcc r0, #0x1 + movcs r0, #0x0 + bx lr +_020EAD58: + bne _020EAD10 + cmp r0, #0x0 + bhi _020EAD10 + cmn r12, r3, lsl #0x1 + blo _020EACF4 +_020EAD6C: + bne _020EAD10 + cmp r2, #0x0 + bhi _020EAD10 + b _020EACF4 + + arm_func_start _deq +_deq: ; 0x020EAD7C + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EADE4 + cmn r12, r3, lsl #0x1 + bhs _020EADF8 +_020EAD90: + orrs r12, r3, r1 + bmi _020EADC0 + cmp r1, r3 + cmpeq r0, r2 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADAC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EADC0: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x1 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr +_020EADE4: + bne _020EADAC + cmp r0, #0x0 + bhi _020EADAC + cmn r12, r3, lsl #0x1 + blo _020EAD90 +_020EADF8: + bne _020EADAC + cmp r2, #0x0 + bhi _020EADAC + b _020EAD90 + + arm_func_start _dneq +_dneq: ; 0x020EAE08 + mov r12, #0x200000 + cmn r12, r1, lsl #0x1 + bhs _020EAE70 + cmn r12, r3, lsl #0x1 + bhs _020EAE84 +_020EAE1C: + orrs r12, r3, r1 + bmi _020EAE4C + cmp r1, r3 + cmpeq r0, r2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE38: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAE4C: + orr r12, r0, r12, lsl #0x1 + orrs r12, r12, r2 + moveq r0, #0x0 + bxeq lr + cmp r3, r1 + cmpeq r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr +_020EAE70: + bne _020EAE38 + cmp r0, #0x0 + bhi _020EAE38 + cmn r12, r3, lsl #0x1 + blo _020EAE1C +_020EAE84: + bne _020EAE38 + cmp r2, #0x0 + bhi _020EAE38 + b _020EAE1C + + arm_func_start _fgeq +_fgeq: ; 0x020EAE94 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAEDC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movge r0, #0x1 + movlt r0, #0x0 + mrs r12, cpsr + biclt r12, r12, #0x20000000 + orrge r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAEDC: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fgr +_fgr: ; 0x020EAEF0 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF38 + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movgt r0, #0x1 + movle r0, #0x0 + mrs r12, cpsr + bicle r12, r12, #0x20000000 + orrgt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAF38: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fleq +_fleq: ; 0x020EAF4C + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAF9C + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movle r0, #0x1 + movgt r0, #0x0 + mrs r12, cpsr + orrgt r12, r12, #0x20000000 + bicgt r12, r12, #0x40000000 + bicle r12, r12, #0x20000000 + orrle r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EAF9C: + mov r0, #0x0 + mrs r12, cpsr + bic r12, r12, #0x40000000 + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _fls +_fls: ; 0x020EAFB4 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + cmpcs r3, r1, lsl #0x1 + blo _020EAFFC + cmp r0, #0x0 + bicmi r0, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r1, #0x0 + bicmi r1, r1, #0x80000000 + rsbmi r1, r1, #0x0 + cmp r0, r1 + movlt r0, #0x1 + movge r0, #0x0 + mrs r12, cpsr + orrge r12, r12, #0x20000000 + biclt r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr +_020EAFFC: + mov r0, #0x0 + mrs r12, cpsr + orr r12, r12, #0x20000000 + msr cpsr_f, r12 + bx lr + + arm_func_start _feq +_feq: ; 0x020EB010 + mov r3, #0xff000000 + cmp r3, r0, lsl #0x1 + blo _020EB064 + cmp r3, r1, lsl #0x1 + blo _020EB064 + orr r3, r0, r1 + movs r3, r3, lsl #0x1 + moveq r0, #0x0 + bne _020EB044 + mrs r12, cpsr + orr r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB044: + cmp r0, r1 + movne r0, #0x1 + moveq r0, #0x0 + mrs r12, cpsr + bicne r12, r12, #0x40000000 + orreq r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr +_020EB064: + mov r0, #0x1 + mrs r12, cpsr + bic r12, r12, #0x40000000 + msr cpsr_f, r12 + bx lr diff --git a/arm9/asm/RUNTIME_f_div.s b/arm9/asm/RUNTIME_f_div.s index 4f7c6d157..401f3075b 100644 --- a/arm9/asm/RUNTIME_f_div.s +++ b/arm9/asm/RUNTIME_f_div.s @@ -1,225 +1,225 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _frdiv -_frdiv: ; 0x020EB078 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fdiv -_fdiv: ; 0x020EB084 - stmdb sp!, {lr} - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - cmpne r3, #0xff - beq _020EB258 - ands r12, r12, r1, lsr #0x17 - cmpne r12, #0xff - beq _020EB294 - orr r1, r1, #0x800000 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - bic lr, r1, #0xff000000 -_020EB0B4: - cmp r2, lr - movcc r2, r2, lsl #0x1 - subcc r3, r3, #0x1 - teq r0, r1 - sub r0, pc, #0x94 ; _020EB138 - #0x100 - ldrb r1, [r0, lr, lsr #0xf] - rsb lr, lr, #0x0 - mov r0, lr, asr #0x1 - mul r0, r1, r0 - add r0, r0, #0x80000000 - mov r0, r0, lsr #0x6 - mul r0, r1, r0 - mov r0, r0, lsr #0xe - mul r1, lr, r0 - sub r12, r3, r12 - mov r1, r1, lsr #0xc - mul r1, r0, r1 - mov r0, r0, lsl #0xe - add r0, r0, r1, lsr #0xf - umull r1, r0, r2, r0 - mov r3, r0 - orrmi r0, r0, #0x80000000 - adds r12, r12, #0x7e - bmi _020EB35C - cmp r12, #0xfe - bge _020EB410 - add r0, r0, r12, lsl #0x17 - mov r12, r1, lsr #0x1c - cmp r12, #0x7 - beq _020EB238 - add r0, r0, r1, lsr #0x1f - ldmia sp!, {lr} - bx lr -_020EB138: ; not code - .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 - .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA - .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE - .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 - .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 - .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF - .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 - .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF - .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 - .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 - .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B - .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 - .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 - .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B - .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 - .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 - .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 -_020EB238: - mov r1, r3, lsl #0x1 - add r1, r1, #0x1 - rsb lr, lr, #0x0 - mul r1, lr, r1 - cmp r1, r2, lsl #0x18 - addmi r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB258: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r3, #0x0 - beq _020EB2B0 - movs r0, r0, lsl #0x9 - bne _020EB3F8 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB3E8 - cmp r12, #0xff - blt _020EB3E8 - cmp r1, #0x0 - beq _020EB404 - b _020EB3E0 -_020EB294: - eor lr, r0, r1 - and lr, lr, #0x80000000 - cmp r12, #0x0 - beq _020EB314 -_020EB2A4: - movs r1, r1, lsl #0x9 - bne _020EB3E0 - b _020EB430 -_020EB2B0: - movs r2, r0, lsl #0x9 - beq _020EB2E4 - clz r3, r2 - movs r2, r2, lsl r3 - rsb r3, r3, #0x0 - mov r2, r2, lsr #0x8 - ands r12, r12, r1, lsr #0x17 - beq _020EB33C - cmp r12, #0xff - beq _020EB2A4 - orr r1, r1, #0x800000 - bic lr, r1, #0xff000000 - b _020EB0B4 -_020EB2E4: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB308 - cmp r12, #0xff - blt _020EB430 - cmp r1, #0x0 - beq _020EB430 - b _020EB3E0 -_020EB308: - cmp r1, #0x0 - beq _020EB404 - b _020EB430 -_020EB314: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - orr r0, r0, #0x800000 - bic r2, r0, #0xff000000 - b _020EB0B4 -_020EB33C: - movs r12, r1, lsl #0x9 - beq _020EB3E8 - mov lr, r12 - clz r12, lr - movs lr, lr, lsl r12 - rsb r12, r12, #0x0 - mov lr, lr, lsr #0x8 - b _020EB0B4 -_020EB35C: - and r0, r0, #0x80000000 - cmn r12, #0x18 - beq _020EB3D0 - bmi _020EB428 - add r1, r12, #0x17 - mov r2, r2, lsl r1 - rsb r12, r12, #0x0 - mov r3, r3, lsr r12 - orr r0, r0, r3 - rsb lr, lr, #0x0 - mul r1, lr, r3 - cmp r1, r2 - ldmeqia sp!, {lr} - bxeq lr - add r1, r1, lr - cmp r1, r2 - beq _020EB3C4 - addmi r0, r0, #0x1 - subpl r1, r1, lr - add r1, lr, r1, lsl #0x1 - cmp r1, r2, lsl #0x1 - and r3, r0, #0x1 - addmi r0, r0, #0x1 - addeq r0, r0, r3 - ldmia sp!, {lr} - bx lr -_020EB3C4: - add r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3D0: - cmn r2, lr - addne r0, r0, #0x1 - ldmia sp!, {lr} - bx lr -_020EB3E0: - mov r0, r1 - b _020EB3F8 -_020EB3E8: - mov r0, #0xff000000 - orr r0, lr, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB3F8: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB404: - mvn r0, #0x80000000 - ldmia sp!, {lr} - bx lr -_020EB410: - tst r0, #0x80000000 - mov r0, #0xff000000 - movne r0, r0, asr #0x1 - moveq r0, r0, lsr #0x1 - ldmia sp!, {lr} - bx lr -_020EB428: - ldmia sp!, {lr} - bx lr -_020EB430: - mov r0, lr - ldmia sp!, {lr} - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _frdiv +_frdiv: ; 0x020EB078 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fdiv +_fdiv: ; 0x020EB084 + stmdb sp!, {lr} + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + cmpne r3, #0xff + beq _020EB258 + ands r12, r12, r1, lsr #0x17 + cmpne r12, #0xff + beq _020EB294 + orr r1, r1, #0x800000 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + bic lr, r1, #0xff000000 +_020EB0B4: + cmp r2, lr + movcc r2, r2, lsl #0x1 + subcc r3, r3, #0x1 + teq r0, r1 + sub r0, pc, #0x94 ; _020EB138 - #0x100 + ldrb r1, [r0, lr, lsr #0xf] + rsb lr, lr, #0x0 + mov r0, lr, asr #0x1 + mul r0, r1, r0 + add r0, r0, #0x80000000 + mov r0, r0, lsr #0x6 + mul r0, r1, r0 + mov r0, r0, lsr #0xe + mul r1, lr, r0 + sub r12, r3, r12 + mov r1, r1, lsr #0xc + mul r1, r0, r1 + mov r0, r0, lsl #0xe + add r0, r0, r1, lsr #0xf + umull r1, r0, r2, r0 + mov r3, r0 + orrmi r0, r0, #0x80000000 + adds r12, r12, #0x7e + bmi _020EB35C + cmp r12, #0xfe + bge _020EB410 + add r0, r0, r12, lsl #0x17 + mov r12, r1, lsr #0x1c + cmp r12, #0x7 + beq _020EB238 + add r0, r0, r1, lsr #0x1f + ldmia sp!, {lr} + bx lr +_020EB138: ; not code + .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 + .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA + .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE + .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2 + .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8 + .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF + .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6 + .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF + .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7 + .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1 + .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B + .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95 + .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90 + .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B + .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86 + .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82 + .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80 +_020EB238: + mov r1, r3, lsl #0x1 + add r1, r1, #0x1 + rsb lr, lr, #0x0 + mul r1, lr, r1 + cmp r1, r2, lsl #0x18 + addmi r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB258: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r3, #0x0 + beq _020EB2B0 + movs r0, r0, lsl #0x9 + bne _020EB3F8 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB3E8 + cmp r12, #0xff + blt _020EB3E8 + cmp r1, #0x0 + beq _020EB404 + b _020EB3E0 +_020EB294: + eor lr, r0, r1 + and lr, lr, #0x80000000 + cmp r12, #0x0 + beq _020EB314 +_020EB2A4: + movs r1, r1, lsl #0x9 + bne _020EB3E0 + b _020EB430 +_020EB2B0: + movs r2, r0, lsl #0x9 + beq _020EB2E4 + clz r3, r2 + movs r2, r2, lsl r3 + rsb r3, r3, #0x0 + mov r2, r2, lsr #0x8 + ands r12, r12, r1, lsr #0x17 + beq _020EB33C + cmp r12, #0xff + beq _020EB2A4 + orr r1, r1, #0x800000 + bic lr, r1, #0xff000000 + b _020EB0B4 +_020EB2E4: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB308 + cmp r12, #0xff + blt _020EB430 + cmp r1, #0x0 + beq _020EB430 + b _020EB3E0 +_020EB308: + cmp r1, #0x0 + beq _020EB404 + b _020EB430 +_020EB314: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + orr r0, r0, #0x800000 + bic r2, r0, #0xff000000 + b _020EB0B4 +_020EB33C: + movs r12, r1, lsl #0x9 + beq _020EB3E8 + mov lr, r12 + clz r12, lr + movs lr, lr, lsl r12 + rsb r12, r12, #0x0 + mov lr, lr, lsr #0x8 + b _020EB0B4 +_020EB35C: + and r0, r0, #0x80000000 + cmn r12, #0x18 + beq _020EB3D0 + bmi _020EB428 + add r1, r12, #0x17 + mov r2, r2, lsl r1 + rsb r12, r12, #0x0 + mov r3, r3, lsr r12 + orr r0, r0, r3 + rsb lr, lr, #0x0 + mul r1, lr, r3 + cmp r1, r2 + ldmeqia sp!, {lr} + bxeq lr + add r1, r1, lr + cmp r1, r2 + beq _020EB3C4 + addmi r0, r0, #0x1 + subpl r1, r1, lr + add r1, lr, r1, lsl #0x1 + cmp r1, r2, lsl #0x1 + and r3, r0, #0x1 + addmi r0, r0, #0x1 + addeq r0, r0, r3 + ldmia sp!, {lr} + bx lr +_020EB3C4: + add r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3D0: + cmn r2, lr + addne r0, r0, #0x1 + ldmia sp!, {lr} + bx lr +_020EB3E0: + mov r0, r1 + b _020EB3F8 +_020EB3E8: + mov r0, #0xff000000 + orr r0, lr, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB3F8: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB404: + mvn r0, #0x80000000 + ldmia sp!, {lr} + bx lr +_020EB410: + tst r0, #0x80000000 + mov r0, #0xff000000 + movne r0, r0, asr #0x1 + moveq r0, r0, lsr #0x1 + ldmia sp!, {lr} + bx lr +_020EB428: + ldmia sp!, {lr} + bx lr +_020EB430: + mov r0, lr + ldmia sp!, {lr} + bx lr diff --git a/arm9/asm/RUNTIME_f_ftod.s b/arm9/asm/RUNTIME_f_ftod.s index fe3a7224d..ca954209e 100644 --- a/arm9/asm/RUNTIME_f_ftod.s +++ b/arm9/asm/RUNTIME_f_ftod.s @@ -1,46 +1,46 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _f2d -_f2d: - and r2, r0, #0x80000000 - mov r12, r0, lsr #0x17 - mov r3, r0, lsl #0x9 - ands r12, r12, #0xff - beq _020EB46C - cmp r12, #0xff - beq _020EB498 -_020EB458: - add r12, r12, #0x380 - mov r0, r3, lsl #0x14 - orr r1, r2, r3, lsr #0xc - orr r1, r1, r12, lsl #0x14 - bx lr -_020EB46C: - cmp r3, #0x0 - bne _020EB480 - mov r1, r2 - mov r0, #0x0 - bx lr -_020EB480: - mov r3, r3, lsr #0x1 - clz r12, r3 - movs r3, r3, lsl r12 - rsb r12, r12, #0x1 - add r3, r3, r3 - b _020EB458 -_020EB498: - cmp r3, #0x0 - bhi _020EB4B0 - ldr r1, _020EB4BC ; =0x7FF00000 - orr r1, r1, r2 - mov r0, #0x0 - bx lr -_020EB4B0: - mvn r0, #0x0 - bic r1, r0, #0x80000000 - bx lr - .balign 4 -_020EB4BC: .word 0x7FF00000 + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _f2d +_f2d: + and r2, r0, #0x80000000 + mov r12, r0, lsr #0x17 + mov r3, r0, lsl #0x9 + ands r12, r12, #0xff + beq _020EB46C + cmp r12, #0xff + beq _020EB498 +_020EB458: + add r12, r12, #0x380 + mov r0, r3, lsl #0x14 + orr r1, r2, r3, lsr #0xc + orr r1, r1, r12, lsl #0x14 + bx lr +_020EB46C: + cmp r3, #0x0 + bne _020EB480 + mov r1, r2 + mov r0, #0x0 + bx lr +_020EB480: + mov r3, r3, lsr #0x1 + clz r12, r3 + movs r3, r3, lsl r12 + rsb r12, r12, #0x1 + add r3, r3, r3 + b _020EB458 +_020EB498: + cmp r3, #0x0 + bhi _020EB4B0 + ldr r1, _020EB4BC ; =0x7FF00000 + orr r1, r1, r2 + mov r0, #0x0 + bx lr +_020EB4B0: + mvn r0, #0x0 + bic r1, r0, #0x80000000 + bx lr + .balign 4 +_020EB4BC: .word 0x7FF00000 diff --git a/arm9/asm/RUNTIME_f_ftoi.s b/arm9/asm/RUNTIME_f_ftoi.s index d7503ede2..e37483f7d 100644 --- a/arm9/asm/RUNTIME_f_ftoi.s +++ b/arm9/asm/RUNTIME_f_ftoi.s @@ -1,21 +1,21 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ffix -_ffix: ; 0x020EB4C0 - bic r1, r0, #0x80000000 - mov r2, #0x9e - subs r2, r2, r1, lsr #0x17 - ble _020EB4E8 - mov r1, r1, lsl #0x8 - orr r1, r1, #0x80000000 - cmp r0, #0x0 - mov r0, r1, lsr r2 - rsbmi r0, r0, #0x0 - bx lr -_020EB4E8: - mvn r0, r0, asr #0x1f - add r0, r0, #0x80000000 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ffix +_ffix: ; 0x020EB4C0 + bic r1, r0, #0x80000000 + mov r2, #0x9e + subs r2, r2, r1, lsr #0x17 + ble _020EB4E8 + mov r1, r1, lsl #0x8 + orr r1, r1, #0x80000000 + cmp r0, #0x0 + mov r0, r1, lsr r2 + rsbmi r0, r0, #0x0 + bx lr +_020EB4E8: + mvn r0, r0, asr #0x1f + add r0, r0, #0x80000000 + bx lr diff --git a/arm9/asm/RUNTIME_f_ftou.s b/arm9/asm/RUNTIME_f_ftou.s index 74c7277f9..b8f6c12e4 100644 --- a/arm9/asm/RUNTIME_f_ftou.s +++ b/arm9/asm/RUNTIME_f_ftou.s @@ -1,25 +1,25 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ffixu -_ffixu: ; 0x020EB4F4 - tst r0, #0x80000000 - bne _020EB518 - mov r1, #0x9e - subs r1, r1, r0, lsr #0x17 - blt _020EB52C - mov r2, r0, lsl #0x8 - orr r0, r2, #0x80000000 - mov r0, r0, lsr r1 - bx lr -_020EB518: - mov r2, #0xff000000 - cmp r2, r0, lsl #0x1 - movcs r0, #0x0 - mvncc r0, #0x0 - bx lr -_020EB52C: - mvn r0, #0x0 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ffixu +_ffixu: ; 0x020EB4F4 + tst r0, #0x80000000 + bne _020EB518 + mov r1, #0x9e + subs r1, r1, r0, lsr #0x17 + blt _020EB52C + mov r2, r0, lsl #0x8 + orr r0, r2, #0x80000000 + mov r0, r0, lsr r1 + bx lr +_020EB518: + mov r2, #0xff000000 + cmp r2, r0, lsl #0x1 + movcs r0, #0x0 + mvncc r0, #0x0 + bx lr +_020EB52C: + mvn r0, #0x0 + bx lr diff --git a/arm9/asm/RUNTIME_f_itof.s b/arm9/asm/RUNTIME_f_itof.s index 370e7ea11..373157271 100644 --- a/arm9/asm/RUNTIME_f_itof.s +++ b/arm9/asm/RUNTIME_f_itof.s @@ -1,51 +1,51 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _fflt -_fflt: ; 0x020EB534 - ands r2, r0, #0x80000000 - rsbmi r0, r0, #0x0 - cmp r0, #0x0 - .global __f_itof_common -__f_itof_common: - bxeq lr - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x9e - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r3, r1, #0x7f - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr - - arm_func_start _ffltu -_ffltu: ; 0x020EB57C - cmp r0, #0x0 - .global __f_utof_common -__f_utof_common: - bxeq lr - mov r3, #0x9e - bmi _020EB598 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 -_020EB598: - ands r2, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r2, #0x80 - bxeq lr - ands r1, r2, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _fflt +_fflt: ; 0x020EB534 + ands r2, r0, #0x80000000 + rsbmi r0, r0, #0x0 + cmp r0, #0x0 + .global __f_itof_common +__f_itof_common: + bxeq lr + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x9e + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r3, r1, #0x7f + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr + + arm_func_start _ffltu +_ffltu: ; 0x020EB57C + cmp r0, #0x0 + .global __f_utof_common +__f_utof_common: + bxeq lr + mov r3, #0x9e + bmi _020EB598 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 +_020EB598: + ands r2, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r2, #0x80 + bxeq lr + ands r1, r2, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr diff --git a/arm9/asm/RUNTIME_f_mul.s b/arm9/asm/RUNTIME_f_mul.s index ef48250f8..724170908 100644 --- a/arm9/asm/RUNTIME_f_mul.s +++ b/arm9/asm/RUNTIME_f_mul.s @@ -1,147 +1,147 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _fmul -_fmul: ; 0x020EB5C4 - eor r2, r0, r1 - and r2, r2, #0x80000000 - mov r12, #0xff - ands r3, r12, r0, lsr #0x17 - mov r0, r0, lsl #0x8 - cmpne r3, #0xff - beq _020EB640 - orr r0, r0, #0x80000000 - ands r12, r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - cmpne r12, #0xff - beq _020EB680 - orr r1, r1, #0x80000000 -_020EB5F8: - add r12, r3, r12 - umull r1, r3, r0, r1 - movs r0, r3 - addpl r0, r0, r0 - subpl r12, r12, #0x1 - subs r12, r12, #0x7f - bmi _020EB70C - cmp r12, #0xfe - bge _020EB778 - ands r3, r0, #0xff - orr r0, r2, r0, lsr #0x8 - add r0, r0, r12, lsl #0x17 - tst r3, #0x80 - bxeq lr - orrs r1, r1, r3, lsl #0x19 - andeqs r3, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB640: - cmp r3, #0x0 - beq _020EB694 - movs r0, r0, lsl #0x1 - bne __f_result_x_NaN - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB674 - cmp r12, #0xff - blt __f_result_INF - cmp r1, #0x0 - beq __f_result_INF - b __f_result_x_NaN -_020EB674: - cmp r1, #0x0 - beq __f_result_invalid - b __f_result_INF -_020EB680: - cmp r12, #0x0 - beq _020EB6F0 -_020EB688: - movs r1, r1, lsl #0x1 - bne __f_result_x_NaN - b __f_result_INF -_020EB694: - movs r0, r0, lsl #0x1 - beq _020EB6CC - mov r0, r0, lsr #0x1 - clz r3, r0 - movs r0, r0, lsl r3 - rsb r3, r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB6F0 - cmp r12, #0xff - beq _020EB688 - orr r1, r1, #0x80000000 - b _020EB5F8 -_020EB6CC: - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EB79C - cmp r12, #0xff - blt _020EB79C - cmp r1, #0x0 - beq __f_result_invalid - b __f_result_x_NaN -_020EB6F0: - movs r1, r1, lsl #0x1 - beq _020EB79C - mov r1, r1, lsr #0x1 - clz r12, r1 - movs r1, r1, lsl r12 - rsb r12, r12, #0x1 - b _020EB5F8 -_020EB70C: - cmn r12, #0x18 - beq _020EB754 - bmi _020EB794 - cmp r1, #0x0 - orrne r0, r0, #0x1 - mov r3, r0 - mov r0, r0, lsr #0x8 - rsb r12, r12, #0x0 - orr r0, r2, r0, lsr r12 - rsb r12, r12, #0x18 - movs r1, r3, lsl r12 - bxeq lr - tst r1, #0x80000000 - bxeq lr - movs r1, r1, lsl #0x1 - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB754: - mov r0, r0, lsl #0x1 - b _020EB784 - .global __f_result_INF -__f_result_INF: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr - .global __f_result_x_NaN -__f_result_x_NaN: - mvn r0, #0x80000000 - bx lr - .global __f_result_invalid -__f_result_invalid: - mvn r0, #0x80000000 - bx lr -_020EB778: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EB784: - movs r1, r0 - mov r0, r2 - addne r0, r0, #0x1 - bx lr -_020EB794: - mov r0, r2 - bx lr -_020EB79C: - mov r0, r2 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _fmul +_fmul: ; 0x020EB5C4 + eor r2, r0, r1 + and r2, r2, #0x80000000 + mov r12, #0xff + ands r3, r12, r0, lsr #0x17 + mov r0, r0, lsl #0x8 + cmpne r3, #0xff + beq _020EB640 + orr r0, r0, #0x80000000 + ands r12, r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + cmpne r12, #0xff + beq _020EB680 + orr r1, r1, #0x80000000 +_020EB5F8: + add r12, r3, r12 + umull r1, r3, r0, r1 + movs r0, r3 + addpl r0, r0, r0 + subpl r12, r12, #0x1 + subs r12, r12, #0x7f + bmi _020EB70C + cmp r12, #0xfe + bge _020EB778 + ands r3, r0, #0xff + orr r0, r2, r0, lsr #0x8 + add r0, r0, r12, lsl #0x17 + tst r3, #0x80 + bxeq lr + orrs r1, r1, r3, lsl #0x19 + andeqs r3, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB640: + cmp r3, #0x0 + beq _020EB694 + movs r0, r0, lsl #0x1 + bne __f_result_x_NaN + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB674 + cmp r12, #0xff + blt __f_result_INF + cmp r1, #0x0 + beq __f_result_INF + b __f_result_x_NaN +_020EB674: + cmp r1, #0x0 + beq __f_result_invalid + b __f_result_INF +_020EB680: + cmp r12, #0x0 + beq _020EB6F0 +_020EB688: + movs r1, r1, lsl #0x1 + bne __f_result_x_NaN + b __f_result_INF +_020EB694: + movs r0, r0, lsl #0x1 + beq _020EB6CC + mov r0, r0, lsr #0x1 + clz r3, r0 + movs r0, r0, lsl r3 + rsb r3, r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB6F0 + cmp r12, #0xff + beq _020EB688 + orr r1, r1, #0x80000000 + b _020EB5F8 +_020EB6CC: + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EB79C + cmp r12, #0xff + blt _020EB79C + cmp r1, #0x0 + beq __f_result_invalid + b __f_result_x_NaN +_020EB6F0: + movs r1, r1, lsl #0x1 + beq _020EB79C + mov r1, r1, lsr #0x1 + clz r12, r1 + movs r1, r1, lsl r12 + rsb r12, r12, #0x1 + b _020EB5F8 +_020EB70C: + cmn r12, #0x18 + beq _020EB754 + bmi _020EB794 + cmp r1, #0x0 + orrne r0, r0, #0x1 + mov r3, r0 + mov r0, r0, lsr #0x8 + rsb r12, r12, #0x0 + orr r0, r2, r0, lsr r12 + rsb r12, r12, #0x18 + movs r1, r3, lsl r12 + bxeq lr + tst r1, #0x80000000 + bxeq lr + movs r1, r1, lsl #0x1 + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB754: + mov r0, r0, lsl #0x1 + b _020EB784 + .global __f_result_INF +__f_result_INF: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr + .global __f_result_x_NaN +__f_result_x_NaN: + mvn r0, #0x80000000 + bx lr + .global __f_result_invalid +__f_result_invalid: + mvn r0, #0x80000000 + bx lr +_020EB778: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EB784: + movs r1, r0 + mov r0, r2 + addne r0, r0, #0x1 + bx lr +_020EB794: + mov r0, r2 + bx lr +_020EB79C: + mov r0, r2 + bx lr diff --git a/arm9/asm/RUNTIME_f_sub.s b/arm9/asm/RUNTIME_f_sub.s index e3c6560e1..51f959790 100644 --- a/arm9/asm/RUNTIME_f_sub.s +++ b/arm9/asm/RUNTIME_f_sub.s @@ -1,195 +1,195 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern __fadd_start - - .text - - arm_func_start _frsb -_frsb: ; 0x020EB7A4 - eor r0, r0, r1 - eor r1, r0, r1 - eor r0, r0, r1 - - arm_func_start _fsub -_fsub: ; 0x020EB7B0 - eors r2, r0, r1 - eormi r1, r1, #0x80000000 - bmi __fadd_start - .global __fsub_start -__fsub_start: - subs r12, r0, r1 - eorcc r12, r12, #0x80000000 - subcc r0, r0, r12 - addcc r1, r1, r12 - mov r2, #0x80000000 - mov r3, r0, lsr #0x17 - orr r0, r2, r0, lsl #0x8 - ands r12, r3, #0xff - cmpne r12, #0xff - beq _020EB8D8 - mov r12, r1, lsr #0x17 - orr r1, r2, r1, lsl #0x8 - ands r2, r12, #0xff - beq _020EB918 -_020EB7F4: - subs r12, r3, r12 - beq _020EB83C - rsb r2, r12, #0x20 - movs r2, r1, lsl r2 - mov r1, r1, lsr r12 - orrne r1, r1, #0x1 - subs r0, r0, r1 - bpl _020EB880 - ands r1, r0, #0xff - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB83C: - subs r0, r0, r1 - beq _020EB9E4 - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB870 - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB870: - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB880: - mov r2, r3, lsl #0x17 - and r2, r2, #0x80000000 - bic r3, r3, #0x100 - clz r12, r0 - movs r0, r0, lsl r12 - sub r3, r3, r12 - cmp r3, #0x0 - bgt _020EB8AC - rsb r3, r3, #0x9 - orr r0, r2, r0, lsr r3 - bx lr -_020EB8AC: - ands r1, r0, #0xff - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bxeq lr - tst r1, #0x80 - bxeq lr - ands r1, r1, #0x7f - andeqs r1, r0, #0x1 - addne r0, r0, #0x1 - bx lr -_020EB8D8: - cmp r3, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - ands r3, r3, #0xff - beq _020EB940 - movs r0, r0, lsl #0x1 - bne _020EBA18 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x9 - ands r12, r12, #0xff - beq _020EBA0C - cmp r12, #0xff - blt _020EBA0C - cmp r1, #0x0 - beq _020EBA20 - b _020EBA18 -_020EB918: - cmp r12, #0x100 - movge r2, #0x80000000 - movlt r2, #0x0 - and r3, r3, #0xff - ands r12, r12, #0xff - beq _020EB9A8 -_020EB930: - eor r2, r2, #0x80000000 - movs r1, r1, lsl #0x1 - bne _020EBA18 - b _020EBA0C -_020EB940: - movs r0, r0, lsl #0x1 - beq _020EB978 - mov r0, r0, lsr #0x1 - mov r3, #0x1 - mov r12, r1, lsr #0x17 - mov r1, r1, lsl #0x8 - ands r12, r12, #0xff - beq _020EB9A8 - cmp r12, #0xff - beq _020EB930 - orr r1, r1, #0x80000000 - orr r3, r3, r2, lsr #0x17 - orr r12, r12, r2, lsr #0x17 - b _020EB7F4 -_020EB978: - mov r3, r1, lsr #0x17 - mov r0, r1, lsl #0x9 - ands r2, r3, #0xff - beq _020EB99C - cmp r2, #0xff - blt _020EB9C4 - cmp r0, #0x0 - bne _020EBA04 - b _020EBA0C -_020EB99C: - cmp r0, #0x0 - beq _020EB9E4 - b _020EB9C4 -_020EB9A8: - movs r1, r1, lsl #0x1 - beq _020EB9CC - mov r1, r1, lsr #0x1 - mov r12, #0x1 - orr r12, r12, r2, lsr #0x17 - orr r3, r3, r2, lsr #0x17 - b _020EB7F4 -_020EB9C4: - mov r0, r1 - bx lr -_020EB9CC: - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - orr r0, r2, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EB9E4: - mov r0, #0x0 - bx lr -_020EB9EC: ; 0x020EB9EC - cmp r0, #0x0 - subges r3, r3, #0x1 - add r0, r0, r0 - mov r0, r0, lsr #0x9 - orr r0, r0, r3, lsl #0x17 - bx lr -_020EBA04: - mvn r0, #0x80000000 - bx lr -_020EBA0C: - mov r0, #0xff000000 - orr r0, r2, r0, lsr #0x1 - bx lr -_020EBA18: - mvn r0, #0x80000000 - bx lr -_020EBA20: - mvn r0, #0x80000000 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .extern __fadd_start + + .text + + arm_func_start _frsb +_frsb: ; 0x020EB7A4 + eor r0, r0, r1 + eor r1, r0, r1 + eor r0, r0, r1 + + arm_func_start _fsub +_fsub: ; 0x020EB7B0 + eors r2, r0, r1 + eormi r1, r1, #0x80000000 + bmi __fadd_start + .global __fsub_start +__fsub_start: + subs r12, r0, r1 + eorcc r12, r12, #0x80000000 + subcc r0, r0, r12 + addcc r1, r1, r12 + mov r2, #0x80000000 + mov r3, r0, lsr #0x17 + orr r0, r2, r0, lsl #0x8 + ands r12, r3, #0xff + cmpne r12, #0xff + beq _020EB8D8 + mov r12, r1, lsr #0x17 + orr r1, r2, r1, lsl #0x8 + ands r2, r12, #0xff + beq _020EB918 +_020EB7F4: + subs r12, r3, r12 + beq _020EB83C + rsb r2, r12, #0x20 + movs r2, r1, lsl r2 + mov r1, r1, lsr r12 + orrne r1, r1, #0x1 + subs r0, r0, r1 + bpl _020EB880 + ands r1, r0, #0xff + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB83C: + subs r0, r0, r1 + beq _020EB9E4 + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB870 + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB870: + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB880: + mov r2, r3, lsl #0x17 + and r2, r2, #0x80000000 + bic r3, r3, #0x100 + clz r12, r0 + movs r0, r0, lsl r12 + sub r3, r3, r12 + cmp r3, #0x0 + bgt _020EB8AC + rsb r3, r3, #0x9 + orr r0, r2, r0, lsr r3 + bx lr +_020EB8AC: + ands r1, r0, #0xff + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bxeq lr + tst r1, #0x80 + bxeq lr + ands r1, r1, #0x7f + andeqs r1, r0, #0x1 + addne r0, r0, #0x1 + bx lr +_020EB8D8: + cmp r3, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + ands r3, r3, #0xff + beq _020EB940 + movs r0, r0, lsl #0x1 + bne _020EBA18 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x9 + ands r12, r12, #0xff + beq _020EBA0C + cmp r12, #0xff + blt _020EBA0C + cmp r1, #0x0 + beq _020EBA20 + b _020EBA18 +_020EB918: + cmp r12, #0x100 + movge r2, #0x80000000 + movlt r2, #0x0 + and r3, r3, #0xff + ands r12, r12, #0xff + beq _020EB9A8 +_020EB930: + eor r2, r2, #0x80000000 + movs r1, r1, lsl #0x1 + bne _020EBA18 + b _020EBA0C +_020EB940: + movs r0, r0, lsl #0x1 + beq _020EB978 + mov r0, r0, lsr #0x1 + mov r3, #0x1 + mov r12, r1, lsr #0x17 + mov r1, r1, lsl #0x8 + ands r12, r12, #0xff + beq _020EB9A8 + cmp r12, #0xff + beq _020EB930 + orr r1, r1, #0x80000000 + orr r3, r3, r2, lsr #0x17 + orr r12, r12, r2, lsr #0x17 + b _020EB7F4 +_020EB978: + mov r3, r1, lsr #0x17 + mov r0, r1, lsl #0x9 + ands r2, r3, #0xff + beq _020EB99C + cmp r2, #0xff + blt _020EB9C4 + cmp r0, #0x0 + bne _020EBA04 + b _020EBA0C +_020EB99C: + cmp r0, #0x0 + beq _020EB9E4 + b _020EB9C4 +_020EB9A8: + movs r1, r1, lsl #0x1 + beq _020EB9CC + mov r1, r1, lsr #0x1 + mov r12, #0x1 + orr r12, r12, r2, lsr #0x17 + orr r3, r3, r2, lsr #0x17 + b _020EB7F4 +_020EB9C4: + mov r0, r1 + bx lr +_020EB9CC: + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + orr r0, r2, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EB9E4: + mov r0, #0x0 + bx lr +_020EB9EC: ; 0x020EB9EC + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr +_020EBA04: + mvn r0, #0x80000000 + bx lr +_020EBA0C: + mov r0, #0xff000000 + orr r0, r2, r0, lsr #0x1 + bx lr +_020EBA18: + mvn r0, #0x80000000 + bx lr +_020EBA20: + mvn r0, #0x80000000 + bx lr diff --git a/arm9/asm/RUNTIME_ieee_status.s b/arm9/asm/RUNTIME_ieee_status.s index 652bb8e38..e98f23347 100644 --- a/arm9/asm/RUNTIME_ieee_status.s +++ b/arm9/asm/RUNTIME_ieee_status.s @@ -1,8 +1,8 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _fp_init -_fp_init: ; 0x020EC5CC - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _fp_init +_fp_init: ; 0x020EC5CC + bx lr diff --git a/arm9/asm/RUNTIME_ll_div.s b/arm9/asm/RUNTIME_ll_div.s index 9b53d21bf..49696c321 100644 --- a/arm9/asm/RUNTIME_ll_div.s +++ b/arm9/asm/RUNTIME_ll_div.s @@ -1,167 +1,167 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ll_mod -_ll_mod: ; 0x020EBA28 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, r1 - orr r4, r4, #0x1 - b _020EBA48 - - arm_func_start _ll_sdiv -_ll_sdiv: ; 0x020EBA38 - stmdb sp!, {r4-r7,r11-r12,lr} - eor r4, r1, r3 - mov r4, r4, asr #0x1 - mov r4, r4, lsl #0x1 -_020EBA48: - orrs r5, r3, r2 - bne _020EBA58 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA58: - mov r5, r0, lsr #0x1f - add r5, r5, r1 - mov r6, r2, lsr #0x1f - add r6, r6, r3 - orrs r6, r5, r6 - bne _020EBA8C - mov r1, r2 - bl _s32_div_f - ands r4, r4, #0x1 - movne r0, r1 - mov r1, r0, asr #0x1f - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBA8C: - cmp r1, #0x0 - bge _020EBA9C - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 -_020EBA9C: - cmp r3, #0x0 - bge _020EBAAC - rsbs r2, r2, #0x0 - rsc r3, r3, #0x0 -_020EBAAC: - orrs r5, r1, r0 - beq _020EBBD0 - mov r5, #0x0 - mov r6, #0x1 - cmp r3, #0x0 - bmi _020EBAD8 -_020EBAC4: - add r5, r5, #0x1 - adds r2, r2, r2 - adcs r3, r3, r3 - bpl _020EBAC4 - add r6, r6, r5 -_020EBAD8: - cmp r1, #0x0 - blt _020EBAF8 -_020EBAE0: - cmp r6, #0x1 - beq _020EBAF8 - sub r6, r6, #0x1 - adds r0, r0, r0 - adcs r1, r1, r1 - bpl _020EBAE0 -_020EBAF8: - mov r7, #0x0 - mov r12, #0x0 - mov r11, #0x0 - b _020EBB20 -_020EBB08: - orr r12, r12, #0x1 - subs r6, r6, #0x1 - beq _020EBB78 - adds r0, r0, r0 - adcs r1, r1, r1 - adcs r7, r7, r7 -_020EBB20: - subs r0, r0, r2 - sbcs r1, r1, r3 - sbcs r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 -_020EBB3C: - subs r6, r6, #0x1 - beq _020EBB70 - adds r0, r0, r0 - adcs r1, r1, r1 - adc r7, r7, r7 - adds r0, r0, r2 - adcs r1, r1, r3 - adc r7, r7, #0x0 - adds r12, r12, r12 - adc r11, r11, r11 - cmp r7, #0x0 - bge _020EBB08 - b _020EBB3C -_020EBB70: - adds r0, r0, r2 - adc r1, r1, r3 -_020EBB78: - ands r7, r4, #0x1 - moveq r0, r12 - moveq r1, r11 - beq _020EBBB0 - subs r7, r5, #0x20 - movge r0, r1, lsr r7 - bge _020EBBD4 - rsb r7, r5, #0x20 - mov r0, r0, lsr r5 - orr r0, r0, r1, lsl r7 - mov r1, r1, lsr r5 - b _020EBBB0 -_020EBBA8: ; 0x020EBBA8 - mov r0, r1, lsr r7 - mov r1, #0x0 -_020EBBB0: - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBC0: - rsbs r0, r0, #0x0 - rsc r1, r1, #0x0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBBD0: - mov r0, #0x0 -_020EBBD4: - mov r1, #0x0 - cmp r4, #0x0 - blt _020EBBC0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr - - arm_func_start _ll_udiv -_ll_udiv: ; 0x020EBBE8 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x0 - b _020EBBFC - - arm_func_start _ull_mod -_ull_mod: ; 0x020EBBF4 - stmdb sp!, {r4-r7,r11-r12,lr} - mov r4, #0x1 -_020EBBFC: - orrs r5, r3, r2 - bne _020EBC0C - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr -_020EBC0C: - orrs r5, r1, r3 - bne _020EBAAC - mov r1, r2 - bl _u32_div_not_0_f - cmp r4, #0x0 - movne r0, r1 - mov r1, #0x0 - ldmia sp!, {r4-r7,r11-r12,lr} - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ll_mod +_ll_mod: ; 0x020EBA28 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, r1 + orr r4, r4, #0x1 + b _020EBA48 + + arm_func_start _ll_sdiv +_ll_sdiv: ; 0x020EBA38 + stmdb sp!, {r4-r7,r11-r12,lr} + eor r4, r1, r3 + mov r4, r4, asr #0x1 + mov r4, r4, lsl #0x1 +_020EBA48: + orrs r5, r3, r2 + bne _020EBA58 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA58: + mov r5, r0, lsr #0x1f + add r5, r5, r1 + mov r6, r2, lsr #0x1f + add r6, r6, r3 + orrs r6, r5, r6 + bne _020EBA8C + mov r1, r2 + bl _s32_div_f + ands r4, r4, #0x1 + movne r0, r1 + mov r1, r0, asr #0x1f + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBA8C: + cmp r1, #0x0 + bge _020EBA9C + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 +_020EBA9C: + cmp r3, #0x0 + bge _020EBAAC + rsbs r2, r2, #0x0 + rsc r3, r3, #0x0 +_020EBAAC: + orrs r5, r1, r0 + beq _020EBBD0 + mov r5, #0x0 + mov r6, #0x1 + cmp r3, #0x0 + bmi _020EBAD8 +_020EBAC4: + add r5, r5, #0x1 + adds r2, r2, r2 + adcs r3, r3, r3 + bpl _020EBAC4 + add r6, r6, r5 +_020EBAD8: + cmp r1, #0x0 + blt _020EBAF8 +_020EBAE0: + cmp r6, #0x1 + beq _020EBAF8 + sub r6, r6, #0x1 + adds r0, r0, r0 + adcs r1, r1, r1 + bpl _020EBAE0 +_020EBAF8: + mov r7, #0x0 + mov r12, #0x0 + mov r11, #0x0 + b _020EBB20 +_020EBB08: + orr r12, r12, #0x1 + subs r6, r6, #0x1 + beq _020EBB78 + adds r0, r0, r0 + adcs r1, r1, r1 + adcs r7, r7, r7 +_020EBB20: + subs r0, r0, r2 + sbcs r1, r1, r3 + sbcs r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 +_020EBB3C: + subs r6, r6, #0x1 + beq _020EBB70 + adds r0, r0, r0 + adcs r1, r1, r1 + adc r7, r7, r7 + adds r0, r0, r2 + adcs r1, r1, r3 + adc r7, r7, #0x0 + adds r12, r12, r12 + adc r11, r11, r11 + cmp r7, #0x0 + bge _020EBB08 + b _020EBB3C +_020EBB70: + adds r0, r0, r2 + adc r1, r1, r3 +_020EBB78: + ands r7, r4, #0x1 + moveq r0, r12 + moveq r1, r11 + beq _020EBBB0 + subs r7, r5, #0x20 + movge r0, r1, lsr r7 + bge _020EBBD4 + rsb r7, r5, #0x20 + mov r0, r0, lsr r5 + orr r0, r0, r1, lsl r7 + mov r1, r1, lsr r5 + b _020EBBB0 +_020EBBA8: ; 0x020EBBA8 + mov r0, r1, lsr r7 + mov r1, #0x0 +_020EBBB0: + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBC0: + rsbs r0, r0, #0x0 + rsc r1, r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBBD0: + mov r0, #0x0 +_020EBBD4: + mov r1, #0x0 + cmp r4, #0x0 + blt _020EBBC0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr + + arm_func_start _ll_udiv +_ll_udiv: ; 0x020EBBE8 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x0 + b _020EBBFC + + arm_func_start _ull_mod +_ull_mod: ; 0x020EBBF4 + stmdb sp!, {r4-r7,r11-r12,lr} + mov r4, #0x1 +_020EBBFC: + orrs r5, r3, r2 + bne _020EBC0C + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr +_020EBC0C: + orrs r5, r1, r3 + bne _020EBAAC + mov r1, r2 + bl _u32_div_not_0_f + cmp r4, #0x0 + movne r0, r1 + mov r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr diff --git a/arm9/asm/RUNTIME_ll_mul.s b/arm9/asm/RUNTIME_ll_mul.s index 965efe9e8..016bb7100 100644 --- a/arm9/asm/RUNTIME_ll_mul.s +++ b/arm9/asm/RUNTIME_ll_mul.s @@ -1,15 +1,15 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ll_mul -_ll_mul: ; 0x020EBC30 - stmdb sp!, {r4-r5,lr} - umull r5, r4, r0, r2 - mla r4, r0, r3, r4 - mla r4, r2, r1, r4 - mov r1, r4 - mov r0, r5 - ldmia sp!, {r4-r5,lr} - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ll_mul +_ll_mul: ; 0x020EBC30 + stmdb sp!, {r4-r5,lr} + umull r5, r4, r0, r2 + mla r4, r0, r3, r4 + mla r4, r2, r1, r4 + mov r1, r4 + mov r0, r5 + ldmia sp!, {r4-r5,lr} + bx lr diff --git a/arm9/asm/RUNTIME_ll_sll.s b/arm9/asm/RUNTIME_ll_sll.s index c4f37ead5..c18e19a61 100644 --- a/arm9/asm/RUNTIME_ll_sll.s +++ b/arm9/asm/RUNTIME_ll_sll.s @@ -1,20 +1,20 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _ll_shl -_ll_shl: ; 0x020EBC50 - ands r2, r2, #0x3f - bxeq lr - subs r3, r2, #0x20 - bge _020EBC74 - rsb r3, r2, #0x20 - mov r1, r1, lsl r2 - orr r1, r1, r0, lsr r3 - mov r0, r0, lsl r2 - bx lr -_020EBC74: - mov r1, r0, lsl r3 - mov r0, #0x0 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _ll_shl +_ll_shl: ; 0x020EBC50 + ands r2, r2, #0x3f + bxeq lr + subs r3, r2, #0x20 + bge _020EBC74 + rsb r3, r2, #0x20 + mov r1, r1, lsl r2 + orr r1, r1, r0, lsr r3 + mov r0, r0, lsl r2 + bx lr +_020EBC74: + mov r1, r0, lsl r3 + mov r0, #0x0 + bx lr diff --git a/arm9/asm/RUNTIME_s32_div_f.s b/arm9/asm/RUNTIME_s32_div_f.s index 2dc6cc7eb..046ccbf97 100644 --- a/arm9/asm/RUNTIME_s32_div_f.s +++ b/arm9/asm/RUNTIME_s32_div_f.s @@ -1,139 +1,139 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _s32_div_f -_s32_div_f: ; 0x020EBC80 - eor r12, r0, r1 - and r12, r12, #0x80000000 - cmp r0, #0x0 - rsblt r0, r0, #0x0 - addlt r12, r12, #0x1 - cmp r1, #0x0 - rsblt r1, r1, #0x0 - beq _020EBE78 - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - blo _020EBE78 - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - mov r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - mov r1, r3 -_020EBE78: - ands r3, r12, #0x80000000 - rsbne r0, r0, #0x0 - ands r3, r12, #0x1 - rsbne r1, r1, #0x0 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _s32_div_f +_s32_div_f: ; 0x020EBC80 + eor r12, r0, r1 + and r12, r12, #0x80000000 + cmp r0, #0x0 + rsblt r0, r0, #0x0 + addlt r12, r12, #0x1 + cmp r1, #0x0 + rsblt r1, r1, #0x0 + beq _020EBE78 + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + blo _020EBE78 + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 +_020EBE78: + ands r3, r12, #0x80000000 + rsbne r0, r0, #0x0 + ands r3, r12, #0x1 + rsbne r1, r1, #0x0 + bx lr diff --git a/arm9/asm/RUNTIME_u32_div_f.s b/arm9/asm/RUNTIME_u32_div_f.s index 5042c504d..1c155a62d 100644 --- a/arm9/asm/RUNTIME_u32_div_f.s +++ b/arm9/asm/RUNTIME_u32_div_f.s @@ -1,131 +1,131 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start _u32_div_f -_u32_div_f: ; 0x020EBE8C - cmp r1, #0x0 - bxeq lr - - arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: - cmp r0, r1 - movcc r1, r0 - movcc r0, #0x0 - bxcc lr - mov r2, #0x1c - mov r3, r0, lsr #0x4 - cmp r1, r3, lsr #0xc - suble r2, r2, #0x10 - movle r3, r3, lsr #0x10 - cmp r1, r3, lsr #0x4 - suble r2, r2, #0x8 - movle r3, r3, lsr #0x8 - cmp r1, r3 - suble r2, r2, #0x4 - movle r3, r3, lsr #0x4 - mov r0, r0, lsl r2 - rsb r1, r1, #0x0 - adds r0, r0, r0 - add r2, r2, r2, lsl #0x1 - add pc, pc, r2, lsl #0x2 - mov r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #0x1 - subcc r3, r3, r1 - adcs r0, r0, r0 - mov r1, r3 - bx lr + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start _u32_div_f +_u32_div_f: ; 0x020EBE8C + cmp r1, #0x0 + bxeq lr + + arm_func_start _u32_div_not_0_f +_u32_div_not_0_f: + cmp r0, r1 + movcc r1, r0 + movcc r0, #0x0 + bxcc lr + mov r2, #0x1c + mov r3, r0, lsr #0x4 + cmp r1, r3, lsr #0xc + suble r2, r2, #0x10 + movle r3, r3, lsr #0x10 + cmp r1, r3, lsr #0x4 + suble r2, r2, #0x8 + movle r3, r3, lsr #0x8 + cmp r1, r3 + suble r2, r2, #0x4 + movle r3, r3, lsr #0x4 + mov r0, r0, lsl r2 + rsb r1, r1, #0x0 + adds r0, r0, r0 + add r2, r2, r2, lsl #0x1 + add pc, pc, r2, lsl #0x2 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 + bx lr diff --git a/arm9/asm/macros/cw.inc b/arm9/asm/macros/cw.inc index 14841f11c..61c24fd9c 100644 --- a/arm9/asm/macros/cw.inc +++ b/arm9/asm/macros/cw.inc @@ -1,12 +1,12 @@ - .macro exception what, size, data - .section .exceptix,4,1,2 - .balign 4, 0 - .type ?exc$\what, @object - .global ?exc$\what - .size ?exc$\what, 12 -?exc$\what: - .word \what - .short \size - .word \data - .previous - .endm + .macro exception what, size, data + .section .exceptix,4,1,2 + .balign 4, 0 + .type ?exc$\what, @object + .global ?exc$\what + .size ?exc$\what, 12 +?exc$\what: + .word \what + .short \size + .word \data + .previous + .endm diff --git a/arm9/lib/libnns/src/.gitkeep b/arm9/lib/libnns/src/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/arm9/lib/libnns/src/NNS_FND_allocator.c b/arm9/lib/libnns/src/NNS_FND_allocator.c index c459c3d0c..bfdaab0f1 100644 --- a/arm9/lib/libnns/src/NNS_FND_allocator.c +++ b/arm9/lib/libnns/src/NNS_FND_allocator.c @@ -1,32 +1,32 @@ -#include "nitro.h" -#include "NNS_FND_allocator.h" -#include "NNS_FND_expheap.h" - -ARM_FUNC void *AllocatorAllocForExpHeap(NNSFndAllocator * pAllocator, u32 size) -{ - return NNS_FndAllocFromExpHeapEx(pAllocator->pHeap, size, pAllocator->heapParam1); -} - -ARM_FUNC void AllocatorFreeForExpHeap(NNSFndAllocator * pAllocator, void *memBlock) -{ - NNS_FndFreeToExpHeap(pAllocator->pHeap, memBlock); -} - -ARM_FUNC void *NNS_FndAllocFromAllocator(NNSFndAllocator * pAllocator, u32 size) -{ - return pAllocator->pFunc->pfAlloc(pAllocator, size); -} - -ARM_FUNC void NNS_FndFreeToAllocator(NNSFndAllocator * pAllocator, void *memBlock) -{ - pAllocator->pFunc->pfFree(pAllocator, memBlock); -} - -ARM_FUNC void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle pHeap, int alignment) -{ - static const NNSFndAllocatorFunc pFunc = {AllocatorAllocForExpHeap, AllocatorFreeForExpHeap}; - pAllocator->pFunc = &pFunc; - pAllocator->pHeap = pHeap; - pAllocator->heapParam1 = alignment; - pAllocator->heapParam2 = 0; -} +#include "nitro.h" +#include "NNS_FND_allocator.h" +#include "NNS_FND_expheap.h" + +ARM_FUNC void *AllocatorAllocForExpHeap(NNSFndAllocator * pAllocator, u32 size) +{ + return NNS_FndAllocFromExpHeapEx(pAllocator->pHeap, size, pAllocator->heapParam1); +} + +ARM_FUNC void AllocatorFreeForExpHeap(NNSFndAllocator * pAllocator, void *memBlock) +{ + NNS_FndFreeToExpHeap(pAllocator->pHeap, memBlock); +} + +ARM_FUNC void *NNS_FndAllocFromAllocator(NNSFndAllocator * pAllocator, u32 size) +{ + return pAllocator->pFunc->pfAlloc(pAllocator, size); +} + +ARM_FUNC void NNS_FndFreeToAllocator(NNSFndAllocator * pAllocator, void *memBlock) +{ + pAllocator->pFunc->pfFree(pAllocator, memBlock); +} + +ARM_FUNC void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle pHeap, int alignment) +{ + static const NNSFndAllocatorFunc pFunc = {AllocatorAllocForExpHeap, AllocatorFreeForExpHeap}; + pAllocator->pFunc = &pFunc; + pAllocator->pHeap = pHeap; + pAllocator->heapParam1 = alignment; + pAllocator->heapParam2 = 0; +} diff --git a/arm9/lib/libnns/src/NNS_FND_expheap.c b/arm9/lib/libnns/src/NNS_FND_expheap.c index 62a4deb45..ccc65f7d2 100644 --- a/arm9/lib/libnns/src/NNS_FND_expheap.c +++ b/arm9/lib/libnns/src/NNS_FND_expheap.c @@ -1,385 +1,385 @@ -#include "global.h" -#include "NNS_FND_expheap.h" - -typedef struct NNSiMemRegion { - void* start; - void* end; -} NNSiMemRegion; - -static inline u16 GetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* block) -{ - return NNSi_FndGetBitValue(block->attribute, 8, 7); -} - -static inline void SetAllocDirForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 direction) -{ - NNSi_FndSetBitValue(pEHMBHead->attribute, 15, 1, direction); -} - -static inline void SetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 alignment) -{ - NNSi_FndSetBitValue(pEHMBHead->attribute, 8, 7, alignment); -} - -static inline void SetGroupIDForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 groupID) -{ - NNSi_FndSetBitValue(pEHMBHead->attribute, 0, 8, groupID); -} - -static inline void* GetMemPtrForMBlock(NNSiFndExpHeapMBlockHead* block) -{ - return AddU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead)); -} - -static inline void* GetMBlockHeadPtr(void* block) -{ - return SubU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead)); -} - -static inline void* GetMBlockEndAddr(NNSiFndExpHeapMBlockHead* block) -{ - return AddU32ToPtr(GetMemPtrForMBlock(block), block->blockSize); -} - -static inline u16 GetAllocMode(NNSiFndExpHeapHead* pExHeapHd) -{ - return NNSi_FndGetBitValue(pExHeapHd->feature, 0, 1); -} - -static inline void SetAllocMode(NNSiFndExpHeapHead* pExHeapHd, u16 mode) -{ - NNSi_FndSetBitValue(pExHeapHd->feature, 0, 1, mode); -} - -static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHeapHead(NNSiFndHeapHead* pHHead) -{ - return AddU32ToPtr(pHHead, sizeof(NNSiFndHeapHead)); -} - -static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHandle(NNSFndHeapHandle heap) -{ - return GetExpHeapHeadPtrFromHeapHead(heap); -} - -static inline NNSiFndHeapHead* GetHeapHeadPtrFromExpHeapHead(NNSiFndExpHeapHead* pEHHead) -{ - return SubU32ToPtr(pEHHead, sizeof(NNSiFndHeapHead)); -} - -ARM_FUNC void GetRegionOfMBlock(NNSiMemRegion* region, NNSiFndExpHeapMBlockHead* block) -{ - region->start = SubU32ToPtr(block, GetAlignmentForMBlock(block)); - region->end = GetMBlockEndAddr(block); -} - -ARM_FUNC NNSiFndExpHeapMBlockHead* RemoveMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block) -{ - NNSiFndExpHeapMBlockHead* const prev = block->pMBHeadPrev; - NNSiFndExpHeapMBlockHead* const next = block->pMBHeadNext; - - if (prev != NULL) - { - prev->pMBHeadNext = next; - } - else - { - list->head = next; - } - - if (next != NULL) - { - next->pMBHeadPrev = prev; - } - else - { - list->tail = prev; - } - - return prev; -} - -ARM_FUNC NNSiFndExpHeapMBlockHead* InsertMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* target, NNSiFndExpHeapMBlockHead* prev) -{ - NNSiFndExpHeapMBlockHead* next; - target->pMBHeadPrev = prev; - if (prev != NULL) - { - next = prev->pMBHeadNext; - prev->pMBHeadNext = target; - } - else - { - next = list->head; - list->head = target; - } - target->pMBHeadNext = next; - if (next != NULL) - { - next->pMBHeadPrev = target; - } - else - { - list->tail = target; - } - - return target; -} - -ARM_FUNC NNSiFndExpHeapMBlockHead* InitMBlock(const NNSiMemRegion* pRegion, u16 signature) -{ - NNSiFndExpHeapMBlockHead* block = pRegion->start; - block->signature = signature; - block->attribute = 0; - block->blockSize = GetOffsetFromPtr(GetMemPtrForMBlock(block), pRegion->end); - block->pMBHeadPrev = NULL; - block->pMBHeadNext = NULL; - return block; -} - -static inline NNSiFndExpHeapMBlockHead* InitFreeMBlock(const NNSiMemRegion* region) -{ - return InitMBlock(region, 0x4652); -} - -ARM_FUNC NNSiFndHeapHead* InitExpHeap(void* startAddress, void* endAddress, u16 optFlag) -{ - NNSiFndHeapHead* pHeapHd = (NNSiFndHeapHead*)startAddress; - NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); - NNSi_FndInitHeapHead(pHeapHd, 0x45585048, AddU32ToPtr(pExpHeapHd, sizeof(NNSiFndExpHeapHead)), endAddress, optFlag); - pExpHeapHd->groupID = 0; - pExpHeapHd->feature = 0; - SetAllocMode(pExpHeapHd, 0); - - NNSiFndExpHeapMBlockHead* pMBHead; - NNSiMemRegion region; - - region.start = pHeapHd->heapStart; - region.end = pHeapHd->heapEnd; - pMBHead = InitFreeMBlock(®ion); - - pExpHeapHd->mbFreeList.head = pMBHead; - pExpHeapHd->mbFreeList.tail = pMBHead; - pExpHeapHd->mbUsedList.head = NULL; - pExpHeapHd->mbUsedList.tail = NULL; - - return pHeapHd; -} - -static inline void AppendMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block) -{ - (void) InsertMBlock(list, block, list->tail); -} - -ARM_FUNC void* AllocUsedBlockFromFreeBlock(NNSiFndExpHeapHead* pEHHead, NNSiFndExpHeapMBlockHead* pMBHeadFree, void* mblock, u32 size, u16 direction) -{ - NNSiMemRegion freeRgnT; - NNSiMemRegion freeRgnB; - NNSiFndExpHeapMBlockHead* pMBHeadFreePrev; - - GetRegionOfMBlock(&freeRgnT, pMBHeadFree); - - freeRgnB.end = freeRgnT.end; - freeRgnB.start = AddU32ToPtr(mblock, size); - freeRgnT.end = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead)); - - pMBHeadFreePrev = RemoveMBlock(&pEHHead->mbFreeList, pMBHeadFree); - - if (GetOffsetFromPtr(freeRgnT.start, freeRgnT.end) < sizeof(NNSiFndExpHeapMBlockHead)) - { - freeRgnT.end = freeRgnT.start; - } - else - { - pMBHeadFreePrev = InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnT), pMBHeadFreePrev); - } - if (GetOffsetFromPtr(freeRgnB.start, freeRgnB.end) < sizeof(NNSiFndExpHeapMBlockHead)) - { - freeRgnB.start= freeRgnB.end; - } - else - { - (void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnB), pMBHeadFreePrev); - } - - FillAllocMemory(GetHeapHeadPtrFromExpHeapHead(pEHHead), freeRgnT.end, GetOffsetFromPtr(freeRgnT.end, freeRgnB.start)); - - NNSiFndExpHeapMBlockHead* pMBHeadNewUsed; - NNSiMemRegion region; - - region.start = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead)); - region.end = freeRgnB.start; - - pMBHeadNewUsed = InitMBlock(®ion, 0x5544); - SetAllocDirForMBlock(pMBHeadNewUsed, direction); - SetAlignmentForMBlock(pMBHeadNewUsed, (u16)GetOffsetFromPtr(freeRgnT.end, pMBHeadNewUsed)); - SetGroupIDForMBlock(pMBHeadNewUsed, pEHHead->groupID); - AppendMBlock(&pEHHead->mbUsedList, pMBHeadNewUsed); - - return mblock; -} - -ARM_FUNC void* AllocFromHead(NNSiFndHeapHead* pHeapHd, u32 size, int alignment) -{ - NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); - const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0; - NNSiFndExpHeapMBlockHead* pMBlkHd = NULL; - NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL; - u32 foundSize = 0xFFFFFFFF; - void* foundMBlock = NULL; - - for (pMBlkHd = pExpHeapHd->mbFreeList.head; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadNext) - { - void *const mblock = GetMemPtrForMBlock(pMBlkHd); - void *const reqMBlock = NNSi_FndRoundUpPtr(mblock, alignment); - const u32 offset = GetOffsetFromPtr(mblock, reqMBlock); - if (pMBlkHd->blockSize >= size + offset && foundSize > pMBlkHd->blockSize) - { - pMBlkHdFound = pMBlkHd; - foundSize = pMBlkHd->blockSize; - foundMBlock = reqMBlock; - if (bAllocFirst || foundSize == size) - break; - } - } - - if (!pMBlkHdFound) - return NULL; - - return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 0); -} - -ARM_FUNC void* AllocFromTail(NNSiFndHeapHead* pHeapHd, u32 size, int alignment) -{ - NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); - const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0; - NNSiFndExpHeapMBlockHead* pMBlkHd = NULL; - NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL; - u32 foundSize = 0xFFFFFFFF; - void* foundMBlock = NULL; - - for (pMBlkHd = pExpHeapHd->mbFreeList.tail; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadPrev) - { - void *const mblock = GetMemPtrForMBlock(pMBlkHd); - void *const mBlockEnd = AddU32ToPtr(mblock, pMBlkHd->blockSize); - void *const reqMBlock = NNSi_FndRoundDownPtr(SubU32ToPtr(mBlockEnd, size), alignment); - if (ComparePtr(reqMBlock, mblock) >= 0 && foundSize > pMBlkHd->blockSize) - { - pMBlkHdFound = pMBlkHd; - foundSize = pMBlkHd->blockSize; - foundMBlock = reqMBlock; - if (bAllocFirst || foundSize == size) - break; - } - } - - if (!pMBlkHdFound) - return NULL; - - return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 1); -} - -ARM_FUNC BOOL RecycleRegion(NNSiFndExpHeapHead* pEHHead, const NNSiMemRegion* pRegion) -{ - NNSiFndExpHeapMBlockHead* pBlkPtrFree = NULL; - NNSiMemRegion freeRgn = *pRegion; - NNSiFndExpHeapMBlockHead* pBlk; - for (pBlk = pEHHead->mbFreeList.head; pBlk; pBlk = pBlk->pMBHeadNext) - { - if (pBlk < (NNSiFndExpHeapMBlockHead*)pRegion->start) - { - pBlkPtrFree = pBlk; - continue; - } - if (pBlk == pRegion->end) - { - freeRgn.end = GetMBlockEndAddr(pBlk); - (void)RemoveMBlock(&pEHHead->mbFreeList, pBlk); - } - break; - } - if (pBlkPtrFree && GetMBlockEndAddr(pBlkPtrFree) == pRegion->start) - { - freeRgn.start = pBlkPtrFree; - pBlkPtrFree = RemoveMBlock(&pEHHead->mbFreeList, pBlkPtrFree); - } - if (GetOffsetFromPtr(freeRgn.start, freeRgn.end) < sizeof(NNSiFndExpHeapMBlockHead)) - return FALSE; - InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgn), pBlkPtrFree); - return TRUE; -} - -ARM_FUNC NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u16 optFlag) -{ - void* endAddress = NNSi_FndRoundDownPtr(AddU32ToPtr(startAddress, size), 4); - startAddress = NNSi_FndRoundUpPtr(startAddress, 4); - if (NNSiGetUIntPtr(startAddress) > NNSiGetUIntPtr(endAddress) || GetOffsetFromPtr(startAddress, endAddress) < sizeof(NNSiFndHeapHead) + sizeof(NNSiFndExpHeapHead) + sizeof(NNSiFndExpHeapMBlockHead) + 4) - return NULL; - return InitExpHeap(startAddress, endAddress, optFlag); -} - -ARM_FUNC void NNS_FndDestroyExpHeap(NNSFndHeapHandle handle) -{ - NNSi_FndFinalizeHeap(handle); -} - -ARM_FUNC void* NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle handle, u32 size, int alignment) -{ - if (size == 0) - size = 1; - size = NNSi_FndRoundUp(size, 4); - if (alignment >= 0) - return AllocFromHead(handle, size, alignment); - else - return AllocFromTail(handle, size, -alignment); -} - -/* -ARM_FUNC u32 NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size) -{ - NNSiFndExpHeapHead* pEHHead; - NNSiFndExpHeapMBlockHead* pMBHead; - pEHHead = GetExpHeapHeadPtrFromHandle(heap); - pMBHead = GetMBlockHeadPtr(memBlock); - size = NNSi_FndRoundUp(size, 4); - if (size == pMBHead->blockSize) - return size; - if (size > pMBHead->blockSize) - { - void* crUsedEnd = GetMBlockEndAddr(pMBHead); - NNSiFndExpHeapMBlockHead* block; - for (block = pEHHead->mbFreeList.head; block; block = block->pMBHeadNext) - { - if (block == crUsedEnd) - break; - } - if (!block || size > pMBHead->blockSize + sizeof(NNSiFndExpHeapMBlockHead) + block->blockSize) - return 0; - - NNSiMemRegion rgnNewFree; - void* oldFreeStart; - NNSiFndExpHeapMBlockHead* nextBlockPrev; - - GetRegionOfMBlock(&rgnNewFree, block); - nextBlockPrev = RemoveMBlock(&pEHHead->mbFreeList, block); - oldFreeStart = rgnNewFree.start; - rgnNewFree.start = AddU32ToPtr(memBlock, size); - if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) < sizeof(NNSiFndExpHeapMBlockHead)) - rgnNewFree.start = rgnNewFree.end; - pMBHead->blockSize = GetOffsetFromPtr(memBlock, rgnNewFree.start); - if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) >= sizeof(NNSiFndExpHeapMBlockHead)) - (void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&rgnNewFree), nextBlockPrev); - FillAllocMemory(heap, oldFreeStart, GetOffsetFromPtr(oldFreeStart, rgnNewFree.start)); - } - else - { - NNSiMemRegion rgnNewFree; - const u32 oldBlockSize = pMBHead->blockSize; - rgnNewFree.start = AddU32ToPtr(memBlock, size); - rgnNewFree.end = GetMBlockEndAddr(pMBHead); - pMBHead->blockSize = size; - if (!RecycleRegion(pEHHead, &rgnNewFree)) - pMBHead->blockSize = oldBlockSize; - } - return pMBHead->blockSize; -} -*/ +#include "global.h" +#include "NNS_FND_expheap.h" + +typedef struct NNSiMemRegion { + void* start; + void* end; +} NNSiMemRegion; + +static inline u16 GetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* block) +{ + return NNSi_FndGetBitValue(block->attribute, 8, 7); +} + +static inline void SetAllocDirForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 direction) +{ + NNSi_FndSetBitValue(pEHMBHead->attribute, 15, 1, direction); +} + +static inline void SetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 alignment) +{ + NNSi_FndSetBitValue(pEHMBHead->attribute, 8, 7, alignment); +} + +static inline void SetGroupIDForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 groupID) +{ + NNSi_FndSetBitValue(pEHMBHead->attribute, 0, 8, groupID); +} + +static inline void* GetMemPtrForMBlock(NNSiFndExpHeapMBlockHead* block) +{ + return AddU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead)); +} + +static inline void* GetMBlockHeadPtr(void* block) +{ + return SubU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead)); +} + +static inline void* GetMBlockEndAddr(NNSiFndExpHeapMBlockHead* block) +{ + return AddU32ToPtr(GetMemPtrForMBlock(block), block->blockSize); +} + +static inline u16 GetAllocMode(NNSiFndExpHeapHead* pExHeapHd) +{ + return NNSi_FndGetBitValue(pExHeapHd->feature, 0, 1); +} + +static inline void SetAllocMode(NNSiFndExpHeapHead* pExHeapHd, u16 mode) +{ + NNSi_FndSetBitValue(pExHeapHd->feature, 0, 1, mode); +} + +static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHeapHead(NNSiFndHeapHead* pHHead) +{ + return AddU32ToPtr(pHHead, sizeof(NNSiFndHeapHead)); +} + +static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHandle(NNSFndHeapHandle heap) +{ + return GetExpHeapHeadPtrFromHeapHead(heap); +} + +static inline NNSiFndHeapHead* GetHeapHeadPtrFromExpHeapHead(NNSiFndExpHeapHead* pEHHead) +{ + return SubU32ToPtr(pEHHead, sizeof(NNSiFndHeapHead)); +} + +ARM_FUNC void GetRegionOfMBlock(NNSiMemRegion* region, NNSiFndExpHeapMBlockHead* block) +{ + region->start = SubU32ToPtr(block, GetAlignmentForMBlock(block)); + region->end = GetMBlockEndAddr(block); +} + +ARM_FUNC NNSiFndExpHeapMBlockHead* RemoveMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block) +{ + NNSiFndExpHeapMBlockHead* const prev = block->pMBHeadPrev; + NNSiFndExpHeapMBlockHead* const next = block->pMBHeadNext; + + if (prev != NULL) + { + prev->pMBHeadNext = next; + } + else + { + list->head = next; + } + + if (next != NULL) + { + next->pMBHeadPrev = prev; + } + else + { + list->tail = prev; + } + + return prev; +} + +ARM_FUNC NNSiFndExpHeapMBlockHead* InsertMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* target, NNSiFndExpHeapMBlockHead* prev) +{ + NNSiFndExpHeapMBlockHead* next; + target->pMBHeadPrev = prev; + if (prev != NULL) + { + next = prev->pMBHeadNext; + prev->pMBHeadNext = target; + } + else + { + next = list->head; + list->head = target; + } + target->pMBHeadNext = next; + if (next != NULL) + { + next->pMBHeadPrev = target; + } + else + { + list->tail = target; + } + + return target; +} + +ARM_FUNC NNSiFndExpHeapMBlockHead* InitMBlock(const NNSiMemRegion* pRegion, u16 signature) +{ + NNSiFndExpHeapMBlockHead* block = pRegion->start; + block->signature = signature; + block->attribute = 0; + block->blockSize = GetOffsetFromPtr(GetMemPtrForMBlock(block), pRegion->end); + block->pMBHeadPrev = NULL; + block->pMBHeadNext = NULL; + return block; +} + +static inline NNSiFndExpHeapMBlockHead* InitFreeMBlock(const NNSiMemRegion* region) +{ + return InitMBlock(region, 0x4652); +} + +ARM_FUNC NNSiFndHeapHead* InitExpHeap(void* startAddress, void* endAddress, u16 optFlag) +{ + NNSiFndHeapHead* pHeapHd = (NNSiFndHeapHead*)startAddress; + NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); + NNSi_FndInitHeapHead(pHeapHd, 0x45585048, AddU32ToPtr(pExpHeapHd, sizeof(NNSiFndExpHeapHead)), endAddress, optFlag); + pExpHeapHd->groupID = 0; + pExpHeapHd->feature = 0; + SetAllocMode(pExpHeapHd, 0); + + NNSiFndExpHeapMBlockHead* pMBHead; + NNSiMemRegion region; + + region.start = pHeapHd->heapStart; + region.end = pHeapHd->heapEnd; + pMBHead = InitFreeMBlock(®ion); + + pExpHeapHd->mbFreeList.head = pMBHead; + pExpHeapHd->mbFreeList.tail = pMBHead; + pExpHeapHd->mbUsedList.head = NULL; + pExpHeapHd->mbUsedList.tail = NULL; + + return pHeapHd; +} + +static inline void AppendMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block) +{ + (void) InsertMBlock(list, block, list->tail); +} + +ARM_FUNC void* AllocUsedBlockFromFreeBlock(NNSiFndExpHeapHead* pEHHead, NNSiFndExpHeapMBlockHead* pMBHeadFree, void* mblock, u32 size, u16 direction) +{ + NNSiMemRegion freeRgnT; + NNSiMemRegion freeRgnB; + NNSiFndExpHeapMBlockHead* pMBHeadFreePrev; + + GetRegionOfMBlock(&freeRgnT, pMBHeadFree); + + freeRgnB.end = freeRgnT.end; + freeRgnB.start = AddU32ToPtr(mblock, size); + freeRgnT.end = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead)); + + pMBHeadFreePrev = RemoveMBlock(&pEHHead->mbFreeList, pMBHeadFree); + + if (GetOffsetFromPtr(freeRgnT.start, freeRgnT.end) < sizeof(NNSiFndExpHeapMBlockHead)) + { + freeRgnT.end = freeRgnT.start; + } + else + { + pMBHeadFreePrev = InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnT), pMBHeadFreePrev); + } + if (GetOffsetFromPtr(freeRgnB.start, freeRgnB.end) < sizeof(NNSiFndExpHeapMBlockHead)) + { + freeRgnB.start= freeRgnB.end; + } + else + { + (void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnB), pMBHeadFreePrev); + } + + FillAllocMemory(GetHeapHeadPtrFromExpHeapHead(pEHHead), freeRgnT.end, GetOffsetFromPtr(freeRgnT.end, freeRgnB.start)); + + NNSiFndExpHeapMBlockHead* pMBHeadNewUsed; + NNSiMemRegion region; + + region.start = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead)); + region.end = freeRgnB.start; + + pMBHeadNewUsed = InitMBlock(®ion, 0x5544); + SetAllocDirForMBlock(pMBHeadNewUsed, direction); + SetAlignmentForMBlock(pMBHeadNewUsed, (u16)GetOffsetFromPtr(freeRgnT.end, pMBHeadNewUsed)); + SetGroupIDForMBlock(pMBHeadNewUsed, pEHHead->groupID); + AppendMBlock(&pEHHead->mbUsedList, pMBHeadNewUsed); + + return mblock; +} + +ARM_FUNC void* AllocFromHead(NNSiFndHeapHead* pHeapHd, u32 size, int alignment) +{ + NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); + const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0; + NNSiFndExpHeapMBlockHead* pMBlkHd = NULL; + NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL; + u32 foundSize = 0xFFFFFFFF; + void* foundMBlock = NULL; + + for (pMBlkHd = pExpHeapHd->mbFreeList.head; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadNext) + { + void *const mblock = GetMemPtrForMBlock(pMBlkHd); + void *const reqMBlock = NNSi_FndRoundUpPtr(mblock, alignment); + const u32 offset = GetOffsetFromPtr(mblock, reqMBlock); + if (pMBlkHd->blockSize >= size + offset && foundSize > pMBlkHd->blockSize) + { + pMBlkHdFound = pMBlkHd; + foundSize = pMBlkHd->blockSize; + foundMBlock = reqMBlock; + if (bAllocFirst || foundSize == size) + break; + } + } + + if (!pMBlkHdFound) + return NULL; + + return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 0); +} + +ARM_FUNC void* AllocFromTail(NNSiFndHeapHead* pHeapHd, u32 size, int alignment) +{ + NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd); + const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0; + NNSiFndExpHeapMBlockHead* pMBlkHd = NULL; + NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL; + u32 foundSize = 0xFFFFFFFF; + void* foundMBlock = NULL; + + for (pMBlkHd = pExpHeapHd->mbFreeList.tail; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadPrev) + { + void *const mblock = GetMemPtrForMBlock(pMBlkHd); + void *const mBlockEnd = AddU32ToPtr(mblock, pMBlkHd->blockSize); + void *const reqMBlock = NNSi_FndRoundDownPtr(SubU32ToPtr(mBlockEnd, size), alignment); + if (ComparePtr(reqMBlock, mblock) >= 0 && foundSize > pMBlkHd->blockSize) + { + pMBlkHdFound = pMBlkHd; + foundSize = pMBlkHd->blockSize; + foundMBlock = reqMBlock; + if (bAllocFirst || foundSize == size) + break; + } + } + + if (!pMBlkHdFound) + return NULL; + + return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 1); +} + +ARM_FUNC BOOL RecycleRegion(NNSiFndExpHeapHead* pEHHead, const NNSiMemRegion* pRegion) +{ + NNSiFndExpHeapMBlockHead* pBlkPtrFree = NULL; + NNSiMemRegion freeRgn = *pRegion; + NNSiFndExpHeapMBlockHead* pBlk; + for (pBlk = pEHHead->mbFreeList.head; pBlk; pBlk = pBlk->pMBHeadNext) + { + if (pBlk < (NNSiFndExpHeapMBlockHead*)pRegion->start) + { + pBlkPtrFree = pBlk; + continue; + } + if (pBlk == pRegion->end) + { + freeRgn.end = GetMBlockEndAddr(pBlk); + (void)RemoveMBlock(&pEHHead->mbFreeList, pBlk); + } + break; + } + if (pBlkPtrFree && GetMBlockEndAddr(pBlkPtrFree) == pRegion->start) + { + freeRgn.start = pBlkPtrFree; + pBlkPtrFree = RemoveMBlock(&pEHHead->mbFreeList, pBlkPtrFree); + } + if (GetOffsetFromPtr(freeRgn.start, freeRgn.end) < sizeof(NNSiFndExpHeapMBlockHead)) + return FALSE; + InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgn), pBlkPtrFree); + return TRUE; +} + +ARM_FUNC NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u16 optFlag) +{ + void* endAddress = NNSi_FndRoundDownPtr(AddU32ToPtr(startAddress, size), 4); + startAddress = NNSi_FndRoundUpPtr(startAddress, 4); + if (NNSiGetUIntPtr(startAddress) > NNSiGetUIntPtr(endAddress) || GetOffsetFromPtr(startAddress, endAddress) < sizeof(NNSiFndHeapHead) + sizeof(NNSiFndExpHeapHead) + sizeof(NNSiFndExpHeapMBlockHead) + 4) + return NULL; + return InitExpHeap(startAddress, endAddress, optFlag); +} + +ARM_FUNC void NNS_FndDestroyExpHeap(NNSFndHeapHandle handle) +{ + NNSi_FndFinalizeHeap(handle); +} + +ARM_FUNC void* NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle handle, u32 size, int alignment) +{ + if (size == 0) + size = 1; + size = NNSi_FndRoundUp(size, 4); + if (alignment >= 0) + return AllocFromHead(handle, size, alignment); + else + return AllocFromTail(handle, size, -alignment); +} + +/* +ARM_FUNC u32 NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size) +{ + NNSiFndExpHeapHead* pEHHead; + NNSiFndExpHeapMBlockHead* pMBHead; + pEHHead = GetExpHeapHeadPtrFromHandle(heap); + pMBHead = GetMBlockHeadPtr(memBlock); + size = NNSi_FndRoundUp(size, 4); + if (size == pMBHead->blockSize) + return size; + if (size > pMBHead->blockSize) + { + void* crUsedEnd = GetMBlockEndAddr(pMBHead); + NNSiFndExpHeapMBlockHead* block; + for (block = pEHHead->mbFreeList.head; block; block = block->pMBHeadNext) + { + if (block == crUsedEnd) + break; + } + if (!block || size > pMBHead->blockSize + sizeof(NNSiFndExpHeapMBlockHead) + block->blockSize) + return 0; + + NNSiMemRegion rgnNewFree; + void* oldFreeStart; + NNSiFndExpHeapMBlockHead* nextBlockPrev; + + GetRegionOfMBlock(&rgnNewFree, block); + nextBlockPrev = RemoveMBlock(&pEHHead->mbFreeList, block); + oldFreeStart = rgnNewFree.start; + rgnNewFree.start = AddU32ToPtr(memBlock, size); + if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) < sizeof(NNSiFndExpHeapMBlockHead)) + rgnNewFree.start = rgnNewFree.end; + pMBHead->blockSize = GetOffsetFromPtr(memBlock, rgnNewFree.start); + if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) >= sizeof(NNSiFndExpHeapMBlockHead)) + (void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&rgnNewFree), nextBlockPrev); + FillAllocMemory(heap, oldFreeStart, GetOffsetFromPtr(oldFreeStart, rgnNewFree.start)); + } + else + { + NNSiMemRegion rgnNewFree; + const u32 oldBlockSize = pMBHead->blockSize; + rgnNewFree.start = AddU32ToPtr(memBlock, size); + rgnNewFree.end = GetMBlockEndAddr(pMBHead); + pMBHead->blockSize = size; + if (!RecycleRegion(pEHHead, &rgnNewFree)) + pMBHead->blockSize = oldBlockSize; + } + return pMBHead->blockSize; +} +*/ diff --git a/arm9/lib/libnns/src/NNS_FND_heapcommon.c b/arm9/lib/libnns/src/NNS_FND_heapcommon.c index 736460304..5e98470af 100644 --- a/arm9/lib/libnns/src/NNS_FND_heapcommon.c +++ b/arm9/lib/libnns/src/NNS_FND_heapcommon.c @@ -1,55 +1,55 @@ -#include "nitro.h" -#include "NNS_FND_heapcommon.h" -#include "NNS_FND_list.h" - -BOOL sRootListInitialized; -NNSFndList sRootList; - -ARM_FUNC void *NNS_FndGetNextListObject(NNSFndList *, void *); - -ARM_FUNC static NNSiFndHeapHead* FindContainHeap(NNSFndList * pList, const void * memBlock) -{ - NNSiFndHeapHead * pHead = NULL; - - while ((pHead = NNS_FndGetNextListObject(pList, pHead)) != NULL) - { - if (pHead->heapStart <= memBlock && memBlock < pHead->heapEnd) - { - NNSiFndHeapHead * ret = FindContainHeap(&pHead->childList, memBlock); - if (ret == NULL) - ret = pHead; - return ret; - } - } - return NULL; -} - -ARM_FUNC static NNSFndList* FindListContainHeap(const void * memBlock) -{ - NNSFndList* ret = &sRootList; - NNSiFndHeapHead* pHead = FindContainHeap(&sRootList, memBlock); - if (pHead != NULL) - ret = &pHead->childList; - return ret; -} - -ARM_FUNC void NNSi_FndInitHeapHead(NNSiFndHeapHead *pHead, u32 signature, void* heapStart, void* heapEnd, u16 optionFlag) -{ - pHead->signature = signature; - pHead->heapStart = heapStart; - pHead->heapEnd = heapEnd; - pHead->attribute = 0; - SetOptForHeap(pHead, optionFlag); - NNS_FndInitList(&pHead->childList, 4); - if (!sRootListInitialized) - { - NNS_FndInitList(&sRootList, 4); - sRootListInitialized = TRUE; - } - NNS_FndAppendListObject(FindListContainHeap(pHead), pHead); -} - -ARM_FUNC void NNSi_FndFinalizeHeap(NNSiFndHeapHead *pHead) -{ - NNS_FndRemoveListObject(FindListContainHeap(pHead), pHead); -} +#include "nitro.h" +#include "NNS_FND_heapcommon.h" +#include "NNS_FND_list.h" + +BOOL sRootListInitialized; +NNSFndList sRootList; + +ARM_FUNC void *NNS_FndGetNextListObject(NNSFndList *, void *); + +ARM_FUNC static NNSiFndHeapHead* FindContainHeap(NNSFndList * pList, const void * memBlock) +{ + NNSiFndHeapHead * pHead = NULL; + + while ((pHead = NNS_FndGetNextListObject(pList, pHead)) != NULL) + { + if (pHead->heapStart <= memBlock && memBlock < pHead->heapEnd) + { + NNSiFndHeapHead * ret = FindContainHeap(&pHead->childList, memBlock); + if (ret == NULL) + ret = pHead; + return ret; + } + } + return NULL; +} + +ARM_FUNC static NNSFndList* FindListContainHeap(const void * memBlock) +{ + NNSFndList* ret = &sRootList; + NNSiFndHeapHead* pHead = FindContainHeap(&sRootList, memBlock); + if (pHead != NULL) + ret = &pHead->childList; + return ret; +} + +ARM_FUNC void NNSi_FndInitHeapHead(NNSiFndHeapHead *pHead, u32 signature, void* heapStart, void* heapEnd, u16 optionFlag) +{ + pHead->signature = signature; + pHead->heapStart = heapStart; + pHead->heapEnd = heapEnd; + pHead->attribute = 0; + SetOptForHeap(pHead, optionFlag); + NNS_FndInitList(&pHead->childList, 4); + if (!sRootListInitialized) + { + NNS_FndInitList(&sRootList, 4); + sRootListInitialized = TRUE; + } + NNS_FndAppendListObject(FindListContainHeap(pHead), pHead); +} + +ARM_FUNC void NNSi_FndFinalizeHeap(NNSiFndHeapHead *pHead) +{ + NNS_FndRemoveListObject(FindListContainHeap(pHead), pHead); +} diff --git a/arm9/lib/libnns/src/NNS_FND_list.c b/arm9/lib/libnns/src/NNS_FND_list.c index fdab81887..7334fbaad 100644 --- a/arm9/lib/libnns/src/NNS_FND_list.c +++ b/arm9/lib/libnns/src/NNS_FND_list.c @@ -1,128 +1,128 @@ -#include "nitro.h" -#include "NNS_FND_list.h" - -#define OBJ_TO_LINK(list, obj) ((NNSFndLink*)((void*)(obj) + (list)->offset)) - -ARM_FUNC void NNS_FndInitList(NNSFndList* list, s32 alignment) -{ - list->headObject = NULL; - list->tailObject = NULL; - list->numObjects = 0; - list->offset = (u16)alignment; -} - -ARM_FUNC static void SetFirstObject(NNSFndList* list, void* object) -{ - NNSFndLink* tail = OBJ_TO_LINK(list, object); - tail->nextObject = NULL; - tail->prevObject = NULL; - list->headObject = object; - list->tailObject = object; - list->numObjects++; -} - -ARM_FUNC void NNS_FndAppendListObject(NNSFndList* list, void* object) -{ - if (list->headObject == NULL) - { - SetFirstObject(list, object); - } - else - { - NNSFndLink *tail = OBJ_TO_LINK(list, object); - tail->prevObject = list->tailObject; - tail->nextObject = NULL; - OBJ_TO_LINK(list, list->tailObject)->nextObject = object; - list->tailObject = object; - list->numObjects++; - } -} - -ARM_FUNC void NNS_FndPrependListObject(NNSFndList* list, void* object) -{ - if (list->headObject == NULL) - { - SetFirstObject(list, object); - } - else - { - NNSFndLink *tail = OBJ_TO_LINK(list, object); - tail->prevObject = NULL; - tail->nextObject = list->headObject; - OBJ_TO_LINK(list, list->headObject)->prevObject = object; - list->headObject = object; - list->numObjects++; - } -} - -ARM_FUNC void NNS_FndInsertListObject(NNSFndList* list, void* where, void* object) -{ - if (where == NULL) - { - NNS_FndAppendListObject(list, object); - } - - else if (where == list->headObject) - { - NNS_FndPrependListObject(list, object); - } - else - { - NNSFndLink* tail = OBJ_TO_LINK(list, object); - void* prevObject = OBJ_TO_LINK(list, where)->prevObject; - NNSFndLink* head = OBJ_TO_LINK(list, prevObject); - tail->prevObject = prevObject; - tail->nextObject = where; - head->nextObject = object; - OBJ_TO_LINK(list, where)->prevObject = object; - list->numObjects++; - } -} - -ARM_FUNC void NNS_FndRemoveListObject(NNSFndList* list, void* object) -{ - NNSFndLink* node = OBJ_TO_LINK(list, object); - if (node->prevObject == NULL) - { - list->headObject = node->nextObject; - } - else - { - OBJ_TO_LINK(list, node->prevObject)->nextObject = node->nextObject; - } - if (node->nextObject == NULL) - { - list->tailObject = node->prevObject; - } - else - { - OBJ_TO_LINK(list, node->nextObject)->prevObject = node->prevObject; - } - node->prevObject = NULL; - node->nextObject = NULL; - list->numObjects--; -} - -ARM_FUNC void * NNS_FndGetNextListObject(NNSFndList* list, void* object) -{ - if (object == NULL) - { - return list->headObject; - } - else - { - return OBJ_TO_LINK(list, object)->nextObject; - } -} - -ARM_FUNC void * NNS_FndGetPrevListObject(NNSFndList* list, void* object) -{ - if (object == NULL) - { - return list->tailObject; - } - else - { - return OBJ_TO_LINK(list, object)->prevObject; - } -} +#include "nitro.h" +#include "NNS_FND_list.h" + +#define OBJ_TO_LINK(list, obj) ((NNSFndLink*)((void*)(obj) + (list)->offset)) + +ARM_FUNC void NNS_FndInitList(NNSFndList* list, s32 alignment) +{ + list->headObject = NULL; + list->tailObject = NULL; + list->numObjects = 0; + list->offset = (u16)alignment; +} + +ARM_FUNC static void SetFirstObject(NNSFndList* list, void* object) +{ + NNSFndLink* tail = OBJ_TO_LINK(list, object); + tail->nextObject = NULL; + tail->prevObject = NULL; + list->headObject = object; + list->tailObject = object; + list->numObjects++; +} + +ARM_FUNC void NNS_FndAppendListObject(NNSFndList* list, void* object) +{ + if (list->headObject == NULL) + { + SetFirstObject(list, object); + } + else + { + NNSFndLink *tail = OBJ_TO_LINK(list, object); + tail->prevObject = list->tailObject; + tail->nextObject = NULL; + OBJ_TO_LINK(list, list->tailObject)->nextObject = object; + list->tailObject = object; + list->numObjects++; + } +} + +ARM_FUNC void NNS_FndPrependListObject(NNSFndList* list, void* object) +{ + if (list->headObject == NULL) + { + SetFirstObject(list, object); + } + else + { + NNSFndLink *tail = OBJ_TO_LINK(list, object); + tail->prevObject = NULL; + tail->nextObject = list->headObject; + OBJ_TO_LINK(list, list->headObject)->prevObject = object; + list->headObject = object; + list->numObjects++; + } +} + +ARM_FUNC void NNS_FndInsertListObject(NNSFndList* list, void* where, void* object) +{ + if (where == NULL) + { + NNS_FndAppendListObject(list, object); + } + + else if (where == list->headObject) + { + NNS_FndPrependListObject(list, object); + } + else + { + NNSFndLink* tail = OBJ_TO_LINK(list, object); + void* prevObject = OBJ_TO_LINK(list, where)->prevObject; + NNSFndLink* head = OBJ_TO_LINK(list, prevObject); + tail->prevObject = prevObject; + tail->nextObject = where; + head->nextObject = object; + OBJ_TO_LINK(list, where)->prevObject = object; + list->numObjects++; + } +} + +ARM_FUNC void NNS_FndRemoveListObject(NNSFndList* list, void* object) +{ + NNSFndLink* node = OBJ_TO_LINK(list, object); + if (node->prevObject == NULL) + { + list->headObject = node->nextObject; + } + else + { + OBJ_TO_LINK(list, node->prevObject)->nextObject = node->nextObject; + } + if (node->nextObject == NULL) + { + list->tailObject = node->prevObject; + } + else + { + OBJ_TO_LINK(list, node->nextObject)->prevObject = node->prevObject; + } + node->prevObject = NULL; + node->nextObject = NULL; + list->numObjects--; +} + +ARM_FUNC void * NNS_FndGetNextListObject(NNSFndList* list, void* object) +{ + if (object == NULL) + { + return list->headObject; + } + else + { + return OBJ_TO_LINK(list, object)->nextObject; + } +} + +ARM_FUNC void * NNS_FndGetPrevListObject(NNSFndList* list, void* object) +{ + if (object == NULL) + { + return list->tailObject; + } + else + { + return OBJ_TO_LINK(list, object)->prevObject; + } +} diff --git a/arm9/src/gf_gfx_loader.c b/arm9/src/gf_gfx_loader.c index 0b827be69..2e42f0a8a 100644 --- a/arm9/src/gf_gfx_loader.c +++ b/arm9/src/gf_gfx_loader.c @@ -1,349 +1,349 @@ -#include "global.h" -#include "filesystem.h" -#include "NNS_g2d.h" -#include "gf_gfx_loader.h" - -THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id) -{ - NNSG2dCharacterData * pCharData; - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, FALSE); - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedBGCharacterData(pFile, &pCharData)) - { - if (szByte == 0) - szByte = pCharData->szByte; - BG_LoadCharTilesData(unkStruct02016B94_2, (u8)layer, pCharData->pRawData, szByte, numTiles); - } - FreeToHeap(pFile); - } - return szByte; -} - -THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id) -{ - NNSG2dScreenData * pScreenData; - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, TRUE); - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedScreenData(pFile, &pScreenData)) - { - if (szByte == 0) - szByte = pScreenData->szByte; - if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) layer) != NULL) - BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte); - BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte, tileOffset); - } - FreeToHeap(pFile); - } -} - -THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id) -{ - GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, location, 0, palSlotOffset, szByte, heap_id); -} - -THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id) -{ - static void (*const load_funcs[])(void *, u32, u32) = { - GX_LoadBGPltt, - GX_LoadOBJPltt, - GX_LoadBGExtPltt, - GX_LoadOBJExtPltt, - GXS_LoadBGPltt, - GXS_LoadOBJPltt, - GXS_LoadBGExtPltt, - GXS_LoadOBJExtPltt - }; - NNSG2dPaletteData * pPltData; - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, FALSE, heap_id, TRUE); - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedPaletteData(pFile, &pPltData)) - { - pPltData->pRawData = (void *)((u32)pPltData->pRawData + srcOffset); - if (szByte == 0) - szByte = pPltData->szByte - srcOffset; - DC_FlushRange(pPltData->pRawData, szByte); - switch (location) - { - case GF_PAL_LOCATION_MAIN_BGEXT: - GX_BeginLoadBGExtPltt(); - load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); - GX_EndLoadBGExtPltt(); - break; - case GF_PAL_LOCATION_SUB_BGEXT: - GXS_BeginLoadBGExtPltt(); - load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); - GXS_EndLoadBGExtPltt(); - break; - case GF_PAL_LOCATION_MAIN_OBJEXT: - GX_BeginLoadOBJExtPltt(); - load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); - GX_EndLoadOBJExtPltt(); - break; - case GF_PAL_LOCATION_SUB_OBJEXT: - GXS_BeginLoadOBJExtPltt(); - load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); - GXS_EndLoadOBJExtPltt(); - break; - default: - load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); - break; - } - } - FreeToHeap(pFile); - } -} - -THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id) -{ - static void (*const load_funcs[])(void *, u32, u32) = { - GX_LoadOBJ, - GXS_LoadOBJ - }; - - NNSG2dCharacterData* pCharData; - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharData)) - { - if (szByte == 0) - szByte = pCharData->szByte; - DC_FlushRange(pCharData->pRawData, szByte); - load_funcs[layer](pCharData->pRawData, baseAddr, szByte); - } - FreeToHeap(pFile); - } - return szByte; -} - -THUMB_FUNC void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, TRUE); - NNSG2dPaletteData* pPlttData; - NNSG2dPaletteCompressInfo* pCompressInfo; - if (pFile != NULL) - { - BOOL isCompressed = NNS_G2dGetUnpackedPaletteCompressInfo(pFile, &pCompressInfo); - if (NNS_G2dGetUnpackedPaletteData(pFile, &pPlttData)) - { - if (isCompressed) - { - NNS_G2dLoadPaletteEx(pPlttData, pCompressInfo, baseAddr, vramType, pPltProxy); - } - else - { - NNS_G2dLoadPalette(pPlttData, baseAddr, vramType, pPltProxy); - } - } - FreeToHeap(pFile); - } -} - -THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy) -{ - static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = { - NNS_G2dLoadImage1DMapping, - NNS_G2dLoadImage2DMapping - }; - - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); - u32 retSize = 0; - NNSG2dCharacterData * pSrcData; - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedCharacterData(pFile, &pSrcData)) - { - if (szByte != 0) - pSrcData->szByte = szByte; - load_funcs[layer](pSrcData, baseAddr, type, pImgProxy); - retSize = pSrcData->szByte; - } - FreeToHeap(pFile); - } - return retSize; -} - -THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy) -{ - static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = { - NNS_G2dLoadImage1DMapping, - NNS_G2dLoadImage2DMapping - }; - NNSG2dCharacterData * pCharacterData; - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); - if (pFile != NULL) - { - if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharacterData)) - { - if (szByte != 0) - pCharacterData->szByte = szByte; - switch (type) - { - case NNS_G2D_VRAM_TYPE_2DMAIN: - pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK)); - break; - case NNS_G2D_VRAM_TYPE_2DSUB: - pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK)); - break; - default: - ; - } - load_funcs[layer](pCharacterData, baseAddr, type, pImageProxy); - } - FreeToHeap(pFile); - } -} - -THUMB_FUNC void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); - if (pFile != NULL) - { - if (!NNS_G2dGetUnpackedBGCharacterData(pFile, ppCharData)) - { - FreeToHeap(pFile); - return NULL; - } - } - return pFile; -} - -THUMB_FUNC void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); - if (pFile != NULL) - { - if (!NNS_G2dGetUnpackedScreenData(pFile, ppScrData)) - { - FreeToHeap(pFile); - return NULL; - } - } - return pFile; -} - -THUMB_FUNC void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, FALSE); - if (pFile != NULL) - { - if (!NNS_G2dGetUnpackedPaletteData(pFile, ppPltData)) - { - FreeToHeap(pFile); - return NULL; - } - } - return pFile; -} - -THUMB_FUNC void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); - if (pFile != NULL) - { - if (!NNS_G2dGetUnpackedCellBank(pFile, ppCellBank)) - { - FreeToHeap(pFile); - return NULL; - } - } - return pFile; -} - -THUMB_FUNC void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id) -{ - void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); - if (pFile != NULL) - { - if (!NNS_G2dGetUnpackedAnimBank(pFile, ppAnimBank)) - { - FreeToHeap(pFile); - return NULL; - } - } - return pFile; -} - -THUMB_FUNC void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id) -{ - return GfGfxLoader_LoadFromNarc(narcId, memberId, TRUE, heap_id, FALSE); -} - -THUMB_FUNC void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd) -{ - void * dest; - void * dest2; - if (isCompressed || allocAtEnd == TRUE) - { - u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo); - dest = AllocFromHeapAtEnd(heap_id, size); - } - else - { - u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo); - dest = AllocFromHeap(heap_id, size); - } - if (dest != NULL) - { - ReadWholeNarcMemberByIdPair(dest, narcId, memberNo); - if (isCompressed) - { - if (allocAtEnd == FALSE) - { - dest2 = AllocFromHeap(heap_id, (*(u32 *)dest) >> 8); - } - else - { - dest2 = AllocFromHeapAtEnd(heap_id, (*(u32 *)dest) >> 8); - } - if (dest2 != NULL) - { - MI_UncompressLZ8(dest, dest2); - FreeToHeap(dest); - } - dest = dest2; // UB: if dest2 is NULL, dest is never freed - } - } - return dest; -} - -THUMB_FUNC void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p) -{ - void * dest; - void * dest2; - *size_p = GetNarcMemberSizeByIdPair(narcId, memberNo); - if (isCompressed || allocAtEnd == TRUE) - { - dest = AllocFromHeapAtEnd(heap_id, *size_p); - } - else - { - dest = AllocFromHeap(heap_id, *size_p); - } - if (dest != NULL) - { - ReadWholeNarcMemberByIdPair(dest, narcId, memberNo); - if (isCompressed) - { - *size_p = (*(u32 *)dest) >> 8; - if (allocAtEnd == FALSE) - { - dest2 = AllocFromHeap(heap_id, *size_p); - } - else - { - dest2 = AllocFromHeapAtEnd(heap_id, *size_p); - } - if (dest2 != NULL) - { - MI_UncompressLZ8(dest, dest2); - FreeToHeap(dest); - } - dest = dest2; // UB: if dest2 is NULL, dest is never freed - } - } - return dest; -} +#include "global.h" +#include "filesystem.h" +#include "NNS_g2d.h" +#include "gf_gfx_loader.h" + +THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id) +{ + NNSG2dCharacterData * pCharData; + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, FALSE); + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedBGCharacterData(pFile, &pCharData)) + { + if (szByte == 0) + szByte = pCharData->szByte; + BG_LoadCharTilesData(unkStruct02016B94_2, (u8)layer, pCharData->pRawData, szByte, numTiles); + } + FreeToHeap(pFile); + } + return szByte; +} + +THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id) +{ + NNSG2dScreenData * pScreenData; + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, TRUE); + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedScreenData(pFile, &pScreenData)) + { + if (szByte == 0) + szByte = pScreenData->szByte; + if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) layer) != NULL) + BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte); + BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte, tileOffset); + } + FreeToHeap(pFile); + } +} + +THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id) +{ + GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, location, 0, palSlotOffset, szByte, heap_id); +} + +THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id) +{ + static void (*const load_funcs[])(void *, u32, u32) = { + GX_LoadBGPltt, + GX_LoadOBJPltt, + GX_LoadBGExtPltt, + GX_LoadOBJExtPltt, + GXS_LoadBGPltt, + GXS_LoadOBJPltt, + GXS_LoadBGExtPltt, + GXS_LoadOBJExtPltt + }; + NNSG2dPaletteData * pPltData; + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, FALSE, heap_id, TRUE); + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedPaletteData(pFile, &pPltData)) + { + pPltData->pRawData = (void *)((u32)pPltData->pRawData + srcOffset); + if (szByte == 0) + szByte = pPltData->szByte - srcOffset; + DC_FlushRange(pPltData->pRawData, szByte); + switch (location) + { + case GF_PAL_LOCATION_MAIN_BGEXT: + GX_BeginLoadBGExtPltt(); + load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); + GX_EndLoadBGExtPltt(); + break; + case GF_PAL_LOCATION_SUB_BGEXT: + GXS_BeginLoadBGExtPltt(); + load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); + GXS_EndLoadBGExtPltt(); + break; + case GF_PAL_LOCATION_MAIN_OBJEXT: + GX_BeginLoadOBJExtPltt(); + load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); + GX_EndLoadOBJExtPltt(); + break; + case GF_PAL_LOCATION_SUB_OBJEXT: + GXS_BeginLoadOBJExtPltt(); + load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); + GXS_EndLoadOBJExtPltt(); + break; + default: + load_funcs[location](pPltData->pRawData, palSlotOffset, szByte); + break; + } + } + FreeToHeap(pFile); + } +} + +THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id) +{ + static void (*const load_funcs[])(void *, u32, u32) = { + GX_LoadOBJ, + GXS_LoadOBJ + }; + + NNSG2dCharacterData* pCharData; + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharData)) + { + if (szByte == 0) + szByte = pCharData->szByte; + DC_FlushRange(pCharData->pRawData, szByte); + load_funcs[layer](pCharData->pRawData, baseAddr, szByte); + } + FreeToHeap(pFile); + } + return szByte; +} + +THUMB_FUNC void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, TRUE); + NNSG2dPaletteData* pPlttData; + NNSG2dPaletteCompressInfo* pCompressInfo; + if (pFile != NULL) + { + BOOL isCompressed = NNS_G2dGetUnpackedPaletteCompressInfo(pFile, &pCompressInfo); + if (NNS_G2dGetUnpackedPaletteData(pFile, &pPlttData)) + { + if (isCompressed) + { + NNS_G2dLoadPaletteEx(pPlttData, pCompressInfo, baseAddr, vramType, pPltProxy); + } + else + { + NNS_G2dLoadPalette(pPlttData, baseAddr, vramType, pPltProxy); + } + } + FreeToHeap(pFile); + } +} + +THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy) +{ + static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = { + NNS_G2dLoadImage1DMapping, + NNS_G2dLoadImage2DMapping + }; + + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); + u32 retSize = 0; + NNSG2dCharacterData * pSrcData; + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedCharacterData(pFile, &pSrcData)) + { + if (szByte != 0) + pSrcData->szByte = szByte; + load_funcs[layer](pSrcData, baseAddr, type, pImgProxy); + retSize = pSrcData->szByte; + } + FreeToHeap(pFile); + } + return retSize; +} + +THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy) +{ + static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = { + NNS_G2dLoadImage1DMapping, + NNS_G2dLoadImage2DMapping + }; + NNSG2dCharacterData * pCharacterData; + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE); + if (pFile != NULL) + { + if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharacterData)) + { + if (szByte != 0) + pCharacterData->szByte = szByte; + switch (type) + { + case NNS_G2D_VRAM_TYPE_2DMAIN: + pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK)); + break; + case NNS_G2D_VRAM_TYPE_2DSUB: + pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK)); + break; + default: + ; + } + load_funcs[layer](pCharacterData, baseAddr, type, pImageProxy); + } + FreeToHeap(pFile); + } +} + +THUMB_FUNC void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); + if (pFile != NULL) + { + if (!NNS_G2dGetUnpackedBGCharacterData(pFile, ppCharData)) + { + FreeToHeap(pFile); + return NULL; + } + } + return pFile; +} + +THUMB_FUNC void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); + if (pFile != NULL) + { + if (!NNS_G2dGetUnpackedScreenData(pFile, ppScrData)) + { + FreeToHeap(pFile); + return NULL; + } + } + return pFile; +} + +THUMB_FUNC void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, FALSE); + if (pFile != NULL) + { + if (!NNS_G2dGetUnpackedPaletteData(pFile, ppPltData)) + { + FreeToHeap(pFile); + return NULL; + } + } + return pFile; +} + +THUMB_FUNC void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); + if (pFile != NULL) + { + if (!NNS_G2dGetUnpackedCellBank(pFile, ppCellBank)) + { + FreeToHeap(pFile); + return NULL; + } + } + return pFile; +} + +THUMB_FUNC void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id) +{ + void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE); + if (pFile != NULL) + { + if (!NNS_G2dGetUnpackedAnimBank(pFile, ppAnimBank)) + { + FreeToHeap(pFile); + return NULL; + } + } + return pFile; +} + +THUMB_FUNC void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id) +{ + return GfGfxLoader_LoadFromNarc(narcId, memberId, TRUE, heap_id, FALSE); +} + +THUMB_FUNC void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd) +{ + void * dest; + void * dest2; + if (isCompressed || allocAtEnd == TRUE) + { + u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo); + dest = AllocFromHeapAtEnd(heap_id, size); + } + else + { + u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo); + dest = AllocFromHeap(heap_id, size); + } + if (dest != NULL) + { + ReadWholeNarcMemberByIdPair(dest, narcId, memberNo); + if (isCompressed) + { + if (allocAtEnd == FALSE) + { + dest2 = AllocFromHeap(heap_id, (*(u32 *)dest) >> 8); + } + else + { + dest2 = AllocFromHeapAtEnd(heap_id, (*(u32 *)dest) >> 8); + } + if (dest2 != NULL) + { + MI_UncompressLZ8(dest, dest2); + FreeToHeap(dest); + } + dest = dest2; // UB: if dest2 is NULL, dest is never freed + } + } + return dest; +} + +THUMB_FUNC void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p) +{ + void * dest; + void * dest2; + *size_p = GetNarcMemberSizeByIdPair(narcId, memberNo); + if (isCompressed || allocAtEnd == TRUE) + { + dest = AllocFromHeapAtEnd(heap_id, *size_p); + } + else + { + dest = AllocFromHeap(heap_id, *size_p); + } + if (dest != NULL) + { + ReadWholeNarcMemberByIdPair(dest, narcId, memberNo); + if (isCompressed) + { + *size_p = (*(u32 *)dest) >> 8; + if (allocAtEnd == FALSE) + { + dest2 = AllocFromHeap(heap_id, *size_p); + } + else + { + dest2 = AllocFromHeapAtEnd(heap_id, *size_p); + } + if (dest2 != NULL) + { + MI_UncompressLZ8(dest, dest2); + FreeToHeap(dest); + } + dest = dest2; // UB: if dest2 is NULL, dest is never freed + } + } + return dest; +} diff --git a/arm9/src/gf_rtc.c b/arm9/src/gf_rtc.c index 02fa735f3..7162ce8a6 100644 --- a/arm9/src/gf_rtc.c +++ b/arm9/src/gf_rtc.c @@ -1,183 +1,183 @@ -#include "global.h" -#include "MI_memory.h" -#include "gf_rtc.h" -#include "RTC_convert.h" - -typedef struct GF_RTC_Work -{ - BOOL getDateTimeSuccess; - BOOL getDateTimeLock; - s32 getDateTimeSleep; - RTCResult getDateTimeErrorCode; - RTCDate date; // 10 - RTCTime time; // 20 - RTCDate date_async; // 2C - RTCTime time_async; // 3C -} GF_RTC_Work; - -GF_RTC_Work sGFRTCWork; - -#define MAX_SECONDS (3155759999ll) - -void GF_RTC_GetDateTime(GF_RTC_Work * work); - -THUMB_FUNC void GF_InitRTCWork(void) -{ - RTC_Init(); - __builtin__clear(&sGFRTCWork, sizeof(sGFRTCWork)); - sGFRTCWork.getDateTimeSuccess = FALSE; - sGFRTCWork.getDateTimeLock = FALSE; - sGFRTCWork.getDateTimeSleep = 0; - GF_RTC_GetDateTime(&sGFRTCWork); -} - -THUMB_FUNC void GF_RTC_UpdateOnFrame(void) -{ - if (!sGFRTCWork.getDateTimeLock) - { - if (++sGFRTCWork.getDateTimeSleep > 10) - { - sGFRTCWork.getDateTimeSleep = 0; - GF_RTC_GetDateTime(&sGFRTCWork); - } - } -} - -THUMB_FUNC void GF_RTC_GetDateTime_Callback(RTCResult result, void * data) -{ - GF_RTC_Work * work = (GF_RTC_Work *)data; - work->getDateTimeErrorCode = result; - GF_ASSERT(result == RTC_RESULT_SUCCESS); - work->getDateTimeSuccess = TRUE; - work->date = work->date_async; - work->time = work->time_async; - work->getDateTimeLock = FALSE; -} - -THUMB_FUNC void GF_RTC_GetDateTime(GF_RTC_Work * work) -{ - work->getDateTimeLock = TRUE; - RTCResult result = RTC_GetDateTimeAsync(&work->date_async, &work->time_async, GF_RTC_GetDateTime_Callback, work); - work->getDateTimeErrorCode = result; - GF_ASSERT(result == RTC_RESULT_SUCCESS); -} - -THUMB_FUNC void GF_RTC_CopyDateTime(RTCDate * date, RTCTime * time) -{ - GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); - *date = sGFRTCWork.date; - *time = sGFRTCWork.time; -} - -THUMB_FUNC void GF_RTC_CopyTime(RTCTime * time) -{ - GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); - *time = sGFRTCWork.time; -} - -THUMB_FUNC void GF_RTC_CopyDate(RTCDate * date) -{ - GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); - *date = sGFRTCWork.date; -} - -THUMB_FUNC s32 GF_RTC_TimeToSec(void) -{ - RTCTime* time = &sGFRTCWork.time; - return 60 * time->minute + 3600 * time->hour + time->second; -} - -THUMB_FUNC s64 GF_RTC_DateTimeToSec(void) -{ - return RTC_ConvertDateTimeToSecond(&sGFRTCWork.date, &sGFRTCWork.time); -} - -static inline BOOL IsLeapYear(s32 year) -{ - return ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0); -} - -THUMB_FUNC s32 GF_RTC_GetDayOfYear(const RTCDate * date) -{ - RTCDate date_stack; - s32 days; - static const u16 sGF_DaysPerMonth[] = { - 0, // Jan - 31, // Feb - 59, // Mar - 90, // Apr - 120, // May - 151, // Jun - 181, // Jul - 212, // Aug - 243, // Sep - 273, // Oct - 304, // Nov - 334, // Dec - }; - - days = date->day; - days += sGF_DaysPerMonth[date->month - 1]; - if (date->month >= RTC_MONTH_MARCH && IsLeapYear(date->year)) - days++; - date_stack = *date; - date_stack.month = RTC_MONTH_JANUARY; - date_stack.day = 1; - RTC_ConvertDateToDay(&date_stack); - RTC_ConvertDateToDay(date); - return days; -} - -enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void); -enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour); - -THUMB_FUNC BOOL IsNighttime(void) -{ - switch (GF_RTC_GetTimeOfDay()) - { - case RTC_TIMEOFDAY_NITE: - case RTC_TIMEOFDAY_LATE: - return TRUE; - default: - return FALSE; - } -} - -THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void) -{ - RTCTime time; - GF_RTC_CopyTime(&time); - return GF_RTC_GetTimeOfDayByHour(time.hour); -} - -THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour) -{ - static const u8 sTimeOfDayByHour[] = { - // 00:00 - 03:59 - RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, - // 04:00 - 09:59 - RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, - // 10:00 - 16:59 - RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, - // 17:00 - 19:59 - RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, - // 20:00 - 23:59 - RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, - }; - - GF_ASSERT(hour >= 0 && hour < 24); - return sTimeOfDayByHour[hour]; -} - -THUMB_FUNC s64 GF_RTC_TimeDelta(s64 first, s64 last) -{ - RTCDate maxDate = { 99, 12, 31, 0 }; - RTCTime maxTime = { 23, 59, 59 }; - - s64 check = RTC_ConvertDateTimeToSecond(&maxDate, &maxTime); - GF_ASSERT(check == MAX_SECONDS); - if (first < last) - return last - first; - else - return last + (MAX_SECONDS - first); -} +#include "global.h" +#include "MI_memory.h" +#include "gf_rtc.h" +#include "RTC_convert.h" + +typedef struct GF_RTC_Work +{ + BOOL getDateTimeSuccess; + BOOL getDateTimeLock; + s32 getDateTimeSleep; + RTCResult getDateTimeErrorCode; + RTCDate date; // 10 + RTCTime time; // 20 + RTCDate date_async; // 2C + RTCTime time_async; // 3C +} GF_RTC_Work; + +GF_RTC_Work sGFRTCWork; + +#define MAX_SECONDS (3155759999ll) + +void GF_RTC_GetDateTime(GF_RTC_Work * work); + +THUMB_FUNC void GF_InitRTCWork(void) +{ + RTC_Init(); + __builtin__clear(&sGFRTCWork, sizeof(sGFRTCWork)); + sGFRTCWork.getDateTimeSuccess = FALSE; + sGFRTCWork.getDateTimeLock = FALSE; + sGFRTCWork.getDateTimeSleep = 0; + GF_RTC_GetDateTime(&sGFRTCWork); +} + +THUMB_FUNC void GF_RTC_UpdateOnFrame(void) +{ + if (!sGFRTCWork.getDateTimeLock) + { + if (++sGFRTCWork.getDateTimeSleep > 10) + { + sGFRTCWork.getDateTimeSleep = 0; + GF_RTC_GetDateTime(&sGFRTCWork); + } + } +} + +THUMB_FUNC void GF_RTC_GetDateTime_Callback(RTCResult result, void * data) +{ + GF_RTC_Work * work = (GF_RTC_Work *)data; + work->getDateTimeErrorCode = result; + GF_ASSERT(result == RTC_RESULT_SUCCESS); + work->getDateTimeSuccess = TRUE; + work->date = work->date_async; + work->time = work->time_async; + work->getDateTimeLock = FALSE; +} + +THUMB_FUNC void GF_RTC_GetDateTime(GF_RTC_Work * work) +{ + work->getDateTimeLock = TRUE; + RTCResult result = RTC_GetDateTimeAsync(&work->date_async, &work->time_async, GF_RTC_GetDateTime_Callback, work); + work->getDateTimeErrorCode = result; + GF_ASSERT(result == RTC_RESULT_SUCCESS); +} + +THUMB_FUNC void GF_RTC_CopyDateTime(RTCDate * date, RTCTime * time) +{ + GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); + *date = sGFRTCWork.date; + *time = sGFRTCWork.time; +} + +THUMB_FUNC void GF_RTC_CopyTime(RTCTime * time) +{ + GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); + *time = sGFRTCWork.time; +} + +THUMB_FUNC void GF_RTC_CopyDate(RTCDate * date) +{ + GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE); + *date = sGFRTCWork.date; +} + +THUMB_FUNC s32 GF_RTC_TimeToSec(void) +{ + RTCTime* time = &sGFRTCWork.time; + return 60 * time->minute + 3600 * time->hour + time->second; +} + +THUMB_FUNC s64 GF_RTC_DateTimeToSec(void) +{ + return RTC_ConvertDateTimeToSecond(&sGFRTCWork.date, &sGFRTCWork.time); +} + +static inline BOOL IsLeapYear(s32 year) +{ + return ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0); +} + +THUMB_FUNC s32 GF_RTC_GetDayOfYear(const RTCDate * date) +{ + RTCDate date_stack; + s32 days; + static const u16 sGF_DaysPerMonth[] = { + 0, // Jan + 31, // Feb + 59, // Mar + 90, // Apr + 120, // May + 151, // Jun + 181, // Jul + 212, // Aug + 243, // Sep + 273, // Oct + 304, // Nov + 334, // Dec + }; + + days = date->day; + days += sGF_DaysPerMonth[date->month - 1]; + if (date->month >= RTC_MONTH_MARCH && IsLeapYear(date->year)) + days++; + date_stack = *date; + date_stack.month = RTC_MONTH_JANUARY; + date_stack.day = 1; + RTC_ConvertDateToDay(&date_stack); + RTC_ConvertDateToDay(date); + return days; +} + +enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void); +enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour); + +THUMB_FUNC BOOL IsNighttime(void) +{ + switch (GF_RTC_GetTimeOfDay()) + { + case RTC_TIMEOFDAY_NITE: + case RTC_TIMEOFDAY_LATE: + return TRUE; + default: + return FALSE; + } +} + +THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void) +{ + RTCTime time; + GF_RTC_CopyTime(&time); + return GF_RTC_GetTimeOfDayByHour(time.hour); +} + +THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour) +{ + static const u8 sTimeOfDayByHour[] = { + // 00:00 - 03:59 + RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, + // 04:00 - 09:59 + RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, + // 10:00 - 16:59 + RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, + // 17:00 - 19:59 + RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, + // 20:00 - 23:59 + RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, + }; + + GF_ASSERT(hour >= 0 && hour < 24); + return sTimeOfDayByHour[hour]; +} + +THUMB_FUNC s64 GF_RTC_TimeDelta(s64 first, s64 last) +{ + RTCDate maxDate = { 99, 12, 31, 0 }; + RTCTime maxTime = { 23, 59, 59 }; + + s64 check = RTC_ConvertDateTimeToSecond(&maxDate, &maxTime); + GF_ASSERT(check == MAX_SECONDS); + if (first < last) + return last - first; + else + return last + (MAX_SECONDS - first); +} diff --git a/arm9/src/rs_migrate_string.c b/arm9/src/rs_migrate_string.c index 467523743..a5ef806a4 100644 --- a/arm9/src/rs_migrate_string.c +++ b/arm9/src/rs_migrate_string.c @@ -1,327 +1,327 @@ -#include "global.h" -#include "string_util.h" -#include "rs_migrate_string.h" - -static const u16 conversion_table[][2] = { - {0x0001, 0x01DE}, // - {0x0003, 0x0003}, // あ - {0x0005, 0x0005}, // い - {0x0007, 0x0007}, // う - {0x0009, 0x0009}, // え - {0x000B, 0x000B}, // お - {0x000C, 0x000C}, // か - {0x000E, 0x000E}, // き - {0x0010, 0x0010}, // く - {0x0012, 0x0012}, // け - {0x0014, 0x0014}, // こ - {0x0016, 0x0016}, // さ - {0x0018, 0x0018}, // し - {0x001A, 0x001A}, // す - {0x001C, 0x001C}, // せ - {0x001E, 0x001E}, // そ - {0x0020, 0x0020}, // た - {0x0022, 0x0022}, // ち - {0x0025, 0x0025}, // つ - {0x0027, 0x0027}, // て - {0x0029, 0x0029}, // と - {0x002B, 0x002B}, // な - {0x002C, 0x002C}, // に - {0x002D, 0x002D}, // ぬ - {0x002E, 0x002E}, // ね - {0x002F, 0x002F}, // の - {0x0030, 0x0030}, // は - {0x0033, 0x0033}, // ひ - {0x0036, 0x0036}, // ふ - {0x0039, 0x0039}, // へ - {0x003C, 0x003C}, // ほ - {0x003F, 0x003F}, // ま - {0x0040, 0x0040}, // み - {0x0041, 0x0041}, // む - {0x0042, 0x0042}, // め - {0x0043, 0x0043}, // も - {0x0045, 0x0045}, // や - {0x0047, 0x0047}, // ゆ - {0x0049, 0x0049}, // よ - {0x004A, 0x004A}, // ら - {0x004B, 0x004B}, // り - {0x004C, 0x004C}, // る - {0x004D, 0x004D}, // れ - {0x004E, 0x004E}, // ろ - {0x004F, 0x004F}, // わ - {0x0050, 0x0050}, // を - {0x0051, 0x0051}, // ん - {0x0002, 0x0002}, // ぁ - {0x0004, 0x0004}, // ぃ - {0x0006, 0x0006}, // ぅ - {0x0008, 0x0008}, // ぇ - {0x000A, 0x000A}, // ぉ - {0x0044, 0x0044}, // ゃ - {0x0046, 0x0046}, // ゅ - {0x0048, 0x0048}, // ょ - {0x000D, 0x000D}, // が - {0x000F, 0x000F}, // ぎ - {0x0011, 0x0011}, // ぐ - {0x0013, 0x0013}, // げ - {0x0015, 0x0015}, // ご - {0x0017, 0x0017}, // ざ - {0x0019, 0x0019}, // じ - {0x001B, 0x001B}, // ず - {0x001D, 0x001D}, // ぜ - {0x001F, 0x001F}, // ぞ - {0x0021, 0x0021}, // だ - {0x0023, 0x0023}, // ぢ - {0x0026, 0x0026}, // づ - {0x0028, 0x0028}, // で - {0x002A, 0x002A}, // ど - {0x0031, 0x0031}, // ば - {0x0034, 0x0034}, // び - {0x0037, 0x0037}, // ぶ - {0x003A, 0x003A}, // べ - {0x003D, 0x003D}, // ぼ - {0x0032, 0x0032}, // ぱ - {0x0035, 0x0035}, // ぴ - {0x0038, 0x0038}, // ぷ - {0x003B, 0x003B}, // ぺ - {0x003E, 0x003E}, // ぽ - {0x0024, 0x0024}, // っ - {0x0053, 0x0053}, // ア - {0x0055, 0x0055}, // イ - {0x0057, 0x0057}, // ウ - {0x0059, 0x0059}, // エ - {0x005B, 0x005B}, // オ - {0x005C, 0x005C}, // カ - {0x005E, 0x005E}, // キ - {0x0060, 0x0060}, // ク - {0x0062, 0x0062}, // ケ - {0x0064, 0x0064}, // コ - {0x0066, 0x0066}, // サ - {0x0068, 0x0068}, // シ - {0x006A, 0x006A}, // ス - {0x006C, 0x006C}, // セ - {0x006E, 0x006E}, // ソ - {0x0070, 0x0070}, // タ - {0x0072, 0x0072}, // チ - {0x0075, 0x0075}, // ツ - {0x0077, 0x0077}, // テ - {0x0079, 0x0079}, // ト - {0x007B, 0x007B}, // ナ - {0x007C, 0x007C}, // ニ - {0x007D, 0x007D}, // ヌ - {0x007E, 0x007E}, // ネ - {0x007F, 0x007F}, // ノ - {0x0080, 0x0080}, // ハ - {0x0083, 0x0083}, // ヒ - {0x0086, 0x0086}, // フ - {0x0089, 0x0089}, // ヘ - {0x008C, 0x008C}, // ホ - {0x008F, 0x008F}, // マ - {0x0090, 0x0090}, // ミ - {0x0091, 0x0091}, // ム - {0x0092, 0x0092}, // メ - {0x0093, 0x0093}, // モ - {0x0095, 0x0095}, // ヤ - {0x0097, 0x0097}, // ユ - {0x0099, 0x0099}, // ヨ - {0x009A, 0x009A}, // ラ - {0x009B, 0x009B}, // リ - {0x009C, 0x009C}, // ル - {0x009D, 0x009D}, // レ - {0x009E, 0x009E}, // ロ - {0x009F, 0x009F}, // ワ - {0x00A0, 0x00A0}, // ヲ - {0x00A1, 0x00A1}, // ン - {0x0052, 0x0052}, // ァ - {0x0054, 0x0054}, // ィ - {0x0056, 0x0056}, // ゥ - {0x0058, 0x0058}, // ェ - {0x005A, 0x005A}, // ォ - {0x0094, 0x0094}, // ャ - {0x0096, 0x0096}, // ュ - {0x0098, 0x0098}, // ョ - {0x005D, 0x005D}, // ガ - {0x005F, 0x005F}, // ギ - {0x0061, 0x0061}, // グ - {0x0063, 0x0063}, // ゲ - {0x0065, 0x0065}, // ゴ - {0x0067, 0x0067}, // ザ - {0x0069, 0x0069}, // ジ - {0x006B, 0x006B}, // ズ - {0x006D, 0x006D}, // ゼ - {0x006F, 0x006F}, // ゾ - {0x0071, 0x0071}, // ダ - {0x0073, 0x0073}, // ヂ - {0x0076, 0x0076}, // ヅ - {0x0078, 0x0078}, // デ - {0x007A, 0x007A}, // ド - {0x0081, 0x0081}, // バ - {0x0084, 0x0084}, // ビ - {0x0087, 0x0087}, // ブ - {0x008A, 0x008A}, // ベ - {0x008D, 0x008D}, // ボ - {0x0082, 0x0082}, // パ - {0x0085, 0x0085}, // ピ - {0x0088, 0x0088}, // プ - {0x008B, 0x008B}, // ペ - {0x008E, 0x008E}, // ポ - {0x0074, 0x0074}, // ッ - {0x00A2, 0x0121}, // 0 - {0x00A3, 0x0122}, // 1 - {0x00A4, 0x0123}, // 2 - {0x00A5, 0x0124}, // 3 - {0x00A6, 0x0125}, // 4 - {0x00A7, 0x0126}, // 5 - {0x00A8, 0x0127}, // 6 - {0x00A9, 0x0128}, // 7 - {0x00AA, 0x0129}, // 8 - {0x00AB, 0x012A}, // 9 - {0x00E1, 0x01AB}, // ! - {0x00E2, 0x01AC}, // ? - {0x00E4, 0x01AE}, // . - {0x00F1, 0x01BE}, // - - {0x00E6, 0x01B0}, // · - {0x00E5, 0x01AF}, // … - {0x00EA, 0x00EA}, // “ - {0x00EB, 0x00EB}, // ” - {0x00E8, 0x01B2}, // ‘ - {0x00E9, 0x01B3}, // ' - {0x00EE, 0x01BB}, // ♂ - {0x00EF, 0x01BC}, // ♀ - {0x0112, 0x0112}, // ¥ - {0x00E3, 0x01AD}, // , - {0x00F2, 0x0176}, // × - {0x00E7, 0x01B1}, // / - {0x00AC, 0x012B}, // A - {0x00AD, 0x012C}, // B - {0x00AE, 0x012D}, // C - {0x00AF, 0x012E}, // D - {0x00B0, 0x012F}, // E - {0x00B1, 0x0130}, // F - {0x00B2, 0x0131}, // G - {0x00B3, 0x0132}, // H - {0x00B4, 0x0133}, // I - {0x00B5, 0x0134}, // J - {0x00B6, 0x0135}, // K - {0x00B7, 0x0136}, // L - {0x00B8, 0x0137}, // M - {0x00B9, 0x0138}, // N - {0x00BA, 0x0139}, // O - {0x00BB, 0x013A}, // P - {0x00BC, 0x013B}, // Q - {0x00BD, 0x013C}, // R - {0x00BE, 0x013D}, // S - {0x00BF, 0x013E}, // T - {0x00C0, 0x013F}, // U - {0x00C1, 0x0140}, // V - {0x00C2, 0x0141}, // W - {0x00C3, 0x0142}, // X - {0x00C4, 0x0143}, // Y - {0x00C5, 0x0144}, // Z - {0x00C6, 0x0145}, // a - {0x00C7, 0x0146}, // b - {0x00C8, 0x0147}, // c - {0x00C9, 0x0148}, // d - {0x00CA, 0x0149}, // e - {0x00CB, 0x014A}, // f - {0x00CC, 0x014B}, // g - {0x00CD, 0x014C}, // h - {0x00CE, 0x014D}, // i - {0x00CF, 0x014E}, // j - {0x00D0, 0x014F}, // k - {0x00D1, 0x0150}, // l - {0x00D2, 0x0151}, // m - {0x00D3, 0x0152}, // n - {0x00D4, 0x0153}, // o - {0x00D5, 0x0154}, // p - {0x00D6, 0x0155}, // q - {0x00D7, 0x0156}, // r - {0x00D8, 0x0157}, // s - {0x00D9, 0x0158}, // t - {0x00DA, 0x0159}, // u - {0x00DB, 0x015A}, // v - {0x00DC, 0x015B}, // w - {0x00DD, 0x015C}, // x - {0x00DE, 0x015D}, // y - {0x00DF, 0x015E}, // z - {0x011F, 0x011F}, // ▶ - {0x00F6, 0x01C4}, // : - {0x0163, 0x0163}, // Ä - {0x0175, 0x0175}, // Ö - {0x017B, 0x017B}, // Ü - {0x0183, 0x0183}, // ä - {0x0195, 0x0195}, // ö - {0x019B, 0x019B}, // ü -}; - -static THUMB_FUNC u16 GetOpeningQuote(u32 language) -{ - switch (language) - { - default: - return 0xEA; - case LANGUAGE_ENGLISH: - case LANGUAGE_ITALIAN: - case LANGUAGE_SPANISH: - return 0x1B4; - case LANGUAGE_FRENCH: - return 0x1B7; - case LANGUAGE_GERMAN: - return 0x1B6; - } -} - -static THUMB_FUNC u16 GetClosingQuote(u32 language) -{ - switch (language) - { - default: - return 0xEB; - case LANGUAGE_ENGLISH: - case LANGUAGE_ITALIAN: - case LANGUAGE_SPANISH: - return 0x1B5; - case LANGUAGE_FRENCH: - return 0x1B8; - case LANGUAGE_GERMAN: - return 0x1B4; - } -} - -THUMB_FUNC BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language) -{ - BOOL notFullWidth; - u32 i; - - notFullWidth = (language != LANGUAGE_JAPANESE); - for (i = 0; i < length - 1; i++) - { - if (rs_str[i] == 0xFF) // RS: EOS - break; - if (rs_str[i] >= 0xF7) // RS: DYNAMIC - { - // If we're here, the provided name is corrupt. - // Fill it with question marks. - s32 r3 = (s32)((length - 1) < 10 ? (length - 1) : 10); - s32 r1; - for (r1 = 0; r1 < r3; r1++) - { - dp_str[r1] = 0x1AC; // DP: ? - } - dp_str[r1] = EOS; - return FALSE; - } - switch (conversion_table[rs_str[i]][notFullWidth]) - { - case 0xEA: // RS: Opening double quote - dp_str[i] = GetOpeningQuote(language); - break; - case 0xEB: // RS: Closing double quote - dp_str[i] = GetClosingQuote(language); - break; - default: - dp_str[i] = conversion_table[rs_str[i]][notFullWidth]; - break; - } - } - dp_str[i] = EOS; - return TRUE; -} +#include "global.h" +#include "string_util.h" +#include "rs_migrate_string.h" + +static const u16 conversion_table[][2] = { + {0x0001, 0x01DE}, // + {0x0003, 0x0003}, // あ + {0x0005, 0x0005}, // い + {0x0007, 0x0007}, // う + {0x0009, 0x0009}, // え + {0x000B, 0x000B}, // お + {0x000C, 0x000C}, // か + {0x000E, 0x000E}, // き + {0x0010, 0x0010}, // く + {0x0012, 0x0012}, // け + {0x0014, 0x0014}, // こ + {0x0016, 0x0016}, // さ + {0x0018, 0x0018}, // し + {0x001A, 0x001A}, // す + {0x001C, 0x001C}, // せ + {0x001E, 0x001E}, // そ + {0x0020, 0x0020}, // た + {0x0022, 0x0022}, // ち + {0x0025, 0x0025}, // つ + {0x0027, 0x0027}, // て + {0x0029, 0x0029}, // と + {0x002B, 0x002B}, // な + {0x002C, 0x002C}, // に + {0x002D, 0x002D}, // ぬ + {0x002E, 0x002E}, // ね + {0x002F, 0x002F}, // の + {0x0030, 0x0030}, // は + {0x0033, 0x0033}, // ひ + {0x0036, 0x0036}, // ふ + {0x0039, 0x0039}, // へ + {0x003C, 0x003C}, // ほ + {0x003F, 0x003F}, // ま + {0x0040, 0x0040}, // み + {0x0041, 0x0041}, // む + {0x0042, 0x0042}, // め + {0x0043, 0x0043}, // も + {0x0045, 0x0045}, // や + {0x0047, 0x0047}, // ゆ + {0x0049, 0x0049}, // よ + {0x004A, 0x004A}, // ら + {0x004B, 0x004B}, // り + {0x004C, 0x004C}, // る + {0x004D, 0x004D}, // れ + {0x004E, 0x004E}, // ろ + {0x004F, 0x004F}, // わ + {0x0050, 0x0050}, // を + {0x0051, 0x0051}, // ん + {0x0002, 0x0002}, // ぁ + {0x0004, 0x0004}, // ぃ + {0x0006, 0x0006}, // ぅ + {0x0008, 0x0008}, // ぇ + {0x000A, 0x000A}, // ぉ + {0x0044, 0x0044}, // ゃ + {0x0046, 0x0046}, // ゅ + {0x0048, 0x0048}, // ょ + {0x000D, 0x000D}, // が + {0x000F, 0x000F}, // ぎ + {0x0011, 0x0011}, // ぐ + {0x0013, 0x0013}, // げ + {0x0015, 0x0015}, // ご + {0x0017, 0x0017}, // ざ + {0x0019, 0x0019}, // じ + {0x001B, 0x001B}, // ず + {0x001D, 0x001D}, // ぜ + {0x001F, 0x001F}, // ぞ + {0x0021, 0x0021}, // だ + {0x0023, 0x0023}, // ぢ + {0x0026, 0x0026}, // づ + {0x0028, 0x0028}, // で + {0x002A, 0x002A}, // ど + {0x0031, 0x0031}, // ば + {0x0034, 0x0034}, // び + {0x0037, 0x0037}, // ぶ + {0x003A, 0x003A}, // べ + {0x003D, 0x003D}, // ぼ + {0x0032, 0x0032}, // ぱ + {0x0035, 0x0035}, // ぴ + {0x0038, 0x0038}, // ぷ + {0x003B, 0x003B}, // ぺ + {0x003E, 0x003E}, // ぽ + {0x0024, 0x0024}, // っ + {0x0053, 0x0053}, // ア + {0x0055, 0x0055}, // イ + {0x0057, 0x0057}, // ウ + {0x0059, 0x0059}, // エ + {0x005B, 0x005B}, // オ + {0x005C, 0x005C}, // カ + {0x005E, 0x005E}, // キ + {0x0060, 0x0060}, // ク + {0x0062, 0x0062}, // ケ + {0x0064, 0x0064}, // コ + {0x0066, 0x0066}, // サ + {0x0068, 0x0068}, // シ + {0x006A, 0x006A}, // ス + {0x006C, 0x006C}, // セ + {0x006E, 0x006E}, // ソ + {0x0070, 0x0070}, // タ + {0x0072, 0x0072}, // チ + {0x0075, 0x0075}, // ツ + {0x0077, 0x0077}, // テ + {0x0079, 0x0079}, // ト + {0x007B, 0x007B}, // ナ + {0x007C, 0x007C}, // ニ + {0x007D, 0x007D}, // ヌ + {0x007E, 0x007E}, // ネ + {0x007F, 0x007F}, // ノ + {0x0080, 0x0080}, // ハ + {0x0083, 0x0083}, // ヒ + {0x0086, 0x0086}, // フ + {0x0089, 0x0089}, // ヘ + {0x008C, 0x008C}, // ホ + {0x008F, 0x008F}, // マ + {0x0090, 0x0090}, // ミ + {0x0091, 0x0091}, // ム + {0x0092, 0x0092}, // メ + {0x0093, 0x0093}, // モ + {0x0095, 0x0095}, // ヤ + {0x0097, 0x0097}, // ユ + {0x0099, 0x0099}, // ヨ + {0x009A, 0x009A}, // ラ + {0x009B, 0x009B}, // リ + {0x009C, 0x009C}, // ル + {0x009D, 0x009D}, // レ + {0x009E, 0x009E}, // ロ + {0x009F, 0x009F}, // ワ + {0x00A0, 0x00A0}, // ヲ + {0x00A1, 0x00A1}, // ン + {0x0052, 0x0052}, // ァ + {0x0054, 0x0054}, // ィ + {0x0056, 0x0056}, // ゥ + {0x0058, 0x0058}, // ェ + {0x005A, 0x005A}, // ォ + {0x0094, 0x0094}, // ャ + {0x0096, 0x0096}, // ュ + {0x0098, 0x0098}, // ョ + {0x005D, 0x005D}, // ガ + {0x005F, 0x005F}, // ギ + {0x0061, 0x0061}, // グ + {0x0063, 0x0063}, // ゲ + {0x0065, 0x0065}, // ゴ + {0x0067, 0x0067}, // ザ + {0x0069, 0x0069}, // ジ + {0x006B, 0x006B}, // ズ + {0x006D, 0x006D}, // ゼ + {0x006F, 0x006F}, // ゾ + {0x0071, 0x0071}, // ダ + {0x0073, 0x0073}, // ヂ + {0x0076, 0x0076}, // ヅ + {0x0078, 0x0078}, // デ + {0x007A, 0x007A}, // ド + {0x0081, 0x0081}, // バ + {0x0084, 0x0084}, // ビ + {0x0087, 0x0087}, // ブ + {0x008A, 0x008A}, // ベ + {0x008D, 0x008D}, // ボ + {0x0082, 0x0082}, // パ + {0x0085, 0x0085}, // ピ + {0x0088, 0x0088}, // プ + {0x008B, 0x008B}, // ペ + {0x008E, 0x008E}, // ポ + {0x0074, 0x0074}, // ッ + {0x00A2, 0x0121}, // 0 + {0x00A3, 0x0122}, // 1 + {0x00A4, 0x0123}, // 2 + {0x00A5, 0x0124}, // 3 + {0x00A6, 0x0125}, // 4 + {0x00A7, 0x0126}, // 5 + {0x00A8, 0x0127}, // 6 + {0x00A9, 0x0128}, // 7 + {0x00AA, 0x0129}, // 8 + {0x00AB, 0x012A}, // 9 + {0x00E1, 0x01AB}, // ! + {0x00E2, 0x01AC}, // ? + {0x00E4, 0x01AE}, // . + {0x00F1, 0x01BE}, // - + {0x00E6, 0x01B0}, // · + {0x00E5, 0x01AF}, // … + {0x00EA, 0x00EA}, // “ + {0x00EB, 0x00EB}, // ” + {0x00E8, 0x01B2}, // ‘ + {0x00E9, 0x01B3}, // ' + {0x00EE, 0x01BB}, // ♂ + {0x00EF, 0x01BC}, // ♀ + {0x0112, 0x0112}, // ¥ + {0x00E3, 0x01AD}, // , + {0x00F2, 0x0176}, // × + {0x00E7, 0x01B1}, // / + {0x00AC, 0x012B}, // A + {0x00AD, 0x012C}, // B + {0x00AE, 0x012D}, // C + {0x00AF, 0x012E}, // D + {0x00B0, 0x012F}, // E + {0x00B1, 0x0130}, // F + {0x00B2, 0x0131}, // G + {0x00B3, 0x0132}, // H + {0x00B4, 0x0133}, // I + {0x00B5, 0x0134}, // J + {0x00B6, 0x0135}, // K + {0x00B7, 0x0136}, // L + {0x00B8, 0x0137}, // M + {0x00B9, 0x0138}, // N + {0x00BA, 0x0139}, // O + {0x00BB, 0x013A}, // P + {0x00BC, 0x013B}, // Q + {0x00BD, 0x013C}, // R + {0x00BE, 0x013D}, // S + {0x00BF, 0x013E}, // T + {0x00C0, 0x013F}, // U + {0x00C1, 0x0140}, // V + {0x00C2, 0x0141}, // W + {0x00C3, 0x0142}, // X + {0x00C4, 0x0143}, // Y + {0x00C5, 0x0144}, // Z + {0x00C6, 0x0145}, // a + {0x00C7, 0x0146}, // b + {0x00C8, 0x0147}, // c + {0x00C9, 0x0148}, // d + {0x00CA, 0x0149}, // e + {0x00CB, 0x014A}, // f + {0x00CC, 0x014B}, // g + {0x00CD, 0x014C}, // h + {0x00CE, 0x014D}, // i + {0x00CF, 0x014E}, // j + {0x00D0, 0x014F}, // k + {0x00D1, 0x0150}, // l + {0x00D2, 0x0151}, // m + {0x00D3, 0x0152}, // n + {0x00D4, 0x0153}, // o + {0x00D5, 0x0154}, // p + {0x00D6, 0x0155}, // q + {0x00D7, 0x0156}, // r + {0x00D8, 0x0157}, // s + {0x00D9, 0x0158}, // t + {0x00DA, 0x0159}, // u + {0x00DB, 0x015A}, // v + {0x00DC, 0x015B}, // w + {0x00DD, 0x015C}, // x + {0x00DE, 0x015D}, // y + {0x00DF, 0x015E}, // z + {0x011F, 0x011F}, // ▶ + {0x00F6, 0x01C4}, // : + {0x0163, 0x0163}, // Ä + {0x0175, 0x0175}, // Ö + {0x017B, 0x017B}, // Ü + {0x0183, 0x0183}, // ä + {0x0195, 0x0195}, // ö + {0x019B, 0x019B}, // ü +}; + +static THUMB_FUNC u16 GetOpeningQuote(u32 language) +{ + switch (language) + { + default: + return 0xEA; + case LANGUAGE_ENGLISH: + case LANGUAGE_ITALIAN: + case LANGUAGE_SPANISH: + return 0x1B4; + case LANGUAGE_FRENCH: + return 0x1B7; + case LANGUAGE_GERMAN: + return 0x1B6; + } +} + +static THUMB_FUNC u16 GetClosingQuote(u32 language) +{ + switch (language) + { + default: + return 0xEB; + case LANGUAGE_ENGLISH: + case LANGUAGE_ITALIAN: + case LANGUAGE_SPANISH: + return 0x1B5; + case LANGUAGE_FRENCH: + return 0x1B8; + case LANGUAGE_GERMAN: + return 0x1B4; + } +} + +THUMB_FUNC BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language) +{ + BOOL notFullWidth; + u32 i; + + notFullWidth = (language != LANGUAGE_JAPANESE); + for (i = 0; i < length - 1; i++) + { + if (rs_str[i] == 0xFF) // RS: EOS + break; + if (rs_str[i] >= 0xF7) // RS: DYNAMIC + { + // If we're here, the provided name is corrupt. + // Fill it with question marks. + s32 r3 = (s32)((length - 1) < 10 ? (length - 1) : 10); + s32 r1; + for (r1 = 0; r1 < r3; r1++) + { + dp_str[r1] = 0x1AC; // DP: ? + } + dp_str[r1] = EOS; + return FALSE; + } + switch (conversion_table[rs_str[i]][notFullWidth]) + { + case 0xEA: // RS: Opening double quote + dp_str[i] = GetOpeningQuote(language); + break; + case 0xEB: // RS: Closing double quote + dp_str[i] = GetClosingQuote(language); + break; + default: + dp_str[i] = conversion_table[rs_str[i]][notFullWidth]; + break; + } + } + dp_str[i] = EOS; + return TRUE; +} diff --git a/arm9/src/sav_chatot.c b/arm9/src/sav_chatot.c index 86786e661..c7fa32bc7 100644 --- a/arm9/src/sav_chatot.c +++ b/arm9/src/sav_chatot.c @@ -1,98 +1,98 @@ -#include "global.h" -#include "MI_memory.h" -#include "heap.h" -#include "sav_chatot.h" - -THUMB_FUNC u32 Sav2_Chatot_sizeof(void) -{ - return sizeof(struct SaveChatotSoundClip); -} - -THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot) -{ - MI_CpuClear32(chatot, sizeof(struct SaveChatotSoundClip)); - chatot->exists = FALSE; -} - -THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id) -{ - struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip)); - Sav2_Chatot_init(ret); - return ret; -} - -THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2) -{ - return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22); -} - -THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot) -{ - return chatot->exists; -} - -THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot) -{ - chatot->exists = FALSE; -} - -THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot) -{ - return chatot->data; -} - -static inline s8 transform(u8 value) -{ - return (s8)(value - 8); -} - -THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data) -{ - s32 i; - s32 dest_i; - u8 val; - s8 val2; - - for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2) - { - val = (u8)(data[i] & 0xF); - val2 = transform(val); - dest[dest_i + 0] = (s8)(val2 << 4); - val = (u8)(data[i] >> 4); - val2 = transform(val); - dest[dest_i + 1] = (s8)(val2 << 4); - } -} - -static inline u8 untransform(s8 val) -{ - val /= 16; - return (u8)(val + 8); -} - -THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data) -{ - s32 src_i; - s32 i = 0; - u8 val2; - s8 val; - chatot->exists = TRUE; - - for (src_i = 0; src_i < 2000; src_i += 2) - { - val = data[src_i + 0]; - val2 = untransform(val); - chatot->data[i] = (s8)val2; - - val = data[src_i + 1]; - val2 = untransform(val); - chatot->data[i] |= val2 << 4; - - i++; - } -} - -THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src) -{ - MI_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip)); -} +#include "global.h" +#include "MI_memory.h" +#include "heap.h" +#include "sav_chatot.h" + +THUMB_FUNC u32 Sav2_Chatot_sizeof(void) +{ + return sizeof(struct SaveChatotSoundClip); +} + +THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot) +{ + MI_CpuClear32(chatot, sizeof(struct SaveChatotSoundClip)); + chatot->exists = FALSE; +} + +THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id) +{ + struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip)); + Sav2_Chatot_init(ret); + return ret; +} + +THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2) +{ + return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22); +} + +THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot) +{ + return chatot->exists; +} + +THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot) +{ + chatot->exists = FALSE; +} + +THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot) +{ + return chatot->data; +} + +static inline s8 transform(u8 value) +{ + return (s8)(value - 8); +} + +THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data) +{ + s32 i; + s32 dest_i; + u8 val; + s8 val2; + + for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2) + { + val = (u8)(data[i] & 0xF); + val2 = transform(val); + dest[dest_i + 0] = (s8)(val2 << 4); + val = (u8)(data[i] >> 4); + val2 = transform(val); + dest[dest_i + 1] = (s8)(val2 << 4); + } +} + +static inline u8 untransform(s8 val) +{ + val /= 16; + return (u8)(val + 8); +} + +THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data) +{ + s32 src_i; + s32 i = 0; + u8 val2; + s8 val; + chatot->exists = TRUE; + + for (src_i = 0; src_i < 2000; src_i += 2) + { + val = data[src_i + 0]; + val2 = untransform(val); + chatot->data[i] = (s8)val2; + + val = data[src_i + 1]; + val2 = untransform(val); + chatot->data[i] |= val2 << 4; + + i++; + } +} + +THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src) +{ + MI_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip)); +} diff --git a/arm9/src/scrcmd_mart.c b/arm9/src/scrcmd_mart.c index 785f7359d..b45b4c4d3 100644 --- a/arm9/src/scrcmd_mart.c +++ b/arm9/src/scrcmd_mart.c @@ -1,442 +1,442 @@ -#include "global.h" -#include "constants/items.h" -#include "constants/seal_constants.h" -#include "constants/decorations.h" -#include "scrcmd.h" -#include "module_06.h" - -extern void FUN_02038AD0(struct TaskManager *); - -static const u16 UNK_020F40A6[] = { - ITEM_AIR_MAIL, - ITEM_HEAL_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40A0[] = { - ITEM_STEEL_MAIL, - ITEM_LUXURY_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40B4[] = { - ITEM_TUNNEL_MAIL, - ITEM_HEAL_BALL, - ITEM_NET_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40AC[] = { - ITEM_BLOOM_MAIL, - ITEM_HEAL_BALL, - ITEM_NET_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40BC[] = { - ITEM_AIR_MAIL, - ITEM_HEAL_BALL, - ITEM_NET_BALL, - ITEM_NEST_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40F8[] = { - ITEM_HEART_MAIL, - ITEM_HEAL_BALL, - ITEM_NET_BALL, - ITEM_NEST_BALL, - 0xFFFF -}; - -static const u16 UNK_020F4102[] = { - ITEM_AIR_MAIL, - ITEM_QUICK_BALL, - ITEM_TIMER_BALL, - ITEM_REPEAT_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40DA[] = { - ITEM_AIR_MAIL, - ITEM_NET_BALL, - ITEM_NEST_BALL, - ITEM_DUSK_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40EE[] = { - ITEM_AIR_MAIL, - ITEM_DUSK_BALL, - ITEM_QUICK_BALL, - ITEM_TIMER_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40D0[] = { - ITEM_SNOW_MAIL, - ITEM_DUSK_BALL, - ITEM_QUICK_BALL, - ITEM_TIMER_BALL, - 0xFFFF -}; - -static const u16 UNK_020F40C6[] = { - ITEM_HEAL_POWDER, - ITEM_ENERGYPOWDER, - ITEM_ENERGY_ROOT, - ITEM_REVIVAL_HERB, - 0xFFFF -}; - -static const u16 UNK_020F40E4[] = { - ITEM_AIR_MAIL, - ITEM_NEST_BALL, - ITEM_DUSK_BALL, - ITEM_QUICK_BALL, - 0xFFFF -}; - -static const u16 UNK_020F410C[] = { - DECORATION_YELLOW_CUSHION, - DECORATION_CUPBOARD, - DECORATION_TV, - DECORATION_REFRIGERATOR, - DECORATION_PRETTY_SINK, - 0xFFFF -}; - -static const u16 UNK_020F4118[] = { - DECORATION_MUNCHLAX_DOLL, - DECORATION_BONSLY_DOLL, - DECORATION_MIME_JR__DOLL, - DECORATION_MANTYKE_DOLL, - DECORATION_BUIZEL_DOLL, - DECORATION_CHATOT_DOLL, - 0xFFFF -}; - -static const u16 UNK_020F4126[] = { - ITEM_PROTEIN, - ITEM_IRON, - ITEM_CALCIUM, - ITEM_ZINC, - ITEM_CARBOS, - ITEM_HP_UP, - 0xFFFF -}; - -static const u16 UNK_020F4134[] = { - ITEM_TM38, - ITEM_TM25, - ITEM_TM14, - ITEM_TM22, - ITEM_TM52, - ITEM_TM15, - 0xFFFF -}; - -static const u16 UNK_020F41B2[] = { - SEAL_STAR_A, - SEAL_A, - SEAL_FIRE_A, - SEAL_SONG_A, - SEAL_LINE_B, - SEAL_ELE_B, - SEAL_PARTY_D, - 0xFFFF -}; - -static const u16 UNK_020F4142[] = { - SEAL_HEART_B, - SEAL_STAR_C, - SEAL_FIRE_C, - SEAL_FLORA_B, - SEAL_SONG_C, - SEAL_SMOKE_A, - SEAL_ELE_D, - 0xFFFF -}; - -static const u16 UNK_020F4152[] = { - SEAL_FOAMY_D, - SEAL_PARTY_C, - SEAL_FLORA_F, - SEAL_SONG_G, - SEAL_HEART_F, - SEAL_LINE_A, - SEAL_ELE_A, - 0xFFFF -}; - -static const u16 UNK_020F4162[] = { - SEAL_HEART_C, - SEAL_STAR_D, - SEAL_FIRE_D, - SEAL_FLORA_C, - SEAL_SONG_D, - SEAL_SMOKE_B, - SEAL_FOAMY_A, - 0xFFFF -}; - -static const u16 UNK_020F4172[] = { - SEAL_HEART_D, - SEAL_FOAMY_B, - SEAL_PARTY_A, - SEAL_FLORA_D, - SEAL_SONG_E, - SEAL_STAR_E, - SEAL_SMOKE_C, - 0xFFFF -}; - -static const u16 UNK_020F4182[] = { - ITEM_TM83, - ITEM_TM17, - ITEM_TM54, - ITEM_TM20, - ITEM_TM33, - ITEM_TM16, - ITEM_TM70, - 0xFFFF -}; - -static const u16 UNK_020F4192[] = { - SEAL_HEART_A, - SEAL_STAR_B, - SEAL_FIRE_B, - SEAL_SONG_B, - SEAL_LINE_C, - SEAL_ELE_C, - SEAL_FLORA_A, - 0xFFFF -}; - -static const u16 UNK_020F41A2[] = { - SEAL_FOAMY_C, - SEAL_PARTY_B, - SEAL_FLORA_E, - SEAL_SONG_F, - SEAL_HEART_E, - SEAL_STAR_F, - SEAL_SMOKE_D, - 0xFFFF -}; - -static const u16 UNK_020F41D4[] = { - ITEM_X_SPEED, - ITEM_X_ATTACK, - ITEM_X_DEFENSE, - ITEM_GUARD_SPEC_, - ITEM_DIRE_HIT, - ITEM_X_ACCURACY, - ITEM_X_SPECIAL, - ITEM_X_SP__DEF, - 0xFFFF -}; - -static const u16 UNK_020F41C2[] = { - ITEM_HEAL_BALL, - ITEM_NET_BALL, - ITEM_NEST_BALL, - ITEM_DUSK_BALL, - ITEM_QUICK_BALL, - ITEM_TIMER_BALL, - ITEM_REPEAT_BALL, - ITEM_LUXURY_BALL, - 0xFFFF -}; - -static const u16 UNK_020F41E6[] = { - ITEM_POTION, - ITEM_SUPER_POTION, - ITEM_HYPER_POTION, - ITEM_MAX_POTION, - ITEM_REVIVE, - ITEM_ANTIDOTE, - ITEM_PARLYZ_HEAL, - ITEM_BURN_HEAL, - ITEM_ICE_HEAL, - ITEM_AWAKENING, - ITEM_FULL_HEAL, - 0xFFFF -}; - -static const u16 UNK_020F41FE[] = { - ITEM_POKE_BALL, - ITEM_GREAT_BALL, - ITEM_ULTRA_BALL, - ITEM_ESCAPE_ROPE, - ITEM_POKE_DOLL, - ITEM_REPEL, - ITEM_SUPER_REPEL, - ITEM_MAX_REPEL, - ITEM_GRASS_MAIL, - ITEM_FLAME_MAIL, - ITEM_BUBBLE_MAIL, - ITEM_SPACE_MAIL, - 0xFFFF -}; - -static const u16 sNormalMartBadgeThresholds[][2] = { - // Balls - {ITEM_POKE_BALL, 1}, - {ITEM_GREAT_BALL, 3}, - {ITEM_ULTRA_BALL, 4}, - // Potions - {ITEM_POTION, 1}, - {ITEM_SUPER_POTION, 2}, - {ITEM_HYPER_POTION, 4}, - {ITEM_MAX_POTION, 5}, - {ITEM_FULL_RESTORE, 6}, - // Revives - {ITEM_REVIVE, 3}, - // Status heal - {ITEM_ANTIDOTE, 1}, - {ITEM_PARLYZ_HEAL, 1}, - {ITEM_AWAKENING, 2}, - {ITEM_BURN_HEAL, 2}, - {ITEM_ICE_HEAL, 2}, - {ITEM_FULL_HEAL, 4}, - // Dungeon items - {ITEM_ESCAPE_ROPE, 2}, - // Repels - {ITEM_REPEL, 2}, - {ITEM_SUPER_REPEL, 3}, - {ITEM_MAX_REPEL, 4}, -}; - -const u16 *sDecorationMartPointers[] = { - UNK_020F410C, - UNK_020F4118, -}; - -const u16 *sSpecialMartPointers[] = { - UNK_020F40A6, - UNK_020F40B4, - UNK_020F40AC, - UNK_020F40BC, - UNK_020F40C6, - UNK_020F40F8, - UNK_020F40DA, - UNK_020F40E4, - UNK_020F41E6, - UNK_020F41FE, - UNK_020F41D4, - UNK_020F4126, - UNK_020F4182, - UNK_020F4134, - UNK_020F40EE, - UNK_020F40D0, - UNK_020F4102, - UNK_020F40A0, - UNK_020F41C2, -}; - -const u16 *sSealsMartPointers[] = { - UNK_020F4192, - UNK_020F4142, - UNK_020F4162, - UNK_020F4172, - UNK_020F41A2, - UNK_020F4152, - UNK_020F41B2, -}; - -THUMB_FUNC BOOL ScrCmd_NormalMart(struct ScriptContext * ctx) //0147 - todo: Pokemart? -{ - u16 whichMart = ScriptGetVar(ctx); - s32 param; - u16 martItems[64]; - u8 martIdx = 0; - u8 badgeCount = 0; - u8 i; - - for (i = 0; i < 8; i++) - { - if (PlayerProfile_TestBadgeFlag(Sav2_PlayerData_GetProfileAddr(ctx->fieldSystem->saveBlock2), i) == TRUE) - badgeCount++; - } - switch (badgeCount) - { - case 0: - param = 1; - break; - case 1: - case 2: - param = 2; - break; - case 3: - case 4: - param = 3; - break; - case 5: - case 6: - param = 4; - break; - case 7: - param = 5; - break; - case 8: - param = 6; - break; - default: - param = 1; - break; - } - for (i = 0; i < NELEMS(sNormalMartBadgeThresholds); i++) - { - if (param >= sNormalMartBadgeThresholds[i][1]) - { - martItems[martIdx] = sNormalMartBadgeThresholds[i][0]; - martIdx++; - } - } - martItems[martIdx] = 0xFFFF; // terminator - MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, martItems, MART_ITEMS, 0); - return TRUE; -} - -THUMB_FUNC BOOL ScrCmd_SpecialMart(struct ScriptContext * ctx) //0148 -{ - u16 whichMart = ScriptGetVar(ctx); - u32 sp0; - - // Fakematch? - if ((u16)(whichMart + (u16)(-8u)) <= 5) - sp0 = 1; - else - sp0 = 0; - - MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSpecialMartPointers[whichMart], MART_ITEMS, sp0); - return TRUE; -} - -THUMB_FUNC BOOL ScrCmd_GoodsMart(struct ScriptContext * ctx) //0149 -{ - u16 whichMart = ScriptGetVar(ctx); - u32 sp0; - - if (whichMart <= 1) - sp0 = 1; - else - sp0 = 0; - - MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sDecorationMartPointers[whichMart], MART_DECORATIONS, sp0); - return TRUE; -} - -THUMB_FUNC BOOL ScrCmd_SealsMart(struct ScriptContext * ctx) //014A -{ - u16 whichMart = ScriptGetVar(ctx); - - MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSealsMartPointers[whichMart], MART_SEALS, 0); - return TRUE; -} - -THUMB_FUNC BOOL ScrCmd_AccessoriesShop(struct ScriptContext * ctx) //0257 - todo: Unsure if this is correct, SDSME has it as SprtSave? -{ - FUN_02038AD0(ctx->fieldSystem->taskManager); - return TRUE; -} +#include "global.h" +#include "constants/items.h" +#include "constants/seal_constants.h" +#include "constants/decorations.h" +#include "scrcmd.h" +#include "module_06.h" + +extern void FUN_02038AD0(struct TaskManager *); + +static const u16 UNK_020F40A6[] = { + ITEM_AIR_MAIL, + ITEM_HEAL_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40A0[] = { + ITEM_STEEL_MAIL, + ITEM_LUXURY_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40B4[] = { + ITEM_TUNNEL_MAIL, + ITEM_HEAL_BALL, + ITEM_NET_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40AC[] = { + ITEM_BLOOM_MAIL, + ITEM_HEAL_BALL, + ITEM_NET_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40BC[] = { + ITEM_AIR_MAIL, + ITEM_HEAL_BALL, + ITEM_NET_BALL, + ITEM_NEST_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40F8[] = { + ITEM_HEART_MAIL, + ITEM_HEAL_BALL, + ITEM_NET_BALL, + ITEM_NEST_BALL, + 0xFFFF +}; + +static const u16 UNK_020F4102[] = { + ITEM_AIR_MAIL, + ITEM_QUICK_BALL, + ITEM_TIMER_BALL, + ITEM_REPEAT_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40DA[] = { + ITEM_AIR_MAIL, + ITEM_NET_BALL, + ITEM_NEST_BALL, + ITEM_DUSK_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40EE[] = { + ITEM_AIR_MAIL, + ITEM_DUSK_BALL, + ITEM_QUICK_BALL, + ITEM_TIMER_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40D0[] = { + ITEM_SNOW_MAIL, + ITEM_DUSK_BALL, + ITEM_QUICK_BALL, + ITEM_TIMER_BALL, + 0xFFFF +}; + +static const u16 UNK_020F40C6[] = { + ITEM_HEAL_POWDER, + ITEM_ENERGYPOWDER, + ITEM_ENERGY_ROOT, + ITEM_REVIVAL_HERB, + 0xFFFF +}; + +static const u16 UNK_020F40E4[] = { + ITEM_AIR_MAIL, + ITEM_NEST_BALL, + ITEM_DUSK_BALL, + ITEM_QUICK_BALL, + 0xFFFF +}; + +static const u16 UNK_020F410C[] = { + DECORATION_YELLOW_CUSHION, + DECORATION_CUPBOARD, + DECORATION_TV, + DECORATION_REFRIGERATOR, + DECORATION_PRETTY_SINK, + 0xFFFF +}; + +static const u16 UNK_020F4118[] = { + DECORATION_MUNCHLAX_DOLL, + DECORATION_BONSLY_DOLL, + DECORATION_MIME_JR__DOLL, + DECORATION_MANTYKE_DOLL, + DECORATION_BUIZEL_DOLL, + DECORATION_CHATOT_DOLL, + 0xFFFF +}; + +static const u16 UNK_020F4126[] = { + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_ZINC, + ITEM_CARBOS, + ITEM_HP_UP, + 0xFFFF +}; + +static const u16 UNK_020F4134[] = { + ITEM_TM38, + ITEM_TM25, + ITEM_TM14, + ITEM_TM22, + ITEM_TM52, + ITEM_TM15, + 0xFFFF +}; + +static const u16 UNK_020F41B2[] = { + SEAL_STAR_A, + SEAL_A, + SEAL_FIRE_A, + SEAL_SONG_A, + SEAL_LINE_B, + SEAL_ELE_B, + SEAL_PARTY_D, + 0xFFFF +}; + +static const u16 UNK_020F4142[] = { + SEAL_HEART_B, + SEAL_STAR_C, + SEAL_FIRE_C, + SEAL_FLORA_B, + SEAL_SONG_C, + SEAL_SMOKE_A, + SEAL_ELE_D, + 0xFFFF +}; + +static const u16 UNK_020F4152[] = { + SEAL_FOAMY_D, + SEAL_PARTY_C, + SEAL_FLORA_F, + SEAL_SONG_G, + SEAL_HEART_F, + SEAL_LINE_A, + SEAL_ELE_A, + 0xFFFF +}; + +static const u16 UNK_020F4162[] = { + SEAL_HEART_C, + SEAL_STAR_D, + SEAL_FIRE_D, + SEAL_FLORA_C, + SEAL_SONG_D, + SEAL_SMOKE_B, + SEAL_FOAMY_A, + 0xFFFF +}; + +static const u16 UNK_020F4172[] = { + SEAL_HEART_D, + SEAL_FOAMY_B, + SEAL_PARTY_A, + SEAL_FLORA_D, + SEAL_SONG_E, + SEAL_STAR_E, + SEAL_SMOKE_C, + 0xFFFF +}; + +static const u16 UNK_020F4182[] = { + ITEM_TM83, + ITEM_TM17, + ITEM_TM54, + ITEM_TM20, + ITEM_TM33, + ITEM_TM16, + ITEM_TM70, + 0xFFFF +}; + +static const u16 UNK_020F4192[] = { + SEAL_HEART_A, + SEAL_STAR_B, + SEAL_FIRE_B, + SEAL_SONG_B, + SEAL_LINE_C, + SEAL_ELE_C, + SEAL_FLORA_A, + 0xFFFF +}; + +static const u16 UNK_020F41A2[] = { + SEAL_FOAMY_C, + SEAL_PARTY_B, + SEAL_FLORA_E, + SEAL_SONG_F, + SEAL_HEART_E, + SEAL_STAR_F, + SEAL_SMOKE_D, + 0xFFFF +}; + +static const u16 UNK_020F41D4[] = { + ITEM_X_SPEED, + ITEM_X_ATTACK, + ITEM_X_DEFENSE, + ITEM_GUARD_SPEC_, + ITEM_DIRE_HIT, + ITEM_X_ACCURACY, + ITEM_X_SPECIAL, + ITEM_X_SP__DEF, + 0xFFFF +}; + +static const u16 UNK_020F41C2[] = { + ITEM_HEAL_BALL, + ITEM_NET_BALL, + ITEM_NEST_BALL, + ITEM_DUSK_BALL, + ITEM_QUICK_BALL, + ITEM_TIMER_BALL, + ITEM_REPEAT_BALL, + ITEM_LUXURY_BALL, + 0xFFFF +}; + +static const u16 UNK_020F41E6[] = { + ITEM_POTION, + ITEM_SUPER_POTION, + ITEM_HYPER_POTION, + ITEM_MAX_POTION, + ITEM_REVIVE, + ITEM_ANTIDOTE, + ITEM_PARLYZ_HEAL, + ITEM_BURN_HEAL, + ITEM_ICE_HEAL, + ITEM_AWAKENING, + ITEM_FULL_HEAL, + 0xFFFF +}; + +static const u16 UNK_020F41FE[] = { + ITEM_POKE_BALL, + ITEM_GREAT_BALL, + ITEM_ULTRA_BALL, + ITEM_ESCAPE_ROPE, + ITEM_POKE_DOLL, + ITEM_REPEL, + ITEM_SUPER_REPEL, + ITEM_MAX_REPEL, + ITEM_GRASS_MAIL, + ITEM_FLAME_MAIL, + ITEM_BUBBLE_MAIL, + ITEM_SPACE_MAIL, + 0xFFFF +}; + +static const u16 sNormalMartBadgeThresholds[][2] = { + // Balls + {ITEM_POKE_BALL, 1}, + {ITEM_GREAT_BALL, 3}, + {ITEM_ULTRA_BALL, 4}, + // Potions + {ITEM_POTION, 1}, + {ITEM_SUPER_POTION, 2}, + {ITEM_HYPER_POTION, 4}, + {ITEM_MAX_POTION, 5}, + {ITEM_FULL_RESTORE, 6}, + // Revives + {ITEM_REVIVE, 3}, + // Status heal + {ITEM_ANTIDOTE, 1}, + {ITEM_PARLYZ_HEAL, 1}, + {ITEM_AWAKENING, 2}, + {ITEM_BURN_HEAL, 2}, + {ITEM_ICE_HEAL, 2}, + {ITEM_FULL_HEAL, 4}, + // Dungeon items + {ITEM_ESCAPE_ROPE, 2}, + // Repels + {ITEM_REPEL, 2}, + {ITEM_SUPER_REPEL, 3}, + {ITEM_MAX_REPEL, 4}, +}; + +const u16 *sDecorationMartPointers[] = { + UNK_020F410C, + UNK_020F4118, +}; + +const u16 *sSpecialMartPointers[] = { + UNK_020F40A6, + UNK_020F40B4, + UNK_020F40AC, + UNK_020F40BC, + UNK_020F40C6, + UNK_020F40F8, + UNK_020F40DA, + UNK_020F40E4, + UNK_020F41E6, + UNK_020F41FE, + UNK_020F41D4, + UNK_020F4126, + UNK_020F4182, + UNK_020F4134, + UNK_020F40EE, + UNK_020F40D0, + UNK_020F4102, + UNK_020F40A0, + UNK_020F41C2, +}; + +const u16 *sSealsMartPointers[] = { + UNK_020F4192, + UNK_020F4142, + UNK_020F4162, + UNK_020F4172, + UNK_020F41A2, + UNK_020F4152, + UNK_020F41B2, +}; + +THUMB_FUNC BOOL ScrCmd_NormalMart(struct ScriptContext * ctx) //0147 - todo: Pokemart? +{ + u16 whichMart = ScriptGetVar(ctx); + s32 param; + u16 martItems[64]; + u8 martIdx = 0; + u8 badgeCount = 0; + u8 i; + + for (i = 0; i < 8; i++) + { + if (PlayerProfile_TestBadgeFlag(Sav2_PlayerData_GetProfileAddr(ctx->fieldSystem->saveBlock2), i) == TRUE) + badgeCount++; + } + switch (badgeCount) + { + case 0: + param = 1; + break; + case 1: + case 2: + param = 2; + break; + case 3: + case 4: + param = 3; + break; + case 5: + case 6: + param = 4; + break; + case 7: + param = 5; + break; + case 8: + param = 6; + break; + default: + param = 1; + break; + } + for (i = 0; i < NELEMS(sNormalMartBadgeThresholds); i++) + { + if (param >= sNormalMartBadgeThresholds[i][1]) + { + martItems[martIdx] = sNormalMartBadgeThresholds[i][0]; + martIdx++; + } + } + martItems[martIdx] = 0xFFFF; // terminator + MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, martItems, MART_ITEMS, 0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_SpecialMart(struct ScriptContext * ctx) //0148 +{ + u16 whichMart = ScriptGetVar(ctx); + u32 sp0; + + // Fakematch? + if ((u16)(whichMart + (u16)(-8u)) <= 5) + sp0 = 1; + else + sp0 = 0; + + MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSpecialMartPointers[whichMart], MART_ITEMS, sp0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_GoodsMart(struct ScriptContext * ctx) //0149 +{ + u16 whichMart = ScriptGetVar(ctx); + u32 sp0; + + if (whichMart <= 1) + sp0 = 1; + else + sp0 = 0; + + MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sDecorationMartPointers[whichMart], MART_DECORATIONS, sp0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_SealsMart(struct ScriptContext * ctx) //014A +{ + u16 whichMart = ScriptGetVar(ctx); + + MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSealsMartPointers[whichMart], MART_SEALS, 0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_AccessoriesShop(struct ScriptContext * ctx) //0257 - todo: Unsure if this is correct, SDSME has it as SprtSave? +{ + FUN_02038AD0(ctx->fieldSystem->taskManager); + return TRUE; +} diff --git a/arm9/src/scrcmd_party.c b/arm9/src/scrcmd_party.c index 3ad95ecb1..2d101fbc9 100644 --- a/arm9/src/scrcmd_party.c +++ b/arm9/src/scrcmd_party.c @@ -1,815 +1,815 @@ -#include "constants/moves.h" -#include "itemtool.h" -#include "map_header.h" -#include "module_05.h" -#include "party.h" -#include "save_block_2.h" -#include "scrcmd.h" -#include "script_pokemon_util.h" -#include "task.h" -#include "unk_02015CC0.h" -#include "unk_02022504.h" -#include "unk_0207FC5C.h" - -extern u16 FUN_02054DEC(struct SaveBlock2* sav2); - -THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx) //0096 - todo: GivePokemon? -{ - u32 mapSec = MapHeader_GetMapSec(*(ctx->fieldSystem->mapId)); - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16 species = ScriptGetVar(ctx); - u16 level = ScriptGetVar(ctx); - u16 item = ScriptGetVar(ctx); - u16 * varPtr = ScriptGetVarPointer(ctx); - struct PlayerParty * party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - *varPtr = (u16)GiveMon(11, fieldSystem->saveBlock2, species, (u8)level, item, mapSec, 12); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonSpecies(struct ScriptContext* ctx) //0198 - todo: GetPartyPokemonSpecies? -{ - u32 species; - u16* ret_ptr; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* mon_slot = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); //for some reason this is *required* for matching, cannot use ScriptGetVarPointer here - ret_ptr = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - species = GetMonData(party_mon, MON_DATA_SPECIES, NULL); - } - else - { - species = SPECIES_NONE; - } - - *ret_ptr = (u16)species; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CheckPartyMonOTID(struct ScriptContext* ctx) //0199 - todo: CheckPartyPokemonTraded? -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(fieldSystem); - struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2); - - u16* mon_slot = ScriptGetVarPointer(ctx); - u16* ret_ptr = ScriptGetVarPointer(ctx); - - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot); - - u16 party_mon_otid = (u16)GetMonData(party_mon, MON_DATA_OTID, NULL); - u16 player_otid = (u16)PlayerProfile_GetTrainerID(player); - if (party_mon_otid == player_otid) - { - *ret_ptr = 0; - } - else - { - *ret_ptr = 1; - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GiveEgg(struct ScriptContext* ctx) //0097 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(fieldSystem->saveBlock2); - u16 species = ScriptGetVar(ctx); - u16 unk = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - u8 party_count = (u8)GetPartyCount(party); - - if (party_count < PARTY_SIZE) - { - struct Pokemon* egg = AllocMonZeroed(11); - ZeroMonData(egg); - - s32 met_loc = FUN_02015CF8(1, unk); - MOD05_SetEggStats(egg, species, 1, player, 3, met_loc); - - AddMonToParty(party, egg); - FreeToHeap(egg); - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_SetPartyMonMove(struct ScriptContext* ctx) //0098 - todo: ReplacePartyPokemonMove? -{ - u16 mon_slot = ScriptGetVar(ctx); - u16 move_slot = ScriptGetVar(ctx); - u16 move = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - - PartyMonSetMoveInSlot(party, mon_slot, move_slot, move); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_PartyMonHasMove(struct ScriptContext* ctx) //0099 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 required_move = ScriptGetVar(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = 0; - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - return FALSE; - } - - if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL)) - { - *ret_ptr = 1; - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_FindPartyMonWithMove(struct ScriptContext* ctx) //009A - todo: CheckMoveInParty? -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 required_move = ScriptGetVar(ctx); - u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u8 i; - for (i = 0, *ret_ptr = PARTY_SIZE; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) || - required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL)) - { - *ret_ptr = i; - break; - } - } - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_SurvivePsn(struct ScriptContext* ctx) //01F7 -{ - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)SurvivePoisoning(party_mon); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountPartyMonsAtOrBelowLevel(struct ScriptContext* ctx) //01F6 -{ - u8 party_count; - u8 i; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 highest_level = ScriptGetVar(ctx); - party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u8 mons; - for (i = 0, mons = 0, *ret_ptr = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - u32 party_mon_level = GetMonData(party_mon, MON_DATA_LEVEL, NULL); - if (party_mon_level <= highest_level) - { - mons++; - } - } - } - - *ret_ptr = mons; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonLevel(struct ScriptContext* ctx) //0278 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = 0; - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_LEVEL, NULL); - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonNature(struct ScriptContext* ctx) //0212 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - if (mon_slot >= party_count) - { - *ret_ptr = 0; - return FALSE; - } - - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - *ret_ptr = 0; - return FALSE; - } - - *ret_ptr = GetMonNature(party_mon); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_FindPartyMonWithNature(struct ScriptContext* ctx) //0213 - todo: CheckNatureInParty -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 required_nature = ScriptGetVar(ctx); - u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u8 i; - for (i = 0, *ret_ptr = 0xFF; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - u8 party_mon_nature = GetMonNature(party_mon); - if (required_nature == party_mon_nature) - { - *ret_ptr = i; - break; - } - } - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonFriendship(struct ScriptContext* ctx) //01B9 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_AddPartyMonFriendship(struct ScriptContext* ctx) //01BA -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16 friendship_to_add = ScriptGetVar(ctx); - u16 mon_slot = ScriptGetVar(ctx); - u16 map_sec = MapHeader_GetMapSec(*ctx->fieldSystem->mapId); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); - - if (friendship_to_add != 0) - { - u16 party_mon_held_item = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL); - u32 held_item_hold_effect = GetItemAttr(party_mon_held_item, ITEMATTR_HOLD_EFFECT, 11); - if (held_item_hold_effect == HOLD_EFFECT_FRIENDSHIP_UP) - { - friendship_to_add = (u16)((friendship_to_add * 150) / 100); - } - - u32 party_mon_pokeball = GetMonData(party_mon, MON_DATA_POKEBALL, NULL); - if (party_mon_pokeball == ITEM_LUXURY_BALL) - { - friendship_to_add++; - } - - u32 party_mon_egg_met_location = GetMonData(party_mon, MON_DATA_EGG_MET_LOCATION, NULL); - if (map_sec == party_mon_egg_met_location) - { - friendship_to_add++; - } - } - - friendship += friendship_to_add; - if (friendship > 0xFF) - { - friendship = 0xFF; - } - - SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_SubtractPartyMonFriendship(struct ScriptContext* ctx) //01BB -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16 friendship_to_deplete = ScriptGetVar(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); - if (friendship_to_deplete > friendship) - { - friendship = 0; - } - else - { - friendship -= friendship_to_deplete; - } - - SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonContestCondition(struct ScriptContext* ctx) //0281 -{ - u16 mon_slot = ScriptGetVar(ctx); - u16 contest_condition_id = ScriptGetVar(ctx); - u16* ret_ptr = ScriptGetVarPointer(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_COOL + contest_condition_id, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetLeadingPartyMonSlot(struct ScriptContext* ctx) //0247 -{ - u16* ret_ptr = ScriptGetVarPointer(ctx); - - *ret_ptr = FUN_02054DEC(ctx->fieldSystem->saveBlock2); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonTypes(struct ScriptContext* ctx) //0248 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* type1 = ScriptGetVarPointer(ctx); - u16* type2 = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *type1 = (u16)GetMonData(party_mon, MON_DATA_TYPE_1, NULL); - *type2 = (u16)GetMonData(party_mon, MON_DATA_TYPE_2, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountPartyMons(struct ScriptContext* ctx) //0177 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - - *ret_ptr = (u16)GetPartyCount(party); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountPartyMons_OmitEggs(struct ScriptContext* ctx) //019A -{ - u32 non_egg_mons; - s32 i; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - s32 party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - for (i = 0, non_egg_mons = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - non_egg_mons++; - } - - } - - *ret_ptr = (u16)non_egg_mons; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountAvailablePartyMons_IgnoreSlot(struct ScriptContext* ctx) //019B -{ - u16 slot_to_ignore; - s32 party_count; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - slot_to_ignore = ScriptGetVar(ctx); - party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u32 available_mons; - s32 i; - for (i = 0, available_mons = 0; i < party_count; i++) - { - if (i != slot_to_ignore) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL); - if (party_mon_hp != 0) - { - available_mons++; - } - } - } - } - - *ret_ptr = (u16)available_mons; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountAvailablePartyAndPCMons(struct ScriptContext* ctx) //019C -{ - s32 party_count; - struct PCStorage* pc; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - pc = GetStoragePCPointer(fieldSystem->saveBlock2); - party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u32 mons; - s32 i; - for (i = 0, mons = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL); - if (party_mon_hp != 0) - { - mons++; - } - } - } - - *ret_ptr = (u16)(mons + PCStorage_CountMonsInAllBoxes(pc)); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyEggCount(struct ScriptContext* ctx) //019D -{ - s32 party_count; - u32 eggs_in_party; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - s32 i; - for (i = 0, eggs_in_party = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - eggs_in_party++; - } - } - - *ret_ptr = (u16)eggs_in_party; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CheckPartyForPokerus(struct ScriptContext* ctx) //0119 -{ - u16 party_count; - u16 i; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - for (i = 0, *ret_ptr = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_has_pokerus = (BOOL)GetMonData(party_mon, MON_DATA_POKERUS, NULL); - if (party_mon_has_pokerus) - { - *ret_ptr = 1; - break; - } - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonGender(struct ScriptContext* ctx) //011A -{ - u16 mon_slot = ScriptGetVar(ctx); - u16* ret_ptr = ScriptGetVarPointer(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_GENDER, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountPartyMonMoves(struct ScriptContext* ctx) //01C8 -{ - struct Pokemon* party_mon; - u8 moves; - - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - party_mon = GetPartyMonByIndex(party, mon_slot); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - *ret_ptr = 0; - return FALSE; - } - - moves = 0; - - u32 move1 = GetMonData(party_mon, MON_DATA_MOVE1, NULL); - if (move1 != MOVE_NONE) - { - moves++; - } - - u32 move2 = GetMonData(party_mon, MON_DATA_MOVE2, NULL); - if (move2 != MOVE_NONE) - { - moves++; - } - - u32 move3 = GetMonData(party_mon, MON_DATA_MOVE3, NULL); - if (move3 != MOVE_NONE) - { - moves++; - } - - u32 move4 = GetMonData(party_mon, MON_DATA_MOVE4, NULL); - if (move4 != MOVE_NONE) - { - moves++; - } - - *ret_ptr = moves; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_ForgetPartyMonMove(struct ScriptContext* ctx) //01C9 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16 mon_slot = ScriptGetVar(ctx); - u16 move_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - FUN_020699A4(party_mon, move_slot); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonMove(struct ScriptContext* ctx) //01CA -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - u16 move_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_MOVE1 + move_slot, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GetPartyMonHeldItem(struct ScriptContext* ctx) //01EE -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_ResetPartyMonHeldItem(struct ScriptContext* ctx) //01F0 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - u16 party_mon_held_item = ITEM_NONE; - SetMonData(party_mon, MON_DATA_HELD_ITEM, &party_mon_held_item); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CheckPartyForSpecies(struct ScriptContext* ctx) //01C0 -{ - struct FieldSystem *fieldSystem = ctx->fieldSystem; - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 species = ScriptGetVar(ctx); - u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); - - u8 i; - for (i = 0, *ret_ptr = 0; i < party_count; i++) - { - struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg == FALSE) - { - u16 party_mon_species = (u16)GetMonData(party_mon, MON_DATA_SPECIES, NULL); - if (species == party_mon_species) - { - *ret_ptr = 1; - break; - } - } - } - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountPartyMonRibbons(struct ScriptContext* ctx) //022E -{ - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - u16 ribbon_idx; - u16 ribbons; - for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++) - { - BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); - if (party_mon_has_ribbon) - { - ribbons++; - } - } - - *ret_ptr = ribbons; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CountTotalPartyRibbons(struct ScriptContext* ctx) //022F -{ - struct PlayerParty* party; - u16 ribbon_idx; - u16 ribbons; - - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2)); - party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - - for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++) - { - for (u16 i = 0; i < party_count; i++) - { - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - // BUG: This `break` should be a `continue`, as any party mons after a detected - // egg would have their ribbons ignored. - break; - } - - BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); - if (party_mon_has_ribbon) - { - ribbons++; - break; - } - } - } - - *ret_ptr = ribbons; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_PartyMonHasRibbon(struct ScriptContext* ctx) //0230 -{ - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 mon_slot = ScriptGetVar(ctx); - u16 ribbon_idx = ScriptGetVar(ctx); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - *ret_ptr = (u16)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_GivePartyMonRibbon(struct ScriptContext* ctx) //0231 -{ - u16 mon_slot = ScriptGetVar(ctx); - u16 ribbon_idx = ScriptGetVar(ctx); - u8 mon_has_ribbon = TRUE; - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); - - SetMonData(party_mon, (s32)FUN_0207FC5C((u8)ribbon_idx, 0), &mon_has_ribbon); - - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_CheckPartyForBadEgg(struct ScriptContext* ctx) //02B7 -{ - u16 ribbon_idx; - - u16* ret_ptr = ScriptGetVarPointer(ctx); - u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2)); - struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); - - // BUG: Probably a copy-paste fail. Checks if your party has a Bad Egg in it, - // 80 times. - for (ribbon_idx = 0; ribbon_idx < 80; ribbon_idx++) - { - for (u16 i = 0; i < party_count; i++) - { - struct Pokemon* party_mon = GetPartyMonByIndex(party, i); - BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); - if (party_mon_is_egg) - { - BOOL party_mon_is_bad_egg = (BOOL)GetMonData(party_mon, MON_DATA_CHECKSUM_FAILED, NULL); - if (party_mon_is_bad_egg) - { - *ret_ptr = 1; - return FALSE; - } - } - } - } - - *ret_ptr = 0; - return FALSE; -} - -THUMB_FUNC BOOL ScrCmd_Unk00A0(struct ScriptContext* ctx) //00A0 - todo: DummyCountPartyPokemon -{ -#pragma unused(ctx) - return FALSE; -} +#include "constants/moves.h" +#include "itemtool.h" +#include "map_header.h" +#include "module_05.h" +#include "party.h" +#include "save_block_2.h" +#include "scrcmd.h" +#include "script_pokemon_util.h" +#include "task.h" +#include "unk_02015CC0.h" +#include "unk_02022504.h" +#include "unk_0207FC5C.h" + +extern u16 FUN_02054DEC(struct SaveBlock2* sav2); + +THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx) //0096 - todo: GivePokemon? +{ + u32 mapSec = MapHeader_GetMapSec(*(ctx->fieldSystem->mapId)); + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16 species = ScriptGetVar(ctx); + u16 level = ScriptGetVar(ctx); + u16 item = ScriptGetVar(ctx); + u16 * varPtr = ScriptGetVarPointer(ctx); + struct PlayerParty * party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + *varPtr = (u16)GiveMon(11, fieldSystem->saveBlock2, species, (u8)level, item, mapSec, 12); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonSpecies(struct ScriptContext* ctx) //0198 - todo: GetPartyPokemonSpecies? +{ + u32 species; + u16* ret_ptr; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* mon_slot = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); //for some reason this is *required* for matching, cannot use ScriptGetVarPointer here + ret_ptr = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + species = GetMonData(party_mon, MON_DATA_SPECIES, NULL); + } + else + { + species = SPECIES_NONE; + } + + *ret_ptr = (u16)species; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckPartyMonOTID(struct ScriptContext* ctx) //0199 - todo: CheckPartyPokemonTraded? +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(fieldSystem); + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2); + + u16* mon_slot = ScriptGetVarPointer(ctx); + u16* ret_ptr = ScriptGetVarPointer(ctx); + + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot); + + u16 party_mon_otid = (u16)GetMonData(party_mon, MON_DATA_OTID, NULL); + u16 player_otid = (u16)PlayerProfile_GetTrainerID(player); + if (party_mon_otid == player_otid) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GiveEgg(struct ScriptContext* ctx) //0097 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(fieldSystem->saveBlock2); + u16 species = ScriptGetVar(ctx); + u16 unk = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + u8 party_count = (u8)GetPartyCount(party); + + if (party_count < PARTY_SIZE) + { + struct Pokemon* egg = AllocMonZeroed(11); + ZeroMonData(egg); + + s32 met_loc = FUN_02015CF8(1, unk); + MOD05_SetEggStats(egg, species, 1, player, 3, met_loc); + + AddMonToParty(party, egg); + FreeToHeap(egg); + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetPartyMonMove(struct ScriptContext* ctx) //0098 - todo: ReplacePartyPokemonMove? +{ + u16 mon_slot = ScriptGetVar(ctx); + u16 move_slot = ScriptGetVar(ctx); + u16 move = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + + PartyMonSetMoveInSlot(party, mon_slot, move_slot, move); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_PartyMonHasMove(struct ScriptContext* ctx) //0099 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 required_move = ScriptGetVar(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = 0; + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + return FALSE; + } + + if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL)) + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_FindPartyMonWithMove(struct ScriptContext* ctx) //009A - todo: CheckMoveInParty? +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 required_move = ScriptGetVar(ctx); + u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u8 i; + for (i = 0, *ret_ptr = PARTY_SIZE; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) || + required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL)) + { + *ret_ptr = i; + break; + } + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SurvivePsn(struct ScriptContext* ctx) //01F7 +{ + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)SurvivePoisoning(party_mon); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountPartyMonsAtOrBelowLevel(struct ScriptContext* ctx) //01F6 +{ + u8 party_count; + u8 i; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 highest_level = ScriptGetVar(ctx); + party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u8 mons; + for (i = 0, mons = 0, *ret_ptr = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + u32 party_mon_level = GetMonData(party_mon, MON_DATA_LEVEL, NULL); + if (party_mon_level <= highest_level) + { + mons++; + } + } + } + + *ret_ptr = mons; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonLevel(struct ScriptContext* ctx) //0278 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = 0; + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_LEVEL, NULL); + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonNature(struct ScriptContext* ctx) //0212 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + if (mon_slot >= party_count) + { + *ret_ptr = 0; + return FALSE; + } + + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + *ret_ptr = 0; + return FALSE; + } + + *ret_ptr = GetMonNature(party_mon); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_FindPartyMonWithNature(struct ScriptContext* ctx) //0213 - todo: CheckNatureInParty +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 required_nature = ScriptGetVar(ctx); + u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u8 i; + for (i = 0, *ret_ptr = 0xFF; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + u8 party_mon_nature = GetMonNature(party_mon); + if (required_nature == party_mon_nature) + { + *ret_ptr = i; + break; + } + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonFriendship(struct ScriptContext* ctx) //01B9 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_AddPartyMonFriendship(struct ScriptContext* ctx) //01BA +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16 friendship_to_add = ScriptGetVar(ctx); + u16 mon_slot = ScriptGetVar(ctx); + u16 map_sec = MapHeader_GetMapSec(*ctx->fieldSystem->mapId); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); + + if (friendship_to_add != 0) + { + u16 party_mon_held_item = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL); + u32 held_item_hold_effect = GetItemAttr(party_mon_held_item, ITEMATTR_HOLD_EFFECT, 11); + if (held_item_hold_effect == HOLD_EFFECT_FRIENDSHIP_UP) + { + friendship_to_add = (u16)((friendship_to_add * 150) / 100); + } + + u32 party_mon_pokeball = GetMonData(party_mon, MON_DATA_POKEBALL, NULL); + if (party_mon_pokeball == ITEM_LUXURY_BALL) + { + friendship_to_add++; + } + + u32 party_mon_egg_met_location = GetMonData(party_mon, MON_DATA_EGG_MET_LOCATION, NULL); + if (map_sec == party_mon_egg_met_location) + { + friendship_to_add++; + } + } + + friendship += friendship_to_add; + if (friendship > 0xFF) + { + friendship = 0xFF; + } + + SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SubtractPartyMonFriendship(struct ScriptContext* ctx) //01BB +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16 friendship_to_deplete = ScriptGetVar(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL); + if (friendship_to_deplete > friendship) + { + friendship = 0; + } + else + { + friendship -= friendship_to_deplete; + } + + SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonContestCondition(struct ScriptContext* ctx) //0281 +{ + u16 mon_slot = ScriptGetVar(ctx); + u16 contest_condition_id = ScriptGetVar(ctx); + u16* ret_ptr = ScriptGetVarPointer(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_COOL + contest_condition_id, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetLeadingPartyMonSlot(struct ScriptContext* ctx) //0247 +{ + u16* ret_ptr = ScriptGetVarPointer(ctx); + + *ret_ptr = FUN_02054DEC(ctx->fieldSystem->saveBlock2); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonTypes(struct ScriptContext* ctx) //0248 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* type1 = ScriptGetVarPointer(ctx); + u16* type2 = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *type1 = (u16)GetMonData(party_mon, MON_DATA_TYPE_1, NULL); + *type2 = (u16)GetMonData(party_mon, MON_DATA_TYPE_2, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountPartyMons(struct ScriptContext* ctx) //0177 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + + *ret_ptr = (u16)GetPartyCount(party); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountPartyMons_OmitEggs(struct ScriptContext* ctx) //019A +{ + u32 non_egg_mons; + s32 i; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + s32 party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + for (i = 0, non_egg_mons = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + non_egg_mons++; + } + + } + + *ret_ptr = (u16)non_egg_mons; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountAvailablePartyMons_IgnoreSlot(struct ScriptContext* ctx) //019B +{ + u16 slot_to_ignore; + s32 party_count; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + slot_to_ignore = ScriptGetVar(ctx); + party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u32 available_mons; + s32 i; + for (i = 0, available_mons = 0; i < party_count; i++) + { + if (i != slot_to_ignore) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL); + if (party_mon_hp != 0) + { + available_mons++; + } + } + } + } + + *ret_ptr = (u16)available_mons; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountAvailablePartyAndPCMons(struct ScriptContext* ctx) //019C +{ + s32 party_count; + struct PCStorage* pc; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + pc = GetStoragePCPointer(fieldSystem->saveBlock2); + party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u32 mons; + s32 i; + for (i = 0, mons = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL); + if (party_mon_hp != 0) + { + mons++; + } + } + } + + *ret_ptr = (u16)(mons + PCStorage_CountMonsInAllBoxes(pc)); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyEggCount(struct ScriptContext* ctx) //019D +{ + s32 party_count; + u32 eggs_in_party; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + party_count = GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + s32 i; + for (i = 0, eggs_in_party = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + eggs_in_party++; + } + } + + *ret_ptr = (u16)eggs_in_party; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckPartyForPokerus(struct ScriptContext* ctx) //0119 +{ + u16 party_count; + u16 i; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + for (i = 0, *ret_ptr = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_has_pokerus = (BOOL)GetMonData(party_mon, MON_DATA_POKERUS, NULL); + if (party_mon_has_pokerus) + { + *ret_ptr = 1; + break; + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonGender(struct ScriptContext* ctx) //011A +{ + u16 mon_slot = ScriptGetVar(ctx); + u16* ret_ptr = ScriptGetVarPointer(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_GENDER, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountPartyMonMoves(struct ScriptContext* ctx) //01C8 +{ + struct Pokemon* party_mon; + u8 moves; + + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + party_mon = GetPartyMonByIndex(party, mon_slot); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + *ret_ptr = 0; + return FALSE; + } + + moves = 0; + + u32 move1 = GetMonData(party_mon, MON_DATA_MOVE1, NULL); + if (move1 != MOVE_NONE) + { + moves++; + } + + u32 move2 = GetMonData(party_mon, MON_DATA_MOVE2, NULL); + if (move2 != MOVE_NONE) + { + moves++; + } + + u32 move3 = GetMonData(party_mon, MON_DATA_MOVE3, NULL); + if (move3 != MOVE_NONE) + { + moves++; + } + + u32 move4 = GetMonData(party_mon, MON_DATA_MOVE4, NULL); + if (move4 != MOVE_NONE) + { + moves++; + } + + *ret_ptr = moves; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ForgetPartyMonMove(struct ScriptContext* ctx) //01C9 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16 mon_slot = ScriptGetVar(ctx); + u16 move_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + FUN_020699A4(party_mon, move_slot); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonMove(struct ScriptContext* ctx) //01CA +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + u16 move_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_MOVE1 + move_slot, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPartyMonHeldItem(struct ScriptContext* ctx) //01EE +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ResetPartyMonHeldItem(struct ScriptContext* ctx) //01F0 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + u16 party_mon_held_item = ITEM_NONE; + SetMonData(party_mon, MON_DATA_HELD_ITEM, &party_mon_held_item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckPartyForSpecies(struct ScriptContext* ctx) //01C0 +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 species = ScriptGetVar(ctx); + u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(fieldSystem->saveBlock2)); + + u8 i; + for (i = 0, *ret_ptr = 0; i < party_count; i++) + { + struct PlayerParty* party = SavArray_PlayerParty_get(fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg == FALSE) + { + u16 party_mon_species = (u16)GetMonData(party_mon, MON_DATA_SPECIES, NULL); + if (species == party_mon_species) + { + *ret_ptr = 1; + break; + } + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountPartyMonRibbons(struct ScriptContext* ctx) //022E +{ + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + u16 ribbon_idx; + u16 ribbons; + for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++) + { + BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); + if (party_mon_has_ribbon) + { + ribbons++; + } + } + + *ret_ptr = ribbons; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CountTotalPartyRibbons(struct ScriptContext* ctx) //022F +{ + struct PlayerParty* party; + u16 ribbon_idx; + u16 ribbons; + + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2)); + party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + + for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++) + { + for (u16 i = 0; i < party_count; i++) + { + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + // BUG: This `break` should be a `continue`, as any party mons after a detected + // egg would have their ribbons ignored. + break; + } + + BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); + if (party_mon_has_ribbon) + { + ribbons++; + break; + } + } + } + + *ret_ptr = ribbons; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_PartyMonHasRibbon(struct ScriptContext* ctx) //0230 +{ + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 mon_slot = ScriptGetVar(ctx); + u16 ribbon_idx = ScriptGetVar(ctx); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + *ret_ptr = (u16)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GivePartyMonRibbon(struct ScriptContext* ctx) //0231 +{ + u16 mon_slot = ScriptGetVar(ctx); + u16 ribbon_idx = ScriptGetVar(ctx); + u8 mon_has_ribbon = TRUE; + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot); + + SetMonData(party_mon, (s32)FUN_0207FC5C((u8)ribbon_idx, 0), &mon_has_ribbon); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckPartyForBadEgg(struct ScriptContext* ctx) //02B7 +{ + u16 ribbon_idx; + + u16* ret_ptr = ScriptGetVarPointer(ctx); + u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2)); + struct PlayerParty* party = SavArray_PlayerParty_get(ctx->fieldSystem->saveBlock2); + + // BUG: Probably a copy-paste fail. Checks if your party has a Bad Egg in it, + // 80 times. + for (ribbon_idx = 0; ribbon_idx < 80; ribbon_idx++) + { + for (u16 i = 0; i < party_count; i++) + { + struct Pokemon* party_mon = GetPartyMonByIndex(party, i); + BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL); + if (party_mon_is_egg) + { + BOOL party_mon_is_bad_egg = (BOOL)GetMonData(party_mon, MON_DATA_CHECKSUM_FAILED, NULL); + if (party_mon_is_bad_egg) + { + *ret_ptr = 1; + return FALSE; + } + } + } + } + + *ret_ptr = 0; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00A0(struct ScriptContext* ctx) //00A0 - todo: DummyCountPartyPokemon +{ +#pragma unused(ctx) + return FALSE; +} diff --git a/arm9/src/script.c b/arm9/src/script.c index 824c07eba..b30f85294 100644 --- a/arm9/src/script.c +++ b/arm9/src/script.c @@ -1,157 +1,157 @@ -#include "script.h" - -THUMB_FUNC void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount) -{ - int i; - - ctx->mode = 0; - ctx->scriptPtr = NULL; - ctx->stackDepth = 0; - ctx->nativePtr = NULL; - ctx->cmdTable = cmdTable; - ctx->cmdCount = cmdCount; - - for (i = 0; i < NELEMS(ctx->data); i++) - ctx->data[i] = 0; - - for (i = 0; i < NELEMS(ctx->stack); i++) - ctx->stack[i] = NULL; - - ctx->taskManager = NULL; -} - -THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) -{ - ctx->scriptPtr = ptr; - ctx->mode = 1; - return 1; -} - -THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *)) -{ - ctx->mode = 2; - ctx->nativePtr = ptr; -} - -THUMB_FUNC void StopScript(struct ScriptContext *ctx) -{ - ctx->mode = 0; - ctx->scriptPtr = 0; -} - -THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManager) -{ - ctx->taskManager = taskManager; -} - -THUMB_FUNC u8 RunScriptCommand(struct ScriptContext *ctx) -{ - if (ctx->mode == 0) - return FALSE; - - switch (ctx->mode) - { - case 0: - return FALSE; - case 2: - if (ctx->nativePtr) - { - if (ctx->nativePtr(ctx) == TRUE) - ctx->mode = 1; - return TRUE; - } - ctx->mode = 1; - case 1: - while (1) - { - u16 cmdCode; - ScrCmdFunc *func; - - if (!ctx->scriptPtr) - { - ctx->mode = 0; - return FALSE; - } - - cmdCode = ScriptReadHalfword(ctx); - if (cmdCode >= ctx->cmdCount) - { - GF_ASSERT(0); - ctx->mode = 0; - return FALSE; - } - - func = &ctx->cmdTable[cmdCode]; - - if ((*func)(ctx) == 1) - break; - } - } - - return TRUE; -} - -THUMB_FUNC u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) -{ - if (ctx->stackDepth + 1 >= 20) - { - return 1; - } - else - { - ctx->stack[ctx->stackDepth] = ptr; - ctx->stackDepth++; - return 0; - } -} - -THUMB_FUNC const u8 *ScriptPop(struct ScriptContext *ctx) -{ - if (ctx->stackDepth == 0) - return NULL; - - ctx->stackDepth--; - return ctx->stack[ctx->stackDepth]; -} - -THUMB_FUNC void ScriptJump(struct ScriptContext *ctx, const u8 *ptr) -{ - ctx->scriptPtr = ptr; -} - -THUMB_FUNC u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr) -{ - u8 ret = ScriptPush(ctx, ctx->scriptPtr); - ctx->scriptPtr = ptr; - return ret; -} - -THUMB_FUNC void ScriptReturn(struct ScriptContext *ctx) -{ - ctx->scriptPtr = ScriptPop(ctx); -} - -THUMB_FUNC u16 ScriptReadHalfword(struct ScriptContext *ctx) -{ - u16 value = *(ctx->scriptPtr++); - value += *(ctx->scriptPtr++) << 8; - return value; -} - -THUMB_FUNC u32 ScriptReadWord(struct ScriptContext *ctx) -{ - u32 value0 = *(ctx->scriptPtr++); - u32 value1 = *(ctx->scriptPtr++); - u32 value2 = *(ctx->scriptPtr++); - u32 value3 = *(ctx->scriptPtr++); - u32 retVal = 0; - - retVal += value3; - retVal <<= 8; - retVal += value2; - retVal <<= 8; - retVal += value1; - retVal <<= 8; - retVal += value0; - return retVal; -} +#include "script.h" + +THUMB_FUNC void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount) +{ + int i; + + ctx->mode = 0; + ctx->scriptPtr = NULL; + ctx->stackDepth = 0; + ctx->nativePtr = NULL; + ctx->cmdTable = cmdTable; + ctx->cmdCount = cmdCount; + + for (i = 0; i < NELEMS(ctx->data); i++) + ctx->data[i] = 0; + + for (i = 0; i < NELEMS(ctx->stack); i++) + ctx->stack[i] = NULL; + + ctx->taskManager = NULL; +} + +THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) +{ + ctx->scriptPtr = ptr; + ctx->mode = 1; + return 1; +} + +THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *)) +{ + ctx->mode = 2; + ctx->nativePtr = ptr; +} + +THUMB_FUNC void StopScript(struct ScriptContext *ctx) +{ + ctx->mode = 0; + ctx->scriptPtr = 0; +} + +THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManager) +{ + ctx->taskManager = taskManager; +} + +THUMB_FUNC u8 RunScriptCommand(struct ScriptContext *ctx) +{ + if (ctx->mode == 0) + return FALSE; + + switch (ctx->mode) + { + case 0: + return FALSE; + case 2: + if (ctx->nativePtr) + { + if (ctx->nativePtr(ctx) == TRUE) + ctx->mode = 1; + return TRUE; + } + ctx->mode = 1; + case 1: + while (1) + { + u16 cmdCode; + ScrCmdFunc *func; + + if (!ctx->scriptPtr) + { + ctx->mode = 0; + return FALSE; + } + + cmdCode = ScriptReadHalfword(ctx); + if (cmdCode >= ctx->cmdCount) + { + GF_ASSERT(0); + ctx->mode = 0; + return FALSE; + } + + func = &ctx->cmdTable[cmdCode]; + + if ((*func)(ctx) == 1) + break; + } + } + + return TRUE; +} + +THUMB_FUNC u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) +{ + if (ctx->stackDepth + 1 >= 20) + { + return 1; + } + else + { + ctx->stack[ctx->stackDepth] = ptr; + ctx->stackDepth++; + return 0; + } +} + +THUMB_FUNC const u8 *ScriptPop(struct ScriptContext *ctx) +{ + if (ctx->stackDepth == 0) + return NULL; + + ctx->stackDepth--; + return ctx->stack[ctx->stackDepth]; +} + +THUMB_FUNC void ScriptJump(struct ScriptContext *ctx, const u8 *ptr) +{ + ctx->scriptPtr = ptr; +} + +THUMB_FUNC u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr) +{ + u8 ret = ScriptPush(ctx, ctx->scriptPtr); + ctx->scriptPtr = ptr; + return ret; +} + +THUMB_FUNC void ScriptReturn(struct ScriptContext *ctx) +{ + ctx->scriptPtr = ScriptPop(ctx); +} + +THUMB_FUNC u16 ScriptReadHalfword(struct ScriptContext *ctx) +{ + u16 value = *(ctx->scriptPtr++); + value += *(ctx->scriptPtr++) << 8; + return value; +} + +THUMB_FUNC u32 ScriptReadWord(struct ScriptContext *ctx) +{ + u32 value0 = *(ctx->scriptPtr++); + u32 value1 = *(ctx->scriptPtr++); + u32 value2 = *(ctx->scriptPtr++); + u32 value3 = *(ctx->scriptPtr++); + u32 retVal = 0; + + retVal += value3; + retVal <<= 8; + retVal += value2; + retVal <<= 8; + retVal += value1; + retVal <<= 8; + retVal += value0; + return retVal; +} diff --git a/arm9/src/script_pokemon_util.c b/arm9/src/script_pokemon_util.c index de78ae281..3dc84ee8f 100644 --- a/arm9/src/script_pokemon_util.c +++ b/arm9/src/script_pokemon_util.c @@ -1,204 +1,204 @@ -#include "global.h" -#include "heap.h" -#include "party.h" -#include "player_data.h" -#include "pokemon.h" -#include "save_block_2.h" -#include "unk_02015CC0.h" -#include "unk_0202C144.h" -#include "module_05.h" -#include "script_pokemon_util.h" -#include "constants/items.h" -#include "constants/script_pokemon_util.h" - -#pragma thumb on - -BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon) -{ - if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0) - return FALSE; - if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL)) - return FALSE; - return TRUE; -} - -BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType) -{ - u32 ptr; - struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2); - struct PlayerParty * party = SavArray_PlayerParty_get(sav2); - struct Pokemon * mon = AllocMonZeroed(heap_id); - ZeroMonData(mon); - CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); - FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id); - ptr = item; - SetMonData(mon, MON_DATA_HELD_ITEM, &ptr); - BOOL isAdded = AddMonToParty(party, mon); - if (isAdded) - { - FUN_0202C144(sav2, mon); - } - FreeToHeap(mon); - return isAdded; -} - -/* Seems to have something to do with Manaphy Egg*/ -BOOL GiveEgg(u32 heapId, struct SaveBlock2 * sav2, u16 species, int level, int metLocIndex, int a3) -{ -#pragma unused(heapId) - struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2); - struct PlayerParty * party = SavArray_PlayerParty_get(sav2); - struct Pokemon * mon = AllocMonZeroed(32); - ZeroMonData(mon); - MOD05_SetEggStats(mon, species, level, data, 4, FUN_02015CF8(metLocIndex, a3)); - BOOL isAdded = AddMonToParty(party, mon); - FreeToHeap(mon); - return isAdded; -} - -void PartyMonSetMoveInSlot(struct PlayerParty * party, int partySlot, int moveSlot, u16 move) -{ - struct Pokemon * mon = GetPartyMonByIndex(party, partySlot); - MonSetMoveInSlot(mon, move, (u8)moveSlot); -} - -int GetIdxOfFirstPartyMonWithMove(struct PlayerParty * party, int move) -{ - int partyCount = GetPartyCount(party); - - for (int i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if (GetMonData(mon, MON_DATA_IS_EGG, NULL)) - continue; - if (GetMonData(mon, MON_DATA_MOVE1, NULL) == move - || GetMonData(mon, MON_DATA_MOVE2, NULL) == move - || GetMonData(mon, MON_DATA_MOVE3, NULL) == move - || GetMonData(mon, MON_DATA_MOVE4, NULL) == move) - return i; - } - return 0xFF; -} - -int CountAlivePokemon(struct PlayerParty * party) -{ - int partyCount = GetPartyCount(party); - int i; - int aliveCount = 0; - - for (i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if(MonNotFaintedOrEgg(mon)) - aliveCount++; - } - return aliveCount; -} - -struct Pokemon * GetFirstAliveMonInParty_CrashIfNone(struct PlayerParty * party) -{ - int i; - int partyCount = GetPartyCount(party); - - for (i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if(MonNotFaintedOrEgg(mon)) - return mon; - } - GF_ASSERT(0); - return 0; -} - -struct Pokemon * GetFirstNonEggInParty(struct PlayerParty * party) -{ - u16 i; - u16 partyCount = (u16)GetPartyCount(party); - - for (i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if (!GetMonData(mon, MON_DATA_IS_EGG, NULL)) - return mon; - } - return 0; -} - -BOOL HasEnoughAlivePokemonForDoubleBattle(struct PlayerParty * party) -{ - return (CountAlivePokemon(party) >= 2); -} - -void GiveAllMonsTheSinnohChampRibbon(struct PlayerParty * party) -{ - u8 var = 1; - int partyCount = GetPartyCount(party); - - - for (int i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if (GetMonData(mon, MON_DATA_IS_EGG, NULL)) - continue; - - SetMonData(mon, MON_DATA_SINNOH_CHAMP_RIBBON, &var); - } -} - -int ApplyPoisonStep(struct PlayerParty * party, int location) -{ - u32 hp; - int numPoisoned = 0; - int numHealed = 0; - int partyCount = GetPartyCount(party); - - for (int i = 0; i < partyCount; i++) - { - struct Pokemon * mon = GetPartyMonByIndex(party, i); - - if(!MonNotFaintedOrEgg(mon)) - continue; - - if (!(GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88)) - continue; - - hp = GetMonData(mon, MON_DATA_HP, NULL); - if (hp > 1) - hp--; - SetMonData(mon, MON_DATA_HP, &hp); - if (hp == 1) - { - numHealed++; - MonApplyFriendshipMod(mon, FRIENDSHIP_EVENT_HEAL_FIELD_PSN, (u32)location); - } - numPoisoned++; - } - - if (numHealed != 0) - return FLDPSN_HEAL; - - if (numPoisoned != 0) - return FLDPSN_PSN; - - return FLDPSN_NONE; -} - -BOOL SurvivePoisoning(struct Pokemon * mon) -{ - int status; - if (GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88) - { - if (GetMonData(mon, MON_DATA_HP, NULL) == 1) - { - status = 0; - SetMonData(mon, MON_DATA_STATUS, &status); - return TRUE; - } - } - return FALSE; -} +#include "global.h" +#include "heap.h" +#include "party.h" +#include "player_data.h" +#include "pokemon.h" +#include "save_block_2.h" +#include "unk_02015CC0.h" +#include "unk_0202C144.h" +#include "module_05.h" +#include "script_pokemon_util.h" +#include "constants/items.h" +#include "constants/script_pokemon_util.h" + +#pragma thumb on + +BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon) +{ + if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0) + return FALSE; + if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL)) + return FALSE; + return TRUE; +} + +BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType) +{ + u32 ptr; + struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2); + struct PlayerParty * party = SavArray_PlayerParty_get(sav2); + struct Pokemon * mon = AllocMonZeroed(heap_id); + ZeroMonData(mon); + CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id); + ptr = item; + SetMonData(mon, MON_DATA_HELD_ITEM, &ptr); + BOOL isAdded = AddMonToParty(party, mon); + if (isAdded) + { + FUN_0202C144(sav2, mon); + } + FreeToHeap(mon); + return isAdded; +} + +/* Seems to have something to do with Manaphy Egg*/ +BOOL GiveEgg(u32 heapId, struct SaveBlock2 * sav2, u16 species, int level, int metLocIndex, int a3) +{ +#pragma unused(heapId) + struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2); + struct PlayerParty * party = SavArray_PlayerParty_get(sav2); + struct Pokemon * mon = AllocMonZeroed(32); + ZeroMonData(mon); + MOD05_SetEggStats(mon, species, level, data, 4, FUN_02015CF8(metLocIndex, a3)); + BOOL isAdded = AddMonToParty(party, mon); + FreeToHeap(mon); + return isAdded; +} + +void PartyMonSetMoveInSlot(struct PlayerParty * party, int partySlot, int moveSlot, u16 move) +{ + struct Pokemon * mon = GetPartyMonByIndex(party, partySlot); + MonSetMoveInSlot(mon, move, (u8)moveSlot); +} + +int GetIdxOfFirstPartyMonWithMove(struct PlayerParty * party, int move) +{ + int partyCount = GetPartyCount(party); + + for (int i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if (GetMonData(mon, MON_DATA_IS_EGG, NULL)) + continue; + if (GetMonData(mon, MON_DATA_MOVE1, NULL) == move + || GetMonData(mon, MON_DATA_MOVE2, NULL) == move + || GetMonData(mon, MON_DATA_MOVE3, NULL) == move + || GetMonData(mon, MON_DATA_MOVE4, NULL) == move) + return i; + } + return 0xFF; +} + +int CountAlivePokemon(struct PlayerParty * party) +{ + int partyCount = GetPartyCount(party); + int i; + int aliveCount = 0; + + for (i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if(MonNotFaintedOrEgg(mon)) + aliveCount++; + } + return aliveCount; +} + +struct Pokemon * GetFirstAliveMonInParty_CrashIfNone(struct PlayerParty * party) +{ + int i; + int partyCount = GetPartyCount(party); + + for (i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if(MonNotFaintedOrEgg(mon)) + return mon; + } + GF_ASSERT(0); + return 0; +} + +struct Pokemon * GetFirstNonEggInParty(struct PlayerParty * party) +{ + u16 i; + u16 partyCount = (u16)GetPartyCount(party); + + for (i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if (!GetMonData(mon, MON_DATA_IS_EGG, NULL)) + return mon; + } + return 0; +} + +BOOL HasEnoughAlivePokemonForDoubleBattle(struct PlayerParty * party) +{ + return (CountAlivePokemon(party) >= 2); +} + +void GiveAllMonsTheSinnohChampRibbon(struct PlayerParty * party) +{ + u8 var = 1; + int partyCount = GetPartyCount(party); + + + for (int i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if (GetMonData(mon, MON_DATA_IS_EGG, NULL)) + continue; + + SetMonData(mon, MON_DATA_SINNOH_CHAMP_RIBBON, &var); + } +} + +int ApplyPoisonStep(struct PlayerParty * party, int location) +{ + u32 hp; + int numPoisoned = 0; + int numHealed = 0; + int partyCount = GetPartyCount(party); + + for (int i = 0; i < partyCount; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + + if(!MonNotFaintedOrEgg(mon)) + continue; + + if (!(GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88)) + continue; + + hp = GetMonData(mon, MON_DATA_HP, NULL); + if (hp > 1) + hp--; + SetMonData(mon, MON_DATA_HP, &hp); + if (hp == 1) + { + numHealed++; + MonApplyFriendshipMod(mon, FRIENDSHIP_EVENT_HEAL_FIELD_PSN, (u32)location); + } + numPoisoned++; + } + + if (numHealed != 0) + return FLDPSN_HEAL; + + if (numPoisoned != 0) + return FLDPSN_PSN; + + return FLDPSN_NONE; +} + +BOOL SurvivePoisoning(struct Pokemon * mon) +{ + int status; + if (GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88) + { + if (GetMonData(mon, MON_DATA_HP, NULL) == 1) + { + status = 0; + SetMonData(mon, MON_DATA_STATUS, &status); + return TRUE; + } + } + return FALSE; +} diff --git a/arm9/src/string_util.c b/arm9/src/string_util.c index 19ed5fa3c..f4cda0f71 100644 --- a/arm9/src/string_util.c +++ b/arm9/src/string_util.c @@ -1,143 +1,143 @@ -#include "string_util.h" - -const u16 gDigitTable[] = { - 0xA2, - 0xA3, - 0xA4, - 0xA5, - 0xA6, - 0xA7, - 0xA8, - 0xA9, - 0xAA, - 0xAB, - 0xAC, - 0xAD, - 0xAE, - 0xAF, - 0xB0, - 0xB1 -}; - -const s32 gPowersOfTen[] = { - 1, - 10, - 100, - 1000, - 10000, - 100000, - 1000000, - 10000000, - 100000000, - 1000000000, -}; - -THUMB_FUNC void CopyU16StringArray(u16 *dest, const u16 *src) -{ - u16 c = *src; - while (c != EOS) { - src++; - *dest = c; - c = *src; - dest++; - } - *dest = EOS; -} - -THUMB_FUNC u16 *CopyU16StringArrayN(u16 *dest, const u16 *src, u32 num) -{ - u32 copied = 0; - if (num > copied) { - u16 *p = dest; - do { - u16 c = *src; - copied++; - src++; - *p = c; - p++; - } while (num > copied); - } - return dest + num; -} - -THUMB_FUNC u32 StringLength(const u16 *s) -{ - u16 c = *s; - u32 len = 0; - while (c != EOS) { - s++; - c = *s; - len++; - } - return len; -} - -THUMB_FUNC BOOL StringNotEqual(const u16 *s1, const u16 *s2) -{ - for (; *s1 == *s2; s1++, s2++) { - if (*s1 == EOS) - return FALSE; - } - return TRUE; -} - -THUMB_FUNC BOOL StringNotEqualN(const u16 *s1, const u16 *s2, u32 num) -{ - u16 c1, c2; - c2 = *s2; - c1 = *s1; - while (c1 == c2) { - if (num == 0) { - return FALSE; - } - if (*s1 == EOS && *s2 == EOS) { - return FALSE; - } - s1++; - s2++; - c2 = *s2; - c1 = *s1; - num--; - } - return TRUE; -} - -THUMB_FUNC u16 *StringFill(u16 *dest, u16 value, u32 num) -{ - u32 copied = 0; - if (num > copied) { - u16 *p = dest; - do { - copied++; - *p = value; - p++; - } while (copied < num); - } - return dest + copied; -} - -THUMB_FUNC u16 *StringFillEOS(u16 *dest, u32 num) -{ - return StringFill(dest, EOS, num); -} - -THUMB_FUNC u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n) -{ - for (u32 x = (u32)gPowersOfTen[n - 1]; x != 0; x = x / 10) { - u16 res = (u16)(value / x); - value = value - x * res; - if (mode == PAD_ZEROES) { - *dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res]; - dest++; - } else if (res != 0 || x == 1) { - mode = PAD_ZEROES; - *dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res]; - dest++; - } else if (mode == PAD_SPACE) { - *dest = 1; - dest++; - } - } - *dest = EOS; - return dest; -} +#include "string_util.h" + +const u16 gDigitTable[] = { + 0xA2, + 0xA3, + 0xA4, + 0xA5, + 0xA6, + 0xA7, + 0xA8, + 0xA9, + 0xAA, + 0xAB, + 0xAC, + 0xAD, + 0xAE, + 0xAF, + 0xB0, + 0xB1 +}; + +const s32 gPowersOfTen[] = { + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, +}; + +THUMB_FUNC void CopyU16StringArray(u16 *dest, const u16 *src) +{ + u16 c = *src; + while (c != EOS) { + src++; + *dest = c; + c = *src; + dest++; + } + *dest = EOS; +} + +THUMB_FUNC u16 *CopyU16StringArrayN(u16 *dest, const u16 *src, u32 num) +{ + u32 copied = 0; + if (num > copied) { + u16 *p = dest; + do { + u16 c = *src; + copied++; + src++; + *p = c; + p++; + } while (num > copied); + } + return dest + num; +} + +THUMB_FUNC u32 StringLength(const u16 *s) +{ + u16 c = *s; + u32 len = 0; + while (c != EOS) { + s++; + c = *s; + len++; + } + return len; +} + +THUMB_FUNC BOOL StringNotEqual(const u16 *s1, const u16 *s2) +{ + for (; *s1 == *s2; s1++, s2++) { + if (*s1 == EOS) + return FALSE; + } + return TRUE; +} + +THUMB_FUNC BOOL StringNotEqualN(const u16 *s1, const u16 *s2, u32 num) +{ + u16 c1, c2; + c2 = *s2; + c1 = *s1; + while (c1 == c2) { + if (num == 0) { + return FALSE; + } + if (*s1 == EOS && *s2 == EOS) { + return FALSE; + } + s1++; + s2++; + c2 = *s2; + c1 = *s1; + num--; + } + return TRUE; +} + +THUMB_FUNC u16 *StringFill(u16 *dest, u16 value, u32 num) +{ + u32 copied = 0; + if (num > copied) { + u16 *p = dest; + do { + copied++; + *p = value; + p++; + } while (copied < num); + } + return dest + copied; +} + +THUMB_FUNC u16 *StringFillEOS(u16 *dest, u32 num) +{ + return StringFill(dest, EOS, num); +} + +THUMB_FUNC u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n) +{ + for (u32 x = (u32)gPowersOfTen[n - 1]; x != 0; x = x / 10) { + u16 res = (u16)(value / x); + value = value - x * res; + if (mode == PAD_ZEROES) { + *dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res]; + dest++; + } else if (res != 0 || x == 1) { + mode = PAD_ZEROES; + *dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res]; + dest++; + } else if (mode == PAD_SPACE) { + *dest = 1; + dest++; + } + } + *dest = EOS; + return dest; +} diff --git a/arm9/src/unk_020061E8.c b/arm9/src/unk_020061E8.c index 6b9f8eadb..a06bcabf7 100644 --- a/arm9/src/unk_020061E8.c +++ b/arm9/src/unk_020061E8.c @@ -1,35 +1,35 @@ -#include "global.h" -#include "heap.h" -#include "unk_0200CA44.h" -#include "unk_020061E8.h" - -extern struct TextPrinter *FUN_0201B6C8(void); - -THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3) -{ - void * r4; - if(r1 != 0) - { - r4 = AllocFromHeap(r3, r1); - if(r4 == 0) - { - return FALSE; - } - memset(r4, 0, r1); - } - else - { - r4 = NULL; - } - return FUN_0200CA44(r0, r4, r2); -} - -THUMB_FUNC void FUN_0200621C(s32 r4) -{ - struct TextPrinter * r0 = FUN_0201B6C8(); - if(r0 != NULL) - { - FreeToHeap(r0); - } - FUN_0200CAB4(r4); -} +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" +#include "unk_020061E8.h" + +extern struct TextPrinter *FUN_0201B6C8(void); + +THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3) +{ + void * r4; + if(r1 != 0) + { + r4 = AllocFromHeap(r3, r1); + if(r4 == 0) + { + return FALSE; + } + memset(r4, 0, r1); + } + else + { + r4 = NULL; + } + return FUN_0200CA44(r0, r4, r2); +} + +THUMB_FUNC void FUN_0200621C(s32 r4) +{ + struct TextPrinter * r0 = FUN_0201B6C8(); + if(r0 != NULL) + { + FreeToHeap(r0); + } + FUN_0200CAB4(r4); +} diff --git a/arm9/src/unk_0200E1D0.c b/arm9/src/unk_0200E1D0.c index 32f356055..1dc5724b4 100644 --- a/arm9/src/unk_0200E1D0.c +++ b/arm9/src/unk_0200E1D0.c @@ -1,16 +1,16 @@ -#include "global.h" - -struct UnkStruct_021C46B4 -{ - u8 unk_000[0x14]; - u8 unk_014[0x30]; - u8 unk_044[0x30]; - u8 unk_074[0x18]; - u8 unk_08C[0xC0]; - u16 unk_14C; - u8 unk_14E; - u8 unk_14F; - u32 unk_150; -}; - -struct UnkStruct_021C46B4 UNK_021C46B4; +#include "global.h" + +struct UnkStruct_021C46B4 +{ + u8 unk_000[0x14]; + u8 unk_014[0x30]; + u8 unk_044[0x30]; + u8 unk_074[0x18]; + u8 unk_08C[0xC0]; + u16 unk_14C; + u8 unk_14E; + u8 unk_14F; + u32 unk_150; +}; + +struct UnkStruct_021C46B4 UNK_021C46B4; diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c index 151a9cd6d..66431d8e8 100644 --- a/arm9/src/unk_0201C6B4.c +++ b/arm9/src/unk_0201C6B4.c @@ -1,80 +1,80 @@ -#include "global.h" -#include "unk_0201C6B4.h" - -THUMB_FUNC s32 FUN_0201C6B4(s8 * r0) -{ - s32 r2 = 0; - while(r0[r2] != 0) - { - r2++; - } - return r2; -} - -THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) -{ - for(int r3 = 0; r3 < 0x100; r3++) - { - r1[r3] = r0[r3]; - if(r2 == r0[r3] || r0[r3] == 0) - { - r1[r3] = 0; - if(r2 == 0xd && r0[r3 + 1] == 0xa) - { - return &r0[r3 + 2]; - } - return &r0[r3 + 1]; - } - } - return NULL; -} - -THUMB_FUNC s32 FUN_0201C70C(s8 * r4) -{ - s32 unk0 = FUN_0201C6B4(r4); - s32 r3; - s32 r5 = 1; - s32 r6 = 0; - for(r3 = unk0 - 1; r3 >= 0; r3--) - { - if(r4[r3] >= 0x30 && r4[r3] <= 0x39) - { - r6 += (r4[r3] - 0x30) * r5; - } - else - { - if(r3 == 0) - { - if(r4[r3] == 0x2d) - { - r6 *= -1; - } - } - else - { - return -1; - } - } - r5 *= 0xa; - } - return r6; -} - -THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) -{ - for(u8 r2 = 0; r2 < 4; r2++) - { - s32 * unk5 = (s32 *)r5; - unk5[r2] = 0; - } - u8 r0 = (u8)(FUN_0201C6B4(r4)); - for(u8 r2 = 0; r2 < r0; r2++) - { - r5[r2] = r4[r2]; - } -} - -THUMB_FUNC BOOL FUN_0201C78C(u32 r0) -{ - return r0 < 0x121; -} +#include "global.h" +#include "unk_0201C6B4.h" + +THUMB_FUNC s32 FUN_0201C6B4(s8 * r0) +{ + s32 r2 = 0; + while(r0[r2] != 0) + { + r2++; + } + return r2; +} + +THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) +{ + for(int r3 = 0; r3 < 0x100; r3++) + { + r1[r3] = r0[r3]; + if(r2 == r0[r3] || r0[r3] == 0) + { + r1[r3] = 0; + if(r2 == 0xd && r0[r3 + 1] == 0xa) + { + return &r0[r3 + 2]; + } + return &r0[r3 + 1]; + } + } + return NULL; +} + +THUMB_FUNC s32 FUN_0201C70C(s8 * r4) +{ + s32 unk0 = FUN_0201C6B4(r4); + s32 r3; + s32 r5 = 1; + s32 r6 = 0; + for(r3 = unk0 - 1; r3 >= 0; r3--) + { + if(r4[r3] >= 0x30 && r4[r3] <= 0x39) + { + r6 += (r4[r3] - 0x30) * r5; + } + else + { + if(r3 == 0) + { + if(r4[r3] == 0x2d) + { + r6 *= -1; + } + } + else + { + return -1; + } + } + r5 *= 0xa; + } + return r6; +} + +THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) +{ + for(u8 r2 = 0; r2 < 4; r2++) + { + s32 * unk5 = (s32 *)r5; + unk5[r2] = 0; + } + u8 r0 = (u8)(FUN_0201C6B4(r4)); + for(u8 r2 = 0; r2 < r0; r2++) + { + r5[r2] = r4[r2]; + } +} + +THUMB_FUNC BOOL FUN_0201C78C(u32 r0) +{ + return r0 < 0x121; +} diff --git a/arm9/src/unk_02021590.c b/arm9/src/unk_02021590.c index 9a9f1cb34..07c931aa6 100644 --- a/arm9/src/unk_02021590.c +++ b/arm9/src/unk_02021590.c @@ -1,262 +1,262 @@ -#include "global.h" -#include "unk_02021590.h" -#include "filesystem.h" -#include "heap.h" -#include "string_control_code.h" -#include "string_util.h" - -static const u8 sGlyphShapes[][2] = { - { 0, 1 }, - { 2, 3 }, -}; - -static void (*const sAllocators[])(struct FontData *, u32) = { - InitFontResources_FromPreloaded, - InitFontResources_LazyFromNarc, -}; - -static void (*const sDestructors[])(struct FontData *) = { - FreeLoadedFontResources_FromPreloaded, - FreeLoadedFontResources_LazyFromNarc, -}; - -THUMB_FUNC struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id) -{ - struct FontData * ret = (struct FontData *)AllocFromHeap(heap_id, sizeof(struct FontData)); - if (ret != NULL) - { - FontData_Init(ret, narcId, fileId, unk3, heap_id); - InitFontResources(ret, unk2, heap_id); - } - return ret; -} - -THUMB_FUNC void FontData_delete(struct FontData * ptr) -{ - FreeLoadedFontResources(ptr); - FontData_FreeWidthsAndNarc(ptr); - FreeToHeap(ptr); -} - -THUMB_FUNC void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id) -{ - if (ptr->glyphAccessMode != a1) - { - FreeLoadedFontResources(ptr); - InitFontResources(ptr, a1, heap_id); - } -} - -THUMB_FUNC void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id) -{ - ptr->narc = NARC_ctor(narcId, heap_id); - if (ptr->narc != NULL) - { - NARC_ReadFromMember(ptr->narc, (u32)fileId, 0, 16, &ptr->gfxHeader); - ptr->isFixedWidthFont = unk; - if (unk) - { - ptr->glyphWidths = NULL; - ptr->glyphWidthFunc = GetGlyphWidth_FixedWidth; - } - else - { - GF_ASSERT(ptr->gfxHeader.widthDataStart != 0); - ptr->glyphWidths = AllocFromHeap(heap_id, ptr->gfxHeader.numGlyphs); - ptr->glyphWidthFunc = GetGlyphWidth_VariableWidth; - NARC_ReadFromMember(ptr->narc, (u32)fileId, ptr->gfxHeader.widthDataStart, ptr->gfxHeader.numGlyphs, ptr->glyphWidths); - } - GF_ASSERT(ptr->gfxHeader.glyphWidth <= 2 && ptr->gfxHeader.glyphHeight <= 2); - ptr->glyphShape = sGlyphShapes[ptr->gfxHeader.glyphWidth - 1][ptr->gfxHeader.glyphHeight - 1]; - ptr->glyphSize = (u32)(16 * ptr->gfxHeader.glyphWidth * ptr->gfxHeader.glyphHeight); - ptr->fileId = (u32)fileId; - } -} - -THUMB_FUNC void FontData_FreeWidthsAndNarc(struct FontData * ptr) -{ - if (ptr->glyphWidths != NULL) - FreeToHeap(ptr->glyphWidths); - if (ptr->narc != NULL) - NARC_dtor(ptr->narc); -} - -THUMB_FUNC void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id) -{ - ptr->glyphAccessMode = a1; - sAllocators[a1](ptr, heap_id); -} - -THUMB_FUNC void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id) -{ - u32 r4 = ptr->glyphSize * ptr->gfxHeader.numGlyphs; - ptr->narcReadBuf = AllocFromHeap(heap_id, r4); - ptr->uncompGlyphFunc = DecompressGlyphTiles_FromPreloaded; - NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize, r4, ptr->narcReadBuf); -} - -THUMB_FUNC void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id) -{ -#pragma unused(heap_id) - ptr->uncompGlyphFunc = DecompressGlyphTiles_LazyFromNarc; -} - -THUMB_FUNC void FreeLoadedFontResources(struct FontData * ptr) -{ - sDestructors[ptr->glyphAccessMode](ptr); -} - -THUMB_FUNC void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr) -{ - FreeToHeap(ptr->narcReadBuf); - ptr->narcReadBuf = NULL; -} - -THUMB_FUNC void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr) -{ -#pragma unused(ptr) -} - -THUMB_FUNC void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2) -{ - if (param1 <= ptr->gfxHeader.numGlyphs) - ptr->uncompGlyphFunc(ptr, (u16)(param1 - 1), ptr2); - else - { - ptr2->width = 0; - ptr2->height = 0; - } -} - -THUMB_FUNC void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2) -{ - u8 *r4 = &((u8 *)ptr->narcReadBuf)[param1 * ptr->glyphSize]; - switch (ptr->glyphShape) - { - case 0: - DecompressGlyphTile((void *)(r4), (void *)param2->buf); - break; - case 1: - DecompressGlyphTile((void *)(r4), (void *)param2->buf); - DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x40)); - break; - case 2: - DecompressGlyphTile((void *)(r4), (void *)param2->buf); - DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20)); - break; - case 3: - DecompressGlyphTile((void *)(r4), (void *)param2->buf); - DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20)); - DecompressGlyphTile((void *)(r4 + 0x20), (void *)(param2->buf + 0x40)); - DecompressGlyphTile((void *)(r4 + 0x30), (void *)(param2->buf + 0x60)); - break; - } - param2->width = (u8)ptr->glyphWidthFunc(ptr, param1); - param2->height = ptr->gfxHeader.fixedHeight; -} - -THUMB_FUNC void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2) -{ - NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize + param1 * ptr->glyphSize, ptr->glyphSize, ptr->glyphReadBuf); - switch (ptr->glyphShape) - { - case 0: - DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); - break; - case 1: - DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); - DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x40)); - break; - case 2: - DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); - DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20)); - break; - case 3: - DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); - DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20)); - DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x20), (void *)(param2->buf + 0x40)); - DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x30), (void *)(param2->buf + 0x60)); - break; - } - param2->width = (u8)ptr->glyphWidthFunc(ptr, param1); - param2->height = ptr->gfxHeader.fixedHeight; -} - -THUMB_FUNC u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing) -{ - u32 width = 0; - - while (*str != EOS) - { - if (*str == 0xFFFE) - { - str = MsgArray_SkipControlCode(str); - if (*str == EOS) - break; - } - width += ptr->glyphWidthFunc(ptr, (*str) - 1) + letterSpacing; - str++; - } - return width - letterSpacing; -} - -THUMB_FUNC int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1) -{ - return ptr->glyphWidths[a1]; -} - -THUMB_FUNC int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1) -{ -#pragma unused(a1) - return ptr->gfxHeader.fixedWidth; -} - -THUMB_FUNC s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6) -{ - s32 ret = 0; - u32 r4 = 0; - while (*arr != 0xFFFF) - { - if (*arr == 0xFFFE) - { - arr = MsgArray_SkipControlCode(arr); - } - else if (*arr == 0xE000) // newline - { - if (ret < r4 - r6) - ret = (int)(r4 - r6); - r4 = 0; - arr++; - } - else - { - r4 += (r6 + r7->glyphWidthFunc(r7, *arr - 1)); - arr++; - } - } - if (ret < r4 - r6) - ret = (int)(r4 - r6); - return ret; -} - -THUMB_FUNC s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr) -{ - s32 ret = 0; - while (*arr != 0xFFFF) - { - if (*arr == 0xFFFE) - { - if (MsgArray_GetControlCode(arr) == 515) - { - ret = MsgArray_ControlCodeGetField(arr, 0) - 12; - } - arr = MsgArray_SkipControlCode(arr); - } - else - { - ret += r6->glyphWidthFunc(r6, *arr - 1); - arr++; - } - } - return ret; -} +#include "global.h" +#include "unk_02021590.h" +#include "filesystem.h" +#include "heap.h" +#include "string_control_code.h" +#include "string_util.h" + +static const u8 sGlyphShapes[][2] = { + { 0, 1 }, + { 2, 3 }, +}; + +static void (*const sAllocators[])(struct FontData *, u32) = { + InitFontResources_FromPreloaded, + InitFontResources_LazyFromNarc, +}; + +static void (*const sDestructors[])(struct FontData *) = { + FreeLoadedFontResources_FromPreloaded, + FreeLoadedFontResources_LazyFromNarc, +}; + +THUMB_FUNC struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id) +{ + struct FontData * ret = (struct FontData *)AllocFromHeap(heap_id, sizeof(struct FontData)); + if (ret != NULL) + { + FontData_Init(ret, narcId, fileId, unk3, heap_id); + InitFontResources(ret, unk2, heap_id); + } + return ret; +} + +THUMB_FUNC void FontData_delete(struct FontData * ptr) +{ + FreeLoadedFontResources(ptr); + FontData_FreeWidthsAndNarc(ptr); + FreeToHeap(ptr); +} + +THUMB_FUNC void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id) +{ + if (ptr->glyphAccessMode != a1) + { + FreeLoadedFontResources(ptr); + InitFontResources(ptr, a1, heap_id); + } +} + +THUMB_FUNC void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id) +{ + ptr->narc = NARC_ctor(narcId, heap_id); + if (ptr->narc != NULL) + { + NARC_ReadFromMember(ptr->narc, (u32)fileId, 0, 16, &ptr->gfxHeader); + ptr->isFixedWidthFont = unk; + if (unk) + { + ptr->glyphWidths = NULL; + ptr->glyphWidthFunc = GetGlyphWidth_FixedWidth; + } + else + { + GF_ASSERT(ptr->gfxHeader.widthDataStart != 0); + ptr->glyphWidths = AllocFromHeap(heap_id, ptr->gfxHeader.numGlyphs); + ptr->glyphWidthFunc = GetGlyphWidth_VariableWidth; + NARC_ReadFromMember(ptr->narc, (u32)fileId, ptr->gfxHeader.widthDataStart, ptr->gfxHeader.numGlyphs, ptr->glyphWidths); + } + GF_ASSERT(ptr->gfxHeader.glyphWidth <= 2 && ptr->gfxHeader.glyphHeight <= 2); + ptr->glyphShape = sGlyphShapes[ptr->gfxHeader.glyphWidth - 1][ptr->gfxHeader.glyphHeight - 1]; + ptr->glyphSize = (u32)(16 * ptr->gfxHeader.glyphWidth * ptr->gfxHeader.glyphHeight); + ptr->fileId = (u32)fileId; + } +} + +THUMB_FUNC void FontData_FreeWidthsAndNarc(struct FontData * ptr) +{ + if (ptr->glyphWidths != NULL) + FreeToHeap(ptr->glyphWidths); + if (ptr->narc != NULL) + NARC_dtor(ptr->narc); +} + +THUMB_FUNC void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id) +{ + ptr->glyphAccessMode = a1; + sAllocators[a1](ptr, heap_id); +} + +THUMB_FUNC void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id) +{ + u32 r4 = ptr->glyphSize * ptr->gfxHeader.numGlyphs; + ptr->narcReadBuf = AllocFromHeap(heap_id, r4); + ptr->uncompGlyphFunc = DecompressGlyphTiles_FromPreloaded; + NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize, r4, ptr->narcReadBuf); +} + +THUMB_FUNC void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id) +{ +#pragma unused(heap_id) + ptr->uncompGlyphFunc = DecompressGlyphTiles_LazyFromNarc; +} + +THUMB_FUNC void FreeLoadedFontResources(struct FontData * ptr) +{ + sDestructors[ptr->glyphAccessMode](ptr); +} + +THUMB_FUNC void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr) +{ + FreeToHeap(ptr->narcReadBuf); + ptr->narcReadBuf = NULL; +} + +THUMB_FUNC void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr) +{ +#pragma unused(ptr) +} + +THUMB_FUNC void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2) +{ + if (param1 <= ptr->gfxHeader.numGlyphs) + ptr->uncompGlyphFunc(ptr, (u16)(param1 - 1), ptr2); + else + { + ptr2->width = 0; + ptr2->height = 0; + } +} + +THUMB_FUNC void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2) +{ + u8 *r4 = &((u8 *)ptr->narcReadBuf)[param1 * ptr->glyphSize]; + switch (ptr->glyphShape) + { + case 0: + DecompressGlyphTile((void *)(r4), (void *)param2->buf); + break; + case 1: + DecompressGlyphTile((void *)(r4), (void *)param2->buf); + DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x40)); + break; + case 2: + DecompressGlyphTile((void *)(r4), (void *)param2->buf); + DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20)); + break; + case 3: + DecompressGlyphTile((void *)(r4), (void *)param2->buf); + DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20)); + DecompressGlyphTile((void *)(r4 + 0x20), (void *)(param2->buf + 0x40)); + DecompressGlyphTile((void *)(r4 + 0x30), (void *)(param2->buf + 0x60)); + break; + } + param2->width = (u8)ptr->glyphWidthFunc(ptr, param1); + param2->height = ptr->gfxHeader.fixedHeight; +} + +THUMB_FUNC void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2) +{ + NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize + param1 * ptr->glyphSize, ptr->glyphSize, ptr->glyphReadBuf); + switch (ptr->glyphShape) + { + case 0: + DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); + break; + case 1: + DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); + DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x40)); + break; + case 2: + DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); + DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20)); + break; + case 3: + DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf); + DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20)); + DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x20), (void *)(param2->buf + 0x40)); + DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x30), (void *)(param2->buf + 0x60)); + break; + } + param2->width = (u8)ptr->glyphWidthFunc(ptr, param1); + param2->height = ptr->gfxHeader.fixedHeight; +} + +THUMB_FUNC u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing) +{ + u32 width = 0; + + while (*str != EOS) + { + if (*str == 0xFFFE) + { + str = MsgArray_SkipControlCode(str); + if (*str == EOS) + break; + } + width += ptr->glyphWidthFunc(ptr, (*str) - 1) + letterSpacing; + str++; + } + return width - letterSpacing; +} + +THUMB_FUNC int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1) +{ + return ptr->glyphWidths[a1]; +} + +THUMB_FUNC int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1) +{ +#pragma unused(a1) + return ptr->gfxHeader.fixedWidth; +} + +THUMB_FUNC s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6) +{ + s32 ret = 0; + u32 r4 = 0; + while (*arr != 0xFFFF) + { + if (*arr == 0xFFFE) + { + arr = MsgArray_SkipControlCode(arr); + } + else if (*arr == 0xE000) // newline + { + if (ret < r4 - r6) + ret = (int)(r4 - r6); + r4 = 0; + arr++; + } + else + { + r4 += (r6 + r7->glyphWidthFunc(r7, *arr - 1)); + arr++; + } + } + if (ret < r4 - r6) + ret = (int)(r4 - r6); + return ret; +} + +THUMB_FUNC s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr) +{ + s32 ret = 0; + while (*arr != 0xFFFF) + { + if (*arr == 0xFFFE) + { + if (MsgArray_GetControlCode(arr) == 515) + { + ret = MsgArray_ControlCodeGetField(arr, 0) - 12; + } + arr = MsgArray_SkipControlCode(arr); + } + else + { + ret += r6->glyphWidthFunc(r6, *arr - 1); + arr++; + } + } + return ret; +} diff --git a/arm9/src/unk_020222E8.c b/arm9/src/unk_020222E8.c index dbd43d8d7..45db1f4ed 100644 --- a/arm9/src/unk_020222E8.c +++ b/arm9/src/unk_020222E8.c @@ -1,34 +1,34 @@ -#include "global.h" -#include "unk_020222E8.h" -#include "mmap.h" - -THUMB_FUNC void * FUN_020222E8() -{ - return (void *)HW_BG_PLTT; -} - -THUMB_FUNC u32 FUN_020222F0() -{ - return HW_BG_PLTT_SIZE; -} - -THUMB_FUNC void * FUN_020222F8() -{ - return (void *)HW_DB_BG_PLTT; -} - -THUMB_FUNC u32 FUN_02022300() -{ - return HW_DB_BG_PLTT_SIZE; -} - -THUMB_FUNC void * FUN_02022308() -{ - return (void *)HW_OBJ_PLTT; -} - -THUMB_FUNC void * FUN_02022310() -{ - return (void *)HW_DB_OBJ_PLTT; -} - +#include "global.h" +#include "unk_020222E8.h" +#include "mmap.h" + +THUMB_FUNC void * FUN_020222E8() +{ + return (void *)HW_BG_PLTT; +} + +THUMB_FUNC u32 FUN_020222F0() +{ + return HW_BG_PLTT_SIZE; +} + +THUMB_FUNC void * FUN_020222F8() +{ + return (void *)HW_DB_BG_PLTT; +} + +THUMB_FUNC u32 FUN_02022300() +{ + return HW_DB_BG_PLTT_SIZE; +} + +THUMB_FUNC void * FUN_02022308() +{ + return (void *)HW_OBJ_PLTT; +} + +THUMB_FUNC void * FUN_02022310() +{ + return (void *)HW_DB_OBJ_PLTT; +} + diff --git a/arm9/src/unk_02029FB0.c b/arm9/src/unk_02029FB0.c index 52cd52026..5a6618b13 100644 --- a/arm9/src/unk_02029FB0.c +++ b/arm9/src/unk_02029FB0.c @@ -1,357 +1,357 @@ -#include "global.h" -#include "pokedex.h" -#include "unk_02029FB0.h" - -const u16 UNK_020EEA7C[] = { - 0x0001, // 00 - 0x0001, // 01 - 0x0001, // 02 - 0x0001, // 03 - 0x0001, // 04 - 0x0001, // 05 - 0x0002, // 06 - 0x0002, // 07 - 0x0002, // 08 - 0x0002, // 09 - 0x0003, // 10 - 0x0003, // 11 - 0x0003, // 12 - 0x0007, // 13 - 0x0007, // 14 - 0x0007, // 15 - 0x000A, // 16 - 0x000A, // 17 - 0x000B, // 18 - 0x000B, // 19 - 0x000B, // 20 - 0x000B, // 21 - 0x0014, // 22 - 0x001E, // 23 - 0x0023, // 24 - 0x0028, // 25 - 0x01F4, // 26 - 0x2710, // 27 - 0x001E, // 28 - 0x001E, // 29 - 0x0002, // 30 - 0x0005, // 31 - 0x0001, // 32 - 0x0001, // 33 - 0x0005, // 34 - 0x0003, // 35 - 0x0001, // 36 - 0x0001, // 37 -}; - -u8 UNK_02105CD8[] = { - TRUE, // 000 - TRUE, // 001 - FALSE, // 002 - TRUE, // 003 - TRUE, // 004 - TRUE, // 005 - TRUE, // 006 - TRUE, // 007 - TRUE, // 008 - FALSE, // 009 - FALSE, // 010 - FALSE, // 011 - TRUE, // 012 - TRUE, // 013 - TRUE, // 014 - TRUE, // 015 - TRUE, // 016 - TRUE, // 017 - TRUE, // 018 - TRUE, // 019 - TRUE, // 020 - TRUE, // 021 - TRUE, // 022 - TRUE, // 023 - TRUE, // 024 - TRUE, // 025 - TRUE, // 026 - TRUE, // 027 - TRUE, // 028 - TRUE, // 029 - TRUE, // 030 - TRUE, // 031 - TRUE, // 032 - TRUE, // 033 - TRUE, // 034 - TRUE, // 035 - TRUE, // 036 - TRUE, // 037 - TRUE, // 038 - TRUE, // 039 - TRUE, // 040 - FALSE, // 041 - FALSE, // 042 - FALSE, // 043 - - TRUE, // 044 - TRUE, // 045 - FALSE, // 046 - TRUE, // 047 - TRUE, // 048 - FALSE, // 049 - FALSE, // 050 - FALSE, // 051 - FALSE, // 052 - FALSE, // 053 - FALSE, // 054 - FALSE, // 055 - FALSE, // 056 - FALSE, // 057 - FALSE, // 058 - FALSE, // 059 - FALSE, // 060 - FALSE, // 061 - FALSE, // 062 - FALSE, // 063 - FALSE, // 064 - FALSE, // 065 - FALSE, // 066 - TRUE, // 067 - FALSE, // 068 - FALSE, // 069 - FALSE, // 070 - FALSE, // 071 - FALSE, // 072 - FALSE, // 073 - FALSE, // 074 - FALSE, // 075 - FALSE, // 076 - FALSE, // 077 - FALSE, // 078 - FALSE, // 079 - FALSE, // 080 - FALSE, // 081 - FALSE, // 082 - FALSE, // 083 - FALSE, // 084 - TRUE, // 085 - FALSE, // 086 - FALSE, // 087 - FALSE, // 088 - FALSE, // 089 - FALSE, // 090 - FALSE, // 091 - FALSE, // 092 - FALSE, // 093 - FALSE, // 094 - FALSE, // 095 - FALSE, // 096 - FALSE, // 097 - FALSE, // 098 - FALSE, // 099 - FALSE, // 100 - FALSE, // 101 - FALSE, // 102 - FALSE, // 103 - FALSE, // 104 - FALSE, // 105 - FALSE, // 106 - FALSE, // 107 - FALSE, // 108 - FALSE, // 109 - FALSE, // 110 - FALSE, // 111 - FALSE, // 112 - FALSE, // 113 - FALSE, // 114 - FALSE, // 115 - FALSE, // 116 - FALSE, // 117 - FALSE, // 118 - FALSE, // 119 - FALSE, // 120 - FALSE, // 121 -}; - -static inline s32 GetOffsetToUnk00(s32 a0) -{ - return a0; -} - -static inline s32 GetOffsetToUnkB0(s32 a0) -{ - return a0 - 44; -} - -THUMB_FUNC u32 Sav2_GameStats_sizeof(void) -{ - return sizeof(struct GameStats); -} - -THUMB_FUNC void Sav2_GameStats_init(struct GameStats * ptr) -{ - MI_CpuClear32(ptr, sizeof(struct GameStats)); -} - -THUMB_FUNC struct GameStats * Sav2_GameStats_get(struct SaveBlock2 * sav2) -{ - return SavArray_get(sav2, 20); -} - -THUMB_FUNC u32 GameStats_GetValue(struct GameStats * ptr, s32 a1) -{ - if (a1 < 44) - { - return ptr->unk_00[GetOffsetToUnk00(a1)]; - } - else if (a1 < 121) - { - return ptr->unk_B0[GetOffsetToUnkB0(a1)]; - } - else - { - GF_ASSERT(0); - return 0; - } -} - -THUMB_FUNC u32 GameStats_SetValue(struct GameStats * ptr, s32 a1, u32 a2) -{ - if (a1 < 44) - { - ptr->unk_00[GetOffsetToUnk00(a1)] = a2; - } - else if (a1 < 121) - { - ptr->unk_B0[GetOffsetToUnkB0(a1)] = a2; - } - else - { - GF_ASSERT(0); - } - return GameStats_GetValue(ptr, a1); -} - -THUMB_FUNC u32 GameStats_GetMaxValue(s32 a0) -{ - if (a0 < 44) - { - if (UNK_02105CD8[a0]) - return 999999999; - else - return 999999; - } - else if (a0 < 121) - { - if (UNK_02105CD8[a0]) - return 0xFFFF; - else - return 9999; - } - else - { - GF_ASSERT(0); - return 0; - } -} - -THUMB_FUNC u16 GameStats_GetStdInc(s32 a0) -{ - return UNK_020EEA7C[a0]; -} - -THUMB_FUNC u32 GameStats_SetCapped(struct GameStats * ptr, s32 a1, u32 a2) -{ - u32 r2 = GameStats_GetMaxValue(a1); - if (a2 < r2) - { - return GameStats_SetValue(ptr, a1, a2); - } - else - { - return GameStats_SetValue(ptr, a1, r2); - } -} - -THUMB_FUNC u32 GameStats_UpdateBounded(struct GameStats * ptr, s32 a1, u32 a2) -{ - u32 r4 = GameStats_GetMaxValue(a1); - u32 r0 = GameStats_GetValue(ptr, a1); - if (a2 > r4) - { - a2 = r4; - } - if (r0 < a2) - { - return GameStats_SetValue(ptr, a1, a2); - } - else if (r0 > r4) - { - return GameStats_SetValue(ptr, a1, r4); - } - else - { - return r0; - } -} - -THUMB_FUNC u32 GameStats_Inc(struct GameStats * ptr, s32 a1) -{ - u32 r4 = GameStats_GetMaxValue(a1); - u32 r2 = GameStats_GetValue(ptr, a1) + 1; - if (r2 < r4) - { - return GameStats_SetValue(ptr, a1, r2); - } - else - { - return GameStats_SetValue(ptr, a1, r4); - } -} - -THUMB_FUNC u32 GameStats_Add(struct GameStats * ptr, s32 a1, u32 a2) -{ - u32 r6 = GameStats_GetMaxValue(a1); - u32 r2 = GameStats_GetValue(ptr, a1); - r2 += a2; - if (r2 < r6) - { - return GameStats_SetValue(ptr, a1, r2); - } - else - { - return GameStats_SetValue(ptr, a1, r6); - } -} - -THUMB_FUNC u32 GameStats_GetCapped(struct GameStats * ptr, s32 a1) -{ - u32 r4 = GameStats_GetMaxValue(a1); - u32 r0 = GameStats_GetValue(ptr, a1); - if (r0 <= r4) - r4 = r0; - return r4; -} - -THUMB_FUNC u32 GameStats_AddSpecial(struct GameStats * ptr, s32 a1) -{ - GF_ASSERT(a1 < 38); - u32 r0 = GameStats_GetCapped(ptr, 0) + GameStats_GetStdInc(a1); - if (r0 > 99999999) - { - return GameStats_SetCapped(ptr, 0, 99999999); - } - else - { - return GameStats_Add(ptr, 0, GameStats_GetStdInc(a1)); - } -} - -THUMB_FUNC u32 GameStats_GetStat0(struct GameStats * ptr) -{ - return GameStats_GetCapped(ptr, 0); -} - -THUMB_FUNC void GameStats_IncSpeciesCaught(struct GameStats * ptr, struct Pokedex * pokedex, u16 species) -{ - if (!Pokedex_CheckMonCaughtFlag(pokedex, species)) - { - GameStats_AddSpecial(ptr, 22); - } -} +#include "global.h" +#include "pokedex.h" +#include "unk_02029FB0.h" + +const u16 UNK_020EEA7C[] = { + 0x0001, // 00 + 0x0001, // 01 + 0x0001, // 02 + 0x0001, // 03 + 0x0001, // 04 + 0x0001, // 05 + 0x0002, // 06 + 0x0002, // 07 + 0x0002, // 08 + 0x0002, // 09 + 0x0003, // 10 + 0x0003, // 11 + 0x0003, // 12 + 0x0007, // 13 + 0x0007, // 14 + 0x0007, // 15 + 0x000A, // 16 + 0x000A, // 17 + 0x000B, // 18 + 0x000B, // 19 + 0x000B, // 20 + 0x000B, // 21 + 0x0014, // 22 + 0x001E, // 23 + 0x0023, // 24 + 0x0028, // 25 + 0x01F4, // 26 + 0x2710, // 27 + 0x001E, // 28 + 0x001E, // 29 + 0x0002, // 30 + 0x0005, // 31 + 0x0001, // 32 + 0x0001, // 33 + 0x0005, // 34 + 0x0003, // 35 + 0x0001, // 36 + 0x0001, // 37 +}; + +u8 UNK_02105CD8[] = { + TRUE, // 000 + TRUE, // 001 + FALSE, // 002 + TRUE, // 003 + TRUE, // 004 + TRUE, // 005 + TRUE, // 006 + TRUE, // 007 + TRUE, // 008 + FALSE, // 009 + FALSE, // 010 + FALSE, // 011 + TRUE, // 012 + TRUE, // 013 + TRUE, // 014 + TRUE, // 015 + TRUE, // 016 + TRUE, // 017 + TRUE, // 018 + TRUE, // 019 + TRUE, // 020 + TRUE, // 021 + TRUE, // 022 + TRUE, // 023 + TRUE, // 024 + TRUE, // 025 + TRUE, // 026 + TRUE, // 027 + TRUE, // 028 + TRUE, // 029 + TRUE, // 030 + TRUE, // 031 + TRUE, // 032 + TRUE, // 033 + TRUE, // 034 + TRUE, // 035 + TRUE, // 036 + TRUE, // 037 + TRUE, // 038 + TRUE, // 039 + TRUE, // 040 + FALSE, // 041 + FALSE, // 042 + FALSE, // 043 + + TRUE, // 044 + TRUE, // 045 + FALSE, // 046 + TRUE, // 047 + TRUE, // 048 + FALSE, // 049 + FALSE, // 050 + FALSE, // 051 + FALSE, // 052 + FALSE, // 053 + FALSE, // 054 + FALSE, // 055 + FALSE, // 056 + FALSE, // 057 + FALSE, // 058 + FALSE, // 059 + FALSE, // 060 + FALSE, // 061 + FALSE, // 062 + FALSE, // 063 + FALSE, // 064 + FALSE, // 065 + FALSE, // 066 + TRUE, // 067 + FALSE, // 068 + FALSE, // 069 + FALSE, // 070 + FALSE, // 071 + FALSE, // 072 + FALSE, // 073 + FALSE, // 074 + FALSE, // 075 + FALSE, // 076 + FALSE, // 077 + FALSE, // 078 + FALSE, // 079 + FALSE, // 080 + FALSE, // 081 + FALSE, // 082 + FALSE, // 083 + FALSE, // 084 + TRUE, // 085 + FALSE, // 086 + FALSE, // 087 + FALSE, // 088 + FALSE, // 089 + FALSE, // 090 + FALSE, // 091 + FALSE, // 092 + FALSE, // 093 + FALSE, // 094 + FALSE, // 095 + FALSE, // 096 + FALSE, // 097 + FALSE, // 098 + FALSE, // 099 + FALSE, // 100 + FALSE, // 101 + FALSE, // 102 + FALSE, // 103 + FALSE, // 104 + FALSE, // 105 + FALSE, // 106 + FALSE, // 107 + FALSE, // 108 + FALSE, // 109 + FALSE, // 110 + FALSE, // 111 + FALSE, // 112 + FALSE, // 113 + FALSE, // 114 + FALSE, // 115 + FALSE, // 116 + FALSE, // 117 + FALSE, // 118 + FALSE, // 119 + FALSE, // 120 + FALSE, // 121 +}; + +static inline s32 GetOffsetToUnk00(s32 a0) +{ + return a0; +} + +static inline s32 GetOffsetToUnkB0(s32 a0) +{ + return a0 - 44; +} + +THUMB_FUNC u32 Sav2_GameStats_sizeof(void) +{ + return sizeof(struct GameStats); +} + +THUMB_FUNC void Sav2_GameStats_init(struct GameStats * ptr) +{ + MI_CpuClear32(ptr, sizeof(struct GameStats)); +} + +THUMB_FUNC struct GameStats * Sav2_GameStats_get(struct SaveBlock2 * sav2) +{ + return SavArray_get(sav2, 20); +} + +THUMB_FUNC u32 GameStats_GetValue(struct GameStats * ptr, s32 a1) +{ + if (a1 < 44) + { + return ptr->unk_00[GetOffsetToUnk00(a1)]; + } + else if (a1 < 121) + { + return ptr->unk_B0[GetOffsetToUnkB0(a1)]; + } + else + { + GF_ASSERT(0); + return 0; + } +} + +THUMB_FUNC u32 GameStats_SetValue(struct GameStats * ptr, s32 a1, u32 a2) +{ + if (a1 < 44) + { + ptr->unk_00[GetOffsetToUnk00(a1)] = a2; + } + else if (a1 < 121) + { + ptr->unk_B0[GetOffsetToUnkB0(a1)] = a2; + } + else + { + GF_ASSERT(0); + } + return GameStats_GetValue(ptr, a1); +} + +THUMB_FUNC u32 GameStats_GetMaxValue(s32 a0) +{ + if (a0 < 44) + { + if (UNK_02105CD8[a0]) + return 999999999; + else + return 999999; + } + else if (a0 < 121) + { + if (UNK_02105CD8[a0]) + return 0xFFFF; + else + return 9999; + } + else + { + GF_ASSERT(0); + return 0; + } +} + +THUMB_FUNC u16 GameStats_GetStdInc(s32 a0) +{ + return UNK_020EEA7C[a0]; +} + +THUMB_FUNC u32 GameStats_SetCapped(struct GameStats * ptr, s32 a1, u32 a2) +{ + u32 r2 = GameStats_GetMaxValue(a1); + if (a2 < r2) + { + return GameStats_SetValue(ptr, a1, a2); + } + else + { + return GameStats_SetValue(ptr, a1, r2); + } +} + +THUMB_FUNC u32 GameStats_UpdateBounded(struct GameStats * ptr, s32 a1, u32 a2) +{ + u32 r4 = GameStats_GetMaxValue(a1); + u32 r0 = GameStats_GetValue(ptr, a1); + if (a2 > r4) + { + a2 = r4; + } + if (r0 < a2) + { + return GameStats_SetValue(ptr, a1, a2); + } + else if (r0 > r4) + { + return GameStats_SetValue(ptr, a1, r4); + } + else + { + return r0; + } +} + +THUMB_FUNC u32 GameStats_Inc(struct GameStats * ptr, s32 a1) +{ + u32 r4 = GameStats_GetMaxValue(a1); + u32 r2 = GameStats_GetValue(ptr, a1) + 1; + if (r2 < r4) + { + return GameStats_SetValue(ptr, a1, r2); + } + else + { + return GameStats_SetValue(ptr, a1, r4); + } +} + +THUMB_FUNC u32 GameStats_Add(struct GameStats * ptr, s32 a1, u32 a2) +{ + u32 r6 = GameStats_GetMaxValue(a1); + u32 r2 = GameStats_GetValue(ptr, a1); + r2 += a2; + if (r2 < r6) + { + return GameStats_SetValue(ptr, a1, r2); + } + else + { + return GameStats_SetValue(ptr, a1, r6); + } +} + +THUMB_FUNC u32 GameStats_GetCapped(struct GameStats * ptr, s32 a1) +{ + u32 r4 = GameStats_GetMaxValue(a1); + u32 r0 = GameStats_GetValue(ptr, a1); + if (r0 <= r4) + r4 = r0; + return r4; +} + +THUMB_FUNC u32 GameStats_AddSpecial(struct GameStats * ptr, s32 a1) +{ + GF_ASSERT(a1 < 38); + u32 r0 = GameStats_GetCapped(ptr, 0) + GameStats_GetStdInc(a1); + if (r0 > 99999999) + { + return GameStats_SetCapped(ptr, 0, 99999999); + } + else + { + return GameStats_Add(ptr, 0, GameStats_GetStdInc(a1)); + } +} + +THUMB_FUNC u32 GameStats_GetStat0(struct GameStats * ptr) +{ + return GameStats_GetCapped(ptr, 0); +} + +THUMB_FUNC void GameStats_IncSpeciesCaught(struct GameStats * ptr, struct Pokedex * pokedex, u16 species) +{ + if (!Pokedex_CheckMonCaughtFlag(pokedex, species)) + { + GameStats_AddSpecial(ptr, 22); + } +} diff --git a/arm9/src/unk_0204AF24.c b/arm9/src/unk_0204AF24.c index 780a9862a..6756e3be0 100644 --- a/arm9/src/unk_0204AF24.c +++ b/arm9/src/unk_0204AF24.c @@ -1,135 +1,135 @@ -#include "global.h" -#include "unk_0204AF24.h" - -extern void FUN_02037394(struct FieldSystem *); -extern u32 FUN_0200E308(void); -extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); -extern void MOD05_021E331C(struct FieldSystem *); - -THUMB_FUNC BOOL FUN_0204AF24(struct TaskManager *taskManager) -{ - if(!FUN_0203739C(FUN_02046528(taskManager))) - { - return TRUE; - } - return FALSE; -} - -THUMB_FUNC void FUN_0204AF3C(struct TaskManager *taskManager) -{ - struct FieldSystem * fieldSystem= FUN_02046528(taskManager); - if(!FUN_0203739C(fieldSystem)) - { - GF_ASSERT(FALSE); - return; - } - FUN_02037394(fieldSystem); - FUN_0204640C(taskManager, &FUN_0204AF24, NULL); -} - -THUMB_FUNC BOOL FUN_0204AF6C(struct TaskManager *taskManager) -{ - if(FUN_020464A4(FUN_02046528(taskManager))) - { - return TRUE; - } - return FALSE; -} - -THUMB_FUNC void FUN_0204AF84(struct TaskManager *taskManager) -{ - struct FieldSystem *fieldSystem = FUN_02046528(taskManager); - if(FUN_0203739C(fieldSystem)) - { - GF_ASSERT(FALSE); - return; - } - FUN_0204649C(fieldSystem); - FUN_0204640C(taskManager, &FUN_0204AF6C, NULL); -} - -THUMB_FUNC BOOL FUN_0204AFB4(struct TaskManager *taskManager) -{ -#pragma unused(arg0) - if(FUN_0200E308()) - { - return TRUE; - } - return FALSE; -} - -THUMB_FUNC void FUN_0204AFC8(struct TaskManager *taskManager) -{ - if(!FUN_0203739C(FUN_02046528(taskManager))) - { - GF_ASSERT(0); - return; - } - FUN_0200E1D0(0, 0, 0, 0, 6, 1, 4); - FUN_0204640C(taskManager, &FUN_0204AFB4, 0); -} - -THUMB_FUNC void FUN_0204B00C(struct TaskManager *taskManager) -{ - if(!FUN_0203739C(FUN_02046528(taskManager))) - { - GF_ASSERT(0); - return; - } - FUN_0200E1D0(0, 1, 1, 0, 6, 1, 4); - FUN_0204640C(taskManager, FUN_0204AFB4, 0); -} - -THUMB_FUNC BOOL FUN_0204B050(struct TaskManager *taskManager) -{ - u32 * r4 = FUN_02046530(taskManager); - switch(r4[0]) - { - case 0: - FUN_0204AFC8(taskManager); - r4[0]++; - break; - case 1: - FUN_0204AF3C(taskManager); - r4[0]++; - break; - case 2: - return TRUE; - default: - break; - } - return FALSE; -} - -THUMB_FUNC void FUN_0204B090(struct TaskManager *taskManager) -{ - FUN_0204640C(taskManager, &FUN_0204B050, 0); -} - -THUMB_FUNC BOOL FUN_0204B0A0(struct TaskManager *taskManager) -{ - u32 * r4 = FUN_02046530(taskManager); - struct FieldSystem *fieldSystem = FUN_02046528(taskManager); - switch(r4[0]) - { - case 0: - FUN_0204AF84(taskManager); - r4[0]++; - break; - case 1: - MOD05_021E331C(fieldSystem); - FUN_0204B00C(taskManager); - r4[0]++; - break; - case 2: - return TRUE; - default: - break; - } - return FALSE; -} - -THUMB_FUNC void FUN_0204B0E8(struct TaskManager *taskManager) -{ - FUN_0204640C(taskManager, &FUN_0204B0A0, 0); -} +#include "global.h" +#include "unk_0204AF24.h" + +extern void FUN_02037394(struct FieldSystem *); +extern u32 FUN_0200E308(void); +extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); +extern void MOD05_021E331C(struct FieldSystem *); + +THUMB_FUNC BOOL FUN_0204AF24(struct TaskManager *taskManager) +{ + if(!FUN_0203739C(FUN_02046528(taskManager))) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AF3C(struct TaskManager *taskManager) +{ + struct FieldSystem * fieldSystem= FUN_02046528(taskManager); + if(!FUN_0203739C(fieldSystem)) + { + GF_ASSERT(FALSE); + return; + } + FUN_02037394(fieldSystem); + FUN_0204640C(taskManager, &FUN_0204AF24, NULL); +} + +THUMB_FUNC BOOL FUN_0204AF6C(struct TaskManager *taskManager) +{ + if(FUN_020464A4(FUN_02046528(taskManager))) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AF84(struct TaskManager *taskManager) +{ + struct FieldSystem *fieldSystem = FUN_02046528(taskManager); + if(FUN_0203739C(fieldSystem)) + { + GF_ASSERT(FALSE); + return; + } + FUN_0204649C(fieldSystem); + FUN_0204640C(taskManager, &FUN_0204AF6C, NULL); +} + +THUMB_FUNC BOOL FUN_0204AFB4(struct TaskManager *taskManager) +{ +#pragma unused(arg0) + if(FUN_0200E308()) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AFC8(struct TaskManager *taskManager) +{ + if(!FUN_0203739C(FUN_02046528(taskManager))) + { + GF_ASSERT(0); + return; + } + FUN_0200E1D0(0, 0, 0, 0, 6, 1, 4); + FUN_0204640C(taskManager, &FUN_0204AFB4, 0); +} + +THUMB_FUNC void FUN_0204B00C(struct TaskManager *taskManager) +{ + if(!FUN_0203739C(FUN_02046528(taskManager))) + { + GF_ASSERT(0); + return; + } + FUN_0200E1D0(0, 1, 1, 0, 6, 1, 4); + FUN_0204640C(taskManager, FUN_0204AFB4, 0); +} + +THUMB_FUNC BOOL FUN_0204B050(struct TaskManager *taskManager) +{ + u32 * r4 = FUN_02046530(taskManager); + switch(r4[0]) + { + case 0: + FUN_0204AFC8(taskManager); + r4[0]++; + break; + case 1: + FUN_0204AF3C(taskManager); + r4[0]++; + break; + case 2: + return TRUE; + default: + break; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204B090(struct TaskManager *taskManager) +{ + FUN_0204640C(taskManager, &FUN_0204B050, 0); +} + +THUMB_FUNC BOOL FUN_0204B0A0(struct TaskManager *taskManager) +{ + u32 * r4 = FUN_02046530(taskManager); + struct FieldSystem *fieldSystem = FUN_02046528(taskManager); + switch(r4[0]) + { + case 0: + FUN_0204AF84(taskManager); + r4[0]++; + break; + case 1: + MOD05_021E331C(fieldSystem); + FUN_0204B00C(taskManager); + r4[0]++; + break; + case 2: + return TRUE; + default: + break; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204B0E8(struct TaskManager *taskManager) +{ + FUN_0204640C(taskManager, &FUN_0204B0A0, 0); +} diff --git a/arm9/src/unk_0205EC84.c b/arm9/src/unk_0205EC84.c index 6d38ac6e7..b20349d52 100644 --- a/arm9/src/unk_0205EC84.c +++ b/arm9/src/unk_0205EC84.c @@ -1,438 +1,438 @@ -#include "global.h" -#include "proto.h" -#include "unk_0205EC84.h" -#include "constants/sndseq.h" -#include "constants/maps.h" - -static THUMB_FUNC void _flag_set(struct ScriptState * state, u16 flag_id) -{ - SetFlagInArray(state, flag_id); -} - -static THUMB_FUNC void _flag_clear(struct ScriptState * state, u16 flag_id) -{ - ClearFlagInArray(state, flag_id); -} - -static THUMB_FUNC BOOL _flag_check(struct ScriptState * state, u16 flag_id) -{ - return CheckFlagInArray(state, flag_id); -} - -static THUMB_FUNC BOOL _flag_op(struct ScriptState * state, u32 op, u32 flag_id) -{ - switch (op) - { - case 1: - _flag_set(state, (u16)flag_id); - break; - case 0: - _flag_clear(state, (u16)flag_id); - break; - case 2: - return _flag_check(state, (u16)flag_id); - default: - GF_ASSERT(0); - } - return FALSE; -} - -THUMB_FUNC void FUN_0205ECD4(struct ScriptState * state) -{ - _flag_set(state, 0x960); -} - -THUMB_FUNC BOOL FUN_0205ECE0(struct ScriptState * state) -{ - return _flag_check(state, 0x960); -} - -THUMB_FUNC BOOL FUN_0205ECEC(struct ScriptState * state) -{ - return _flag_check(state, 0x98D); -} - -THUMB_FUNC void FUN_0205ECFC(struct ScriptState * state) -{ - _flag_set(state, 0x964); -} - -THUMB_FUNC BOOL FUN_0205ED0C(struct ScriptState * state) -{ - return _flag_check(state, 0x964); -} - -THUMB_FUNC void FUN_0205ED1C(struct ScriptState * state) -{ - _flag_set(state, 0x961); -} - -THUMB_FUNC void FUN_0205ED2C(struct ScriptState * state) -{ - _flag_clear(state, 0x961); -} - -THUMB_FUNC BOOL FUN_0205ED3C(struct ScriptState * state) -{ - return _flag_check(state, 0x961); -} - -THUMB_FUNC void FUN_0205ED4C(struct ScriptState * state) -{ - _flag_set(state, 0x965); -} - -THUMB_FUNC void FUN_0205ED5C(struct ScriptState * state) -{ - _flag_clear(state, 0x965); -} - -THUMB_FUNC BOOL FUN_0205ED6C(struct ScriptState * state) -{ - return _flag_check(state, 0x965); -} - -THUMB_FUNC void FUN_0205ED7C(struct ScriptState * state) -{ - _flag_set(state, 0x96D); -} - -THUMB_FUNC void FUN_0205ED8C(struct ScriptState * state) -{ - _flag_clear(state, 0x96D); -} - -THUMB_FUNC BOOL FUN_0205ED9C(struct ScriptState * state) -{ - return _flag_check(state, 0x96D); -} - -THUMB_FUNC void FUN_0205EDAC(struct ScriptState * state) -{ - _flag_set(state, 0x96E); -} - -THUMB_FUNC void FUN_0205EDBC(struct ScriptState * state) -{ - _flag_set(state, 0x96F); -} - -THUMB_FUNC void FUN_0205EDCC(struct ScriptState * state) -{ - _flag_set(state, 0x970); -} - -THUMB_FUNC void FUN_0205EDD8(struct ScriptState * state) -{ - _flag_set(state, 0x971); -} - -THUMB_FUNC void FUN_0205EDE8(struct ScriptState * state) -{ - _flag_set(state, 0x972); -} - -THUMB_FUNC void FUN_0205EDF8(struct ScriptState * state) -{ - _flag_set(state, 0x973); -} - -THUMB_FUNC void FUN_0205EE08(struct ScriptState * state, u32 a1) -{ - switch (a1) - { - case 0: - _flag_set(state, 0x968); - break; - case 1: - _flag_set(state, 0x969); - break; - case 2: - _flag_set(state, 0x96A); - break; - case 3: - _flag_set(state, 0x96B); - break; - case 4: - _flag_set(state, 0x96C); - break; - } -} - -THUMB_FUNC BOOL FUN_0205EE60(struct ScriptState * state, u32 a1) -{ - switch (a1) - { - case 0: - return _flag_check(state, 0x968); - case 1: - return _flag_check(state, 0x969); - case 2: - return _flag_check(state, 0x96A); - case 3: - return _flag_check(state, 0x96B); - case 4: - return _flag_check(state, 0x96C); - } - // UB: No return value -} - -THUMB_FUNC BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1) -{ - BOOL ret = FALSE; - switch (a1) - { - case 0: - break; - case 1: - ret = _flag_check(state, 0x97F); - break; - case 2: - ret = _flag_check(state, 0x980); - break; - case 3: - ret = _flag_check(state, 0x981); - break; - case 4: - ret = _flag_check(state, 0x982); - break; - case 5: - ret = _flag_check(state, 0x983); - break; - } - return ret; -} - -THUMB_FUNC s32 FUN_0205EF20(struct ScriptState * state, s32 a1) -{ - s32 ret = 0; - switch (a1) - { - case MAP_D28R0101: - if (_flag_check(state, 0x984) == TRUE) - ret = SEQ_D_LAKE; - break; - case MAP_D28R0103: - if (_flag_check(state, 0x984) == TRUE) - ret = SEQ_D_RYAYHY; - break; - case MAP_D27R0102: - if (_flag_check(state, 0x98E) == TRUE) - ret = SEQ_D_LAKE; - break; - case MAP_D29R0102: - if (_flag_check(state, 0x98F) == TRUE) - ret = SEQ_D_LAKE; - break; - case MAP_D10R0101: - if (_flag_check(state, 0x995) == TRUE) - ret = SEQ_D_SAFARI; - break; - case MAP_T02R0101: - if (_flag_check(state, 0x993) == TRUE) - ret = SEQ_OPENING2; - break; - case MAP_D26R0101: - case MAP_D26R0102: - case MAP_D26R0103: - case MAP_D26R0104: - case MAP_D26R0105: - case MAP_D26R0106: - case MAP_D26R0107: - case MAP_D26R0108: - if (_flag_check(state, 0x985) == TRUE) - { - if (!IsNighttime()) - ret = SEQ_CITY07_D; - else - ret = SEQ_CITY07_N; - } - else if (a1 == MAP_D26R0101) - { - if (_flag_check(state, 0x986) == TRUE) - ret = SEQ_D_AGITO; - } - break; - case MAP_C04R0201: - case MAP_C04R0202: - case MAP_C04R0203: - case MAP_C04R0204: - if (_flag_check(state, 0x987) == TRUE) - { - if (!IsNighttime()) - ret = SEQ_CITY04_D; - else - ret = SEQ_CITY04_N; - } - break; - case MAP_D02R0101: - if (_flag_check(state, 0x988) == TRUE) - { - if (!IsNighttime()) - ret = SEQ_ROAD_C_D; - else - ret = SEQ_ROAD_C_N; - } - break; - case MAP_D13R0101: - if (_flag_check(state, 0x989) == TRUE) - { - if (!IsNighttime()) - ret = SEQ_TOWN03_D; - else - ret = SEQ_TOWN03_N; - } - break; - case MAP_R224: - if (_flag_check(state, 0x98A) == TRUE) - { - if (!IsNighttime()) - ret = SEQ_TOWN03_D; - else - ret = SEQ_TOWN03_N; - } - break; - case MAP_C10R0111: - if (_flag_check(state, 0x98B) == TRUE) - ret = SEQ_SILENCE_FIELD; - break; - } - return ret; -} - - -THUMB_FUNC void FUN_0205F154(struct ScriptState * state) -{ - _flag_set(state, 0x966); -} - -THUMB_FUNC void FUN_0205F164(struct ScriptState * state) -{ - _flag_clear(state, 0x966); -} - -THUMB_FUNC BOOL FUN_0205F174(struct ScriptState * state) -{ - return _flag_check(state, 0x966); -} - -THUMB_FUNC BOOL FUN_0205F184(struct ScriptState * state) -{ - return _flag_check(state, 0x978); -} - -THUMB_FUNC BOOL FUN_0205F194(struct ScriptState * state) -{ - return _flag_check(state, 0x992); -} - -THUMB_FUNC BOOL FUN_0205F1A4(struct ScriptState * state) -{ - return _flag_check(state, 0x97D); -} - -THUMB_FUNC BOOL FUN_0205F1B4(struct ScriptState * state) -{ - return _flag_check(state, 0x97E); -} - -THUMB_FUNC void FUN_0205F1C4(struct ScriptState * state) -{ - _flag_set(state, 0x97C); -} - -THUMB_FUNC void FUN_0205F1D4(struct ScriptState * state) -{ - _flag_clear(state, 0x97C); -} - -THUMB_FUNC BOOL FUN_0205F1E4(struct ScriptState * state) -{ - return _flag_check(state, 0x97C); -} - -THUMB_FUNC void FUN_0205F1F4(struct ScriptState * state) -{ - _flag_set(state, 0x967); -} - -THUMB_FUNC void FUN_0205F204(struct ScriptState * state) -{ - _flag_clear(state, 0x967); -} - -THUMB_FUNC BOOL FUN_0205F214(struct ScriptState * state) -{ - return _flag_check(state, 0x967); -} - -THUMB_FUNC void FUN_0205F224(struct ScriptState * state) -{ - _flag_set(state, 0x979); -} - -THUMB_FUNC void FUN_0205F234(struct ScriptState * state) -{ - _flag_clear(state, 0x979); -} - -THUMB_FUNC BOOL FUN_0205F244(struct ScriptState * state) -{ - return _flag_check(state, 0x979); -} - -THUMB_FUNC void FUN_0205F254(struct ScriptState * state) -{ - _flag_clear(state, 0x994); -} - -THUMB_FUNC BOOL FUN_0205F264(struct ScriptState * state, u32 op) -{ - return _flag_op(state, op, 0x962); -} - -THUMB_FUNC void FUN_0205F274(struct ScriptState * state) -{ - _flag_set(state, 0x97A); -} - -THUMB_FUNC void FUN_0205F284(struct ScriptState * state) -{ - _flag_clear(state, 0x97A); -} - -THUMB_FUNC BOOL FUN_0205F294(struct ScriptState * state) -{ - return _flag_check(state, 0x97A); -} - -THUMB_FUNC void FUN_0205F2A4(struct ScriptState * state) -{ - _flag_set(state, 0x97B); -} - -THUMB_FUNC void FUN_0205F2B4(struct ScriptState * state) -{ - _flag_clear(state, 0x97B); -} - -THUMB_FUNC BOOL FUN_0205F2C4(struct ScriptState * state) -{ - return _flag_check(state, 0x97B); -} - -THUMB_FUNC BOOL FUN_0205F2D4(struct ScriptState * state, u32 op) -{ - return _flag_op(state, op, 0x963); -} - -THUMB_FUNC BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id) -{ - GF_ASSERT(flag_id < 69); - return _flag_op(state, op, 0x9B0 + flag_id); -} - -THUMB_FUNC void FUN_0205F304(struct ScriptState * state) -{ - _flag_set(state, 0x98C); -} +#include "global.h" +#include "proto.h" +#include "unk_0205EC84.h" +#include "constants/sndseq.h" +#include "constants/maps.h" + +static THUMB_FUNC void _flag_set(struct ScriptState * state, u16 flag_id) +{ + SetFlagInArray(state, flag_id); +} + +static THUMB_FUNC void _flag_clear(struct ScriptState * state, u16 flag_id) +{ + ClearFlagInArray(state, flag_id); +} + +static THUMB_FUNC BOOL _flag_check(struct ScriptState * state, u16 flag_id) +{ + return CheckFlagInArray(state, flag_id); +} + +static THUMB_FUNC BOOL _flag_op(struct ScriptState * state, u32 op, u32 flag_id) +{ + switch (op) + { + case 1: + _flag_set(state, (u16)flag_id); + break; + case 0: + _flag_clear(state, (u16)flag_id); + break; + case 2: + return _flag_check(state, (u16)flag_id); + default: + GF_ASSERT(0); + } + return FALSE; +} + +THUMB_FUNC void FUN_0205ECD4(struct ScriptState * state) +{ + _flag_set(state, 0x960); +} + +THUMB_FUNC BOOL FUN_0205ECE0(struct ScriptState * state) +{ + return _flag_check(state, 0x960); +} + +THUMB_FUNC BOOL FUN_0205ECEC(struct ScriptState * state) +{ + return _flag_check(state, 0x98D); +} + +THUMB_FUNC void FUN_0205ECFC(struct ScriptState * state) +{ + _flag_set(state, 0x964); +} + +THUMB_FUNC BOOL FUN_0205ED0C(struct ScriptState * state) +{ + return _flag_check(state, 0x964); +} + +THUMB_FUNC void FUN_0205ED1C(struct ScriptState * state) +{ + _flag_set(state, 0x961); +} + +THUMB_FUNC void FUN_0205ED2C(struct ScriptState * state) +{ + _flag_clear(state, 0x961); +} + +THUMB_FUNC BOOL FUN_0205ED3C(struct ScriptState * state) +{ + return _flag_check(state, 0x961); +} + +THUMB_FUNC void FUN_0205ED4C(struct ScriptState * state) +{ + _flag_set(state, 0x965); +} + +THUMB_FUNC void FUN_0205ED5C(struct ScriptState * state) +{ + _flag_clear(state, 0x965); +} + +THUMB_FUNC BOOL FUN_0205ED6C(struct ScriptState * state) +{ + return _flag_check(state, 0x965); +} + +THUMB_FUNC void FUN_0205ED7C(struct ScriptState * state) +{ + _flag_set(state, 0x96D); +} + +THUMB_FUNC void FUN_0205ED8C(struct ScriptState * state) +{ + _flag_clear(state, 0x96D); +} + +THUMB_FUNC BOOL FUN_0205ED9C(struct ScriptState * state) +{ + return _flag_check(state, 0x96D); +} + +THUMB_FUNC void FUN_0205EDAC(struct ScriptState * state) +{ + _flag_set(state, 0x96E); +} + +THUMB_FUNC void FUN_0205EDBC(struct ScriptState * state) +{ + _flag_set(state, 0x96F); +} + +THUMB_FUNC void FUN_0205EDCC(struct ScriptState * state) +{ + _flag_set(state, 0x970); +} + +THUMB_FUNC void FUN_0205EDD8(struct ScriptState * state) +{ + _flag_set(state, 0x971); +} + +THUMB_FUNC void FUN_0205EDE8(struct ScriptState * state) +{ + _flag_set(state, 0x972); +} + +THUMB_FUNC void FUN_0205EDF8(struct ScriptState * state) +{ + _flag_set(state, 0x973); +} + +THUMB_FUNC void FUN_0205EE08(struct ScriptState * state, u32 a1) +{ + switch (a1) + { + case 0: + _flag_set(state, 0x968); + break; + case 1: + _flag_set(state, 0x969); + break; + case 2: + _flag_set(state, 0x96A); + break; + case 3: + _flag_set(state, 0x96B); + break; + case 4: + _flag_set(state, 0x96C); + break; + } +} + +THUMB_FUNC BOOL FUN_0205EE60(struct ScriptState * state, u32 a1) +{ + switch (a1) + { + case 0: + return _flag_check(state, 0x968); + case 1: + return _flag_check(state, 0x969); + case 2: + return _flag_check(state, 0x96A); + case 3: + return _flag_check(state, 0x96B); + case 4: + return _flag_check(state, 0x96C); + } + // UB: No return value +} + +THUMB_FUNC BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1) +{ + BOOL ret = FALSE; + switch (a1) + { + case 0: + break; + case 1: + ret = _flag_check(state, 0x97F); + break; + case 2: + ret = _flag_check(state, 0x980); + break; + case 3: + ret = _flag_check(state, 0x981); + break; + case 4: + ret = _flag_check(state, 0x982); + break; + case 5: + ret = _flag_check(state, 0x983); + break; + } + return ret; +} + +THUMB_FUNC s32 FUN_0205EF20(struct ScriptState * state, s32 a1) +{ + s32 ret = 0; + switch (a1) + { + case MAP_D28R0101: + if (_flag_check(state, 0x984) == TRUE) + ret = SEQ_D_LAKE; + break; + case MAP_D28R0103: + if (_flag_check(state, 0x984) == TRUE) + ret = SEQ_D_RYAYHY; + break; + case MAP_D27R0102: + if (_flag_check(state, 0x98E) == TRUE) + ret = SEQ_D_LAKE; + break; + case MAP_D29R0102: + if (_flag_check(state, 0x98F) == TRUE) + ret = SEQ_D_LAKE; + break; + case MAP_D10R0101: + if (_flag_check(state, 0x995) == TRUE) + ret = SEQ_D_SAFARI; + break; + case MAP_T02R0101: + if (_flag_check(state, 0x993) == TRUE) + ret = SEQ_OPENING2; + break; + case MAP_D26R0101: + case MAP_D26R0102: + case MAP_D26R0103: + case MAP_D26R0104: + case MAP_D26R0105: + case MAP_D26R0106: + case MAP_D26R0107: + case MAP_D26R0108: + if (_flag_check(state, 0x985) == TRUE) + { + if (!IsNighttime()) + ret = SEQ_CITY07_D; + else + ret = SEQ_CITY07_N; + } + else if (a1 == MAP_D26R0101) + { + if (_flag_check(state, 0x986) == TRUE) + ret = SEQ_D_AGITO; + } + break; + case MAP_C04R0201: + case MAP_C04R0202: + case MAP_C04R0203: + case MAP_C04R0204: + if (_flag_check(state, 0x987) == TRUE) + { + if (!IsNighttime()) + ret = SEQ_CITY04_D; + else + ret = SEQ_CITY04_N; + } + break; + case MAP_D02R0101: + if (_flag_check(state, 0x988) == TRUE) + { + if (!IsNighttime()) + ret = SEQ_ROAD_C_D; + else + ret = SEQ_ROAD_C_N; + } + break; + case MAP_D13R0101: + if (_flag_check(state, 0x989) == TRUE) + { + if (!IsNighttime()) + ret = SEQ_TOWN03_D; + else + ret = SEQ_TOWN03_N; + } + break; + case MAP_R224: + if (_flag_check(state, 0x98A) == TRUE) + { + if (!IsNighttime()) + ret = SEQ_TOWN03_D; + else + ret = SEQ_TOWN03_N; + } + break; + case MAP_C10R0111: + if (_flag_check(state, 0x98B) == TRUE) + ret = SEQ_SILENCE_FIELD; + break; + } + return ret; +} + + +THUMB_FUNC void FUN_0205F154(struct ScriptState * state) +{ + _flag_set(state, 0x966); +} + +THUMB_FUNC void FUN_0205F164(struct ScriptState * state) +{ + _flag_clear(state, 0x966); +} + +THUMB_FUNC BOOL FUN_0205F174(struct ScriptState * state) +{ + return _flag_check(state, 0x966); +} + +THUMB_FUNC BOOL FUN_0205F184(struct ScriptState * state) +{ + return _flag_check(state, 0x978); +} + +THUMB_FUNC BOOL FUN_0205F194(struct ScriptState * state) +{ + return _flag_check(state, 0x992); +} + +THUMB_FUNC BOOL FUN_0205F1A4(struct ScriptState * state) +{ + return _flag_check(state, 0x97D); +} + +THUMB_FUNC BOOL FUN_0205F1B4(struct ScriptState * state) +{ + return _flag_check(state, 0x97E); +} + +THUMB_FUNC void FUN_0205F1C4(struct ScriptState * state) +{ + _flag_set(state, 0x97C); +} + +THUMB_FUNC void FUN_0205F1D4(struct ScriptState * state) +{ + _flag_clear(state, 0x97C); +} + +THUMB_FUNC BOOL FUN_0205F1E4(struct ScriptState * state) +{ + return _flag_check(state, 0x97C); +} + +THUMB_FUNC void FUN_0205F1F4(struct ScriptState * state) +{ + _flag_set(state, 0x967); +} + +THUMB_FUNC void FUN_0205F204(struct ScriptState * state) +{ + _flag_clear(state, 0x967); +} + +THUMB_FUNC BOOL FUN_0205F214(struct ScriptState * state) +{ + return _flag_check(state, 0x967); +} + +THUMB_FUNC void FUN_0205F224(struct ScriptState * state) +{ + _flag_set(state, 0x979); +} + +THUMB_FUNC void FUN_0205F234(struct ScriptState * state) +{ + _flag_clear(state, 0x979); +} + +THUMB_FUNC BOOL FUN_0205F244(struct ScriptState * state) +{ + return _flag_check(state, 0x979); +} + +THUMB_FUNC void FUN_0205F254(struct ScriptState * state) +{ + _flag_clear(state, 0x994); +} + +THUMB_FUNC BOOL FUN_0205F264(struct ScriptState * state, u32 op) +{ + return _flag_op(state, op, 0x962); +} + +THUMB_FUNC void FUN_0205F274(struct ScriptState * state) +{ + _flag_set(state, 0x97A); +} + +THUMB_FUNC void FUN_0205F284(struct ScriptState * state) +{ + _flag_clear(state, 0x97A); +} + +THUMB_FUNC BOOL FUN_0205F294(struct ScriptState * state) +{ + return _flag_check(state, 0x97A); +} + +THUMB_FUNC void FUN_0205F2A4(struct ScriptState * state) +{ + _flag_set(state, 0x97B); +} + +THUMB_FUNC void FUN_0205F2B4(struct ScriptState * state) +{ + _flag_clear(state, 0x97B); +} + +THUMB_FUNC BOOL FUN_0205F2C4(struct ScriptState * state) +{ + return _flag_check(state, 0x97B); +} + +THUMB_FUNC BOOL FUN_0205F2D4(struct ScriptState * state, u32 op) +{ + return _flag_op(state, op, 0x963); +} + +THUMB_FUNC BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id) +{ + GF_ASSERT(flag_id < 69); + return _flag_op(state, op, 0x9B0 + flag_id); +} + +THUMB_FUNC void FUN_0205F304(struct ScriptState * state) +{ + _flag_set(state, 0x98C); +} diff --git a/arm9/src/unk_02064E20.c b/arm9/src/unk_02064E20.c index 9d1de34f7..7520f2526 100644 --- a/arm9/src/unk_02064E20.c +++ b/arm9/src/unk_02064E20.c @@ -1,17 +1,17 @@ -#include "global.h" -#include "scrcmd.h" -#include "unk_02025484.h" -#include "unk_02024E64.h" -#include "unk_02064E20.h" - -THUMB_FUNC void FUN_02064E20(struct FieldSystem* fieldSystem) -{ - struct unk_2025484 * r4 = (struct unk_2025484 *)FUN_02024ED8(ScriptEnvironment_GetSav2Ptr(fieldSystem)); - if((u32)FUN_020254B4(r4) == 6) - { - return; - } - FUN_02025490(r4, 6); - u16 * ptr0 = (u16 *)FUN_020254A0(r4 , 6); - ptr0[0] = 2; -} +#include "global.h" +#include "scrcmd.h" +#include "unk_02025484.h" +#include "unk_02024E64.h" +#include "unk_02064E20.h" + +THUMB_FUNC void FUN_02064E20(struct FieldSystem* fieldSystem) +{ + struct unk_2025484 * r4 = (struct unk_2025484 *)FUN_02024ED8(ScriptEnvironment_GetSav2Ptr(fieldSystem)); + if((u32)FUN_020254B4(r4) == 6) + { + return; + } + FUN_02025490(r4, 6); + u16 * ptr0 = (u16 *)FUN_020254A0(r4 , 6); + ptr0[0] = 2; +} diff --git a/arm9/src/unk_02085338.c b/arm9/src/unk_02085338.c index b22b39741..65ee45a24 100644 --- a/arm9/src/unk_02085338.c +++ b/arm9/src/unk_02085338.c @@ -1,165 +1,165 @@ -#include "global.h" -#include "heap.h" -#include "event_data.h" -#include "unk_02085338.h" - -extern BOOL FUN_0205ED0C(struct ScriptState * state); - -THUMB_FUNC struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id) -{ - struct UnkStruct_02085338 * ret = (struct UnkStruct_02085338 *) AllocFromHeap(heap_id, sizeof(struct UnkStruct_02085338)); - ret->unk_00 = r5; - ret->unk_01 = r7; - ret->unk_0c = Sav2_Pokedex_get(sav2); - ret->unk_10 = FUN_02013B5C(sav2); - ret->unk_04 = (u8)FUN_0205ED0C(SavArray_Flags_get(sav2)); - ret->unk_05 = 0; - ret->unk_02 = 1; - ret->unk_03 = 0; - ret->unk_08 = Options_GetFrame(Sav2_PlayerData_GetOptionsAddr(sav2)); - if (r5 == 2) - { - MailMsg_init_withBank(&ret->unk_14, 3); - } - else - { - for (int i = 0; i < 2; i++) - { - ret->unk_1c[i] = 0xFFFF; - } - } - return ret; -} - -THUMB_FUNC void FUN_020853A8(struct UnkStruct_02085338 * ptr) -{ - FreeToHeap(ptr); -} - -THUMB_FUNC void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1) -{ - ptr->unk_1c[0] = a1; -} - -THUMB_FUNC void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2) -{ - ptr->unk_1c[0] = a1; - ptr->unk_1c[1] = a2; -} - -THUMB_FUNC void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1) -{ - ptr->unk_14 = *a1; -} - -THUMB_FUNC void FUN_020853D0(struct UnkStruct_02085338 * ptr) -{ - ptr->unk_02 = 1; - ptr->unk_03 = 0; -} - -THUMB_FUNC void FUN_020853DC(struct UnkStruct_02085338 * ptr) -{ - ptr->unk_05 = 1; -} - -THUMB_FUNC u8 FUN_020853E4(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_02; -} - -THUMB_FUNC u8 FUN_020853E8(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_03; -} - -THUMB_FUNC u16 FUN_020853EC(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_1c[0]; -} - -THUMB_FUNC void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1) -{ - a1[0] = ptr->unk_1c[0]; - a1[1] = ptr->unk_1c[1]; -} - -THUMB_FUNC void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1) -{ - return MailMsg_copy(a1, &ptr->unk_14); -} - -THUMB_FUNC u8 FUN_0208540C(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_00; -} - -THUMB_FUNC u8 FUN_02085410(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_01; -} - -THUMB_FUNC u32 FUN_02085414(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_08; -} - -THUMB_FUNC struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_0c; -} - -THUMB_FUNC struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_10; -} - -THUMB_FUNC u8 FUN_02085420(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_04; -} - -THUMB_FUNC u8 FUN_02085424(struct UnkStruct_02085338 * ptr) -{ - return ptr->unk_05; -} - -THUMB_FUNC void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2) -{ - switch (ptr->unk_00) - { - case 0: - a1[0] = ptr->unk_1c[0]; - break; - case 1: - a1[0] = ptr->unk_1c[0]; - a1[1] = ptr->unk_1c[1]; - break; - case 2: - *a2 = ptr->unk_14; - break; - } -} - -THUMB_FUNC BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2) -{ - switch (ptr->unk_00) - { - case 0: - return a1[0] == ptr->unk_1c[0]; - case 1: - return a1[0] == ptr->unk_1c[0] && a1[1] == ptr->unk_1c[1]; - case 2: - default: - return MailMsg_compare(&ptr->unk_14, a2); - } -} - -THUMB_FUNC void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6) -{ - r5->unk_03 = (u8)(!FUN_0208545C(r5, r4, r6) ? 1 : 0); - r5->unk_02 = 0; - for (int i = 0; i < 2; i++) - r5->unk_1c[i] = r4[i]; - r5->unk_14 = *r6; -} +#include "global.h" +#include "heap.h" +#include "event_data.h" +#include "unk_02085338.h" + +extern BOOL FUN_0205ED0C(struct ScriptState * state); + +THUMB_FUNC struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id) +{ + struct UnkStruct_02085338 * ret = (struct UnkStruct_02085338 *) AllocFromHeap(heap_id, sizeof(struct UnkStruct_02085338)); + ret->unk_00 = r5; + ret->unk_01 = r7; + ret->unk_0c = Sav2_Pokedex_get(sav2); + ret->unk_10 = FUN_02013B5C(sav2); + ret->unk_04 = (u8)FUN_0205ED0C(SavArray_Flags_get(sav2)); + ret->unk_05 = 0; + ret->unk_02 = 1; + ret->unk_03 = 0; + ret->unk_08 = Options_GetFrame(Sav2_PlayerData_GetOptionsAddr(sav2)); + if (r5 == 2) + { + MailMsg_init_withBank(&ret->unk_14, 3); + } + else + { + for (int i = 0; i < 2; i++) + { + ret->unk_1c[i] = 0xFFFF; + } + } + return ret; +} + +THUMB_FUNC void FUN_020853A8(struct UnkStruct_02085338 * ptr) +{ + FreeToHeap(ptr); +} + +THUMB_FUNC void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1) +{ + ptr->unk_1c[0] = a1; +} + +THUMB_FUNC void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2) +{ + ptr->unk_1c[0] = a1; + ptr->unk_1c[1] = a2; +} + +THUMB_FUNC void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1) +{ + ptr->unk_14 = *a1; +} + +THUMB_FUNC void FUN_020853D0(struct UnkStruct_02085338 * ptr) +{ + ptr->unk_02 = 1; + ptr->unk_03 = 0; +} + +THUMB_FUNC void FUN_020853DC(struct UnkStruct_02085338 * ptr) +{ + ptr->unk_05 = 1; +} + +THUMB_FUNC u8 FUN_020853E4(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_02; +} + +THUMB_FUNC u8 FUN_020853E8(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_03; +} + +THUMB_FUNC u16 FUN_020853EC(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_1c[0]; +} + +THUMB_FUNC void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1) +{ + a1[0] = ptr->unk_1c[0]; + a1[1] = ptr->unk_1c[1]; +} + +THUMB_FUNC void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1) +{ + return MailMsg_copy(a1, &ptr->unk_14); +} + +THUMB_FUNC u8 FUN_0208540C(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_00; +} + +THUMB_FUNC u8 FUN_02085410(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_01; +} + +THUMB_FUNC u32 FUN_02085414(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_08; +} + +THUMB_FUNC struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_0c; +} + +THUMB_FUNC struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_10; +} + +THUMB_FUNC u8 FUN_02085420(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_04; +} + +THUMB_FUNC u8 FUN_02085424(struct UnkStruct_02085338 * ptr) +{ + return ptr->unk_05; +} + +THUMB_FUNC void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2) +{ + switch (ptr->unk_00) + { + case 0: + a1[0] = ptr->unk_1c[0]; + break; + case 1: + a1[0] = ptr->unk_1c[0]; + a1[1] = ptr->unk_1c[1]; + break; + case 2: + *a2 = ptr->unk_14; + break; + } +} + +THUMB_FUNC BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2) +{ + switch (ptr->unk_00) + { + case 0: + return a1[0] == ptr->unk_1c[0]; + case 1: + return a1[0] == ptr->unk_1c[0] && a1[1] == ptr->unk_1c[1]; + case 2: + default: + return MailMsg_compare(&ptr->unk_14, a2); + } +} + +THUMB_FUNC void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6) +{ + r5->unk_03 = (u8)(!FUN_0208545C(r5, r4, r6) ? 1 : 0); + r5->unk_02 = 0; + for (int i = 0; i < 2; i++) + r5->unk_1c[i] = r4[i]; + r5->unk_14 = *r6; +} diff --git a/include/constants/script_pokemon_util.h b/include/constants/script_pokemon_util.h index 4c7a01e69..bd2225f20 100644 --- a/include/constants/script_pokemon_util.h +++ b/include/constants/script_pokemon_util.h @@ -1,8 +1,8 @@ -#ifndef POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H -#define POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H - -#define FLDPSN_NONE 0 -#define FLDPSN_PSN 1 -#define FLDPSN_HEAL 2 - -#endif //POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H +#ifndef POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H +#define POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H + +#define FLDPSN_NONE 0 +#define FLDPSN_PSN 1 +#define FLDPSN_HEAL 2 + +#endif //POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H diff --git a/include/constants/sndseq.h b/include/constants/sndseq.h index 314ae2b25..013b565d3 100644 --- a/include/constants/sndseq.h +++ b/include/constants/sndseq.h @@ -1,839 +1,839 @@ -#ifndef POKEDIAMOND_CONSTANTS_SNDSEQ_H -#define POKEDIAMOND_CONSTANTS_SNDSEQ_H - -//TODO rename to more useful names - -#define SNDARC_BGM_BASE 1000 -#define SNDARC_SE_BASE 1500 - -#define SEQ_PV001 (0) -#define SEQ_PV (1) -#define SEQ_PV_END (2) -#define SEQ_DUMMY (SNDARC_BGM_BASE + 0) -#define SEQ_SILENCE_FIELD (SNDARC_BGM_BASE + 1) -#define SEQ_SILENCE_DUNGEON (SNDARC_BGM_BASE + 2) -#define SEQ_TEST_TITLE (SNDARC_BGM_BASE + 3) -#define SEQ_TOWN01_D (SNDARC_BGM_BASE + 4) -#define SEQ_TOWN02_D (SNDARC_BGM_BASE + 5) -#define SEQ_TOWN03_D (SNDARC_BGM_BASE + 6) -#define SEQ_TOWN04_D (SNDARC_BGM_BASE + 7) -#define SEQ_TOWN06_D (SNDARC_BGM_BASE + 8) -#define SEQ_TOWN07_D (SNDARC_BGM_BASE + 9) -#define SEQ_CITY01_D (SNDARC_BGM_BASE + 10) -#define SEQ_CITY02_D (SNDARC_BGM_BASE + 11) -#define SEQ_CITY03_D (SNDARC_BGM_BASE + 12) -#define SEQ_CITY04_D (SNDARC_BGM_BASE + 13) -#define SEQ_CITY05_D (SNDARC_BGM_BASE + 14) -#define SEQ_CITY06_D (SNDARC_BGM_BASE + 15) -#define SEQ_CITY07_D (SNDARC_BGM_BASE + 16) -#define SEQ_CITY08_D (SNDARC_BGM_BASE + 17) -#define SEQ_CITY09_D (SNDARC_BGM_BASE + 18) -#define SEQ_CITY10_D (SNDARC_BGM_BASE + 19) -#define SEQ_CITY11_D (SNDARC_BGM_BASE + 20) -#define SEQ_ROAD_A_D (SNDARC_BGM_BASE + 21) -#define SEQ_ROAD_B_D (SNDARC_BGM_BASE + 22) -#define SEQ_ROAD_C_D (SNDARC_BGM_BASE + 23) -#define SEQ_ROAD_D_D (SNDARC_BGM_BASE + 24) -#define SEQ_ROAD_E_D (SNDARC_BGM_BASE + 25) -#define SEQ_ROAD_F_D (SNDARC_BGM_BASE + 26) -#define SEQ_ROAD_SNOW_D (SNDARC_BGM_BASE + 27) -#define SEQ_ROAD_BZA_D (SNDARC_BGM_BASE + 28) -#define SEQ_OPENING (SNDARC_BGM_BASE + 29) -#define SEQ_TV_HOUSOU (SNDARC_BGM_BASE + 30) -#define SEQ_TOWN05_D (SNDARC_BGM_BASE + 31) -#define SEQ_ROAD_BZB_D (SNDARC_BGM_BASE + 32) -#define SEQ_TOWN01_N (SNDARC_BGM_BASE + 33) -#define SEQ_TOWN02_N (SNDARC_BGM_BASE + 34) -#define SEQ_TOWN03_N (SNDARC_BGM_BASE + 35) -#define SEQ_TOWN04_N (SNDARC_BGM_BASE + 36) -#define SEQ_TOWN06_N (SNDARC_BGM_BASE + 37) -#define SEQ_TOWN07_N (SNDARC_BGM_BASE + 38) -#define SEQ_CITY01_N (SNDARC_BGM_BASE + 39) -#define SEQ_CITY02_N (SNDARC_BGM_BASE + 40) -#define SEQ_CITY03_N (SNDARC_BGM_BASE + 41) -#define SEQ_CITY04_N (SNDARC_BGM_BASE + 42) -#define SEQ_CITY05_N (SNDARC_BGM_BASE + 43) -#define SEQ_CITY06_N (SNDARC_BGM_BASE + 44) -#define SEQ_CITY07_N (SNDARC_BGM_BASE + 45) -#define SEQ_CITY08_N (SNDARC_BGM_BASE + 46) -#define SEQ_CITY09_N (SNDARC_BGM_BASE + 47) -#define SEQ_CITY10_N (SNDARC_BGM_BASE + 48) -#define SEQ_CITY11_N (SNDARC_BGM_BASE + 49) -#define SEQ_ROAD_A_N (SNDARC_BGM_BASE + 50) -#define SEQ_ROAD_B_N (SNDARC_BGM_BASE + 51) -#define SEQ_ROAD_C_N (SNDARC_BGM_BASE + 52) -#define SEQ_ROAD_D_N (SNDARC_BGM_BASE + 53) -#define SEQ_ROAD_E_N (SNDARC_BGM_BASE + 54) -#define SEQ_ROAD_F_N (SNDARC_BGM_BASE + 55) -#define SEQ_ROAD_SNOW_N (SNDARC_BGM_BASE + 56) -#define SEQ_ROAD_BZA_N (SNDARC_BGM_BASE + 57) -#define SEQ_TOWN05_N (SNDARC_BGM_BASE + 58) -#define SEQ_ROAD_BZB_N (SNDARC_BGM_BASE + 59) -#define SEQ_TANKOU (SNDARC_BGM_BASE + 60) -#define SEQ_HATANIGE (SNDARC_BGM_BASE + 61) -#define SEQ_D_01 (SNDARC_BGM_BASE + 62) -#define SEQ_D_02 (SNDARC_BGM_BASE + 63) -#define SEQ_D_03 (SNDARC_BGM_BASE + 64) -#define SEQ_D_RYAYHY (SNDARC_BGM_BASE + 65) -#define SEQ_D_KOUEN (SNDARC_BGM_BASE + 66) -#define SEQ_D_AGITO (SNDARC_BGM_BASE + 67) -#define SEQ_D_GINLOBBY (SNDARC_BGM_BASE + 68) -#define SEQ_D_SAFARI (SNDARC_BGM_BASE + 69) -#define SEQ_D_LAKE (SNDARC_BGM_BASE + 70) -#define SEQ_D_MOUNT1 (SNDARC_BGM_BASE + 71) -#define SEQ_D_MOUNT2 (SNDARC_BGM_BASE + 72) -#define SEQ_D_06 (SNDARC_BGM_BASE + 73) -#define SEQ_D_05 (SNDARC_BGM_BASE + 74) -#define SEQ_D_04 (SNDARC_BGM_BASE + 75) -#define SEQ_D_LEAGUE (SNDARC_BGM_BASE + 76) -#define SEQ_BLD_DENDO (SNDARC_BGM_BASE + 77) -#define SEQ_D_CROAD (SNDARC_BGM_BASE + 78) -#define SEQ_D_ICE (SNDARC_BGM_BASE + 79) -#define SEQ_D_SECRET (SNDARC_BGM_BASE + 80) -#define SEQ_D_UNKNOWN (SNDARC_BGM_BASE + 81) -#define SEQ_POKEPARK (SNDARC_BGM_BASE + 82) -#define SEQ_D_HARDMT (SNDARC_BGM_BASE + 83) -#define SEQ_BLD_LEGEND (SNDARC_BGM_BASE + 84) -#define SEQ_PC_01 (SNDARC_BGM_BASE + 85) -#define SEQ_PC_02 (SNDARC_BGM_BASE + 86) -#define SEQ_GYM (SNDARC_BGM_BASE + 87) -#define SEQ_KENKYUJO (SNDARC_BGM_BASE + 88) -#define SEQ_BLD_CON (SNDARC_BGM_BASE + 89) -#define SEQ_FS (SNDARC_BGM_BASE + 90) -#define SEQ_BLD_GAME (SNDARC_BGM_BASE + 91) -#define SEQ_BF_TOWWER (SNDARC_BGM_BASE + 92) -#define SEQ_BLD_TV (SNDARC_BGM_BASE + 93) -#define SEQ_THE_EVENT04 (SNDARC_BGM_BASE + 94) -#define SEQ_FUE (SNDARC_BGM_BASE + 95) -#define SEQ_AUS (SNDARC_BGM_BASE + 96) -#define SEQ_BLD_BLD_GTC (SNDARC_BGM_BASE + 97) -#define SEQ_OPENING2 (SNDARC_BGM_BASE + 98) -#define SEQ_BF_FACT (SNDARC_BGM_BASE + 99) -#define SEQ_EYE_BOY (SNDARC_BGM_BASE + 100) -#define SEQ_EYE_KID (SNDARC_BGM_BASE + 101) -#define SEQ_EYE_FIGHT (SNDARC_BGM_BASE + 102) -#define SEQ_EYE_GINGA (SNDARC_BGM_BASE + 103) -#define SEQ_EYE_LADY (SNDARC_BGM_BASE + 104) -#define SEQ_EYE_MOUNT (SNDARC_BGM_BASE + 105) -#define SEQ_EYE_RICH (SNDARC_BGM_BASE + 106) -#define SEQ_EYE_ENKA (SNDARC_BGM_BASE + 107) -#define SEQ_EYE_MYS (SNDARC_BGM_BASE + 108) -#define SEQ_EYE_ELITE (SNDARC_BGM_BASE + 109) -#define SEQ_EYE_GIRL (SNDARC_BGM_BASE + 110) -#define SEQ_EYE_SPORT (SNDARC_BGM_BASE + 111) -#define SEQ_EYE_FUN (SNDARC_BGM_BASE + 112) -#define SEQ_EYE_TENNO (SNDARC_BGM_BASE + 113) -#define SEQ_EYE_CHAMP (SNDARC_BGM_BASE + 114) -#define SEQ_FIGHT0101 (SNDARC_BGM_BASE + 115) -#define SEQ_BA_POKE (SNDARC_BGM_BASE + 116) -#define SEQ_BA_GYM (SNDARC_BGM_BASE + 117) -#define SEQ_BA_DPOKE1 (SNDARC_BGM_BASE + 118) -#define SEQ_BA_TRAIN (SNDARC_BGM_BASE + 119) -#define SEQ_BA_AKAGI (SNDARC_BGM_BASE + 120) -#define SEQ_BA_DPOKE2 (SNDARC_BGM_BASE + 121) -#define SEQ_BA_CHANP (SNDARC_BGM_BASE + 122) -#define SEQ_BA_GINGA (SNDARC_BGM_BASE + 123) -#define SEQ_BA_RIVAL (SNDARC_BGM_BASE + 124) -#define SEQ_BA_SECRET1 (SNDARC_BGM_BASE + 125) -#define SEQ_BA_SECRET2 (SNDARC_BGM_BASE + 126) -#define SEQ_WINPOKE (SNDARC_BGM_BASE + 127) -#define SEQ_WINTRAIN (SNDARC_BGM_BASE + 128) -#define SEQ_WINTGYM (SNDARC_BGM_BASE + 129) -#define SEQ_WINCHAMP (SNDARC_BGM_BASE + 130) -#define SEQ_WINGINGA (SNDARC_BGM_BASE + 131) -#define SEQ_WINAKAGI (SNDARC_BGM_BASE + 132) -#define SEQ_WINTENNO (SNDARC_BGM_BASE + 133) -#define SEQ_BA_GINGA3 (SNDARC_BGM_BASE + 134) -#define SEQ_CON_TEST (SNDARC_BGM_BASE + 135) -#define SEQ_BA_TENNO (SNDARC_BGM_BASE + 136) -#define SEQ_BA_TOWER (SNDARC_BGM_BASE + 137) -#define SEQ_TSURETEKE (SNDARC_BGM_BASE + 138) -#define SEQ_THE_RIV (SNDARC_BGM_BASE + 139) -#define SEQ_THE_EVENT01 (SNDARC_BGM_BASE + 140) -#define SEQ_SHINKA (SNDARC_BGM_BASE + 141) -#define SEQ_THE_BOY (SNDARC_BGM_BASE + 142) -#define SEQ_THE_GIRL (SNDARC_BGM_BASE + 143) -#define SEQ_THE_EVENT02 (SNDARC_BGM_BASE + 144) -#define SEQ_THE_EVENT03 (SNDARC_BGM_BASE + 145) -#define SEQ_THE_EVENT05 (SNDARC_BGM_BASE + 146) -#define SEQ_THE_AKAGI (SNDARC_BGM_BASE + 147) -#define SEQ_EV_DENDO1 (SNDARC_BGM_BASE + 148) -#define SEQ_EV_LEGEND (SNDARC_BGM_BASE + 149) -#define SEQ_KUSAGASA (SNDARC_BGM_BASE + 150) -#define SEQ_NAMINORI (SNDARC_BGM_BASE + 151) -#define SEQ_BICYCLE (SNDARC_BGM_BASE + 152) -#define SEQ_GONIN (SNDARC_BGM_BASE + 153) -#define SEQ_TV_END (SNDARC_BGM_BASE + 154) -#define SEQ_FANFA1 (SNDARC_BGM_BASE + 155) -#define SEQ_FANFA5 (SNDARC_BGM_BASE + 156) -#define SEQ_FANFA3 (SNDARC_BGM_BASE + 157) -#define SEQ_FANFA4 (SNDARC_BGM_BASE + 158) -#define SEQ_FANFA6 (SNDARC_BGM_BASE + 159) -#define SEQ_FANFA2 (SNDARC_BGM_BASE + 160) -#define SEQ_BADGE (SNDARC_BGM_BASE + 161) -#define SEQ_POCKETCH (SNDARC_BGM_BASE + 162) -#define SEQ_WAZA (SNDARC_BGM_BASE + 163) -#define SEQ_ACCE (SNDARC_BGM_BASE + 164) -#define SEQ_WASURE (SNDARC_BGM_BASE + 165) -#define SEQ_ASA (SNDARC_BGM_BASE + 166) -#define SEQ_KINOMI (SNDARC_BGM_BASE + 167) -#define SEQ_REPORT (SNDARC_BGM_BASE + 168) -#define SEQ_CO_DRESS (SNDARC_BGM_BASE + 169) -#define SEQ_KOUKAN (SNDARC_BGM_BASE + 170) -#define SEQ_BLD_EV_DENDO2 (SNDARC_BGM_BASE + 171) -#define SEQ_TITLE00 (SNDARC_BGM_BASE + 172) -#define SEQ_TITLE01 (SNDARC_BGM_BASE + 173) -#define SEQ_PRESENT (SNDARC_BGM_BASE + 174) -#define SEQ_WIFILOBBY (SNDARC_BGM_BASE + 175) -#define SEQ_CO_KAWAI (SNDARC_BGM_BASE + 176) -#define SEQ_CO_KASHI (SNDARC_BGM_BASE + 177) -#define SEQ_CO_UTSUK (SNDARC_BGM_BASE + 178) -#define SEQ_CO_TAKUMA (SNDARC_BGM_BASE + 179) -#define SEQ_CO_KAKKO (SNDARC_BGM_BASE + 180) -#define SEQ_CO_KEKKA (SNDARC_BGM_BASE + 181) -#define SEQ_CO_FANFA (SNDARC_BGM_BASE + 182) -#define SEQ_KINOMI1 (SNDARC_BGM_BASE + 183) -#define SEQ_SLOT_ATARI (SNDARC_BGM_BASE + 184) -#define SEQ_SLOT_OOATARI (SNDARC_BGM_BASE + 185) -#define SEQ_BLD_ENDING (SNDARC_BGM_BASE + 186) -#define SEQ_KINOMI2 (SNDARC_BGM_BASE + 187) -#define SEQ_SLOT (SNDARC_BGM_BASE + 188) -#define SEQ_AIF_FIELD (SNDARC_BGM_BASE + 189) -#define SEQ_AIF_DUNGEON (SNDARC_BGM_BASE + 190) -#define SEQ_AIF_BATTLE (SNDARC_BGM_BASE + 191) -#define SEQ_BGM_END (SNDARC_BGM_BASE + 192) -#define SEQ_SE_DP_SELECT (SNDARC_SE_BASE + 0) -#define SEQ_SE_DP_DECIDE (SNDARC_SE_BASE + 1) -#define SEQ_SE_DP_TALK2 (SNDARC_SE_BASE + 2) -#define SEQ_SE_DP_SELECT11 (SNDARC_SE_BASE + 3) -#define SEQ_SE_DP_SELECT78 (SNDARC_SE_BASE + 4) -#define SEQ_SE_DP_SELECT5 (SNDARC_SE_BASE + 5) -#define SEQ_SE_DP_PIRORIRO (SNDARC_SE_BASE + 6) -#define SEQ_SE_DP_PIRORIRO2 (SNDARC_SE_BASE + 7) -#define SEQ_SE_DP_BUTTON9 (SNDARC_SE_BASE + 8) -#define SEQ_SE_DP_BUTTON3 (SNDARC_SE_BASE + 9) -#define SEQ_SE_DP_KON (SNDARC_SE_BASE + 10) -#define SEQ_SE_DP_KON2 (SNDARC_SE_BASE + 11) -#define SEQ_SE_DP_KON3 (SNDARC_SE_BASE + 12) -#define SEQ_SE_DP_KON4 (SNDARC_SE_BASE + 13) -#define SEQ_SE_DP_BOX01 (SNDARC_SE_BASE + 14) -#define SEQ_SE_DP_BOX02 (SNDARC_SE_BASE + 15) -#define SEQ_SE_DP_KAIFUKU (SNDARC_SE_BASE + 16) -#define SEQ_SE_DP_ZUKAN02 (SNDARC_SE_BASE + 17) -#define SEQ_SE_DP_OPEN2 (SNDARC_SE_BASE + 18) -#define SEQ_SE_DP_CLOSE2 (SNDARC_SE_BASE + 19) -#define SEQ_SE_DP_025 (SNDARC_SE_BASE + 20) -#define SEQ_SE_DP_PINPON (SNDARC_SE_BASE + 21) -#define SEQ_SE_DP_CUSTOM06 (SNDARC_SE_BASE + 22) -#define SEQ_SE_DP_BOX03 (SNDARC_SE_BASE + 23) -#define SEQ_SE_DP_START (SNDARC_SE_BASE + 24) -#define SEQ_SE_DP_SELECT_SLOT (SNDARC_SE_BASE + 25) -#define SEQ_SE_DP_CARD10 (SNDARC_SE_BASE + 26) -#define SEQ_SE_DP_KATI (SNDARC_SE_BASE + 27) -#define SEQ_SE_DP_CON_014 (SNDARC_SE_BASE + 28) -#define SEQ_SE_DP_W025 (SNDARC_SE_BASE + 29) -#define SEQ_SE_DP_W060C (SNDARC_SE_BASE + 30) -#define SEQ_SE_DP_W062 (SNDARC_SE_BASE + 31) -#define SEQ_SE_DP_W080 (SNDARC_SE_BASE + 32) -#define SEQ_SE_DP_WIN_OPEN (SNDARC_SE_BASE + 33) -#define SEQ_SE_DP_BOWA (SNDARC_SE_BASE + 34) -#define SEQ_SE_DP_Z_SEARCH (SNDARC_SE_BASE + 35) -#define SEQ_SE_DP_CARD2 (SNDARC_SE_BASE + 36) -#define SEQ_SE_DP_WALL_HIT (SNDARC_SE_BASE + 37) -#define SEQ_SE_DP_WALL_HIT2 (SNDARC_SE_BASE + 38) -#define SEQ_SE_DP_KAIDAN2 (SNDARC_SE_BASE + 39) -#define SEQ_SE_DP_DOOR (SNDARC_SE_BASE + 40) -#define SEQ_SE_DP_DOOR_OPEN (SNDARC_SE_BASE + 41) -#define SEQ_SE_DP_DOOR_CLOSE (SNDARC_SE_BASE + 42) -#define SEQ_SE_DP_DOOR_CLOSE2 (SNDARC_SE_BASE + 43) -#define SEQ_SE_DP_DOOR10 (SNDARC_SE_BASE + 44) -#define SEQ_SE_DP_WIN_OPEN2 (SNDARC_SE_BASE + 45) -#define SEQ_SE_DP_WIN_OPEN3 (SNDARC_SE_BASE + 46) -#define SEQ_SE_DP_DANSA (SNDARC_SE_BASE + 47) -#define SEQ_SE_DP_PC_ON (SNDARC_SE_BASE + 48) -#define SEQ_SE_DP_PC_LOGIN (SNDARC_SE_BASE + 49) -#define SEQ_SE_DP_PC_LOGOFF (SNDARC_SE_BASE + 50) -#define SEQ_SE_DP_DENDOU (SNDARC_SE_BASE + 51) -#define SEQ_SE_DP_DOKU2 (SNDARC_SE_BASE + 52) -#define SEQ_SE_DP_ELEBETA (SNDARC_SE_BASE + 53) -#define SEQ_SE_DP_ELEBETA2 (SNDARC_SE_BASE + 54) -#define SEQ_SE_DP_ELEBETA3 (SNDARC_SE_BASE + 55) -#define SEQ_SE_DP_ELEBETA4 (SNDARC_SE_BASE + 56) -#define SEQ_SE_DP_ESUKA (SNDARC_SE_BASE + 57) -#define SEQ_SE_DP_TV_NOISE (SNDARC_SE_BASE + 58) -#define SEQ_SE_DP_JIHANKI (SNDARC_SE_BASE + 59) -#define SEQ_SE_DP_JITENSYA (SNDARC_SE_BASE + 60) -#define SEQ_SE_DP_GEAR (SNDARC_SE_BASE + 61) -#define SEQ_SE_DP_KI_GASYAN (SNDARC_SE_BASE + 62) -#define SEQ_SE_DP_SAVE (SNDARC_SE_BASE + 63) -#define SEQ_SE_DP_GEAR2 (SNDARC_SE_BASE + 64) -#define SEQ_SE_DP_SELECT8 (SNDARC_SE_BASE + 65) -#define SEQ_SE_DP_DORIRU (SNDARC_SE_BASE + 66) -#define SEQ_SE_DP_YUKIASHI (SNDARC_SE_BASE + 67) -#define SEQ_SE_DP_UG_005 (SNDARC_SE_BASE + 68) -#define SEQ_SE_DP_UG_006 (SNDARC_SE_BASE + 69) -#define SEQ_SE_DP_UG_007 (SNDARC_SE_BASE + 70) -#define SEQ_SE_DP_UG_008 (SNDARC_SE_BASE + 71) -#define SEQ_SE_DP_UG_020 (SNDARC_SE_BASE + 72) -#define SEQ_SE_DP_UG_021 (SNDARC_SE_BASE + 73) -#define SEQ_SE_DP_UG_022 (SNDARC_SE_BASE + 74) -#define SEQ_SE_DP_UG_023 (SNDARC_SE_BASE + 75) -#define SEQ_SE_DP_UG_024 (SNDARC_SE_BASE + 76) -#define SEQ_SE_DP_UG_025 (SNDARC_SE_BASE + 77) -#define SEQ_SE_DP_UG_026 (SNDARC_SE_BASE + 78) -#define SEQ_SE_DP_UG_027 (SNDARC_SE_BASE + 79) -#define SEQ_SE_DP_DENSI15 (SNDARC_SE_BASE + 80) -#define SEQ_SE_DP_DENSI16 (SNDARC_SE_BASE + 81) -#define SEQ_SE_DP_DENSI20 (SNDARC_SE_BASE + 82) -#define SEQ_SE_DP_PYUU (SNDARC_SE_BASE + 83) -#define SEQ_SE_DP_PYUU2 (SNDARC_SE_BASE + 84) -#define SEQ_SE_DP_SUTYA (SNDARC_SE_BASE + 85) -#define SEQ_SE_DP_GYURU (SNDARC_SE_BASE + 86) -#define SEQ_SE_DP_OPEN7 (SNDARC_SE_BASE + 87) -#define SEQ_SE_DP_CLOSE7 (SNDARC_SE_BASE + 88) -#define SEQ_SE_DP_ZIZIZI (SNDARC_SE_BASE + 89) -#define SEQ_SE_DP_MAZYO2 (SNDARC_SE_BASE + 90) -#define SEQ_SE_DP_MAZYO4 (SNDARC_SE_BASE + 91) -#define SEQ_SE_DP_BAG_004 (SNDARC_SE_BASE + 92) -#define SEQ_SE_DP_T_AME (SNDARC_SE_BASE + 93) -#define SEQ_SE_DP_T_KOAME (SNDARC_SE_BASE + 94) -#define SEQ_SE_DP_T_OOAME (SNDARC_SE_BASE + 95) -#define SEQ_SE_DP_T_KAMI (SNDARC_SE_BASE + 96) -#define SEQ_SE_DP_T_KAMI2 (SNDARC_SE_BASE + 97) -#define SEQ_SE_DP_HAMARU (SNDARC_SE_BASE + 98) -#define SEQ_SE_DP_GAGAGA (SNDARC_SE_BASE + 99) -#define SEQ_SE_DP_F017 (SNDARC_SE_BASE + 100) -#define SEQ_SE_DP_FOOT3_0 (SNDARC_SE_BASE + 101) -#define SEQ_SE_DP_FOOT3_1 (SNDARC_SE_BASE + 102) -#define SEQ_SE_DP_CON_016 (SNDARC_SE_BASE + 103) -#define SEQ_SE_DP_REGI (SNDARC_SE_BASE + 104) -#define SEQ_SE_DP_CON_F007 (SNDARC_SE_BASE + 105) -#define SEQ_SE_DP_CON_015 (SNDARC_SE_BASE + 106) -#define SEQ_SE_DP_SUTYA2 (SNDARC_SE_BASE + 107) -#define SEQ_SE_DP_FW230 (SNDARC_SE_BASE + 108) -#define SEQ_SE_DP_FW019 (SNDARC_SE_BASE + 109) -#define SEQ_SE_DP_FW088 (SNDARC_SE_BASE + 110) -#define SEQ_SE_DP_FW015 (SNDARC_SE_BASE + 111) -#define SEQ_SE_DP_FBRADE (SNDARC_SE_BASE + 112) -#define SEQ_SE_DP_FW463 (SNDARC_SE_BASE + 113) -#define SEQ_SE_DP_TELE (SNDARC_SE_BASE + 114) -#define SEQ_SE_DP_TELE2 (SNDARC_SE_BASE + 115) -#define SEQ_SE_DP_FW104 (SNDARC_SE_BASE + 116) -#define SEQ_SE_DP_ZUPO (SNDARC_SE_BASE + 117) -#define SEQ_SE_DP_ZUPO2 (SNDARC_SE_BASE + 118) -#define SEQ_SE_DP_KUSA (SNDARC_SE_BASE + 119) -#define SEQ_SE_DP_SUNA (SNDARC_SE_BASE + 120) -#define SEQ_SE_DP_MARSH_WALK (SNDARC_SE_BASE + 121) -#define SEQ_SE_DP_DANSA4 (SNDARC_SE_BASE + 122) -#define SEQ_SE_DP_DANSA5 (SNDARC_SE_BASE + 123) -#define SEQ_SE_DP_F209 (SNDARC_SE_BASE + 124) -#define SEQ_SE_DP_SUBERU (SNDARC_SE_BASE + 125) -#define SEQ_SE_DP_FW056 (SNDARC_SE_BASE + 126) -#define SEQ_SE_DP_FW291 (SNDARC_SE_BASE + 127) -#define SEQ_SE_DP_FW089 (SNDARC_SE_BASE + 128) -#define SEQ_SE_DP_FW452 (SNDARC_SE_BASE + 129) -#define SEQ_SE_DP_FW466 (SNDARC_SE_BASE + 130) -#define SEQ_SE_DP_F007 (SNDARC_SE_BASE + 131) -#define SEQ_SE_DP_FAWA (SNDARC_SE_BASE + 132) -#define SEQ_SE_DP_FPASA2 (SNDARC_SE_BASE + 133) -#define SEQ_SE_DP_FW367 (SNDARC_SE_BASE + 134) -#define SEQ_SE_DP_POKETCH_003 (SNDARC_SE_BASE + 135) -#define SEQ_SE_DP_POKETCH_004 (SNDARC_SE_BASE + 136) -#define SEQ_SE_DP_POKETCH_005 (SNDARC_SE_BASE + 137) -#define SEQ_SE_DP_POKETCH_006 (SNDARC_SE_BASE + 138) -#define SEQ_SE_DP_POKETCH_007 (SNDARC_SE_BASE + 139) -#define SEQ_SE_DP_POKETCH_009 (SNDARC_SE_BASE + 140) -#define SEQ_SE_DP_POKETCH_010 (SNDARC_SE_BASE + 141) -#define SEQ_SE_DP_POKETCH_011 (SNDARC_SE_BASE + 142) -#define SEQ_SE_DP_POKETCH_012 (SNDARC_SE_BASE + 143) -#define SEQ_SE_DP_POKETCH_013 (SNDARC_SE_BASE + 144) -#define SEQ_SE_DP_POKETCH_014 (SNDARC_SE_BASE + 145) -#define SEQ_SE_DP_BEEP (SNDARC_SE_BASE + 146) -#define SEQ_SE_DP_DENSI01 (SNDARC_SE_BASE + 147) -#define SEQ_SE_DP_DENSI02 (SNDARC_SE_BASE + 148) -#define SEQ_SE_DP_DENSI04 (SNDARC_SE_BASE + 149) -#define SEQ_SE_DP_DENSI05 (SNDARC_SE_BASE + 150) -#define SEQ_SE_DP_DENSI07 (SNDARC_SE_BASE + 151) -#define SEQ_SE_DP_DENSI08 (SNDARC_SE_BASE + 152) -#define SEQ_SE_DP_DENSI09 (SNDARC_SE_BASE + 153) -#define SEQ_SE_DP_DENSI10 (SNDARC_SE_BASE + 154) -#define SEQ_SE_DP_DENSI11 (SNDARC_SE_BASE + 155) -#define SEQ_SE_DP_DENSI12 (SNDARC_SE_BASE + 156) -#define SEQ_SE_DP_KASYA (SNDARC_SE_BASE + 157) -#define SEQ_SE_DP_PASO2 (SNDARC_SE_BASE + 158) -#define SEQ_SE_DP_TATA (SNDARC_SE_BASE + 159) -#define SEQ_SE_DP_UP (SNDARC_SE_BASE + 160) -#define SEQ_SE_DP_PASO (SNDARC_SE_BASE + 161) -#define SEQ_SE_DP_SYARAAN (SNDARC_SE_BASE + 162) -#define SEQ_SE_DP_TARARARAN (SNDARC_SE_BASE + 163) -#define SEQ_SE_DP_MAZYO (SNDARC_SE_BASE + 164) -#define SEQ_SE_DP_MAZYO3 (SNDARC_SE_BASE + 165) -#define SEQ_SE_DP_HYUN (SNDARC_SE_BASE + 166) -#define SEQ_SE_DP_HYUN2 (SNDARC_SE_BASE + 167) -#define SEQ_SE_DP_CON_017 (SNDARC_SE_BASE + 168) -#define SEQ_SE_DP_BUTTON01 (SNDARC_SE_BASE + 169) -#define SEQ_SE_DP_Z_PAGE (SNDARC_SE_BASE + 170) -#define SEQ_SE_DP_JOURO (SNDARC_SE_BASE + 171) -#define SEQ_SE_DP_PIKO (SNDARC_SE_BASE + 172) -#define SEQ_SE_DP_PIKO2 (SNDARC_SE_BASE + 173) -#define SEQ_SE_DP_ZUKAN01 (SNDARC_SE_BASE + 174) -#define SEQ_SE_DP_DENSI06 (SNDARC_SE_BASE + 175) -#define SEQ_SE_DP_DENSI17 (SNDARC_SE_BASE + 176) -#define SEQ_SE_DP_DENSI18 (SNDARC_SE_BASE + 177) -#define SEQ_SE_DP_DENSI19 (SNDARC_SE_BASE + 178) -#define SEQ_SE_DP_MEKURU (SNDARC_SE_BASE + 179) -#define SEQ_SE_DP_MEKURU2 (SNDARC_SE_BASE + 180) -#define SEQ_SE_DP_MEKURU3 (SNDARC_SE_BASE + 181) -#define SEQ_SE_DP_MIGAKU01 (SNDARC_SE_BASE + 182) -#define SEQ_SE_DP_MIGAKU02 (SNDARC_SE_BASE + 183) -#define SEQ_SE_DP_BADGE_C (SNDARC_SE_BASE + 184) -#define SEQ_SE_DP_CARD3 (SNDARC_SE_BASE + 185) -#define SEQ_SE_DP_CARD5 (SNDARC_SE_BASE + 186) -#define SEQ_SE_DP_CARD6 (SNDARC_SE_BASE + 187) -#define SEQ_SE_DP_CARD9 (SNDARC_SE_BASE + 188) -#define SEQ_SE_DP_CARD11 (SNDARC_SE_BASE + 189) -#define SEQ_SE_DP_KYU01 (SNDARC_SE_BASE + 190) -#define SEQ_SE_DP_NAMEIN_01 (SNDARC_SE_BASE + 191) -#define SEQ_SE_DP_SYU01 (SNDARC_SE_BASE + 192) -#define SEQ_SE_DP_SYU02 (SNDARC_SE_BASE + 193) -#define SEQ_SE_DP_SYU03 (SNDARC_SE_BASE + 194) -#define SEQ_SE_DP_DECIDE2 (SNDARC_SE_BASE + 195) -#define SEQ_SE_DP_POKELIST_001 (SNDARC_SE_BASE + 196) -#define SEQ_SE_DP_UG_001 (SNDARC_SE_BASE + 197) -#define SEQ_SE_DP_UG_002 (SNDARC_SE_BASE + 198) -#define SEQ_SE_DP_UG_003 (SNDARC_SE_BASE + 199) -#define SEQ_SE_DP_UG_004 (SNDARC_SE_BASE + 200) -#define SEQ_SE_DP_KIRAKIRA3 (SNDARC_SE_BASE + 201) -#define SEQ_SE_DP_KIRAKIRA (SNDARC_SE_BASE + 202) -#define SEQ_SE_DP_KIRAKIRA4 (SNDARC_SE_BASE + 203) -#define SEQ_SE_DP_KOUKAN01 (SNDARC_SE_BASE + 204) -#define SEQ_SE_DP_KOUKAN03 (SNDARC_SE_BASE + 205) -#define SEQ_SE_DP_KOUKAN04 (SNDARC_SE_BASE + 206) -#define SEQ_SE_DP_KOUKAN05 (SNDARC_SE_BASE + 207) -#define SEQ_SE_DP_KOUKAN06 (SNDARC_SE_BASE + 208) -#define SEQ_SE_DP_KOUKAN07 (SNDARC_SE_BASE + 209) -#define SEQ_SE_DP_KOUKAN08 (SNDARC_SE_BASE + 210) -#define SEQ_SE_DP_KOUKAN09 (SNDARC_SE_BASE + 211) -#define SEQ_SE_DP_KOUKAN10 (SNDARC_SE_BASE + 212) -#define SEQ_SE_DP_NM01 (SNDARC_SE_BASE + 213) -#define SEQ_SE_DP_NM02 (SNDARC_SE_BASE + 214) -#define SEQ_SE_DP_NM03 (SNDARC_SE_BASE + 215) -#define SEQ_SE_DP_NM03_2 (SNDARC_SE_BASE + 216) -#define SEQ_SE_DP_NM04 (SNDARC_SE_BASE + 217) -#define SEQ_SE_DP_NM04_2 (SNDARC_SE_BASE + 218) -#define SEQ_SE_DP_NM04_3 (SNDARC_SE_BASE + 219) -#define SEQ_SE_DP_NM05 (SNDARC_SE_BASE + 220) -#define SEQ_SE_DP_NM07 (SNDARC_SE_BASE + 221) -#define SEQ_SE_DP_NM07_2 (SNDARC_SE_BASE + 222) -#define SEQ_SE_DP_NM08 (SNDARC_SE_BASE + 223) -#define SEQ_SE_DP_NM09 (SNDARC_SE_BASE + 224) -#define SEQ_SE_DP_NM10 (SNDARC_SE_BASE + 225) -#define SEQ_SE_DP_NM10_2 (SNDARC_SE_BASE + 226) -#define SEQ_SE_DP_NM11 (SNDARC_SE_BASE + 227) -#define SEQ_SE_DP_NM12 (SNDARC_SE_BASE + 228) -#define SEQ_SE_DP_NM12_2 (SNDARC_SE_BASE + 229) -#define SEQ_SE_DP_NM13 (SNDARC_SE_BASE + 230) -#define SEQ_SE_DP_NM14 (SNDARC_SE_BASE + 231) -#define SEQ_SE_DP_CUSTOM01 (SNDARC_SE_BASE + 232) -#define SEQ_SE_DP_CUSTOM02 (SNDARC_SE_BASE + 233) -#define SEQ_SE_DP_CUSTOM05 (SNDARC_SE_BASE + 234) -#define SEQ_SE_DP_BAG_006 (SNDARC_SE_BASE + 235) -#define SEQ_SE_DP_BAG_011 (SNDARC_SE_BASE + 236) -#define SEQ_SE_DP_BAG_020 (SNDARC_SE_BASE + 237) -#define SEQ_SE_DP_BAG_030 (SNDARC_SE_BASE + 238) -#define SEQ_SE_DP_BAG_031 (SNDARC_SE_BASE + 239) -#define SEQ_SE_DP_GASA01 (SNDARC_SE_BASE + 240) -#define SEQ_SE_DP_GASA02 (SNDARC_SE_BASE + 241) -#define SEQ_SE_DP_GASA03 (SNDARC_SE_BASE + 242) -#define SEQ_SE_DP_CARD7 (SNDARC_SE_BASE + 243) -#define SEQ_SE_DP_SLOT01 (SNDARC_SE_BASE + 244) -#define SEQ_SE_DP_SLOT02 (SNDARC_SE_BASE + 245) -#define SEQ_SE_DP_CLIMAX01 (SNDARC_SE_BASE + 246) -#define SEQ_SE_DP_CLIMAX03 (SNDARC_SE_BASE + 247) -#define SEQ_SE_DP_CLIMAX06 (SNDARC_SE_BASE + 248) -#define SEQ_SE_DP_CLIMAX09 (SNDARC_SE_BASE + 249) -#define SEQ_SE_DP_CLIMAX10 (SNDARC_SE_BASE + 250) -#define SEQ_SE_DP_CLIMAX12 (SNDARC_SE_BASE + 251) -#define SEQ_SE_DP_CLIMAX15 (SNDARC_SE_BASE + 252) -#define SEQ_SE_DP_TRAIN02 (SNDARC_SE_BASE + 253) -#define SEQ_SE_DP_TRAIN03 (SNDARC_SE_BASE + 254) -#define SEQ_SE_DP_TRAIN04 (SNDARC_SE_BASE + 255) -#define SEQ_SE_DP_SHIP01 (SNDARC_SE_BASE + 256) -#define SEQ_SE_DP_SHIP02 (SNDARC_SE_BASE + 257) -#define SEQ_SE_DP_SHIP03 (SNDARC_SE_BASE + 258) -#define SEQ_SE_DP_CON_001 (SNDARC_SE_BASE + 259) -#define SEQ_SE_DP_CON_002 (SNDARC_SE_BASE + 260) -#define SEQ_SE_DP_CON_003 (SNDARC_SE_BASE + 261) -#define SEQ_SE_DP_CON_004 (SNDARC_SE_BASE + 262) -#define SEQ_SE_DP_CON_005 (SNDARC_SE_BASE + 263) -#define SEQ_SE_DP_CON_006 (SNDARC_SE_BASE + 264) -#define SEQ_SE_DP_CON_007 (SNDARC_SE_BASE + 265) -#define SEQ_SE_DP_CON_009 (SNDARC_SE_BASE + 266) -#define SEQ_SE_DP_CON_010 (SNDARC_SE_BASE + 267) -#define SEQ_SE_DP_CON_011 (SNDARC_SE_BASE + 268) -#define SEQ_SE_DP_CON_012 (SNDARC_SE_BASE + 269) -#define SEQ_SE_DP_CON_013 (SNDARC_SE_BASE + 270) -#define SEQ_SE_DP_CON_018 (SNDARC_SE_BASE + 271) -#define SEQ_SE_DP_CON_019 (SNDARC_SE_BASE + 272) -#define SEQ_SE_DP_CON_020 (SNDARC_SE_BASE + 273) -#define SEQ_SE_DP_CON_021 (SNDARC_SE_BASE + 274) -#define SEQ_SE_DP_CON_022 (SNDARC_SE_BASE + 275) -#define SEQ_SE_DP_CON_023 (SNDARC_SE_BASE + 276) -#define SEQ_SE_DP_CON_024 (SNDARC_SE_BASE + 277) -#define SEQ_SE_DP_CON_026 (SNDARC_SE_BASE + 278) -#define SEQ_SE_DP_CON_027_2 (SNDARC_SE_BASE + 279) -#define SEQ_SE_DP_CON_027_3 (SNDARC_SE_BASE + 280) -#define SEQ_SE_DP_CON_028 (SNDARC_SE_BASE + 281) -#define SEQ_SE_DP_CON_029 (SNDARC_SE_BASE + 282) -#define SEQ_SE_DP_CON_030 (SNDARC_SE_BASE + 283) -#define SEQ_SE_DP_CON_031 (SNDARC_SE_BASE + 284) -#define SEQ_SE_DP_CON_032 (SNDARC_SE_BASE + 285) -#define SEQ_SE_DP_CON_033 (SNDARC_SE_BASE + 286) -#define SEQ_SE_DP_CON_034 (SNDARC_SE_BASE + 287) -#define SEQ_SE_DP_KOUKA_H (SNDARC_SE_BASE + 288) -#define SEQ_SE_DP_KOUKA_L (SNDARC_SE_BASE + 289) -#define SEQ_SE_DP_KOUKA_M (SNDARC_SE_BASE + 290) -#define SEQ_SE_DP_NIGERU2 (SNDARC_SE_BASE + 291) -#define SEQ_SE_DP_NIGERU (SNDARC_SE_BASE + 292) -#define SEQ_SE_DP_POKE_DEAD (SNDARC_SE_BASE + 293) -#define SEQ_SE_DP_POKE_DEAD2 (SNDARC_SE_BASE + 294) -#define SEQ_SE_DP_POKE_DEAD3 (SNDARC_SE_BASE + 295) -#define SEQ_SE_DP_HINSI (SNDARC_SE_BASE + 296) -#define SEQ_SE_DP_SUIKOMU (SNDARC_SE_BASE + 297) -#define SEQ_SE_DP_BOWA2 (SNDARC_SE_BASE + 298) -#define SEQ_SE_DP_BOWA3 (SNDARC_SE_BASE + 299) -#define SEQ_SE_DP_BOWA4 (SNDARC_SE_BASE + 300) -#define SEQ_SE_DP_GETTING (SNDARC_SE_BASE + 301) -#define SEQ_SE_DP_NAGERU (SNDARC_SE_BASE + 302) -#define SEQ_SE_DP_EXP (SNDARC_SE_BASE + 303) -#define SEQ_SE_DP_EXPMAX (SNDARC_SE_BASE + 304) -#define SEQ_SE_DP_EXPMAX2 (SNDARC_SE_BASE + 305) -#define SEQ_SE_DP_SLIDEIN (SNDARC_SE_BASE + 306) -#define SEQ_SE_DP_BT_001 (SNDARC_SE_BASE + 307) -#define SEQ_SE_DP_REAPOKE (SNDARC_SE_BASE + 308) -#define SEQ_SE_DP_TB_START (SNDARC_SE_BASE + 309) -#define SEQ_SE_DP_TB_KON (SNDARC_SE_BASE + 310) -#define SEQ_SE_DP_TB_KARA (SNDARC_SE_BASE + 311) -#define SEQ_SE_DP_EGG01 (SNDARC_SE_BASE + 312) -#define SEQ_SE_DP_VSDEMO01 (SNDARC_SE_BASE + 313) -#define SEQ_SE_DP_VSDEMO02 (SNDARC_SE_BASE + 314) -#define SEQ_SE_DP_VSDEMO03 (SNDARC_SE_BASE + 315) -#define SEQ_SE_DP_VSDEMO04 (SNDARC_SE_BASE + 316) -#define SEQ_SE_DP_VSDEMO05 (SNDARC_SE_BASE + 317) -#define SEQ_SE_DP_VSDEMO06 (SNDARC_SE_BASE + 318) -#define SEQ_SE_DP_VSDEMO07 (SNDARC_SE_BASE + 319) -#define SEQ_SE_DP_000 (SNDARC_SE_BASE + 320) -#define SEQ_SE_DP_001 (SNDARC_SE_BASE + 321) -#define SEQ_SE_DP_003 (SNDARC_SE_BASE + 322) -#define SEQ_SE_DP_007 (SNDARC_SE_BASE + 323) -#define SEQ_SE_DP_020 (SNDARC_SE_BASE + 324) -#define SEQ_SE_DP_021 (SNDARC_SE_BASE + 325) -#define SEQ_SE_DP_023 (SNDARC_SE_BASE + 326) -#define SEQ_SE_DP_030 (SNDARC_SE_BASE + 327) -#define SEQ_SE_DP_030C (SNDARC_SE_BASE + 328) -#define SEQ_SE_DP_031 (SNDARC_SE_BASE + 329) -#define SEQ_SE_DP_032 (SNDARC_SE_BASE + 330) -#define SEQ_SE_DP_040 (SNDARC_SE_BASE + 331) -#define SEQ_SE_DP_041 (SNDARC_SE_BASE + 332) -#define SEQ_SE_DP_050 (SNDARC_SE_BASE + 333) -#define SEQ_SE_DP_051 (SNDARC_SE_BASE + 334) -#define SEQ_SE_DP_052 (SNDARC_SE_BASE + 335) -#define SEQ_SE_DP_053 (SNDARC_SE_BASE + 336) -#define SEQ_SE_DP_060 (SNDARC_SE_BASE + 337) -#define SEQ_SE_DP_061 (SNDARC_SE_BASE + 338) -#define SEQ_SE_DP_080 (SNDARC_SE_BASE + 339) -#define SEQ_SE_DP_081 (SNDARC_SE_BASE + 340) -#define SEQ_SE_DP_100 (SNDARC_SE_BASE + 341) -#define SEQ_SE_DP_110 (SNDARC_SE_BASE + 342) -#define SEQ_SE_DP_111 (SNDARC_SE_BASE + 343) -#define SEQ_SE_DP_112 (SNDARC_SE_BASE + 344) -#define SEQ_SE_DP_130 (SNDARC_SE_BASE + 345) -#define SEQ_SE_DP_131 (SNDARC_SE_BASE + 346) -#define SEQ_SE_DP_140 (SNDARC_SE_BASE + 347) -#define SEQ_SE_DP_141 (SNDARC_SE_BASE + 348) -#define SEQ_SE_DP_143 (SNDARC_SE_BASE + 349) -#define SEQ_SE_DP_145 (SNDARC_SE_BASE + 350) -#define SEQ_SE_DP_146 (SNDARC_SE_BASE + 351) -#define SEQ_SE_DP_150 (SNDARC_SE_BASE + 352) -#define SEQ_SE_DP_151 (SNDARC_SE_BASE + 353) -#define SEQ_SE_DP_152 (SNDARC_SE_BASE + 354) -#define SEQ_SE_DP_153 (SNDARC_SE_BASE + 355) -#define SEQ_SE_DP_154 (SNDARC_SE_BASE + 356) -#define SEQ_SE_DP_155 (SNDARC_SE_BASE + 357) -#define SEQ_SE_DP_160 (SNDARC_SE_BASE + 358) -#define SEQ_SE_DP_161 (SNDARC_SE_BASE + 359) -#define SEQ_SE_DP_162 (SNDARC_SE_BASE + 360) -#define SEQ_SE_DP_163 (SNDARC_SE_BASE + 361) -#define SEQ_SE_DP_164 (SNDARC_SE_BASE + 362) -#define SEQ_SE_DP_165 (SNDARC_SE_BASE + 363) -#define SEQ_SE_DP_166 (SNDARC_SE_BASE + 364) -#define SEQ_SE_DP_170 (SNDARC_SE_BASE + 365) -#define SEQ_SE_DP_171 (SNDARC_SE_BASE + 366) -#define SEQ_SE_DP_172 (SNDARC_SE_BASE + 367) -#define SEQ_SE_DP_180 (SNDARC_SE_BASE + 368) -#define SEQ_SE_DP_181 (SNDARC_SE_BASE + 369) -#define SEQ_SE_DP_182 (SNDARC_SE_BASE + 370) -#define SEQ_SE_DP_183 (SNDARC_SE_BASE + 371) -#define SEQ_SE_DP_184 (SNDARC_SE_BASE + 372) -#define SEQ_SE_DP_185 (SNDARC_SE_BASE + 373) -#define SEQ_SE_DP_186 (SNDARC_SE_BASE + 374) -#define SEQ_SE_DP_187 (SNDARC_SE_BASE + 375) -#define SEQ_SE_DP_200 (SNDARC_SE_BASE + 376) -#define SEQ_SE_DP_201 (SNDARC_SE_BASE + 377) -#define SEQ_SE_DP_202 (SNDARC_SE_BASE + 378) -#define SEQ_SE_DP_203 (SNDARC_SE_BASE + 379) -#define SEQ_SE_DP_204 (SNDARC_SE_BASE + 380) -#define SEQ_SE_DP_205 (SNDARC_SE_BASE + 381) -#define SEQ_SE_DP_206 (SNDARC_SE_BASE + 382) -#define SEQ_SE_DP_207 (SNDARC_SE_BASE + 383) -#define SEQ_SE_DP_208 (SNDARC_SE_BASE + 384) -#define SEQ_SE_DP_209 (SNDARC_SE_BASE + 385) -#define SEQ_SE_DP_210 (SNDARC_SE_BASE + 386) -#define SEQ_SE_DP_211 (SNDARC_SE_BASE + 387) -#define SEQ_SE_DP_212 (SNDARC_SE_BASE + 388) -#define SEQ_SE_DP_213 (SNDARC_SE_BASE + 389) -#define SEQ_SE_DP_214 (SNDARC_SE_BASE + 390) -#define SEQ_SE_DP_280 (SNDARC_SE_BASE + 391) -#define SEQ_SE_DP_281 (SNDARC_SE_BASE + 392) -#define SEQ_SE_DP_282 (SNDARC_SE_BASE + 393) -#define SEQ_SE_DP_290 (SNDARC_SE_BASE + 394) -#define SEQ_SE_DP_291 (SNDARC_SE_BASE + 395) -#define SEQ_SE_DP_293 (SNDARC_SE_BASE + 396) -#define SEQ_SE_DP_300 (SNDARC_SE_BASE + 397) -#define SEQ_SE_DP_350 (SNDARC_SE_BASE + 398) -#define SEQ_SE_DP_351 (SNDARC_SE_BASE + 399) -#define SEQ_SE_DP_400 (SNDARC_SE_BASE + 400) -#define SEQ_SE_DP_401 (SNDARC_SE_BASE + 401) -#define SEQ_SE_DP_402 (SNDARC_SE_BASE + 402) -#define SEQ_SE_DP_480 (SNDARC_SE_BASE + 403) -#define SEQ_SE_DP_W003 (SNDARC_SE_BASE + 404) -#define SEQ_SE_DP_W004 (SNDARC_SE_BASE + 405) -#define SEQ_SE_DP_W006 (SNDARC_SE_BASE + 406) -#define SEQ_SE_DP_W007 (SNDARC_SE_BASE + 407) -#define SEQ_SE_DP_W010 (SNDARC_SE_BASE + 408) -#define SEQ_SE_DP_W011 (SNDARC_SE_BASE + 409) -#define SEQ_SE_DP_W013 (SNDARC_SE_BASE + 410) -#define SEQ_SE_DP_W013B (SNDARC_SE_BASE + 411) -#define SEQ_SE_DP_W014 (SNDARC_SE_BASE + 412) -#define SEQ_SE_DP_W015 (SNDARC_SE_BASE + 413) -#define SEQ_SE_DP_W016 (SNDARC_SE_BASE + 414) -#define SEQ_SE_DP_W016B (SNDARC_SE_BASE + 415) -#define SEQ_SE_DP_W017 (SNDARC_SE_BASE + 416) -#define SEQ_SE_DP_W019 (SNDARC_SE_BASE + 417) -#define SEQ_SE_DP_W020 (SNDARC_SE_BASE + 418) -#define SEQ_SE_DP_W020B (SNDARC_SE_BASE + 419) -#define SEQ_SE_DP_W025B (SNDARC_SE_BASE + 420) -#define SEQ_SE_DP_W025C (SNDARC_SE_BASE + 421) -#define SEQ_SE_DP_W026 (SNDARC_SE_BASE + 422) -#define SEQ_SE_DP_W028 (SNDARC_SE_BASE + 423) -#define SEQ_SE_DP_W028B (SNDARC_SE_BASE + 424) -#define SEQ_SE_DP_W029 (SNDARC_SE_BASE + 425) -#define SEQ_SE_DP_W030 (SNDARC_SE_BASE + 426) -#define SEQ_SE_DP_W036 (SNDARC_SE_BASE + 427) -#define SEQ_SE_DP_W039 (SNDARC_SE_BASE + 428) -#define SEQ_SE_DP_W040 (SNDARC_SE_BASE + 429) -#define SEQ_SE_DP_W043 (SNDARC_SE_BASE + 430) -#define SEQ_SE_DP_W043B (SNDARC_SE_BASE + 431) -#define SEQ_SE_DP_W043C (SNDARC_SE_BASE + 432) -#define SEQ_SE_DP_W043D (SNDARC_SE_BASE + 433) -#define SEQ_SE_DP_W044 (SNDARC_SE_BASE + 434) -#define SEQ_SE_DP_W047 (SNDARC_SE_BASE + 435) -#define SEQ_SE_DP_W048 (SNDARC_SE_BASE + 436) -#define SEQ_SE_DP_W052 (SNDARC_SE_BASE + 437) -#define SEQ_SE_DP_W053 (SNDARC_SE_BASE + 438) -#define SEQ_SE_DP_W053B (SNDARC_SE_BASE + 439) -#define SEQ_SE_DP_W054 (SNDARC_SE_BASE + 440) -#define SEQ_SE_DP_W055 (SNDARC_SE_BASE + 441) -#define SEQ_SE_DP_W056 (SNDARC_SE_BASE + 442) -#define SEQ_SE_DP_W056B (SNDARC_SE_BASE + 443) -#define SEQ_SE_DP_W057 (SNDARC_SE_BASE + 444) -#define SEQ_SE_DP_W057B (SNDARC_SE_BASE + 445) -#define SEQ_SE_DP_W059 (SNDARC_SE_BASE + 446) -#define SEQ_SE_DP_W059B (SNDARC_SE_BASE + 447) -#define SEQ_SE_DP_W060 (SNDARC_SE_BASE + 448) -#define SEQ_SE_DP_W062D (SNDARC_SE_BASE + 449) -#define SEQ_SE_DP_W060B (SNDARC_SE_BASE + 450) -#define SEQ_SE_DP_W063 (SNDARC_SE_BASE + 451) -#define SEQ_SE_DP_W063B (SNDARC_SE_BASE + 452) -#define SEQ_SE_DP_W063C (SNDARC_SE_BASE + 453) -#define SEQ_SE_DP_W070 (SNDARC_SE_BASE + 454) -#define SEQ_SE_DP_W071 (SNDARC_SE_BASE + 455) -#define SEQ_SE_DP_W071B (SNDARC_SE_BASE + 456) -#define SEQ_SE_DP_W076 (SNDARC_SE_BASE + 457) -#define SEQ_SE_DP_W076B (SNDARC_SE_BASE + 458) -#define SEQ_SE_DP_W077 (SNDARC_SE_BASE + 459) -#define SEQ_SE_DP_W077B (SNDARC_SE_BASE + 460) -#define SEQ_SE_DP_W080B (SNDARC_SE_BASE + 461) -#define SEQ_SE_DP_W080C (SNDARC_SE_BASE + 462) -#define SEQ_SE_DP_W081 (SNDARC_SE_BASE + 463) -#define SEQ_SE_DP_W081B (SNDARC_SE_BASE + 464) -#define SEQ_SE_DP_W082 (SNDARC_SE_BASE + 465) -#define SEQ_SE_DP_W082B (SNDARC_SE_BASE + 466) -#define SEQ_SE_DP_W082C (SNDARC_SE_BASE + 467) -#define SEQ_SE_DP_W085 (SNDARC_SE_BASE + 468) -#define SEQ_SE_DP_W085B (SNDARC_SE_BASE + 469) -#define SEQ_SE_DP_W085C (SNDARC_SE_BASE + 470) -#define SEQ_SE_DP_W086 (SNDARC_SE_BASE + 471) -#define SEQ_SE_DP_W088 (SNDARC_SE_BASE + 472) -#define SEQ_SE_DP_W089 (SNDARC_SE_BASE + 473) -#define SEQ_SE_DP_W089B (SNDARC_SE_BASE + 474) -#define SEQ_SE_DP_W090 (SNDARC_SE_BASE + 475) -#define SEQ_SE_DP_W091 (SNDARC_SE_BASE + 476) -#define SEQ_SE_DP_W092 (SNDARC_SE_BASE + 477) -#define SEQ_SE_DP_W092B (SNDARC_SE_BASE + 478) -#define SEQ_SE_DP_W092D (SNDARC_SE_BASE + 479) -#define SEQ_SE_DP_W100 (SNDARC_SE_BASE + 480) -#define SEQ_SE_DP_W100B (SNDARC_SE_BASE + 481) -#define SEQ_SE_DP_W103 (SNDARC_SE_BASE + 482) -#define SEQ_SE_DP_W104 (SNDARC_SE_BASE + 483) -#define SEQ_SE_DP_W107 (SNDARC_SE_BASE + 484) -#define SEQ_SE_DP_W109 (SNDARC_SE_BASE + 485) -#define SEQ_SE_DP_W109B (SNDARC_SE_BASE + 486) -#define SEQ_SE_DP_W112 (SNDARC_SE_BASE + 487) -#define SEQ_SE_DP_W112B (SNDARC_SE_BASE + 488) -#define SEQ_SE_DP_W114 (SNDARC_SE_BASE + 489) -#define SEQ_SE_DP_W115 (SNDARC_SE_BASE + 490) -#define SEQ_SE_DP_W118 (SNDARC_SE_BASE + 491) -#define SEQ_SE_DP_W118B (SNDARC_SE_BASE + 492) -#define SEQ_SE_DP_W120 (SNDARC_SE_BASE + 493) -#define SEQ_SE_DP_W122 (SNDARC_SE_BASE + 494) -#define SEQ_SE_DP_W127 (SNDARC_SE_BASE + 495) -#define SEQ_SE_DP_W129 (SNDARC_SE_BASE + 496) -#define SEQ_SE_DP_W145 (SNDARC_SE_BASE + 497) -#define SEQ_SE_DP_W145B (SNDARC_SE_BASE + 498) -#define SEQ_SE_DP_W145C (SNDARC_SE_BASE + 499) -#define SEQ_SE_DP_W145D (SNDARC_SE_BASE + 500) -#define SEQ_SE_DP_W146 (SNDARC_SE_BASE + 501) -#define SEQ_SE_DP_W151 (SNDARC_SE_BASE + 502) -#define SEQ_SE_DP_W152 (SNDARC_SE_BASE + 503) -#define SEQ_SE_DP_W153 (SNDARC_SE_BASE + 504) -#define SEQ_SE_DP_W155 (SNDARC_SE_BASE + 505) -#define SEQ_SE_DP_W161 (SNDARC_SE_BASE + 506) -#define SEQ_SE_DP_W161B (SNDARC_SE_BASE + 507) -#define SEQ_SE_DP_W166 (SNDARC_SE_BASE + 508) -#define SEQ_SE_DP_W171 (SNDARC_SE_BASE + 509) -#define SEQ_SE_DP_W172 (SNDARC_SE_BASE + 510) -#define SEQ_SE_DP_W172B (SNDARC_SE_BASE + 511) -#define SEQ_SE_DP_W173 (SNDARC_SE_BASE + 512) -#define SEQ_SE_DP_W173B (SNDARC_SE_BASE + 513) -#define SEQ_SE_DP_W173C (SNDARC_SE_BASE + 514) -#define SEQ_SE_DP_W179 (SNDARC_SE_BASE + 515) -#define SEQ_SE_DP_W185 (SNDARC_SE_BASE + 516) -#define SEQ_SE_DP_W187 (SNDARC_SE_BASE + 517) -#define SEQ_SE_DP_W195 (SNDARC_SE_BASE + 518) -#define SEQ_SE_DP_W196 (SNDARC_SE_BASE + 519) -#define SEQ_SE_DP_W197 (SNDARC_SE_BASE + 520) -#define SEQ_SE_DP_W199 (SNDARC_SE_BASE + 521) -#define SEQ_SE_DP_W201 (SNDARC_SE_BASE + 522) -#define SEQ_SE_DP_W202 (SNDARC_SE_BASE + 523) -#define SEQ_SE_DP_W202B (SNDARC_SE_BASE + 524) -#define SEQ_SE_DP_W204 (SNDARC_SE_BASE + 525) -#define SEQ_SE_DP_W207 (SNDARC_SE_BASE + 526) -#define SEQ_SE_DP_W207B (SNDARC_SE_BASE + 527) -#define SEQ_SE_DP_W207C (SNDARC_SE_BASE + 528) -#define SEQ_SE_DP_W207D (SNDARC_SE_BASE + 529) -#define SEQ_SE_DP_W208 (SNDARC_SE_BASE + 530) -#define SEQ_SE_DP_W209 (SNDARC_SE_BASE + 531) -#define SEQ_SE_DP_W213 (SNDARC_SE_BASE + 532) -#define SEQ_SE_DP_W215 (SNDARC_SE_BASE + 533) -#define SEQ_SE_DP_W221B (SNDARC_SE_BASE + 534) -#define SEQ_SE_DP_W227 (SNDARC_SE_BASE + 535) -#define SEQ_SE_DP_W227B (SNDARC_SE_BASE + 536) -#define SEQ_SE_DP_W230 (SNDARC_SE_BASE + 537) -#define SEQ_SE_DP_W231 (SNDARC_SE_BASE + 538) -#define SEQ_SE_DP_W233 (SNDARC_SE_BASE + 539) -#define SEQ_SE_DP_W233B (SNDARC_SE_BASE + 540) -#define SEQ_SE_DP_W234 (SNDARC_SE_BASE + 541) -#define SEQ_SE_DP_W236 (SNDARC_SE_BASE + 542) -#define SEQ_SE_DP_W239 (SNDARC_SE_BASE + 543) -#define SEQ_SE_DP_W240 (SNDARC_SE_BASE + 544) -#define SEQ_SE_DP_W250 (SNDARC_SE_BASE + 545) -#define SEQ_SE_DP_W253 (SNDARC_SE_BASE + 546) -#define SEQ_SE_DP_W255 (SNDARC_SE_BASE + 547) -#define SEQ_SE_DP_W255B (SNDARC_SE_BASE + 548) -#define SEQ_SE_DP_W255E (SNDARC_SE_BASE + 549) -#define SEQ_SE_DP_W255F (SNDARC_SE_BASE + 550) -#define SEQ_SE_DP_W257 (SNDARC_SE_BASE + 551) -#define SEQ_SE_DP_W258 (SNDARC_SE_BASE + 552) -#define SEQ_SE_DP_W260 (SNDARC_SE_BASE + 553) -#define SEQ_SE_DP_W278 (SNDARC_SE_BASE + 554) -#define SEQ_SE_DP_W280 (SNDARC_SE_BASE + 555) -#define SEQ_SE_DP_W280B (SNDARC_SE_BASE + 556) -#define SEQ_SE_DP_W281 (SNDARC_SE_BASE + 557) -#define SEQ_SE_DP_W287B (SNDARC_SE_BASE + 558) -#define SEQ_SE_DP_W287 (SNDARC_SE_BASE + 559) -#define SEQ_SE_DP_W291 (SNDARC_SE_BASE + 560) -#define SEQ_SE_DP_W298 (SNDARC_SE_BASE + 561) -#define SEQ_SE_DP_W320 (SNDARC_SE_BASE + 562) -#define SEQ_SE_DP_W322 (SNDARC_SE_BASE + 563) -#define SEQ_SE_DP_W327 (SNDARC_SE_BASE + 564) -#define SEQ_SE_DP_W356 (SNDARC_SE_BASE + 565) -#define SEQ_SE_DP_W360 (SNDARC_SE_BASE + 566) -#define SEQ_SE_DP_W360B (SNDARC_SE_BASE + 567) -#define SEQ_SE_DP_W360C (SNDARC_SE_BASE + 568) -#define SEQ_SE_DP_W361 (SNDARC_SE_BASE + 569) -#define SEQ_SE_DP_W362 (SNDARC_SE_BASE + 570) -#define SEQ_SE_DP_W363 (SNDARC_SE_BASE + 571) -#define SEQ_SE_DP_W367 (SNDARC_SE_BASE + 572) -#define SEQ_SE_DP_W368 (SNDARC_SE_BASE + 573) -#define SEQ_SE_DP_W373 (SNDARC_SE_BASE + 574) -#define SEQ_SE_DP_W374 (SNDARC_SE_BASE + 575) -#define SEQ_SE_DP_W375 (SNDARC_SE_BASE + 576) -#define SEQ_SE_DP_W376 (SNDARC_SE_BASE + 577) -#define SEQ_SE_DP_W376B (SNDARC_SE_BASE + 578) -#define SEQ_SE_DP_W377 (SNDARC_SE_BASE + 579) -#define SEQ_SE_DP_W379 (SNDARC_SE_BASE + 580) -#define SEQ_SE_DP_W380 (SNDARC_SE_BASE + 581) -#define SEQ_SE_DP_W381 (SNDARC_SE_BASE + 582) -#define SEQ_SE_DP_W383 (SNDARC_SE_BASE + 583) -#define SEQ_SE_DP_W387 (SNDARC_SE_BASE + 584) -#define SEQ_SE_DP_W392 (SNDARC_SE_BASE + 585) -#define SEQ_SE_DP_W399 (SNDARC_SE_BASE + 586) -#define SEQ_SE_DP_W405 (SNDARC_SE_BASE + 587) -#define SEQ_SE_DP_W408 (SNDARC_SE_BASE + 588) -#define SEQ_SE_DP_W411 (SNDARC_SE_BASE + 589) -#define SEQ_SE_DP_W412 (SNDARC_SE_BASE + 590) -#define SEQ_SE_DP_W413 (SNDARC_SE_BASE + 591) -#define SEQ_SE_DP_W419 (SNDARC_SE_BASE + 592) -#define SEQ_SE_DP_W426 (SNDARC_SE_BASE + 593) -#define SEQ_SE_DP_W428 (SNDARC_SE_BASE + 594) -#define SEQ_SE_DP_W434 (SNDARC_SE_BASE + 595) -#define SEQ_SE_DP_W436 (SNDARC_SE_BASE + 596) -#define SEQ_SE_DP_W443B (SNDARC_SE_BASE + 597) -#define SEQ_SE_DP_W452 (SNDARC_SE_BASE + 598) -#define SEQ_SE_DP_W456 (SNDARC_SE_BASE + 599) -#define SEQ_SE_DP_W459 (SNDARC_SE_BASE + 600) -#define SEQ_SE_DP_W460 (SNDARC_SE_BASE + 601) -#define SEQ_SE_DP_W461 (SNDARC_SE_BASE + 602) -#define SEQ_SE_DP_W462 (SNDARC_SE_BASE + 603) -#define SEQ_SE_DP_W463 (SNDARC_SE_BASE + 604) -#define SEQ_SE_DP_W464 (SNDARC_SE_BASE + 605) -#define SEQ_SE_DP_W465 (SNDARC_SE_BASE + 606) -#define SEQ_SE_DP_W466 (SNDARC_SE_BASE + 607) -#define SEQ_SE_DP_W467 (SNDARC_SE_BASE + 608) -#define SEQ_SE_DP_SUIRYU (SNDARC_SE_BASE + 609) -#define SEQ_SE_DP_KIRAKIRA2 (SNDARC_SE_BASE + 610) -#define SEQ_SE_DP_BAN (SNDARC_SE_BASE + 611) -#define SEQ_SE_DP_BASABASA (SNDARC_SE_BASE + 612) -#define SEQ_SE_DP_SHUSHU (SNDARC_SE_BASE + 613) -#define SEQ_SE_DP_KAMI (SNDARC_SE_BASE + 614) -#define SEQ_SE_DP_KAMI2 (SNDARC_SE_BASE + 615) -#define SEQ_SE_DP_BASI (SNDARC_SE_BASE + 616) -#define SEQ_SE_DP_AWA (SNDARC_SE_BASE + 617) -#define SEQ_SE_DP_NAMI (SNDARC_SE_BASE + 618) -#define SEQ_SE_DP_HURU (SNDARC_SE_BASE + 619) -#define SEQ_SE_DP_HURU2 (SNDARC_SE_BASE + 620) -#define SEQ_SE_DP_KAZE (SNDARC_SE_BASE + 621) -#define SEQ_SE_DP_KAZE2 (SNDARC_SE_BASE + 622) -#define SEQ_SE_DP_MUCHI (SNDARC_SE_BASE + 623) -#define SEQ_SE_DP_BRADE (SNDARC_SE_BASE + 624) -#define SEQ_SE_DP_BFBRADE (SNDARC_SE_BASE + 625) -#define SEQ_SE_DP_PASA (SNDARC_SE_BASE + 626) -#define SEQ_SE_DP_PASA2 (SNDARC_SE_BASE + 627) -#define SEQ_SE_DP_PASA3 (SNDARC_SE_BASE + 628) -#define SEQ_SE_DP_KIRAN (SNDARC_SE_BASE + 629) -#define SEQ_SE_DP_GASHIN (SNDARC_SE_BASE + 630) -#define SEQ_SE_DP_DODON (SNDARC_SE_BASE + 631) -#define SEQ_SE_END (SNDARC_SE_BASE + 632) - -#endif //POKEDIAMOND_CONSTANTS_SNDSEQ_H +#ifndef POKEDIAMOND_CONSTANTS_SNDSEQ_H +#define POKEDIAMOND_CONSTANTS_SNDSEQ_H + +//TODO rename to more useful names + +#define SNDARC_BGM_BASE 1000 +#define SNDARC_SE_BASE 1500 + +#define SEQ_PV001 (0) +#define SEQ_PV (1) +#define SEQ_PV_END (2) +#define SEQ_DUMMY (SNDARC_BGM_BASE + 0) +#define SEQ_SILENCE_FIELD (SNDARC_BGM_BASE + 1) +#define SEQ_SILENCE_DUNGEON (SNDARC_BGM_BASE + 2) +#define SEQ_TEST_TITLE (SNDARC_BGM_BASE + 3) +#define SEQ_TOWN01_D (SNDARC_BGM_BASE + 4) +#define SEQ_TOWN02_D (SNDARC_BGM_BASE + 5) +#define SEQ_TOWN03_D (SNDARC_BGM_BASE + 6) +#define SEQ_TOWN04_D (SNDARC_BGM_BASE + 7) +#define SEQ_TOWN06_D (SNDARC_BGM_BASE + 8) +#define SEQ_TOWN07_D (SNDARC_BGM_BASE + 9) +#define SEQ_CITY01_D (SNDARC_BGM_BASE + 10) +#define SEQ_CITY02_D (SNDARC_BGM_BASE + 11) +#define SEQ_CITY03_D (SNDARC_BGM_BASE + 12) +#define SEQ_CITY04_D (SNDARC_BGM_BASE + 13) +#define SEQ_CITY05_D (SNDARC_BGM_BASE + 14) +#define SEQ_CITY06_D (SNDARC_BGM_BASE + 15) +#define SEQ_CITY07_D (SNDARC_BGM_BASE + 16) +#define SEQ_CITY08_D (SNDARC_BGM_BASE + 17) +#define SEQ_CITY09_D (SNDARC_BGM_BASE + 18) +#define SEQ_CITY10_D (SNDARC_BGM_BASE + 19) +#define SEQ_CITY11_D (SNDARC_BGM_BASE + 20) +#define SEQ_ROAD_A_D (SNDARC_BGM_BASE + 21) +#define SEQ_ROAD_B_D (SNDARC_BGM_BASE + 22) +#define SEQ_ROAD_C_D (SNDARC_BGM_BASE + 23) +#define SEQ_ROAD_D_D (SNDARC_BGM_BASE + 24) +#define SEQ_ROAD_E_D (SNDARC_BGM_BASE + 25) +#define SEQ_ROAD_F_D (SNDARC_BGM_BASE + 26) +#define SEQ_ROAD_SNOW_D (SNDARC_BGM_BASE + 27) +#define SEQ_ROAD_BZA_D (SNDARC_BGM_BASE + 28) +#define SEQ_OPENING (SNDARC_BGM_BASE + 29) +#define SEQ_TV_HOUSOU (SNDARC_BGM_BASE + 30) +#define SEQ_TOWN05_D (SNDARC_BGM_BASE + 31) +#define SEQ_ROAD_BZB_D (SNDARC_BGM_BASE + 32) +#define SEQ_TOWN01_N (SNDARC_BGM_BASE + 33) +#define SEQ_TOWN02_N (SNDARC_BGM_BASE + 34) +#define SEQ_TOWN03_N (SNDARC_BGM_BASE + 35) +#define SEQ_TOWN04_N (SNDARC_BGM_BASE + 36) +#define SEQ_TOWN06_N (SNDARC_BGM_BASE + 37) +#define SEQ_TOWN07_N (SNDARC_BGM_BASE + 38) +#define SEQ_CITY01_N (SNDARC_BGM_BASE + 39) +#define SEQ_CITY02_N (SNDARC_BGM_BASE + 40) +#define SEQ_CITY03_N (SNDARC_BGM_BASE + 41) +#define SEQ_CITY04_N (SNDARC_BGM_BASE + 42) +#define SEQ_CITY05_N (SNDARC_BGM_BASE + 43) +#define SEQ_CITY06_N (SNDARC_BGM_BASE + 44) +#define SEQ_CITY07_N (SNDARC_BGM_BASE + 45) +#define SEQ_CITY08_N (SNDARC_BGM_BASE + 46) +#define SEQ_CITY09_N (SNDARC_BGM_BASE + 47) +#define SEQ_CITY10_N (SNDARC_BGM_BASE + 48) +#define SEQ_CITY11_N (SNDARC_BGM_BASE + 49) +#define SEQ_ROAD_A_N (SNDARC_BGM_BASE + 50) +#define SEQ_ROAD_B_N (SNDARC_BGM_BASE + 51) +#define SEQ_ROAD_C_N (SNDARC_BGM_BASE + 52) +#define SEQ_ROAD_D_N (SNDARC_BGM_BASE + 53) +#define SEQ_ROAD_E_N (SNDARC_BGM_BASE + 54) +#define SEQ_ROAD_F_N (SNDARC_BGM_BASE + 55) +#define SEQ_ROAD_SNOW_N (SNDARC_BGM_BASE + 56) +#define SEQ_ROAD_BZA_N (SNDARC_BGM_BASE + 57) +#define SEQ_TOWN05_N (SNDARC_BGM_BASE + 58) +#define SEQ_ROAD_BZB_N (SNDARC_BGM_BASE + 59) +#define SEQ_TANKOU (SNDARC_BGM_BASE + 60) +#define SEQ_HATANIGE (SNDARC_BGM_BASE + 61) +#define SEQ_D_01 (SNDARC_BGM_BASE + 62) +#define SEQ_D_02 (SNDARC_BGM_BASE + 63) +#define SEQ_D_03 (SNDARC_BGM_BASE + 64) +#define SEQ_D_RYAYHY (SNDARC_BGM_BASE + 65) +#define SEQ_D_KOUEN (SNDARC_BGM_BASE + 66) +#define SEQ_D_AGITO (SNDARC_BGM_BASE + 67) +#define SEQ_D_GINLOBBY (SNDARC_BGM_BASE + 68) +#define SEQ_D_SAFARI (SNDARC_BGM_BASE + 69) +#define SEQ_D_LAKE (SNDARC_BGM_BASE + 70) +#define SEQ_D_MOUNT1 (SNDARC_BGM_BASE + 71) +#define SEQ_D_MOUNT2 (SNDARC_BGM_BASE + 72) +#define SEQ_D_06 (SNDARC_BGM_BASE + 73) +#define SEQ_D_05 (SNDARC_BGM_BASE + 74) +#define SEQ_D_04 (SNDARC_BGM_BASE + 75) +#define SEQ_D_LEAGUE (SNDARC_BGM_BASE + 76) +#define SEQ_BLD_DENDO (SNDARC_BGM_BASE + 77) +#define SEQ_D_CROAD (SNDARC_BGM_BASE + 78) +#define SEQ_D_ICE (SNDARC_BGM_BASE + 79) +#define SEQ_D_SECRET (SNDARC_BGM_BASE + 80) +#define SEQ_D_UNKNOWN (SNDARC_BGM_BASE + 81) +#define SEQ_POKEPARK (SNDARC_BGM_BASE + 82) +#define SEQ_D_HARDMT (SNDARC_BGM_BASE + 83) +#define SEQ_BLD_LEGEND (SNDARC_BGM_BASE + 84) +#define SEQ_PC_01 (SNDARC_BGM_BASE + 85) +#define SEQ_PC_02 (SNDARC_BGM_BASE + 86) +#define SEQ_GYM (SNDARC_BGM_BASE + 87) +#define SEQ_KENKYUJO (SNDARC_BGM_BASE + 88) +#define SEQ_BLD_CON (SNDARC_BGM_BASE + 89) +#define SEQ_FS (SNDARC_BGM_BASE + 90) +#define SEQ_BLD_GAME (SNDARC_BGM_BASE + 91) +#define SEQ_BF_TOWWER (SNDARC_BGM_BASE + 92) +#define SEQ_BLD_TV (SNDARC_BGM_BASE + 93) +#define SEQ_THE_EVENT04 (SNDARC_BGM_BASE + 94) +#define SEQ_FUE (SNDARC_BGM_BASE + 95) +#define SEQ_AUS (SNDARC_BGM_BASE + 96) +#define SEQ_BLD_BLD_GTC (SNDARC_BGM_BASE + 97) +#define SEQ_OPENING2 (SNDARC_BGM_BASE + 98) +#define SEQ_BF_FACT (SNDARC_BGM_BASE + 99) +#define SEQ_EYE_BOY (SNDARC_BGM_BASE + 100) +#define SEQ_EYE_KID (SNDARC_BGM_BASE + 101) +#define SEQ_EYE_FIGHT (SNDARC_BGM_BASE + 102) +#define SEQ_EYE_GINGA (SNDARC_BGM_BASE + 103) +#define SEQ_EYE_LADY (SNDARC_BGM_BASE + 104) +#define SEQ_EYE_MOUNT (SNDARC_BGM_BASE + 105) +#define SEQ_EYE_RICH (SNDARC_BGM_BASE + 106) +#define SEQ_EYE_ENKA (SNDARC_BGM_BASE + 107) +#define SEQ_EYE_MYS (SNDARC_BGM_BASE + 108) +#define SEQ_EYE_ELITE (SNDARC_BGM_BASE + 109) +#define SEQ_EYE_GIRL (SNDARC_BGM_BASE + 110) +#define SEQ_EYE_SPORT (SNDARC_BGM_BASE + 111) +#define SEQ_EYE_FUN (SNDARC_BGM_BASE + 112) +#define SEQ_EYE_TENNO (SNDARC_BGM_BASE + 113) +#define SEQ_EYE_CHAMP (SNDARC_BGM_BASE + 114) +#define SEQ_FIGHT0101 (SNDARC_BGM_BASE + 115) +#define SEQ_BA_POKE (SNDARC_BGM_BASE + 116) +#define SEQ_BA_GYM (SNDARC_BGM_BASE + 117) +#define SEQ_BA_DPOKE1 (SNDARC_BGM_BASE + 118) +#define SEQ_BA_TRAIN (SNDARC_BGM_BASE + 119) +#define SEQ_BA_AKAGI (SNDARC_BGM_BASE + 120) +#define SEQ_BA_DPOKE2 (SNDARC_BGM_BASE + 121) +#define SEQ_BA_CHANP (SNDARC_BGM_BASE + 122) +#define SEQ_BA_GINGA (SNDARC_BGM_BASE + 123) +#define SEQ_BA_RIVAL (SNDARC_BGM_BASE + 124) +#define SEQ_BA_SECRET1 (SNDARC_BGM_BASE + 125) +#define SEQ_BA_SECRET2 (SNDARC_BGM_BASE + 126) +#define SEQ_WINPOKE (SNDARC_BGM_BASE + 127) +#define SEQ_WINTRAIN (SNDARC_BGM_BASE + 128) +#define SEQ_WINTGYM (SNDARC_BGM_BASE + 129) +#define SEQ_WINCHAMP (SNDARC_BGM_BASE + 130) +#define SEQ_WINGINGA (SNDARC_BGM_BASE + 131) +#define SEQ_WINAKAGI (SNDARC_BGM_BASE + 132) +#define SEQ_WINTENNO (SNDARC_BGM_BASE + 133) +#define SEQ_BA_GINGA3 (SNDARC_BGM_BASE + 134) +#define SEQ_CON_TEST (SNDARC_BGM_BASE + 135) +#define SEQ_BA_TENNO (SNDARC_BGM_BASE + 136) +#define SEQ_BA_TOWER (SNDARC_BGM_BASE + 137) +#define SEQ_TSURETEKE (SNDARC_BGM_BASE + 138) +#define SEQ_THE_RIV (SNDARC_BGM_BASE + 139) +#define SEQ_THE_EVENT01 (SNDARC_BGM_BASE + 140) +#define SEQ_SHINKA (SNDARC_BGM_BASE + 141) +#define SEQ_THE_BOY (SNDARC_BGM_BASE + 142) +#define SEQ_THE_GIRL (SNDARC_BGM_BASE + 143) +#define SEQ_THE_EVENT02 (SNDARC_BGM_BASE + 144) +#define SEQ_THE_EVENT03 (SNDARC_BGM_BASE + 145) +#define SEQ_THE_EVENT05 (SNDARC_BGM_BASE + 146) +#define SEQ_THE_AKAGI (SNDARC_BGM_BASE + 147) +#define SEQ_EV_DENDO1 (SNDARC_BGM_BASE + 148) +#define SEQ_EV_LEGEND (SNDARC_BGM_BASE + 149) +#define SEQ_KUSAGASA (SNDARC_BGM_BASE + 150) +#define SEQ_NAMINORI (SNDARC_BGM_BASE + 151) +#define SEQ_BICYCLE (SNDARC_BGM_BASE + 152) +#define SEQ_GONIN (SNDARC_BGM_BASE + 153) +#define SEQ_TV_END (SNDARC_BGM_BASE + 154) +#define SEQ_FANFA1 (SNDARC_BGM_BASE + 155) +#define SEQ_FANFA5 (SNDARC_BGM_BASE + 156) +#define SEQ_FANFA3 (SNDARC_BGM_BASE + 157) +#define SEQ_FANFA4 (SNDARC_BGM_BASE + 158) +#define SEQ_FANFA6 (SNDARC_BGM_BASE + 159) +#define SEQ_FANFA2 (SNDARC_BGM_BASE + 160) +#define SEQ_BADGE (SNDARC_BGM_BASE + 161) +#define SEQ_POCKETCH (SNDARC_BGM_BASE + 162) +#define SEQ_WAZA (SNDARC_BGM_BASE + 163) +#define SEQ_ACCE (SNDARC_BGM_BASE + 164) +#define SEQ_WASURE (SNDARC_BGM_BASE + 165) +#define SEQ_ASA (SNDARC_BGM_BASE + 166) +#define SEQ_KINOMI (SNDARC_BGM_BASE + 167) +#define SEQ_REPORT (SNDARC_BGM_BASE + 168) +#define SEQ_CO_DRESS (SNDARC_BGM_BASE + 169) +#define SEQ_KOUKAN (SNDARC_BGM_BASE + 170) +#define SEQ_BLD_EV_DENDO2 (SNDARC_BGM_BASE + 171) +#define SEQ_TITLE00 (SNDARC_BGM_BASE + 172) +#define SEQ_TITLE01 (SNDARC_BGM_BASE + 173) +#define SEQ_PRESENT (SNDARC_BGM_BASE + 174) +#define SEQ_WIFILOBBY (SNDARC_BGM_BASE + 175) +#define SEQ_CO_KAWAI (SNDARC_BGM_BASE + 176) +#define SEQ_CO_KASHI (SNDARC_BGM_BASE + 177) +#define SEQ_CO_UTSUK (SNDARC_BGM_BASE + 178) +#define SEQ_CO_TAKUMA (SNDARC_BGM_BASE + 179) +#define SEQ_CO_KAKKO (SNDARC_BGM_BASE + 180) +#define SEQ_CO_KEKKA (SNDARC_BGM_BASE + 181) +#define SEQ_CO_FANFA (SNDARC_BGM_BASE + 182) +#define SEQ_KINOMI1 (SNDARC_BGM_BASE + 183) +#define SEQ_SLOT_ATARI (SNDARC_BGM_BASE + 184) +#define SEQ_SLOT_OOATARI (SNDARC_BGM_BASE + 185) +#define SEQ_BLD_ENDING (SNDARC_BGM_BASE + 186) +#define SEQ_KINOMI2 (SNDARC_BGM_BASE + 187) +#define SEQ_SLOT (SNDARC_BGM_BASE + 188) +#define SEQ_AIF_FIELD (SNDARC_BGM_BASE + 189) +#define SEQ_AIF_DUNGEON (SNDARC_BGM_BASE + 190) +#define SEQ_AIF_BATTLE (SNDARC_BGM_BASE + 191) +#define SEQ_BGM_END (SNDARC_BGM_BASE + 192) +#define SEQ_SE_DP_SELECT (SNDARC_SE_BASE + 0) +#define SEQ_SE_DP_DECIDE (SNDARC_SE_BASE + 1) +#define SEQ_SE_DP_TALK2 (SNDARC_SE_BASE + 2) +#define SEQ_SE_DP_SELECT11 (SNDARC_SE_BASE + 3) +#define SEQ_SE_DP_SELECT78 (SNDARC_SE_BASE + 4) +#define SEQ_SE_DP_SELECT5 (SNDARC_SE_BASE + 5) +#define SEQ_SE_DP_PIRORIRO (SNDARC_SE_BASE + 6) +#define SEQ_SE_DP_PIRORIRO2 (SNDARC_SE_BASE + 7) +#define SEQ_SE_DP_BUTTON9 (SNDARC_SE_BASE + 8) +#define SEQ_SE_DP_BUTTON3 (SNDARC_SE_BASE + 9) +#define SEQ_SE_DP_KON (SNDARC_SE_BASE + 10) +#define SEQ_SE_DP_KON2 (SNDARC_SE_BASE + 11) +#define SEQ_SE_DP_KON3 (SNDARC_SE_BASE + 12) +#define SEQ_SE_DP_KON4 (SNDARC_SE_BASE + 13) +#define SEQ_SE_DP_BOX01 (SNDARC_SE_BASE + 14) +#define SEQ_SE_DP_BOX02 (SNDARC_SE_BASE + 15) +#define SEQ_SE_DP_KAIFUKU (SNDARC_SE_BASE + 16) +#define SEQ_SE_DP_ZUKAN02 (SNDARC_SE_BASE + 17) +#define SEQ_SE_DP_OPEN2 (SNDARC_SE_BASE + 18) +#define SEQ_SE_DP_CLOSE2 (SNDARC_SE_BASE + 19) +#define SEQ_SE_DP_025 (SNDARC_SE_BASE + 20) +#define SEQ_SE_DP_PINPON (SNDARC_SE_BASE + 21) +#define SEQ_SE_DP_CUSTOM06 (SNDARC_SE_BASE + 22) +#define SEQ_SE_DP_BOX03 (SNDARC_SE_BASE + 23) +#define SEQ_SE_DP_START (SNDARC_SE_BASE + 24) +#define SEQ_SE_DP_SELECT_SLOT (SNDARC_SE_BASE + 25) +#define SEQ_SE_DP_CARD10 (SNDARC_SE_BASE + 26) +#define SEQ_SE_DP_KATI (SNDARC_SE_BASE + 27) +#define SEQ_SE_DP_CON_014 (SNDARC_SE_BASE + 28) +#define SEQ_SE_DP_W025 (SNDARC_SE_BASE + 29) +#define SEQ_SE_DP_W060C (SNDARC_SE_BASE + 30) +#define SEQ_SE_DP_W062 (SNDARC_SE_BASE + 31) +#define SEQ_SE_DP_W080 (SNDARC_SE_BASE + 32) +#define SEQ_SE_DP_WIN_OPEN (SNDARC_SE_BASE + 33) +#define SEQ_SE_DP_BOWA (SNDARC_SE_BASE + 34) +#define SEQ_SE_DP_Z_SEARCH (SNDARC_SE_BASE + 35) +#define SEQ_SE_DP_CARD2 (SNDARC_SE_BASE + 36) +#define SEQ_SE_DP_WALL_HIT (SNDARC_SE_BASE + 37) +#define SEQ_SE_DP_WALL_HIT2 (SNDARC_SE_BASE + 38) +#define SEQ_SE_DP_KAIDAN2 (SNDARC_SE_BASE + 39) +#define SEQ_SE_DP_DOOR (SNDARC_SE_BASE + 40) +#define SEQ_SE_DP_DOOR_OPEN (SNDARC_SE_BASE + 41) +#define SEQ_SE_DP_DOOR_CLOSE (SNDARC_SE_BASE + 42) +#define SEQ_SE_DP_DOOR_CLOSE2 (SNDARC_SE_BASE + 43) +#define SEQ_SE_DP_DOOR10 (SNDARC_SE_BASE + 44) +#define SEQ_SE_DP_WIN_OPEN2 (SNDARC_SE_BASE + 45) +#define SEQ_SE_DP_WIN_OPEN3 (SNDARC_SE_BASE + 46) +#define SEQ_SE_DP_DANSA (SNDARC_SE_BASE + 47) +#define SEQ_SE_DP_PC_ON (SNDARC_SE_BASE + 48) +#define SEQ_SE_DP_PC_LOGIN (SNDARC_SE_BASE + 49) +#define SEQ_SE_DP_PC_LOGOFF (SNDARC_SE_BASE + 50) +#define SEQ_SE_DP_DENDOU (SNDARC_SE_BASE + 51) +#define SEQ_SE_DP_DOKU2 (SNDARC_SE_BASE + 52) +#define SEQ_SE_DP_ELEBETA (SNDARC_SE_BASE + 53) +#define SEQ_SE_DP_ELEBETA2 (SNDARC_SE_BASE + 54) +#define SEQ_SE_DP_ELEBETA3 (SNDARC_SE_BASE + 55) +#define SEQ_SE_DP_ELEBETA4 (SNDARC_SE_BASE + 56) +#define SEQ_SE_DP_ESUKA (SNDARC_SE_BASE + 57) +#define SEQ_SE_DP_TV_NOISE (SNDARC_SE_BASE + 58) +#define SEQ_SE_DP_JIHANKI (SNDARC_SE_BASE + 59) +#define SEQ_SE_DP_JITENSYA (SNDARC_SE_BASE + 60) +#define SEQ_SE_DP_GEAR (SNDARC_SE_BASE + 61) +#define SEQ_SE_DP_KI_GASYAN (SNDARC_SE_BASE + 62) +#define SEQ_SE_DP_SAVE (SNDARC_SE_BASE + 63) +#define SEQ_SE_DP_GEAR2 (SNDARC_SE_BASE + 64) +#define SEQ_SE_DP_SELECT8 (SNDARC_SE_BASE + 65) +#define SEQ_SE_DP_DORIRU (SNDARC_SE_BASE + 66) +#define SEQ_SE_DP_YUKIASHI (SNDARC_SE_BASE + 67) +#define SEQ_SE_DP_UG_005 (SNDARC_SE_BASE + 68) +#define SEQ_SE_DP_UG_006 (SNDARC_SE_BASE + 69) +#define SEQ_SE_DP_UG_007 (SNDARC_SE_BASE + 70) +#define SEQ_SE_DP_UG_008 (SNDARC_SE_BASE + 71) +#define SEQ_SE_DP_UG_020 (SNDARC_SE_BASE + 72) +#define SEQ_SE_DP_UG_021 (SNDARC_SE_BASE + 73) +#define SEQ_SE_DP_UG_022 (SNDARC_SE_BASE + 74) +#define SEQ_SE_DP_UG_023 (SNDARC_SE_BASE + 75) +#define SEQ_SE_DP_UG_024 (SNDARC_SE_BASE + 76) +#define SEQ_SE_DP_UG_025 (SNDARC_SE_BASE + 77) +#define SEQ_SE_DP_UG_026 (SNDARC_SE_BASE + 78) +#define SEQ_SE_DP_UG_027 (SNDARC_SE_BASE + 79) +#define SEQ_SE_DP_DENSI15 (SNDARC_SE_BASE + 80) +#define SEQ_SE_DP_DENSI16 (SNDARC_SE_BASE + 81) +#define SEQ_SE_DP_DENSI20 (SNDARC_SE_BASE + 82) +#define SEQ_SE_DP_PYUU (SNDARC_SE_BASE + 83) +#define SEQ_SE_DP_PYUU2 (SNDARC_SE_BASE + 84) +#define SEQ_SE_DP_SUTYA (SNDARC_SE_BASE + 85) +#define SEQ_SE_DP_GYURU (SNDARC_SE_BASE + 86) +#define SEQ_SE_DP_OPEN7 (SNDARC_SE_BASE + 87) +#define SEQ_SE_DP_CLOSE7 (SNDARC_SE_BASE + 88) +#define SEQ_SE_DP_ZIZIZI (SNDARC_SE_BASE + 89) +#define SEQ_SE_DP_MAZYO2 (SNDARC_SE_BASE + 90) +#define SEQ_SE_DP_MAZYO4 (SNDARC_SE_BASE + 91) +#define SEQ_SE_DP_BAG_004 (SNDARC_SE_BASE + 92) +#define SEQ_SE_DP_T_AME (SNDARC_SE_BASE + 93) +#define SEQ_SE_DP_T_KOAME (SNDARC_SE_BASE + 94) +#define SEQ_SE_DP_T_OOAME (SNDARC_SE_BASE + 95) +#define SEQ_SE_DP_T_KAMI (SNDARC_SE_BASE + 96) +#define SEQ_SE_DP_T_KAMI2 (SNDARC_SE_BASE + 97) +#define SEQ_SE_DP_HAMARU (SNDARC_SE_BASE + 98) +#define SEQ_SE_DP_GAGAGA (SNDARC_SE_BASE + 99) +#define SEQ_SE_DP_F017 (SNDARC_SE_BASE + 100) +#define SEQ_SE_DP_FOOT3_0 (SNDARC_SE_BASE + 101) +#define SEQ_SE_DP_FOOT3_1 (SNDARC_SE_BASE + 102) +#define SEQ_SE_DP_CON_016 (SNDARC_SE_BASE + 103) +#define SEQ_SE_DP_REGI (SNDARC_SE_BASE + 104) +#define SEQ_SE_DP_CON_F007 (SNDARC_SE_BASE + 105) +#define SEQ_SE_DP_CON_015 (SNDARC_SE_BASE + 106) +#define SEQ_SE_DP_SUTYA2 (SNDARC_SE_BASE + 107) +#define SEQ_SE_DP_FW230 (SNDARC_SE_BASE + 108) +#define SEQ_SE_DP_FW019 (SNDARC_SE_BASE + 109) +#define SEQ_SE_DP_FW088 (SNDARC_SE_BASE + 110) +#define SEQ_SE_DP_FW015 (SNDARC_SE_BASE + 111) +#define SEQ_SE_DP_FBRADE (SNDARC_SE_BASE + 112) +#define SEQ_SE_DP_FW463 (SNDARC_SE_BASE + 113) +#define SEQ_SE_DP_TELE (SNDARC_SE_BASE + 114) +#define SEQ_SE_DP_TELE2 (SNDARC_SE_BASE + 115) +#define SEQ_SE_DP_FW104 (SNDARC_SE_BASE + 116) +#define SEQ_SE_DP_ZUPO (SNDARC_SE_BASE + 117) +#define SEQ_SE_DP_ZUPO2 (SNDARC_SE_BASE + 118) +#define SEQ_SE_DP_KUSA (SNDARC_SE_BASE + 119) +#define SEQ_SE_DP_SUNA (SNDARC_SE_BASE + 120) +#define SEQ_SE_DP_MARSH_WALK (SNDARC_SE_BASE + 121) +#define SEQ_SE_DP_DANSA4 (SNDARC_SE_BASE + 122) +#define SEQ_SE_DP_DANSA5 (SNDARC_SE_BASE + 123) +#define SEQ_SE_DP_F209 (SNDARC_SE_BASE + 124) +#define SEQ_SE_DP_SUBERU (SNDARC_SE_BASE + 125) +#define SEQ_SE_DP_FW056 (SNDARC_SE_BASE + 126) +#define SEQ_SE_DP_FW291 (SNDARC_SE_BASE + 127) +#define SEQ_SE_DP_FW089 (SNDARC_SE_BASE + 128) +#define SEQ_SE_DP_FW452 (SNDARC_SE_BASE + 129) +#define SEQ_SE_DP_FW466 (SNDARC_SE_BASE + 130) +#define SEQ_SE_DP_F007 (SNDARC_SE_BASE + 131) +#define SEQ_SE_DP_FAWA (SNDARC_SE_BASE + 132) +#define SEQ_SE_DP_FPASA2 (SNDARC_SE_BASE + 133) +#define SEQ_SE_DP_FW367 (SNDARC_SE_BASE + 134) +#define SEQ_SE_DP_POKETCH_003 (SNDARC_SE_BASE + 135) +#define SEQ_SE_DP_POKETCH_004 (SNDARC_SE_BASE + 136) +#define SEQ_SE_DP_POKETCH_005 (SNDARC_SE_BASE + 137) +#define SEQ_SE_DP_POKETCH_006 (SNDARC_SE_BASE + 138) +#define SEQ_SE_DP_POKETCH_007 (SNDARC_SE_BASE + 139) +#define SEQ_SE_DP_POKETCH_009 (SNDARC_SE_BASE + 140) +#define SEQ_SE_DP_POKETCH_010 (SNDARC_SE_BASE + 141) +#define SEQ_SE_DP_POKETCH_011 (SNDARC_SE_BASE + 142) +#define SEQ_SE_DP_POKETCH_012 (SNDARC_SE_BASE + 143) +#define SEQ_SE_DP_POKETCH_013 (SNDARC_SE_BASE + 144) +#define SEQ_SE_DP_POKETCH_014 (SNDARC_SE_BASE + 145) +#define SEQ_SE_DP_BEEP (SNDARC_SE_BASE + 146) +#define SEQ_SE_DP_DENSI01 (SNDARC_SE_BASE + 147) +#define SEQ_SE_DP_DENSI02 (SNDARC_SE_BASE + 148) +#define SEQ_SE_DP_DENSI04 (SNDARC_SE_BASE + 149) +#define SEQ_SE_DP_DENSI05 (SNDARC_SE_BASE + 150) +#define SEQ_SE_DP_DENSI07 (SNDARC_SE_BASE + 151) +#define SEQ_SE_DP_DENSI08 (SNDARC_SE_BASE + 152) +#define SEQ_SE_DP_DENSI09 (SNDARC_SE_BASE + 153) +#define SEQ_SE_DP_DENSI10 (SNDARC_SE_BASE + 154) +#define SEQ_SE_DP_DENSI11 (SNDARC_SE_BASE + 155) +#define SEQ_SE_DP_DENSI12 (SNDARC_SE_BASE + 156) +#define SEQ_SE_DP_KASYA (SNDARC_SE_BASE + 157) +#define SEQ_SE_DP_PASO2 (SNDARC_SE_BASE + 158) +#define SEQ_SE_DP_TATA (SNDARC_SE_BASE + 159) +#define SEQ_SE_DP_UP (SNDARC_SE_BASE + 160) +#define SEQ_SE_DP_PASO (SNDARC_SE_BASE + 161) +#define SEQ_SE_DP_SYARAAN (SNDARC_SE_BASE + 162) +#define SEQ_SE_DP_TARARARAN (SNDARC_SE_BASE + 163) +#define SEQ_SE_DP_MAZYO (SNDARC_SE_BASE + 164) +#define SEQ_SE_DP_MAZYO3 (SNDARC_SE_BASE + 165) +#define SEQ_SE_DP_HYUN (SNDARC_SE_BASE + 166) +#define SEQ_SE_DP_HYUN2 (SNDARC_SE_BASE + 167) +#define SEQ_SE_DP_CON_017 (SNDARC_SE_BASE + 168) +#define SEQ_SE_DP_BUTTON01 (SNDARC_SE_BASE + 169) +#define SEQ_SE_DP_Z_PAGE (SNDARC_SE_BASE + 170) +#define SEQ_SE_DP_JOURO (SNDARC_SE_BASE + 171) +#define SEQ_SE_DP_PIKO (SNDARC_SE_BASE + 172) +#define SEQ_SE_DP_PIKO2 (SNDARC_SE_BASE + 173) +#define SEQ_SE_DP_ZUKAN01 (SNDARC_SE_BASE + 174) +#define SEQ_SE_DP_DENSI06 (SNDARC_SE_BASE + 175) +#define SEQ_SE_DP_DENSI17 (SNDARC_SE_BASE + 176) +#define SEQ_SE_DP_DENSI18 (SNDARC_SE_BASE + 177) +#define SEQ_SE_DP_DENSI19 (SNDARC_SE_BASE + 178) +#define SEQ_SE_DP_MEKURU (SNDARC_SE_BASE + 179) +#define SEQ_SE_DP_MEKURU2 (SNDARC_SE_BASE + 180) +#define SEQ_SE_DP_MEKURU3 (SNDARC_SE_BASE + 181) +#define SEQ_SE_DP_MIGAKU01 (SNDARC_SE_BASE + 182) +#define SEQ_SE_DP_MIGAKU02 (SNDARC_SE_BASE + 183) +#define SEQ_SE_DP_BADGE_C (SNDARC_SE_BASE + 184) +#define SEQ_SE_DP_CARD3 (SNDARC_SE_BASE + 185) +#define SEQ_SE_DP_CARD5 (SNDARC_SE_BASE + 186) +#define SEQ_SE_DP_CARD6 (SNDARC_SE_BASE + 187) +#define SEQ_SE_DP_CARD9 (SNDARC_SE_BASE + 188) +#define SEQ_SE_DP_CARD11 (SNDARC_SE_BASE + 189) +#define SEQ_SE_DP_KYU01 (SNDARC_SE_BASE + 190) +#define SEQ_SE_DP_NAMEIN_01 (SNDARC_SE_BASE + 191) +#define SEQ_SE_DP_SYU01 (SNDARC_SE_BASE + 192) +#define SEQ_SE_DP_SYU02 (SNDARC_SE_BASE + 193) +#define SEQ_SE_DP_SYU03 (SNDARC_SE_BASE + 194) +#define SEQ_SE_DP_DECIDE2 (SNDARC_SE_BASE + 195) +#define SEQ_SE_DP_POKELIST_001 (SNDARC_SE_BASE + 196) +#define SEQ_SE_DP_UG_001 (SNDARC_SE_BASE + 197) +#define SEQ_SE_DP_UG_002 (SNDARC_SE_BASE + 198) +#define SEQ_SE_DP_UG_003 (SNDARC_SE_BASE + 199) +#define SEQ_SE_DP_UG_004 (SNDARC_SE_BASE + 200) +#define SEQ_SE_DP_KIRAKIRA3 (SNDARC_SE_BASE + 201) +#define SEQ_SE_DP_KIRAKIRA (SNDARC_SE_BASE + 202) +#define SEQ_SE_DP_KIRAKIRA4 (SNDARC_SE_BASE + 203) +#define SEQ_SE_DP_KOUKAN01 (SNDARC_SE_BASE + 204) +#define SEQ_SE_DP_KOUKAN03 (SNDARC_SE_BASE + 205) +#define SEQ_SE_DP_KOUKAN04 (SNDARC_SE_BASE + 206) +#define SEQ_SE_DP_KOUKAN05 (SNDARC_SE_BASE + 207) +#define SEQ_SE_DP_KOUKAN06 (SNDARC_SE_BASE + 208) +#define SEQ_SE_DP_KOUKAN07 (SNDARC_SE_BASE + 209) +#define SEQ_SE_DP_KOUKAN08 (SNDARC_SE_BASE + 210) +#define SEQ_SE_DP_KOUKAN09 (SNDARC_SE_BASE + 211) +#define SEQ_SE_DP_KOUKAN10 (SNDARC_SE_BASE + 212) +#define SEQ_SE_DP_NM01 (SNDARC_SE_BASE + 213) +#define SEQ_SE_DP_NM02 (SNDARC_SE_BASE + 214) +#define SEQ_SE_DP_NM03 (SNDARC_SE_BASE + 215) +#define SEQ_SE_DP_NM03_2 (SNDARC_SE_BASE + 216) +#define SEQ_SE_DP_NM04 (SNDARC_SE_BASE + 217) +#define SEQ_SE_DP_NM04_2 (SNDARC_SE_BASE + 218) +#define SEQ_SE_DP_NM04_3 (SNDARC_SE_BASE + 219) +#define SEQ_SE_DP_NM05 (SNDARC_SE_BASE + 220) +#define SEQ_SE_DP_NM07 (SNDARC_SE_BASE + 221) +#define SEQ_SE_DP_NM07_2 (SNDARC_SE_BASE + 222) +#define SEQ_SE_DP_NM08 (SNDARC_SE_BASE + 223) +#define SEQ_SE_DP_NM09 (SNDARC_SE_BASE + 224) +#define SEQ_SE_DP_NM10 (SNDARC_SE_BASE + 225) +#define SEQ_SE_DP_NM10_2 (SNDARC_SE_BASE + 226) +#define SEQ_SE_DP_NM11 (SNDARC_SE_BASE + 227) +#define SEQ_SE_DP_NM12 (SNDARC_SE_BASE + 228) +#define SEQ_SE_DP_NM12_2 (SNDARC_SE_BASE + 229) +#define SEQ_SE_DP_NM13 (SNDARC_SE_BASE + 230) +#define SEQ_SE_DP_NM14 (SNDARC_SE_BASE + 231) +#define SEQ_SE_DP_CUSTOM01 (SNDARC_SE_BASE + 232) +#define SEQ_SE_DP_CUSTOM02 (SNDARC_SE_BASE + 233) +#define SEQ_SE_DP_CUSTOM05 (SNDARC_SE_BASE + 234) +#define SEQ_SE_DP_BAG_006 (SNDARC_SE_BASE + 235) +#define SEQ_SE_DP_BAG_011 (SNDARC_SE_BASE + 236) +#define SEQ_SE_DP_BAG_020 (SNDARC_SE_BASE + 237) +#define SEQ_SE_DP_BAG_030 (SNDARC_SE_BASE + 238) +#define SEQ_SE_DP_BAG_031 (SNDARC_SE_BASE + 239) +#define SEQ_SE_DP_GASA01 (SNDARC_SE_BASE + 240) +#define SEQ_SE_DP_GASA02 (SNDARC_SE_BASE + 241) +#define SEQ_SE_DP_GASA03 (SNDARC_SE_BASE + 242) +#define SEQ_SE_DP_CARD7 (SNDARC_SE_BASE + 243) +#define SEQ_SE_DP_SLOT01 (SNDARC_SE_BASE + 244) +#define SEQ_SE_DP_SLOT02 (SNDARC_SE_BASE + 245) +#define SEQ_SE_DP_CLIMAX01 (SNDARC_SE_BASE + 246) +#define SEQ_SE_DP_CLIMAX03 (SNDARC_SE_BASE + 247) +#define SEQ_SE_DP_CLIMAX06 (SNDARC_SE_BASE + 248) +#define SEQ_SE_DP_CLIMAX09 (SNDARC_SE_BASE + 249) +#define SEQ_SE_DP_CLIMAX10 (SNDARC_SE_BASE + 250) +#define SEQ_SE_DP_CLIMAX12 (SNDARC_SE_BASE + 251) +#define SEQ_SE_DP_CLIMAX15 (SNDARC_SE_BASE + 252) +#define SEQ_SE_DP_TRAIN02 (SNDARC_SE_BASE + 253) +#define SEQ_SE_DP_TRAIN03 (SNDARC_SE_BASE + 254) +#define SEQ_SE_DP_TRAIN04 (SNDARC_SE_BASE + 255) +#define SEQ_SE_DP_SHIP01 (SNDARC_SE_BASE + 256) +#define SEQ_SE_DP_SHIP02 (SNDARC_SE_BASE + 257) +#define SEQ_SE_DP_SHIP03 (SNDARC_SE_BASE + 258) +#define SEQ_SE_DP_CON_001 (SNDARC_SE_BASE + 259) +#define SEQ_SE_DP_CON_002 (SNDARC_SE_BASE + 260) +#define SEQ_SE_DP_CON_003 (SNDARC_SE_BASE + 261) +#define SEQ_SE_DP_CON_004 (SNDARC_SE_BASE + 262) +#define SEQ_SE_DP_CON_005 (SNDARC_SE_BASE + 263) +#define SEQ_SE_DP_CON_006 (SNDARC_SE_BASE + 264) +#define SEQ_SE_DP_CON_007 (SNDARC_SE_BASE + 265) +#define SEQ_SE_DP_CON_009 (SNDARC_SE_BASE + 266) +#define SEQ_SE_DP_CON_010 (SNDARC_SE_BASE + 267) +#define SEQ_SE_DP_CON_011 (SNDARC_SE_BASE + 268) +#define SEQ_SE_DP_CON_012 (SNDARC_SE_BASE + 269) +#define SEQ_SE_DP_CON_013 (SNDARC_SE_BASE + 270) +#define SEQ_SE_DP_CON_018 (SNDARC_SE_BASE + 271) +#define SEQ_SE_DP_CON_019 (SNDARC_SE_BASE + 272) +#define SEQ_SE_DP_CON_020 (SNDARC_SE_BASE + 273) +#define SEQ_SE_DP_CON_021 (SNDARC_SE_BASE + 274) +#define SEQ_SE_DP_CON_022 (SNDARC_SE_BASE + 275) +#define SEQ_SE_DP_CON_023 (SNDARC_SE_BASE + 276) +#define SEQ_SE_DP_CON_024 (SNDARC_SE_BASE + 277) +#define SEQ_SE_DP_CON_026 (SNDARC_SE_BASE + 278) +#define SEQ_SE_DP_CON_027_2 (SNDARC_SE_BASE + 279) +#define SEQ_SE_DP_CON_027_3 (SNDARC_SE_BASE + 280) +#define SEQ_SE_DP_CON_028 (SNDARC_SE_BASE + 281) +#define SEQ_SE_DP_CON_029 (SNDARC_SE_BASE + 282) +#define SEQ_SE_DP_CON_030 (SNDARC_SE_BASE + 283) +#define SEQ_SE_DP_CON_031 (SNDARC_SE_BASE + 284) +#define SEQ_SE_DP_CON_032 (SNDARC_SE_BASE + 285) +#define SEQ_SE_DP_CON_033 (SNDARC_SE_BASE + 286) +#define SEQ_SE_DP_CON_034 (SNDARC_SE_BASE + 287) +#define SEQ_SE_DP_KOUKA_H (SNDARC_SE_BASE + 288) +#define SEQ_SE_DP_KOUKA_L (SNDARC_SE_BASE + 289) +#define SEQ_SE_DP_KOUKA_M (SNDARC_SE_BASE + 290) +#define SEQ_SE_DP_NIGERU2 (SNDARC_SE_BASE + 291) +#define SEQ_SE_DP_NIGERU (SNDARC_SE_BASE + 292) +#define SEQ_SE_DP_POKE_DEAD (SNDARC_SE_BASE + 293) +#define SEQ_SE_DP_POKE_DEAD2 (SNDARC_SE_BASE + 294) +#define SEQ_SE_DP_POKE_DEAD3 (SNDARC_SE_BASE + 295) +#define SEQ_SE_DP_HINSI (SNDARC_SE_BASE + 296) +#define SEQ_SE_DP_SUIKOMU (SNDARC_SE_BASE + 297) +#define SEQ_SE_DP_BOWA2 (SNDARC_SE_BASE + 298) +#define SEQ_SE_DP_BOWA3 (SNDARC_SE_BASE + 299) +#define SEQ_SE_DP_BOWA4 (SNDARC_SE_BASE + 300) +#define SEQ_SE_DP_GETTING (SNDARC_SE_BASE + 301) +#define SEQ_SE_DP_NAGERU (SNDARC_SE_BASE + 302) +#define SEQ_SE_DP_EXP (SNDARC_SE_BASE + 303) +#define SEQ_SE_DP_EXPMAX (SNDARC_SE_BASE + 304) +#define SEQ_SE_DP_EXPMAX2 (SNDARC_SE_BASE + 305) +#define SEQ_SE_DP_SLIDEIN (SNDARC_SE_BASE + 306) +#define SEQ_SE_DP_BT_001 (SNDARC_SE_BASE + 307) +#define SEQ_SE_DP_REAPOKE (SNDARC_SE_BASE + 308) +#define SEQ_SE_DP_TB_START (SNDARC_SE_BASE + 309) +#define SEQ_SE_DP_TB_KON (SNDARC_SE_BASE + 310) +#define SEQ_SE_DP_TB_KARA (SNDARC_SE_BASE + 311) +#define SEQ_SE_DP_EGG01 (SNDARC_SE_BASE + 312) +#define SEQ_SE_DP_VSDEMO01 (SNDARC_SE_BASE + 313) +#define SEQ_SE_DP_VSDEMO02 (SNDARC_SE_BASE + 314) +#define SEQ_SE_DP_VSDEMO03 (SNDARC_SE_BASE + 315) +#define SEQ_SE_DP_VSDEMO04 (SNDARC_SE_BASE + 316) +#define SEQ_SE_DP_VSDEMO05 (SNDARC_SE_BASE + 317) +#define SEQ_SE_DP_VSDEMO06 (SNDARC_SE_BASE + 318) +#define SEQ_SE_DP_VSDEMO07 (SNDARC_SE_BASE + 319) +#define SEQ_SE_DP_000 (SNDARC_SE_BASE + 320) +#define SEQ_SE_DP_001 (SNDARC_SE_BASE + 321) +#define SEQ_SE_DP_003 (SNDARC_SE_BASE + 322) +#define SEQ_SE_DP_007 (SNDARC_SE_BASE + 323) +#define SEQ_SE_DP_020 (SNDARC_SE_BASE + 324) +#define SEQ_SE_DP_021 (SNDARC_SE_BASE + 325) +#define SEQ_SE_DP_023 (SNDARC_SE_BASE + 326) +#define SEQ_SE_DP_030 (SNDARC_SE_BASE + 327) +#define SEQ_SE_DP_030C (SNDARC_SE_BASE + 328) +#define SEQ_SE_DP_031 (SNDARC_SE_BASE + 329) +#define SEQ_SE_DP_032 (SNDARC_SE_BASE + 330) +#define SEQ_SE_DP_040 (SNDARC_SE_BASE + 331) +#define SEQ_SE_DP_041 (SNDARC_SE_BASE + 332) +#define SEQ_SE_DP_050 (SNDARC_SE_BASE + 333) +#define SEQ_SE_DP_051 (SNDARC_SE_BASE + 334) +#define SEQ_SE_DP_052 (SNDARC_SE_BASE + 335) +#define SEQ_SE_DP_053 (SNDARC_SE_BASE + 336) +#define SEQ_SE_DP_060 (SNDARC_SE_BASE + 337) +#define SEQ_SE_DP_061 (SNDARC_SE_BASE + 338) +#define SEQ_SE_DP_080 (SNDARC_SE_BASE + 339) +#define SEQ_SE_DP_081 (SNDARC_SE_BASE + 340) +#define SEQ_SE_DP_100 (SNDARC_SE_BASE + 341) +#define SEQ_SE_DP_110 (SNDARC_SE_BASE + 342) +#define SEQ_SE_DP_111 (SNDARC_SE_BASE + 343) +#define SEQ_SE_DP_112 (SNDARC_SE_BASE + 344) +#define SEQ_SE_DP_130 (SNDARC_SE_BASE + 345) +#define SEQ_SE_DP_131 (SNDARC_SE_BASE + 346) +#define SEQ_SE_DP_140 (SNDARC_SE_BASE + 347) +#define SEQ_SE_DP_141 (SNDARC_SE_BASE + 348) +#define SEQ_SE_DP_143 (SNDARC_SE_BASE + 349) +#define SEQ_SE_DP_145 (SNDARC_SE_BASE + 350) +#define SEQ_SE_DP_146 (SNDARC_SE_BASE + 351) +#define SEQ_SE_DP_150 (SNDARC_SE_BASE + 352) +#define SEQ_SE_DP_151 (SNDARC_SE_BASE + 353) +#define SEQ_SE_DP_152 (SNDARC_SE_BASE + 354) +#define SEQ_SE_DP_153 (SNDARC_SE_BASE + 355) +#define SEQ_SE_DP_154 (SNDARC_SE_BASE + 356) +#define SEQ_SE_DP_155 (SNDARC_SE_BASE + 357) +#define SEQ_SE_DP_160 (SNDARC_SE_BASE + 358) +#define SEQ_SE_DP_161 (SNDARC_SE_BASE + 359) +#define SEQ_SE_DP_162 (SNDARC_SE_BASE + 360) +#define SEQ_SE_DP_163 (SNDARC_SE_BASE + 361) +#define SEQ_SE_DP_164 (SNDARC_SE_BASE + 362) +#define SEQ_SE_DP_165 (SNDARC_SE_BASE + 363) +#define SEQ_SE_DP_166 (SNDARC_SE_BASE + 364) +#define SEQ_SE_DP_170 (SNDARC_SE_BASE + 365) +#define SEQ_SE_DP_171 (SNDARC_SE_BASE + 366) +#define SEQ_SE_DP_172 (SNDARC_SE_BASE + 367) +#define SEQ_SE_DP_180 (SNDARC_SE_BASE + 368) +#define SEQ_SE_DP_181 (SNDARC_SE_BASE + 369) +#define SEQ_SE_DP_182 (SNDARC_SE_BASE + 370) +#define SEQ_SE_DP_183 (SNDARC_SE_BASE + 371) +#define SEQ_SE_DP_184 (SNDARC_SE_BASE + 372) +#define SEQ_SE_DP_185 (SNDARC_SE_BASE + 373) +#define SEQ_SE_DP_186 (SNDARC_SE_BASE + 374) +#define SEQ_SE_DP_187 (SNDARC_SE_BASE + 375) +#define SEQ_SE_DP_200 (SNDARC_SE_BASE + 376) +#define SEQ_SE_DP_201 (SNDARC_SE_BASE + 377) +#define SEQ_SE_DP_202 (SNDARC_SE_BASE + 378) +#define SEQ_SE_DP_203 (SNDARC_SE_BASE + 379) +#define SEQ_SE_DP_204 (SNDARC_SE_BASE + 380) +#define SEQ_SE_DP_205 (SNDARC_SE_BASE + 381) +#define SEQ_SE_DP_206 (SNDARC_SE_BASE + 382) +#define SEQ_SE_DP_207 (SNDARC_SE_BASE + 383) +#define SEQ_SE_DP_208 (SNDARC_SE_BASE + 384) +#define SEQ_SE_DP_209 (SNDARC_SE_BASE + 385) +#define SEQ_SE_DP_210 (SNDARC_SE_BASE + 386) +#define SEQ_SE_DP_211 (SNDARC_SE_BASE + 387) +#define SEQ_SE_DP_212 (SNDARC_SE_BASE + 388) +#define SEQ_SE_DP_213 (SNDARC_SE_BASE + 389) +#define SEQ_SE_DP_214 (SNDARC_SE_BASE + 390) +#define SEQ_SE_DP_280 (SNDARC_SE_BASE + 391) +#define SEQ_SE_DP_281 (SNDARC_SE_BASE + 392) +#define SEQ_SE_DP_282 (SNDARC_SE_BASE + 393) +#define SEQ_SE_DP_290 (SNDARC_SE_BASE + 394) +#define SEQ_SE_DP_291 (SNDARC_SE_BASE + 395) +#define SEQ_SE_DP_293 (SNDARC_SE_BASE + 396) +#define SEQ_SE_DP_300 (SNDARC_SE_BASE + 397) +#define SEQ_SE_DP_350 (SNDARC_SE_BASE + 398) +#define SEQ_SE_DP_351 (SNDARC_SE_BASE + 399) +#define SEQ_SE_DP_400 (SNDARC_SE_BASE + 400) +#define SEQ_SE_DP_401 (SNDARC_SE_BASE + 401) +#define SEQ_SE_DP_402 (SNDARC_SE_BASE + 402) +#define SEQ_SE_DP_480 (SNDARC_SE_BASE + 403) +#define SEQ_SE_DP_W003 (SNDARC_SE_BASE + 404) +#define SEQ_SE_DP_W004 (SNDARC_SE_BASE + 405) +#define SEQ_SE_DP_W006 (SNDARC_SE_BASE + 406) +#define SEQ_SE_DP_W007 (SNDARC_SE_BASE + 407) +#define SEQ_SE_DP_W010 (SNDARC_SE_BASE + 408) +#define SEQ_SE_DP_W011 (SNDARC_SE_BASE + 409) +#define SEQ_SE_DP_W013 (SNDARC_SE_BASE + 410) +#define SEQ_SE_DP_W013B (SNDARC_SE_BASE + 411) +#define SEQ_SE_DP_W014 (SNDARC_SE_BASE + 412) +#define SEQ_SE_DP_W015 (SNDARC_SE_BASE + 413) +#define SEQ_SE_DP_W016 (SNDARC_SE_BASE + 414) +#define SEQ_SE_DP_W016B (SNDARC_SE_BASE + 415) +#define SEQ_SE_DP_W017 (SNDARC_SE_BASE + 416) +#define SEQ_SE_DP_W019 (SNDARC_SE_BASE + 417) +#define SEQ_SE_DP_W020 (SNDARC_SE_BASE + 418) +#define SEQ_SE_DP_W020B (SNDARC_SE_BASE + 419) +#define SEQ_SE_DP_W025B (SNDARC_SE_BASE + 420) +#define SEQ_SE_DP_W025C (SNDARC_SE_BASE + 421) +#define SEQ_SE_DP_W026 (SNDARC_SE_BASE + 422) +#define SEQ_SE_DP_W028 (SNDARC_SE_BASE + 423) +#define SEQ_SE_DP_W028B (SNDARC_SE_BASE + 424) +#define SEQ_SE_DP_W029 (SNDARC_SE_BASE + 425) +#define SEQ_SE_DP_W030 (SNDARC_SE_BASE + 426) +#define SEQ_SE_DP_W036 (SNDARC_SE_BASE + 427) +#define SEQ_SE_DP_W039 (SNDARC_SE_BASE + 428) +#define SEQ_SE_DP_W040 (SNDARC_SE_BASE + 429) +#define SEQ_SE_DP_W043 (SNDARC_SE_BASE + 430) +#define SEQ_SE_DP_W043B (SNDARC_SE_BASE + 431) +#define SEQ_SE_DP_W043C (SNDARC_SE_BASE + 432) +#define SEQ_SE_DP_W043D (SNDARC_SE_BASE + 433) +#define SEQ_SE_DP_W044 (SNDARC_SE_BASE + 434) +#define SEQ_SE_DP_W047 (SNDARC_SE_BASE + 435) +#define SEQ_SE_DP_W048 (SNDARC_SE_BASE + 436) +#define SEQ_SE_DP_W052 (SNDARC_SE_BASE + 437) +#define SEQ_SE_DP_W053 (SNDARC_SE_BASE + 438) +#define SEQ_SE_DP_W053B (SNDARC_SE_BASE + 439) +#define SEQ_SE_DP_W054 (SNDARC_SE_BASE + 440) +#define SEQ_SE_DP_W055 (SNDARC_SE_BASE + 441) +#define SEQ_SE_DP_W056 (SNDARC_SE_BASE + 442) +#define SEQ_SE_DP_W056B (SNDARC_SE_BASE + 443) +#define SEQ_SE_DP_W057 (SNDARC_SE_BASE + 444) +#define SEQ_SE_DP_W057B (SNDARC_SE_BASE + 445) +#define SEQ_SE_DP_W059 (SNDARC_SE_BASE + 446) +#define SEQ_SE_DP_W059B (SNDARC_SE_BASE + 447) +#define SEQ_SE_DP_W060 (SNDARC_SE_BASE + 448) +#define SEQ_SE_DP_W062D (SNDARC_SE_BASE + 449) +#define SEQ_SE_DP_W060B (SNDARC_SE_BASE + 450) +#define SEQ_SE_DP_W063 (SNDARC_SE_BASE + 451) +#define SEQ_SE_DP_W063B (SNDARC_SE_BASE + 452) +#define SEQ_SE_DP_W063C (SNDARC_SE_BASE + 453) +#define SEQ_SE_DP_W070 (SNDARC_SE_BASE + 454) +#define SEQ_SE_DP_W071 (SNDARC_SE_BASE + 455) +#define SEQ_SE_DP_W071B (SNDARC_SE_BASE + 456) +#define SEQ_SE_DP_W076 (SNDARC_SE_BASE + 457) +#define SEQ_SE_DP_W076B (SNDARC_SE_BASE + 458) +#define SEQ_SE_DP_W077 (SNDARC_SE_BASE + 459) +#define SEQ_SE_DP_W077B (SNDARC_SE_BASE + 460) +#define SEQ_SE_DP_W080B (SNDARC_SE_BASE + 461) +#define SEQ_SE_DP_W080C (SNDARC_SE_BASE + 462) +#define SEQ_SE_DP_W081 (SNDARC_SE_BASE + 463) +#define SEQ_SE_DP_W081B (SNDARC_SE_BASE + 464) +#define SEQ_SE_DP_W082 (SNDARC_SE_BASE + 465) +#define SEQ_SE_DP_W082B (SNDARC_SE_BASE + 466) +#define SEQ_SE_DP_W082C (SNDARC_SE_BASE + 467) +#define SEQ_SE_DP_W085 (SNDARC_SE_BASE + 468) +#define SEQ_SE_DP_W085B (SNDARC_SE_BASE + 469) +#define SEQ_SE_DP_W085C (SNDARC_SE_BASE + 470) +#define SEQ_SE_DP_W086 (SNDARC_SE_BASE + 471) +#define SEQ_SE_DP_W088 (SNDARC_SE_BASE + 472) +#define SEQ_SE_DP_W089 (SNDARC_SE_BASE + 473) +#define SEQ_SE_DP_W089B (SNDARC_SE_BASE + 474) +#define SEQ_SE_DP_W090 (SNDARC_SE_BASE + 475) +#define SEQ_SE_DP_W091 (SNDARC_SE_BASE + 476) +#define SEQ_SE_DP_W092 (SNDARC_SE_BASE + 477) +#define SEQ_SE_DP_W092B (SNDARC_SE_BASE + 478) +#define SEQ_SE_DP_W092D (SNDARC_SE_BASE + 479) +#define SEQ_SE_DP_W100 (SNDARC_SE_BASE + 480) +#define SEQ_SE_DP_W100B (SNDARC_SE_BASE + 481) +#define SEQ_SE_DP_W103 (SNDARC_SE_BASE + 482) +#define SEQ_SE_DP_W104 (SNDARC_SE_BASE + 483) +#define SEQ_SE_DP_W107 (SNDARC_SE_BASE + 484) +#define SEQ_SE_DP_W109 (SNDARC_SE_BASE + 485) +#define SEQ_SE_DP_W109B (SNDARC_SE_BASE + 486) +#define SEQ_SE_DP_W112 (SNDARC_SE_BASE + 487) +#define SEQ_SE_DP_W112B (SNDARC_SE_BASE + 488) +#define SEQ_SE_DP_W114 (SNDARC_SE_BASE + 489) +#define SEQ_SE_DP_W115 (SNDARC_SE_BASE + 490) +#define SEQ_SE_DP_W118 (SNDARC_SE_BASE + 491) +#define SEQ_SE_DP_W118B (SNDARC_SE_BASE + 492) +#define SEQ_SE_DP_W120 (SNDARC_SE_BASE + 493) +#define SEQ_SE_DP_W122 (SNDARC_SE_BASE + 494) +#define SEQ_SE_DP_W127 (SNDARC_SE_BASE + 495) +#define SEQ_SE_DP_W129 (SNDARC_SE_BASE + 496) +#define SEQ_SE_DP_W145 (SNDARC_SE_BASE + 497) +#define SEQ_SE_DP_W145B (SNDARC_SE_BASE + 498) +#define SEQ_SE_DP_W145C (SNDARC_SE_BASE + 499) +#define SEQ_SE_DP_W145D (SNDARC_SE_BASE + 500) +#define SEQ_SE_DP_W146 (SNDARC_SE_BASE + 501) +#define SEQ_SE_DP_W151 (SNDARC_SE_BASE + 502) +#define SEQ_SE_DP_W152 (SNDARC_SE_BASE + 503) +#define SEQ_SE_DP_W153 (SNDARC_SE_BASE + 504) +#define SEQ_SE_DP_W155 (SNDARC_SE_BASE + 505) +#define SEQ_SE_DP_W161 (SNDARC_SE_BASE + 506) +#define SEQ_SE_DP_W161B (SNDARC_SE_BASE + 507) +#define SEQ_SE_DP_W166 (SNDARC_SE_BASE + 508) +#define SEQ_SE_DP_W171 (SNDARC_SE_BASE + 509) +#define SEQ_SE_DP_W172 (SNDARC_SE_BASE + 510) +#define SEQ_SE_DP_W172B (SNDARC_SE_BASE + 511) +#define SEQ_SE_DP_W173 (SNDARC_SE_BASE + 512) +#define SEQ_SE_DP_W173B (SNDARC_SE_BASE + 513) +#define SEQ_SE_DP_W173C (SNDARC_SE_BASE + 514) +#define SEQ_SE_DP_W179 (SNDARC_SE_BASE + 515) +#define SEQ_SE_DP_W185 (SNDARC_SE_BASE + 516) +#define SEQ_SE_DP_W187 (SNDARC_SE_BASE + 517) +#define SEQ_SE_DP_W195 (SNDARC_SE_BASE + 518) +#define SEQ_SE_DP_W196 (SNDARC_SE_BASE + 519) +#define SEQ_SE_DP_W197 (SNDARC_SE_BASE + 520) +#define SEQ_SE_DP_W199 (SNDARC_SE_BASE + 521) +#define SEQ_SE_DP_W201 (SNDARC_SE_BASE + 522) +#define SEQ_SE_DP_W202 (SNDARC_SE_BASE + 523) +#define SEQ_SE_DP_W202B (SNDARC_SE_BASE + 524) +#define SEQ_SE_DP_W204 (SNDARC_SE_BASE + 525) +#define SEQ_SE_DP_W207 (SNDARC_SE_BASE + 526) +#define SEQ_SE_DP_W207B (SNDARC_SE_BASE + 527) +#define SEQ_SE_DP_W207C (SNDARC_SE_BASE + 528) +#define SEQ_SE_DP_W207D (SNDARC_SE_BASE + 529) +#define SEQ_SE_DP_W208 (SNDARC_SE_BASE + 530) +#define SEQ_SE_DP_W209 (SNDARC_SE_BASE + 531) +#define SEQ_SE_DP_W213 (SNDARC_SE_BASE + 532) +#define SEQ_SE_DP_W215 (SNDARC_SE_BASE + 533) +#define SEQ_SE_DP_W221B (SNDARC_SE_BASE + 534) +#define SEQ_SE_DP_W227 (SNDARC_SE_BASE + 535) +#define SEQ_SE_DP_W227B (SNDARC_SE_BASE + 536) +#define SEQ_SE_DP_W230 (SNDARC_SE_BASE + 537) +#define SEQ_SE_DP_W231 (SNDARC_SE_BASE + 538) +#define SEQ_SE_DP_W233 (SNDARC_SE_BASE + 539) +#define SEQ_SE_DP_W233B (SNDARC_SE_BASE + 540) +#define SEQ_SE_DP_W234 (SNDARC_SE_BASE + 541) +#define SEQ_SE_DP_W236 (SNDARC_SE_BASE + 542) +#define SEQ_SE_DP_W239 (SNDARC_SE_BASE + 543) +#define SEQ_SE_DP_W240 (SNDARC_SE_BASE + 544) +#define SEQ_SE_DP_W250 (SNDARC_SE_BASE + 545) +#define SEQ_SE_DP_W253 (SNDARC_SE_BASE + 546) +#define SEQ_SE_DP_W255 (SNDARC_SE_BASE + 547) +#define SEQ_SE_DP_W255B (SNDARC_SE_BASE + 548) +#define SEQ_SE_DP_W255E (SNDARC_SE_BASE + 549) +#define SEQ_SE_DP_W255F (SNDARC_SE_BASE + 550) +#define SEQ_SE_DP_W257 (SNDARC_SE_BASE + 551) +#define SEQ_SE_DP_W258 (SNDARC_SE_BASE + 552) +#define SEQ_SE_DP_W260 (SNDARC_SE_BASE + 553) +#define SEQ_SE_DP_W278 (SNDARC_SE_BASE + 554) +#define SEQ_SE_DP_W280 (SNDARC_SE_BASE + 555) +#define SEQ_SE_DP_W280B (SNDARC_SE_BASE + 556) +#define SEQ_SE_DP_W281 (SNDARC_SE_BASE + 557) +#define SEQ_SE_DP_W287B (SNDARC_SE_BASE + 558) +#define SEQ_SE_DP_W287 (SNDARC_SE_BASE + 559) +#define SEQ_SE_DP_W291 (SNDARC_SE_BASE + 560) +#define SEQ_SE_DP_W298 (SNDARC_SE_BASE + 561) +#define SEQ_SE_DP_W320 (SNDARC_SE_BASE + 562) +#define SEQ_SE_DP_W322 (SNDARC_SE_BASE + 563) +#define SEQ_SE_DP_W327 (SNDARC_SE_BASE + 564) +#define SEQ_SE_DP_W356 (SNDARC_SE_BASE + 565) +#define SEQ_SE_DP_W360 (SNDARC_SE_BASE + 566) +#define SEQ_SE_DP_W360B (SNDARC_SE_BASE + 567) +#define SEQ_SE_DP_W360C (SNDARC_SE_BASE + 568) +#define SEQ_SE_DP_W361 (SNDARC_SE_BASE + 569) +#define SEQ_SE_DP_W362 (SNDARC_SE_BASE + 570) +#define SEQ_SE_DP_W363 (SNDARC_SE_BASE + 571) +#define SEQ_SE_DP_W367 (SNDARC_SE_BASE + 572) +#define SEQ_SE_DP_W368 (SNDARC_SE_BASE + 573) +#define SEQ_SE_DP_W373 (SNDARC_SE_BASE + 574) +#define SEQ_SE_DP_W374 (SNDARC_SE_BASE + 575) +#define SEQ_SE_DP_W375 (SNDARC_SE_BASE + 576) +#define SEQ_SE_DP_W376 (SNDARC_SE_BASE + 577) +#define SEQ_SE_DP_W376B (SNDARC_SE_BASE + 578) +#define SEQ_SE_DP_W377 (SNDARC_SE_BASE + 579) +#define SEQ_SE_DP_W379 (SNDARC_SE_BASE + 580) +#define SEQ_SE_DP_W380 (SNDARC_SE_BASE + 581) +#define SEQ_SE_DP_W381 (SNDARC_SE_BASE + 582) +#define SEQ_SE_DP_W383 (SNDARC_SE_BASE + 583) +#define SEQ_SE_DP_W387 (SNDARC_SE_BASE + 584) +#define SEQ_SE_DP_W392 (SNDARC_SE_BASE + 585) +#define SEQ_SE_DP_W399 (SNDARC_SE_BASE + 586) +#define SEQ_SE_DP_W405 (SNDARC_SE_BASE + 587) +#define SEQ_SE_DP_W408 (SNDARC_SE_BASE + 588) +#define SEQ_SE_DP_W411 (SNDARC_SE_BASE + 589) +#define SEQ_SE_DP_W412 (SNDARC_SE_BASE + 590) +#define SEQ_SE_DP_W413 (SNDARC_SE_BASE + 591) +#define SEQ_SE_DP_W419 (SNDARC_SE_BASE + 592) +#define SEQ_SE_DP_W426 (SNDARC_SE_BASE + 593) +#define SEQ_SE_DP_W428 (SNDARC_SE_BASE + 594) +#define SEQ_SE_DP_W434 (SNDARC_SE_BASE + 595) +#define SEQ_SE_DP_W436 (SNDARC_SE_BASE + 596) +#define SEQ_SE_DP_W443B (SNDARC_SE_BASE + 597) +#define SEQ_SE_DP_W452 (SNDARC_SE_BASE + 598) +#define SEQ_SE_DP_W456 (SNDARC_SE_BASE + 599) +#define SEQ_SE_DP_W459 (SNDARC_SE_BASE + 600) +#define SEQ_SE_DP_W460 (SNDARC_SE_BASE + 601) +#define SEQ_SE_DP_W461 (SNDARC_SE_BASE + 602) +#define SEQ_SE_DP_W462 (SNDARC_SE_BASE + 603) +#define SEQ_SE_DP_W463 (SNDARC_SE_BASE + 604) +#define SEQ_SE_DP_W464 (SNDARC_SE_BASE + 605) +#define SEQ_SE_DP_W465 (SNDARC_SE_BASE + 606) +#define SEQ_SE_DP_W466 (SNDARC_SE_BASE + 607) +#define SEQ_SE_DP_W467 (SNDARC_SE_BASE + 608) +#define SEQ_SE_DP_SUIRYU (SNDARC_SE_BASE + 609) +#define SEQ_SE_DP_KIRAKIRA2 (SNDARC_SE_BASE + 610) +#define SEQ_SE_DP_BAN (SNDARC_SE_BASE + 611) +#define SEQ_SE_DP_BASABASA (SNDARC_SE_BASE + 612) +#define SEQ_SE_DP_SHUSHU (SNDARC_SE_BASE + 613) +#define SEQ_SE_DP_KAMI (SNDARC_SE_BASE + 614) +#define SEQ_SE_DP_KAMI2 (SNDARC_SE_BASE + 615) +#define SEQ_SE_DP_BASI (SNDARC_SE_BASE + 616) +#define SEQ_SE_DP_AWA (SNDARC_SE_BASE + 617) +#define SEQ_SE_DP_NAMI (SNDARC_SE_BASE + 618) +#define SEQ_SE_DP_HURU (SNDARC_SE_BASE + 619) +#define SEQ_SE_DP_HURU2 (SNDARC_SE_BASE + 620) +#define SEQ_SE_DP_KAZE (SNDARC_SE_BASE + 621) +#define SEQ_SE_DP_KAZE2 (SNDARC_SE_BASE + 622) +#define SEQ_SE_DP_MUCHI (SNDARC_SE_BASE + 623) +#define SEQ_SE_DP_BRADE (SNDARC_SE_BASE + 624) +#define SEQ_SE_DP_BFBRADE (SNDARC_SE_BASE + 625) +#define SEQ_SE_DP_PASA (SNDARC_SE_BASE + 626) +#define SEQ_SE_DP_PASA2 (SNDARC_SE_BASE + 627) +#define SEQ_SE_DP_PASA3 (SNDARC_SE_BASE + 628) +#define SEQ_SE_DP_KIRAN (SNDARC_SE_BASE + 629) +#define SEQ_SE_DP_GASHIN (SNDARC_SE_BASE + 630) +#define SEQ_SE_DP_DODON (SNDARC_SE_BASE + 631) +#define SEQ_SE_END (SNDARC_SE_BASE + 632) + +#endif //POKEDIAMOND_CONSTANTS_SNDSEQ_H diff --git a/include/gf_gfx_loader.h b/include/gf_gfx_loader.h index e87cee93f..b7b204f8e 100644 --- a/include/gf_gfx_loader.h +++ b/include/gf_gfx_loader.h @@ -1,24 +1,24 @@ -#ifndef POKEDIAMOND_GF_GFX_LOADER_H -#define POKEDIAMOND_GF_GFX_LOADER_H - -#include "bg_window.h" -#include "filesystem.h" - -u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id); -void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id); -void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id); -void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id); -u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id); -void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy); -u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy); -void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy); -void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id); -void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id); -void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id); -void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id); -void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id); -void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id); -void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd); -void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p); - -#endif //POKEDIAMOND_GF_GFX_LOADER_H +#ifndef POKEDIAMOND_GF_GFX_LOADER_H +#define POKEDIAMOND_GF_GFX_LOADER_H + +#include "bg_window.h" +#include "filesystem.h" + +u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id); +void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id); +void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id); +void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id); +u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id); +void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy); +u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy); +void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy); +void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id); +void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id); +void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id); +void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id); +void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id); +void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id); +void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd); +void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p); + +#endif //POKEDIAMOND_GF_GFX_LOADER_H diff --git a/include/gf_rtc.h b/include/gf_rtc.h index f7a4e2a7b..470163775 100644 --- a/include/gf_rtc.h +++ b/include/gf_rtc.h @@ -1,31 +1,31 @@ -#ifndef POKEDIAMOND_GF_RTC_H -#define POKEDIAMOND_GF_RTC_H - -#include "RTC_api.h" - -enum RTC_Month -{ - RTC_MONTH_JANUARY = 1, - RTC_MONTH_FEBRUARY, - RTC_MONTH_MARCH, - RTC_MONTH_APRIL, - RTC_MONTH_MAY, - RTC_MONTH_JUNE, - RTC_MONTH_JULY, - RTC_MONTH_AUGUST, - RTC_MONTH_SEPTEMBER, - RTC_MONTH_OCTOBER, - RTC_MONTH_NOVEMBER, - RTC_MONTH_DECEMBER, -}; - -enum RTC_TimeOfDay -{ - RTC_TIMEOFDAY_MORN = 0, - RTC_TIMEOFDAY_DAY, - RTC_TIMEOFDAY_EVE, - RTC_TIMEOFDAY_NITE, - RTC_TIMEOFDAY_LATE, -}; - -#endif //POKEDIAMOND_GF_RTC_H +#ifndef POKEDIAMOND_GF_RTC_H +#define POKEDIAMOND_GF_RTC_H + +#include "RTC_api.h" + +enum RTC_Month +{ + RTC_MONTH_JANUARY = 1, + RTC_MONTH_FEBRUARY, + RTC_MONTH_MARCH, + RTC_MONTH_APRIL, + RTC_MONTH_MAY, + RTC_MONTH_JUNE, + RTC_MONTH_JULY, + RTC_MONTH_AUGUST, + RTC_MONTH_SEPTEMBER, + RTC_MONTH_OCTOBER, + RTC_MONTH_NOVEMBER, + RTC_MONTH_DECEMBER, +}; + +enum RTC_TimeOfDay +{ + RTC_TIMEOFDAY_MORN = 0, + RTC_TIMEOFDAY_DAY, + RTC_TIMEOFDAY_EVE, + RTC_TIMEOFDAY_NITE, + RTC_TIMEOFDAY_LATE, +}; + +#endif //POKEDIAMOND_GF_RTC_H diff --git a/include/macros.inc b/include/macros.inc index eb060422f..64d93844b 100644 --- a/include/macros.inc +++ b/include/macros.inc @@ -1,5 +1,5 @@ -.macro glabel label - .global \label - .thumb - \label: -.endm +.macro glabel label + .global \label + .thumb + \label: +.endm diff --git a/include/module_05.h b/include/module_05.h index d8d3dc94f..08ec10e8f 100644 --- a/include/module_05.h +++ b/include/module_05.h @@ -1,8 +1,8 @@ -#ifndef POKEDIAMOND_MODULE_05_H -#define POKEDIAMOND_MODULE_05_H - -#include "pokemon.h" - -void MOD05_SetEggStats(struct Pokemon * mon, u16 species, int a1, struct PlayerData * data, int a2, int metLoc); - -#endif //POKEDIAMOND_MODULE_05_H +#ifndef POKEDIAMOND_MODULE_05_H +#define POKEDIAMOND_MODULE_05_H + +#include "pokemon.h" + +void MOD05_SetEggStats(struct Pokemon * mon, u16 species, int a1, struct PlayerData * data, int a2, int metLoc); + +#endif //POKEDIAMOND_MODULE_05_H diff --git a/include/nitro/FX_types.h b/include/nitro/FX_types.h index a4cd98a3b..84edc191d 100644 --- a/include/nitro/FX_types.h +++ b/include/nitro/FX_types.h @@ -1,109 +1,109 @@ -#ifndef GUARD_FX_TYPES_H -#define GUARD_FX_TYPES_H - -#include "nitro/types.h" - - -typedef s16 fx16; -typedef s32 fx32; -typedef s64 fx64; -typedef s64 fx64c; - -#define FX16_INT_MASK 0xF000 -#define FX16_INT_ABS_MASK 0x7000 -#define FX16_FRAC_MASK 0x0FFF -#define FX16_INT_SHIFT 0xC - -#define FX32_INT_MASK 0xFFFFF000 -#define FX32_INT_ABS_MASK 0x7FFFF000 -#define FX32_FRAC_MASK 0x00000FFF -#define FX32_INT_SHIFT 0xC - -#define FX64_INT_MASK 0xFFFFFFFFFFFFF000 -#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000 -#define FX64_FRAC_MASK 0x0000000000000FFF -#define FX64_INT_SHIFT 0xC - -#define FX64C_INT_MASK 0xFFFFFFFF00000000 -#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000 -#define FX64C_FRAC_MASK 0x00000000FFFFFFFF -#define FX64C_INT_SHIFT 0x20 - -#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT) -#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT) -#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK) - -#define FX16_INT(x) FX_INT(FX16, x) -#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x) -#define FX16_FRAC(x) FX_FRAC(FX16, x) - -#define FX32_INT(x) FX_INT(FX32, x) -#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x) -#define FX32_FRAC(x) FX_FRAC(FX32, x) - -#define FX64_INT(x) FX_INT(FX64, x) -#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x) -#define FX64_FRAC(x) FX_FRAC(FX64, x) - -#define FX64C_INT(x) FX_INT(FX64C, x) -#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) -#define FX64C_FRAC(x) FX_FRAC(FX64C, x) - -//TODO: clean up these macros -#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) -#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) -#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) -//the extra term here is for rounding -#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) - -#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) - -#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT))) -#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \ - ((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ - ((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) -#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \ - ((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ - ((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) -#define FX16_CONST(x) FX_F32_TO_FX16(x) -#define FX32_CONST(x) FX_F32_TO_FX32(x) - -#define FX16_ONE ((fx16)0x1000) -#define FX32_ONE ((fx32)0x00001000L) - -typedef struct Vecx32 -{ - fx32 x; - fx32 y; - fx32 z; -} VecFx32; - -typedef struct Vecx16 -{ - fx16 x; - fx16 y; - fx16 z; -} VecFx16; - -//Matrices are indexed as [column][row] -typedef struct Mtx44 -{ - fx32 _[16]; -} MtxFx44; - -typedef struct Mtx43 -{ - fx32 _[12]; -} MtxFx43; - -typedef struct Mtx33 -{ - fx32 _[9]; -} MtxFx33; - -typedef struct Mtx22 -{ - fx32 _[4]; -} MtxFx22; - -#endif //GUARD_FX_TYPES_H +#ifndef GUARD_FX_TYPES_H +#define GUARD_FX_TYPES_H + +#include "nitro/types.h" + + +typedef s16 fx16; +typedef s32 fx32; +typedef s64 fx64; +typedef s64 fx64c; + +#define FX16_INT_MASK 0xF000 +#define FX16_INT_ABS_MASK 0x7000 +#define FX16_FRAC_MASK 0x0FFF +#define FX16_INT_SHIFT 0xC + +#define FX32_INT_MASK 0xFFFFF000 +#define FX32_INT_ABS_MASK 0x7FFFF000 +#define FX32_FRAC_MASK 0x00000FFF +#define FX32_INT_SHIFT 0xC + +#define FX64_INT_MASK 0xFFFFFFFFFFFFF000 +#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000 +#define FX64_FRAC_MASK 0x0000000000000FFF +#define FX64_INT_SHIFT 0xC + +#define FX64C_INT_MASK 0xFFFFFFFF00000000 +#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000 +#define FX64C_FRAC_MASK 0x00000000FFFFFFFF +#define FX64C_INT_SHIFT 0x20 + +#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT) +#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT) +#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK) + +#define FX16_INT(x) FX_INT(FX16, x) +#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x) +#define FX16_FRAC(x) FX_FRAC(FX16, x) + +#define FX32_INT(x) FX_INT(FX32, x) +#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x) +#define FX32_FRAC(x) FX_FRAC(FX32, x) + +#define FX64_INT(x) FX_INT(FX64, x) +#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x) +#define FX64_FRAC(x) FX_FRAC(FX64, x) + +#define FX64C_INT(x) FX_INT(FX64C, x) +#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) +#define FX64C_FRAC(x) FX_FRAC(FX64C, x) + +//TODO: clean up these macros +#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) +#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) +#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) +//the extra term here is for rounding +#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) + +#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) + +#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT))) +#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \ + ((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ + ((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) +#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \ + ((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ + ((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) +#define FX16_CONST(x) FX_F32_TO_FX16(x) +#define FX32_CONST(x) FX_F32_TO_FX32(x) + +#define FX16_ONE ((fx16)0x1000) +#define FX32_ONE ((fx32)0x00001000L) + +typedef struct Vecx32 +{ + fx32 x; + fx32 y; + fx32 z; +} VecFx32; + +typedef struct Vecx16 +{ + fx16 x; + fx16 y; + fx16 z; +} VecFx16; + +//Matrices are indexed as [column][row] +typedef struct Mtx44 +{ + fx32 _[16]; +} MtxFx44; + +typedef struct Mtx43 +{ + fx32 _[12]; +} MtxFx43; + +typedef struct Mtx33 +{ + fx32 _[9]; +} MtxFx33; + +typedef struct Mtx22 +{ + fx32 _[4]; +} MtxFx22; + +#endif //GUARD_FX_TYPES_H diff --git a/include/nitro/NNS_g3d.h b/include/nitro/NNS_g3d.h index f9a3a1b8f..283fd8ecc 100644 --- a/include/nitro/NNS_g3d.h +++ b/include/nitro/NNS_g3d.h @@ -1,89 +1,89 @@ -#ifndef GUARD_NNS_G3D_H -#define GUARD_NNS_G3D_H - -#include "fx.h" - -typedef enum -{ - NNS_G3D_GLB_FLAG_FLUSH_WVP = 0x00000001, - NNS_G3D_GLB_FLAG_FLUSH_VP = 0x00000002, - NNS_G3D_GLB_FLAG_INVBASE_UPTODATE = 0x00000004, - NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE = 0x00000008, - NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE = 0x00000010, - NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE = 0x00000020, - NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE = 0x00000040, - - NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE = 0x00000080, - - NNS_G3D_GLB_FLAG_SRTCAMERA_UPTODATE = NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE, - NNS_G3D_GLB_FLAG_FLUSH_ALT = NNS_G3D_GLB_FLAG_FLUSH_WVP -} - NNSG3dGlbFlag; - -typedef struct -{ - /*0x000*/ u32 cmd0; - /*0x004*/ u32 mtxmode_proj; - /*0x008*/ MtxFx44 projMtx; - - /*0x048*/ u32 mtxmode_posvec; - /*0x04C*/ MtxFx43 cameraMtx; - - /*0x07C*/ u32 cmd1; - /*0x080*/ u32 lightVec[4]; - - /*0x090*/ u32 cmd2; - /*0x094*/ u32 prmMatColor0; - /*0x098*/ u32 prmMatColor1; - /*0x09C*/ u32 prmPolygonAttr; - /*0x0A0*/ u32 prmViewPort; - - /*0x0A4*/ u32 cmd3; - /*0x0A8*/ u32 lightColor[4]; - - /*0x0B8*/ u32 cmd4; - /*0x0BC*/ MtxFx33 prmBaseRot; - /*0x0E0*/ VecFx32 prmBaseTrans; - /*0x0EC*/ VecFx32 prmBaseScale; - /*0x0F8*/ u32 prmTexImageParam; - - /*0x0FC*/ u32 flag; - /*0x100*/ MtxFx43 invCameraMtx; - /*0x130*/ MtxFx43 srtCameraMtx; - /*0x160*/ MtxFx43 invSrtCameraMtx; - - /*0x190*/ MtxFx43 invBaseMtx; - - /*0x1C0*/ MtxFx44 invProjMtx; - /*0x200*/ MtxFx44 invCameraProjMtx; - - /*0x240*/ VecFx32 camPos; - /*0x24C*/ VecFx32 camUp; - /*0x258*/ VecFx32 camTarget; -} -NNSG3dGlb; - -extern NNSG3dGlb NNS_G3dGlb; - -static inline void NNS_G3dGlbLookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * camTarget) -{ - NNS_G3dGlb.camPos = *camPos; - NNS_G3dGlb.camUp = *camUp; - NNS_G3dGlb.camTarget = *camTarget; - MTX_LookAt(camPos, camUp, camTarget, &NNS_G3dGlb.cameraMtx); - NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE | NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE); -} - -static inline void NNS_G3dGlbPerspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f) -{ - MTX_Perspective(fovySin, fovyCos, aspect, n, f, &NNS_G3dGlb.projMtx); - NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE); -} - -static inline void NNS_G3dGlbOrtho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f) -{ - MTX_Ortho(t, b, l, r, n, f, &NNS_G3dGlb.projMtx); - NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE); -} - -#endif //GUARD_NNS_G3D_H +#ifndef GUARD_NNS_G3D_H +#define GUARD_NNS_G3D_H + +#include "fx.h" + +typedef enum +{ + NNS_G3D_GLB_FLAG_FLUSH_WVP = 0x00000001, + NNS_G3D_GLB_FLAG_FLUSH_VP = 0x00000002, + NNS_G3D_GLB_FLAG_INVBASE_UPTODATE = 0x00000004, + NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE = 0x00000008, + NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE = 0x00000010, + NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE = 0x00000020, + NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE = 0x00000040, + + NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE = 0x00000080, + + NNS_G3D_GLB_FLAG_SRTCAMERA_UPTODATE = NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE, + NNS_G3D_GLB_FLAG_FLUSH_ALT = NNS_G3D_GLB_FLAG_FLUSH_WVP +} + NNSG3dGlbFlag; + +typedef struct +{ + /*0x000*/ u32 cmd0; + /*0x004*/ u32 mtxmode_proj; + /*0x008*/ MtxFx44 projMtx; + + /*0x048*/ u32 mtxmode_posvec; + /*0x04C*/ MtxFx43 cameraMtx; + + /*0x07C*/ u32 cmd1; + /*0x080*/ u32 lightVec[4]; + + /*0x090*/ u32 cmd2; + /*0x094*/ u32 prmMatColor0; + /*0x098*/ u32 prmMatColor1; + /*0x09C*/ u32 prmPolygonAttr; + /*0x0A0*/ u32 prmViewPort; + + /*0x0A4*/ u32 cmd3; + /*0x0A8*/ u32 lightColor[4]; + + /*0x0B8*/ u32 cmd4; + /*0x0BC*/ MtxFx33 prmBaseRot; + /*0x0E0*/ VecFx32 prmBaseTrans; + /*0x0EC*/ VecFx32 prmBaseScale; + /*0x0F8*/ u32 prmTexImageParam; + + /*0x0FC*/ u32 flag; + /*0x100*/ MtxFx43 invCameraMtx; + /*0x130*/ MtxFx43 srtCameraMtx; + /*0x160*/ MtxFx43 invSrtCameraMtx; + + /*0x190*/ MtxFx43 invBaseMtx; + + /*0x1C0*/ MtxFx44 invProjMtx; + /*0x200*/ MtxFx44 invCameraProjMtx; + + /*0x240*/ VecFx32 camPos; + /*0x24C*/ VecFx32 camUp; + /*0x258*/ VecFx32 camTarget; +} +NNSG3dGlb; + +extern NNSG3dGlb NNS_G3dGlb; + +static inline void NNS_G3dGlbLookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * camTarget) +{ + NNS_G3dGlb.camPos = *camPos; + NNS_G3dGlb.camUp = *camUp; + NNS_G3dGlb.camTarget = *camTarget; + MTX_LookAt(camPos, camUp, camTarget, &NNS_G3dGlb.cameraMtx); + NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE | NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE); +} + +static inline void NNS_G3dGlbPerspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f) +{ + MTX_Perspective(fovySin, fovyCos, aspect, n, f, &NNS_G3dGlb.projMtx); + NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE); +} + +static inline void NNS_G3dGlbOrtho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f) +{ + MTX_Ortho(t, b, l, r, n, f, &NNS_G3dGlb.projMtx); + NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE); +} + +#endif //GUARD_NNS_G3D_H diff --git a/include/rs_migrate_string.h b/include/rs_migrate_string.h index b83807f59..1e6ef1fdd 100644 --- a/include/rs_migrate_string.h +++ b/include/rs_migrate_string.h @@ -1,26 +1,26 @@ -#ifndef POKEDIAMOND_UNK_02015D14_H -#define POKEDIAMOND_UNK_02015D14_H - -// -------------------------------------------- -// ConvertRSStringToDPStringInternational -// ============================================ -// Param rs_str: Pointer to u8 representing -// the name of a Pokemon or -// its OT when migrating from -// Advanced Gameboy. -// Param dp_str: Pointer to u16 representing -// the destination string buffer -// for migration to Diamond -// or Pearl. -// Param length: The length of the string -// to convert, including the -// terminator byte. -// Param language: Game language of origin. -// See include/config.h. -// Return: TRUE if the conversion was completed -// successfully. Otherwise, dp_str will -// be filled with up to 10 question mark -// characters. -BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language); - -#endif //POKEDIAMOND_UNK_02015D14_H +#ifndef POKEDIAMOND_UNK_02015D14_H +#define POKEDIAMOND_UNK_02015D14_H + +// -------------------------------------------- +// ConvertRSStringToDPStringInternational +// ============================================ +// Param rs_str: Pointer to u8 representing +// the name of a Pokemon or +// its OT when migrating from +// Advanced Gameboy. +// Param dp_str: Pointer to u16 representing +// the destination string buffer +// for migration to Diamond +// or Pearl. +// Param length: The length of the string +// to convert, including the +// terminator byte. +// Param language: Game language of origin. +// See include/config.h. +// Return: TRUE if the conversion was completed +// successfully. Otherwise, dp_str will +// be filled with up to 10 question mark +// characters. +BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language); + +#endif //POKEDIAMOND_UNK_02015D14_H diff --git a/include/sav_chatot.h b/include/sav_chatot.h index 858423c58..b559976c4 100644 --- a/include/sav_chatot.h +++ b/include/sav_chatot.h @@ -1,24 +1,24 @@ -#ifndef POKEDIAMOND_SAV_CHATOT_H -#define POKEDIAMOND_SAV_CHATOT_H - -#include "save_block_2.h" - -struct SaveChatotSoundClip -{ - // TODO: Fill this in - BOOL exists; - s8 data[1000]; -}; - -u32 Sav2_Chatot_sizeof(void); -void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot); -struct SaveChatotSoundClip * Chatot_new(u32 heap_id); -struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2); -BOOL Chatot_exists(struct SaveChatotSoundClip * chatot); -void Chatot_invalidate(struct SaveChatotSoundClip * chatot); -s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot); -void Chatot_Decode(s8 * dest, const s8 * data); -void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data); -void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src); - -#endif //POKEDIAMOND_SAV_CHATOT_H +#ifndef POKEDIAMOND_SAV_CHATOT_H +#define POKEDIAMOND_SAV_CHATOT_H + +#include "save_block_2.h" + +struct SaveChatotSoundClip +{ + // TODO: Fill this in + BOOL exists; + s8 data[1000]; +}; + +u32 Sav2_Chatot_sizeof(void); +void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot); +struct SaveChatotSoundClip * Chatot_new(u32 heap_id); +struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2); +BOOL Chatot_exists(struct SaveChatotSoundClip * chatot); +void Chatot_invalidate(struct SaveChatotSoundClip * chatot); +s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot); +void Chatot_Decode(s8 * dest, const s8 * data); +void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data); +void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src); + +#endif //POKEDIAMOND_SAV_CHATOT_H diff --git a/include/script.h b/include/script.h index 9d33e2b9f..a3e157369 100644 --- a/include/script.h +++ b/include/script.h @@ -1,120 +1,120 @@ -#ifndef _SCRIPT_H_ -#define _SCRIPT_H_ - -#include "global.h" -#include "bg_window.h" -#include "camera.h" -#include "field_player_avatar.h" -#include "msgdata.h" -#include "render_window.h" -#include "save_block_2.h" -#include "task.h" - -struct ScriptContext; - -typedef u8 (*ScrCmdFunc)(struct ScriptContext *); -typedef u8 Script[]; - -struct UnkStruct_020464D4 -{ - u16 unk0[4]; - u8 padding[0x108]; -}; - -struct UnkStruct_02046444 -{ - u8 padding[0x90]; - struct UnkStruct_020464D4 unk90[1]; //todo find size -}; - -typedef struct LocalMapObject { //todo move to local_map_object.c - u8 padding[0x12C]; //todo verify size -} LocalMapObject; - -typedef struct PartyMenuAppData PartyMenuAppData; //todo move to own file - -struct FieldSystem //todo move to field_system.c -{ - u32 *unk00; - u8 padding[0x4]; - struct BgConfig *bgConfig; - struct SaveBlock2 *saveBlock2; //0xC - struct TaskManager *taskManager; - u8 padding2[0x8]; - u32 *mapId; //0x1C - struct Camera *camera; - u32 unk24; - u8 padding3[0xC]; - u32 unk34; - struct PlayerAvatar *playerAvatar; - u8 padding4[0x24]; - u32 unk60; - u8 padding5[0x14]; - u32 unk78; - u8 padding6[0x1C]; - void *unk98; - u8 padding7[0xC]; - struct UnkStruct_02046444 * unkA8; -}; - -typedef struct ScriptContext -{ - u8 stackDepth; - u8 mode; - u8 comparisonResult; - BOOL (*nativePtr)(struct ScriptContext *); - const u8 *scriptPtr; - const u8 *stack[20]; - ScrCmdFunc *cmdTable; - u32 cmdCount; - u32 data[4]; - struct TaskManager *taskManager; - struct MsgData *msgData; - u8 *mapScripts; - struct FieldSystem *fieldSystem; -} ScriptContext; - -typedef enum ScriptEnvField { - SCRIPTENV_MENU_WINDOW, - SCRIPTENV_WINDOW, - SCRIPTENV_LIST_MENU_2D, - SCRIPTENV_TEXT_PRINTER_NUMBER, - SCRIPTENV_ACTIVE_MOVEMENT_COUNTER, - SCRIPTENV_UNKNOWN_05, - SCRIPTENV_UNKNOWN_06, - SCRIPTENV_ACTIVE_SCRIPTCONTEXT_COUNT, - SCRIPTENV_ACTIVE_SCRIPT_NUMBER, - SCRIPTENV_FACING_DIRECTION, - SCRIPTENV_LAST_INTERACTED, - SCRIPTENV_CAMERA_TARGET, - SCRIPTENV_UNKNOWN_12, - SCRIPTENV_SCRIPT_CONTEXT_0, - SCRIPTENV_SCRIPT_CONTEXT_1, //diamond does not appear to have SCRIPT_CONTEXT_2 like HG - SCRIPTENV_MESSAGE_FORMAT, - SCRIPTENV_STRING_BUFFER_0, - SCRIPTENV_STRING_BUFFER_1, - SCRIPTENV_WAITING_ICON, - SCRIPTENV_RUNNING_APP_DATA, - SCRIPTENV_MISC_DATA_PTR, - SCRIPTENV_UNKNOWN_21, - SCRIPTENV_UNKNOWN_22, - SCRIPTENV_BATTLE_WIN_FLAG, -} ScriptEnvField; - -#define ScriptReadByte(ctx) (*(ctx->scriptPtr++)) - -void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount); -u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr); -void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *)); -void StopScript(struct ScriptContext *ctx); -void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManger); -u8 RunScriptCommand(struct ScriptContext *ctx); -u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr); -const u8 *ScriptPop(struct ScriptContext *ctx); -void ScriptJump(struct ScriptContext *ctx, const u8 *ptr); -u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr); -void ScriptReturn(struct ScriptContext *ctx); -u16 ScriptReadHalfword(struct ScriptContext *ctx); -u32 ScriptReadWord(struct ScriptContext *ctx); - -#endif // _SCRIPT_H_ +#ifndef _SCRIPT_H_ +#define _SCRIPT_H_ + +#include "global.h" +#include "bg_window.h" +#include "camera.h" +#include "field_player_avatar.h" +#include "msgdata.h" +#include "render_window.h" +#include "save_block_2.h" +#include "task.h" + +struct ScriptContext; + +typedef u8 (*ScrCmdFunc)(struct ScriptContext *); +typedef u8 Script[]; + +struct UnkStruct_020464D4 +{ + u16 unk0[4]; + u8 padding[0x108]; +}; + +struct UnkStruct_02046444 +{ + u8 padding[0x90]; + struct UnkStruct_020464D4 unk90[1]; //todo find size +}; + +typedef struct LocalMapObject { //todo move to local_map_object.c + u8 padding[0x12C]; //todo verify size +} LocalMapObject; + +typedef struct PartyMenuAppData PartyMenuAppData; //todo move to own file + +struct FieldSystem //todo move to field_system.c +{ + u32 *unk00; + u8 padding[0x4]; + struct BgConfig *bgConfig; + struct SaveBlock2 *saveBlock2; //0xC + struct TaskManager *taskManager; + u8 padding2[0x8]; + u32 *mapId; //0x1C + struct Camera *camera; + u32 unk24; + u8 padding3[0xC]; + u32 unk34; + struct PlayerAvatar *playerAvatar; + u8 padding4[0x24]; + u32 unk60; + u8 padding5[0x14]; + u32 unk78; + u8 padding6[0x1C]; + void *unk98; + u8 padding7[0xC]; + struct UnkStruct_02046444 * unkA8; +}; + +typedef struct ScriptContext +{ + u8 stackDepth; + u8 mode; + u8 comparisonResult; + BOOL (*nativePtr)(struct ScriptContext *); + const u8 *scriptPtr; + const u8 *stack[20]; + ScrCmdFunc *cmdTable; + u32 cmdCount; + u32 data[4]; + struct TaskManager *taskManager; + struct MsgData *msgData; + u8 *mapScripts; + struct FieldSystem *fieldSystem; +} ScriptContext; + +typedef enum ScriptEnvField { + SCRIPTENV_MENU_WINDOW, + SCRIPTENV_WINDOW, + SCRIPTENV_LIST_MENU_2D, + SCRIPTENV_TEXT_PRINTER_NUMBER, + SCRIPTENV_ACTIVE_MOVEMENT_COUNTER, + SCRIPTENV_UNKNOWN_05, + SCRIPTENV_UNKNOWN_06, + SCRIPTENV_ACTIVE_SCRIPTCONTEXT_COUNT, + SCRIPTENV_ACTIVE_SCRIPT_NUMBER, + SCRIPTENV_FACING_DIRECTION, + SCRIPTENV_LAST_INTERACTED, + SCRIPTENV_CAMERA_TARGET, + SCRIPTENV_UNKNOWN_12, + SCRIPTENV_SCRIPT_CONTEXT_0, + SCRIPTENV_SCRIPT_CONTEXT_1, //diamond does not appear to have SCRIPT_CONTEXT_2 like HG + SCRIPTENV_MESSAGE_FORMAT, + SCRIPTENV_STRING_BUFFER_0, + SCRIPTENV_STRING_BUFFER_1, + SCRIPTENV_WAITING_ICON, + SCRIPTENV_RUNNING_APP_DATA, + SCRIPTENV_MISC_DATA_PTR, + SCRIPTENV_UNKNOWN_21, + SCRIPTENV_UNKNOWN_22, + SCRIPTENV_BATTLE_WIN_FLAG, +} ScriptEnvField; + +#define ScriptReadByte(ctx) (*(ctx->scriptPtr++)) + +void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount); +u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr); +void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *)); +void StopScript(struct ScriptContext *ctx); +void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManger); +u8 RunScriptCommand(struct ScriptContext *ctx); +u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr); +const u8 *ScriptPop(struct ScriptContext *ctx); +void ScriptJump(struct ScriptContext *ctx, const u8 *ptr); +u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr); +void ScriptReturn(struct ScriptContext *ctx); +u16 ScriptReadHalfword(struct ScriptContext *ctx); +u32 ScriptReadWord(struct ScriptContext *ctx); + +#endif // _SCRIPT_H_ diff --git a/include/unk_020061E8.h b/include/unk_020061E8.h index 121900c37..4fa3a5963 100644 --- a/include/unk_020061E8.h +++ b/include/unk_020061E8.h @@ -1,10 +1,10 @@ -#ifndef POKEDIAMOND_UNK_020061E8_H -#define POKEDIAMOND_UNK_020061E8_H - -#include "nitro/types.h" -#include "text.h" - -BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3); -void FUN_0200621C(s32 r0); - -#endif // POKEDIAMOND_UNK_020061E8_H +#ifndef POKEDIAMOND_UNK_020061E8_H +#define POKEDIAMOND_UNK_020061E8_H + +#include "nitro/types.h" +#include "text.h" + +BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3); +void FUN_0200621C(s32 r0); + +#endif // POKEDIAMOND_UNK_020061E8_H diff --git a/include/unk_02021590.h b/include/unk_02021590.h index 8c8159923..5d9433319 100644 --- a/include/unk_02021590.h +++ b/include/unk_02021590.h @@ -1,54 +1,54 @@ -#ifndef POKEDIAMOND_UNK_02021590_H -#define POKEDIAMOND_UNK_02021590_H - -#include "filesystem.h" -#include "font.h" - -struct FontGraphicHeader -{ - u32 headerSize; - u32 widthDataStart; - u32 numGlyphs; - u8 fixedWidth; - u8 fixedHeight; - u8 glyphWidth; - u8 glyphHeight; -}; - -struct FontData -{ - u32 glyphAccessMode; - void (*uncompGlyphFunc)(struct FontData *, u16, struct UnkStruct_02002C14_sub *); - u32 glyphShape; - u32 glyphSize; - void * narcReadBuf; - u8 glyphReadBuf[0x40]; - NARC * narc; - u32 fileId; - struct FontGraphicHeader gfxHeader; - BOOL isFixedWidthFont; - int (*glyphWidthFunc)(struct FontData *, int); - u8 * glyphWidths; -}; - -struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id); -void FontData_delete(struct FontData * ptr); -void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id); -void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id); -void FontData_FreeWidthsAndNarc(struct FontData * ptr); -void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id); -void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id); -void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id); -void FreeLoadedFontResources(struct FontData * ptr); -void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr); -void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr); -void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2); -void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2); -void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2); -u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing); -int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1); -int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1); -s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6); -s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr); - -#endif //POKEDIAMOND_UNK_02021590_H +#ifndef POKEDIAMOND_UNK_02021590_H +#define POKEDIAMOND_UNK_02021590_H + +#include "filesystem.h" +#include "font.h" + +struct FontGraphicHeader +{ + u32 headerSize; + u32 widthDataStart; + u32 numGlyphs; + u8 fixedWidth; + u8 fixedHeight; + u8 glyphWidth; + u8 glyphHeight; +}; + +struct FontData +{ + u32 glyphAccessMode; + void (*uncompGlyphFunc)(struct FontData *, u16, struct UnkStruct_02002C14_sub *); + u32 glyphShape; + u32 glyphSize; + void * narcReadBuf; + u8 glyphReadBuf[0x40]; + NARC * narc; + u32 fileId; + struct FontGraphicHeader gfxHeader; + BOOL isFixedWidthFont; + int (*glyphWidthFunc)(struct FontData *, int); + u8 * glyphWidths; +}; + +struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id); +void FontData_delete(struct FontData * ptr); +void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id); +void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id); +void FontData_FreeWidthsAndNarc(struct FontData * ptr); +void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id); +void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id); +void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id); +void FreeLoadedFontResources(struct FontData * ptr); +void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr); +void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr); +void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2); +void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2); +void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2); +u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing); +int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1); +int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1); +s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6); +s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr); + +#endif //POKEDIAMOND_UNK_02021590_H diff --git a/include/unk_020222E8.h b/include/unk_020222E8.h index d4545b048..b691b7150 100644 --- a/include/unk_020222E8.h +++ b/include/unk_020222E8.h @@ -1,11 +1,11 @@ -#ifndef POKEDIAMOND_UNK_020222E8_H -#define POKEDIAMOND_UNK_020222E8_H - -void * FUN_020222E8(); -u32 FUN_020222F0(); -void * FUN_020222F8(); -u32 FUN_02022300(); -void * FUN_02022308(); -void * FUN_02022310(); - -#endif // POKEDIAMOND_UNK_020222E8_H +#ifndef POKEDIAMOND_UNK_020222E8_H +#define POKEDIAMOND_UNK_020222E8_H + +void * FUN_020222E8(); +u32 FUN_020222F0(); +void * FUN_020222F8(); +u32 FUN_02022300(); +void * FUN_02022308(); +void * FUN_02022310(); + +#endif // POKEDIAMOND_UNK_020222E8_H diff --git a/include/unk_0202AC20.h b/include/unk_0202AC20.h index b98e43de3..69b558dbd 100644 --- a/include/unk_0202AC20.h +++ b/include/unk_0202AC20.h @@ -1,13 +1,13 @@ -#ifndef POKEDIAMOND_UNK_0202AC20_H -#define POKEDIAMOND_UNK_0202AC20_H - -struct UnkStruct_0202AC20 -{ - u8 unk_0000[0x100]; - u32 unk_0100[8]; - u32 unk_0120[3]; - u8 unk_012C[8][0x104]; - u8 unk_094C[3][0x358]; -}; - -#endif //POKEDIAMOND_UNK_0202AC20_H +#ifndef POKEDIAMOND_UNK_0202AC20_H +#define POKEDIAMOND_UNK_0202AC20_H + +struct UnkStruct_0202AC20 +{ + u8 unk_0000[0x100]; + u32 unk_0100[8]; + u32 unk_0120[3]; + u8 unk_012C[8][0x104]; + u8 unk_094C[3][0x358]; +}; + +#endif //POKEDIAMOND_UNK_0202AC20_H diff --git a/include/unk_0202C144.h b/include/unk_0202C144.h index 95ca3be4a..1b7b4cf02 100644 --- a/include/unk_0202C144.h +++ b/include/unk_0202C144.h @@ -1,9 +1,9 @@ -#ifndef POKEDIAMOND_UNK_0202C144_H -#define POKEDIAMOND_UNK_0202C144_H - -#include "save_block_2.h" -#include "pokemon.h" - -void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon); - -#endif //POKEDIAMOND_UNK_0202C144_H +#ifndef POKEDIAMOND_UNK_0202C144_H +#define POKEDIAMOND_UNK_0202C144_H + +#include "save_block_2.h" +#include "pokemon.h" + +void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon); + +#endif //POKEDIAMOND_UNK_0202C144_H diff --git a/include/unk_0204AF24.h b/include/unk_0204AF24.h index b08ed0b22..6b71c3752 100644 --- a/include/unk_0204AF24.h +++ b/include/unk_0204AF24.h @@ -1,19 +1,19 @@ -#ifndef POKEDIAMOND_UNK_0204AF24_H -#define POKEDIAMOND_UNK_0204AF24_H - -#include "nitro/types.h" -#include "task.h" - -BOOL FUN_0204AF24(struct TaskManager *taskManager); -void FUN_0204AF3C(struct TaskManager *taskManager); -BOOL FUN_0204AF6C(struct TaskManager *taskManager); -void FUN_0204AF84(struct TaskManager *taskManager); -BOOL FUN_0204AFB4(struct TaskManager *taskManager); -void FUN_0204AFC8(struct TaskManager *taskManager); -void FUN_0204B00C(struct TaskManager *taskManager); -BOOL FUN_0204B050(struct TaskManager *taskManager); -void FUN_0204B090(struct TaskManager *taskManager); -BOOL FUN_0204B0A0(struct TaskManager *taskManager); -void FUN_0204B0E8(struct TaskManager *taskManager); - -#endif // POKEDIAMOND_UNK_0204AF24_H +#ifndef POKEDIAMOND_UNK_0204AF24_H +#define POKEDIAMOND_UNK_0204AF24_H + +#include "nitro/types.h" +#include "task.h" + +BOOL FUN_0204AF24(struct TaskManager *taskManager); +void FUN_0204AF3C(struct TaskManager *taskManager); +BOOL FUN_0204AF6C(struct TaskManager *taskManager); +void FUN_0204AF84(struct TaskManager *taskManager); +BOOL FUN_0204AFB4(struct TaskManager *taskManager); +void FUN_0204AFC8(struct TaskManager *taskManager); +void FUN_0204B00C(struct TaskManager *taskManager); +BOOL FUN_0204B050(struct TaskManager *taskManager); +void FUN_0204B090(struct TaskManager *taskManager); +BOOL FUN_0204B0A0(struct TaskManager *taskManager); +void FUN_0204B0E8(struct TaskManager *taskManager); + +#endif // POKEDIAMOND_UNK_0204AF24_H diff --git a/include/unk_0205EC84.h b/include/unk_0205EC84.h index 0cbf6f77b..74f80dd9d 100644 --- a/include/unk_0205EC84.h +++ b/include/unk_0205EC84.h @@ -1,58 +1,58 @@ -#ifndef POKEDIAMOND_UNK_0205EC84_H -#define POKEDIAMOND_UNK_0205EC84_H - -#include "event_data.h" - -void FUN_0205ECD4(struct ScriptState * state); -BOOL FUN_0205ECE0(struct ScriptState * state); -BOOL FUN_0205ECEC(struct ScriptState * state); -void FUN_0205ECFC(struct ScriptState * state); -BOOL FUN_0205ED0C(struct ScriptState * state); -void FUN_0205ED1C(struct ScriptState * state); -void FUN_0205ED2C(struct ScriptState * state); -BOOL FUN_0205ED3C(struct ScriptState * state); -void FUN_0205ED4C(struct ScriptState * state); -void FUN_0205ED5C(struct ScriptState * state); -BOOL FUN_0205ED6C(struct ScriptState * state); -void FUN_0205ED7C(struct ScriptState * state); -void FUN_0205ED8C(struct ScriptState * state); -BOOL FUN_0205ED9C(struct ScriptState * state); -void FUN_0205EDAC(struct ScriptState * state); -void FUN_0205EDBC(struct ScriptState * state); -void FUN_0205EDCC(struct ScriptState * state); -void FUN_0205EDD8(struct ScriptState * state); -void FUN_0205EDE8(struct ScriptState * state); -void FUN_0205EDF8(struct ScriptState * state); -void FUN_0205EE08(struct ScriptState * state, u32 a1); -BOOL FUN_0205EE60(struct ScriptState * state, u32 a1); -BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1); -s32 FUN_0205EF20(struct ScriptState * state, s32 a1); -void FUN_0205F154(struct ScriptState * state); -void FUN_0205F164(struct ScriptState * state); -BOOL FUN_0205F174(struct ScriptState * state); -BOOL FUN_0205F184(struct ScriptState * state); -BOOL FUN_0205F194(struct ScriptState * state); -BOOL FUN_0205F1A4(struct ScriptState * state); -BOOL FUN_0205F1B4(struct ScriptState * state); -void FUN_0205F1C4(struct ScriptState * state); -void FUN_0205F1D4(struct ScriptState * state); -BOOL FUN_0205F1E4(struct ScriptState * state); -void FUN_0205F1F4(struct ScriptState * state); -void FUN_0205F204(struct ScriptState * state); -BOOL FUN_0205F214(struct ScriptState * state); -void FUN_0205F224(struct ScriptState * state); -void FUN_0205F234(struct ScriptState * state); -BOOL FUN_0205F244(struct ScriptState * state); -void FUN_0205F254(struct ScriptState * state); -BOOL FUN_0205F264(struct ScriptState * state, u32 op); -void FUN_0205F274(struct ScriptState * state); -void FUN_0205F284(struct ScriptState * state); -BOOL FUN_0205F294(struct ScriptState * state); -void FUN_0205F2A4(struct ScriptState * state); -void FUN_0205F2B4(struct ScriptState * state); -BOOL FUN_0205F2C4(struct ScriptState * state); -BOOL FUN_0205F2D4(struct ScriptState * state, u32 op); -BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id); -void FUN_0205F304(struct ScriptState * state); - -#endif //POKEDIAMOND_UNK_0205EC84_H +#ifndef POKEDIAMOND_UNK_0205EC84_H +#define POKEDIAMOND_UNK_0205EC84_H + +#include "event_data.h" + +void FUN_0205ECD4(struct ScriptState * state); +BOOL FUN_0205ECE0(struct ScriptState * state); +BOOL FUN_0205ECEC(struct ScriptState * state); +void FUN_0205ECFC(struct ScriptState * state); +BOOL FUN_0205ED0C(struct ScriptState * state); +void FUN_0205ED1C(struct ScriptState * state); +void FUN_0205ED2C(struct ScriptState * state); +BOOL FUN_0205ED3C(struct ScriptState * state); +void FUN_0205ED4C(struct ScriptState * state); +void FUN_0205ED5C(struct ScriptState * state); +BOOL FUN_0205ED6C(struct ScriptState * state); +void FUN_0205ED7C(struct ScriptState * state); +void FUN_0205ED8C(struct ScriptState * state); +BOOL FUN_0205ED9C(struct ScriptState * state); +void FUN_0205EDAC(struct ScriptState * state); +void FUN_0205EDBC(struct ScriptState * state); +void FUN_0205EDCC(struct ScriptState * state); +void FUN_0205EDD8(struct ScriptState * state); +void FUN_0205EDE8(struct ScriptState * state); +void FUN_0205EDF8(struct ScriptState * state); +void FUN_0205EE08(struct ScriptState * state, u32 a1); +BOOL FUN_0205EE60(struct ScriptState * state, u32 a1); +BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1); +s32 FUN_0205EF20(struct ScriptState * state, s32 a1); +void FUN_0205F154(struct ScriptState * state); +void FUN_0205F164(struct ScriptState * state); +BOOL FUN_0205F174(struct ScriptState * state); +BOOL FUN_0205F184(struct ScriptState * state); +BOOL FUN_0205F194(struct ScriptState * state); +BOOL FUN_0205F1A4(struct ScriptState * state); +BOOL FUN_0205F1B4(struct ScriptState * state); +void FUN_0205F1C4(struct ScriptState * state); +void FUN_0205F1D4(struct ScriptState * state); +BOOL FUN_0205F1E4(struct ScriptState * state); +void FUN_0205F1F4(struct ScriptState * state); +void FUN_0205F204(struct ScriptState * state); +BOOL FUN_0205F214(struct ScriptState * state); +void FUN_0205F224(struct ScriptState * state); +void FUN_0205F234(struct ScriptState * state); +BOOL FUN_0205F244(struct ScriptState * state); +void FUN_0205F254(struct ScriptState * state); +BOOL FUN_0205F264(struct ScriptState * state, u32 op); +void FUN_0205F274(struct ScriptState * state); +void FUN_0205F284(struct ScriptState * state); +BOOL FUN_0205F294(struct ScriptState * state); +void FUN_0205F2A4(struct ScriptState * state); +void FUN_0205F2B4(struct ScriptState * state); +BOOL FUN_0205F2C4(struct ScriptState * state); +BOOL FUN_0205F2D4(struct ScriptState * state, u32 op); +BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id); +void FUN_0205F304(struct ScriptState * state); + +#endif //POKEDIAMOND_UNK_0205EC84_H diff --git a/include/unk_02064E20.h b/include/unk_02064E20.h index 1b5b0bec2..1a0abb352 100644 --- a/include/unk_02064E20.h +++ b/include/unk_02064E20.h @@ -1,8 +1,8 @@ -#ifndef POKEDIAMOND_UNK_02064E20_H -#define POKEDIAMOND_UNK_02064E20_H - -#include "script.h" - -void FUN_02064E20(struct FieldSystem *fieldSystem); - -#endif // POKEDIAMOND_UNK_02064E20_H +#ifndef POKEDIAMOND_UNK_02064E20_H +#define POKEDIAMOND_UNK_02064E20_H + +#include "script.h" + +void FUN_02064E20(struct FieldSystem *fieldSystem); + +#endif // POKEDIAMOND_UNK_02064E20_H diff --git a/include/unk_02085338.h b/include/unk_02085338.h index 0517bf26a..649adfcfd 100644 --- a/include/unk_02085338.h +++ b/include/unk_02085338.h @@ -1,47 +1,47 @@ -#ifndef POKEDIAMOND_UNK_02085338_H -#define POKEDIAMOND_UNK_02085338_H - -#include "save_block_2.h" -#include "pokedex.h" -#include "unk_020139D8.h" - -struct UnkStruct_02085338 -{ - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - u8 unk_04; - u8 unk_05; - u32 unk_08; - struct Pokedex * unk_0c; - struct UnkStruct_02013B28 * unk_10; - struct MailMessage unk_14; - u16 unk_1c[2]; - u8 padding_20[4]; -}; - -struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id); -void FUN_020853A8(struct UnkStruct_02085338 * ptr); -void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1); -void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2); -void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1); -void FUN_020853D0(struct UnkStruct_02085338 * ptr); -void FUN_020853DC(struct UnkStruct_02085338 * ptr); -u8 FUN_020853E4(struct UnkStruct_02085338 * ptr); -u8 FUN_020853E8(struct UnkStruct_02085338 * ptr); -u16 FUN_020853EC(struct UnkStruct_02085338 * ptr); -void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1); -void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1); -u8 FUN_0208540C(struct UnkStruct_02085338 * ptr); -u8 FUN_02085410(struct UnkStruct_02085338 * ptr); -u32 FUN_02085414(struct UnkStruct_02085338 * ptr); -struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr); -struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr); -u8 FUN_02085420(struct UnkStruct_02085338 * ptr); -u8 FUN_02085424(struct UnkStruct_02085338 * ptr); -void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2); -BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2); -void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6); - -#endif //POKEDIAMOND_UNK_02085338_H +#ifndef POKEDIAMOND_UNK_02085338_H +#define POKEDIAMOND_UNK_02085338_H + +#include "save_block_2.h" +#include "pokedex.h" +#include "unk_020139D8.h" + +struct UnkStruct_02085338 +{ + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + u8 unk_04; + u8 unk_05; + u32 unk_08; + struct Pokedex * unk_0c; + struct UnkStruct_02013B28 * unk_10; + struct MailMessage unk_14; + u16 unk_1c[2]; + u8 padding_20[4]; +}; + +struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id); +void FUN_020853A8(struct UnkStruct_02085338 * ptr); +void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1); +void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2); +void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1); +void FUN_020853D0(struct UnkStruct_02085338 * ptr); +void FUN_020853DC(struct UnkStruct_02085338 * ptr); +u8 FUN_020853E4(struct UnkStruct_02085338 * ptr); +u8 FUN_020853E8(struct UnkStruct_02085338 * ptr); +u16 FUN_020853EC(struct UnkStruct_02085338 * ptr); +void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1); +void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1); +u8 FUN_0208540C(struct UnkStruct_02085338 * ptr); +u8 FUN_02085410(struct UnkStruct_02085338 * ptr); +u32 FUN_02085414(struct UnkStruct_02085338 * ptr); +struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr); +struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr); +u8 FUN_02085420(struct UnkStruct_02085338 * ptr); +u8 FUN_02085424(struct UnkStruct_02085338 * ptr); +void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2); +BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2); +void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6); + +#endif //POKEDIAMOND_UNK_02085338_H diff --git a/map_header_resolve_fields.py b/map_header_resolve_fields.py index 2edf2b884..c3a456200 100644 --- a/map_header_resolve_fields.py +++ b/map_header_resolve_fields.py @@ -1,123 +1,123 @@ -import collections -import struct -import typing -import re - -romfname = 'baserom.nds' -arm9offs = 0x00004000 -arm9load = 0x02000000 -mapheado = 0x020EEDBC -mapheads = 0x00003468 - - -class MapHeader(typing.NamedTuple): - area_data_bank: int - move_model_bank: int - matrix_id: int - scripts_bank: int - level_scripts_bank: int - msg_bank: int - day_music_id: int - night_music_id: int - wild_encounter_bank: int - events_bank: int - mapsec: int - weather_type: int - camera_type: int - unk16: int - battle_bg: int - is_bike_allowed: bool - is_running_allowed: bool - is_escape_rope_allowed: bool - is_fly_allowed: bool - - @classmethod - def from_buffer(cls, buffer: bytes) -> typing.Generator['MapHeader', None, typing.Any]: - for tup in struct.iter_unpack(' typing.Generator['MapHeader', None, typing.Any]: + for tup in struct.iter_unpack(' -#include -#include -#include -#include -extern "C" { -#include "elf.h" -} - -enum Proc : unsigned char { - PROC_ARM = EM_ARM, - PROC_PPC = EM_PPC, -}; - -enum Endian : unsigned char { - END_LITTLE = ELFDATA2LSB, - END_BIG = ELFDATA2MSB, -}; - -enum Shndx { - SHNDX_SHSTRTAB = 1, - SHNDX_SYMTAB, - SHNDX_STRTAB, - SHNDX_PROGBITS, -}; - -static inline void usage() { - std::cout << "Usage: bin2obj [-b|--begin SYMBOL_BEGIN]" << std::endl; - std::cout << " [-e|--end SYMBOL_END]" << std::endl; - std::cout << " [-C|--compatible]" << std::endl; - std::cout << " [-a|--align ALIGNMENT]" << std::endl; - std::cout << " [-r|--readonly]" << std::endl; - std::cout << " [-s|--section SECTION]" << std::endl; - std::cout << " [-m|--machine [arm|ppc]]" << std::endl; - std::cout << " [-B|--big-endian]" << std::endl; - std::cout << " [-L|--little-endian] BINARY_FILE OBJECT_FILE" << std::endl; - std::cout << std::endl; - std::cout << " -b or --begin Set symbol name for top of binary. (*)" << std::endl; - std::cout << " -e or --end Set symbol name for bottom of binary. (*)" << std::endl; - std::cout << " -C or --compatible Use compatible symbols with BinToElf.exe." << std::endl; - std::cout << " Same as \"-b _binary_%f -e _binary_%f_end\"." << std::endl; - std::cout << " -a or --align Set binary data alignment in bytes." << std::endl; - std::cout << " -r or --readonly Handle binary data as readonly." << std::endl; - std::cout << " -s or --section Set section name." << std::endl; - std::cout << " -m or --machine [arm|ppc] Machine arch [arm|ppc].(default=arm)" << std::endl; - std::cout << " -B or --big-endian Output in big endian format." << std::endl; - std::cout << " -L or --little-endian Output in little endian format." << std::endl; - std::cout << std::endl; - std::cout << " (*) special % rules for symbols (ex. binary_file = \"filename.dat\")" << std::endl; - std::cout << " %f,%t replaced to file name of binary (%f = \"filename.dat\")" << std::endl; - std::cout << " %b replaced to base name of binary (%b = \"filename\")" << std::endl; - std::cout << " %e replaced to extension of binary (%e = \"dat\")" << std::endl; -} - -std::string& ntrsprintf(std::string& templ, std::string binfname) { - size_t pos; - if ((pos = binfname.rfind('/')) != std::string::npos) { - binfname = binfname.substr(pos + 1); - } - size_t extpos = binfname.rfind('.'); - if (extpos == std::string::npos) extpos = binfname.length() - 1; - if ((pos = templ.find("%f")) != std::string::npos || (pos = templ.find("%t")) != std::string::npos) { - templ = templ.substr(0, pos) + binfname + templ.substr(pos + 2); - } - if ((pos = templ.find("%b")) != std::string::npos) { - templ = templ.substr(0, pos) + binfname.substr(0, extpos) + templ.substr(pos + 2); - } - if ((pos = templ.find("%e")) != std::string::npos) { - templ = templ.substr(0, pos) + binfname.substr(extpos + 1) + templ.substr(pos + 2); - } - return templ; -} - -int main(int argc, char** argv) { - std::vector args(argv + 1, argv + argc); - std::vector posargs; - std::string sym_begin; - std::string sym_end; - bool compatible = false; - int alignment = 4; - bool readonly = false; - std::string section; - Proc proc = PROC_ARM; - Endian endian = END_LITTLE; - - for (auto arg_i = args.cbegin(); arg_i < args.cend(); arg_i++) { - const std::string cur_arg = *arg_i; - if (cur_arg == "-b" || cur_arg == "--begin") { - arg_i++; - sym_begin = *arg_i; - } else if (cur_arg == "-e" || cur_arg == "--end") { - arg_i++; - sym_end = *arg_i; - } else if (cur_arg == "-C" || cur_arg == "--compatible") { - compatible = true; - } else if (cur_arg == "-a" || cur_arg == "--align") { - arg_i++; - try { - alignment = std::stoi(*arg_i); - } catch (std::invalid_argument& e) { - if (e.what() == static_cast("stoi")) { - std::cerr << "Invalid integer value for " << cur_arg << ": " << *arg_i << std::endl; - } else { - std::cerr << "Unexpected error while parsing value for " << cur_arg << ": " << e.what() << std::endl; - } - return 1; - } - } else if (cur_arg == "-r" || cur_arg == "--readonly") { - readonly = true; - } else if (cur_arg == "-s" || cur_arg == "--section") { - arg_i++; - section = *arg_i; - } else if (cur_arg == "-m" || cur_arg == "--machine") { - arg_i++; - if (*arg_i == "arm") { - proc = PROC_ARM; - } else if (*arg_i == "ppc") { - proc = PROC_PPC; - } else { - std::cerr << "Invalid argument for " << cur_arg << ": " << *arg_i << std::endl; - return 1; - } - } else if (cur_arg == "-B" || cur_arg == "--big-endian") { - endian = END_BIG; - } else if (cur_arg == "-L" || cur_arg == "--little-endian") { - endian = END_LITTLE; - } else { - posargs.push_back(cur_arg); - } - } - - if (posargs.size() < 2) { - usage(); - std::cerr << "Missing required position argument: " << (posargs.empty() ? "BINARY_FILE" : "OBJECT_FILE") << std::endl; - return 1; - } else if (posargs.size() > 2) { - usage(); - std::cerr << "Unrecognized arguments (first one: " << posargs[2] << ")" << std::endl; - return 1; - } - if (compatible) { - sym_begin = "_binary_%f"; - sym_end = "_binary_%f_end"; - } - if (sym_begin.empty()) { - sym_begin = "%b_begin"; - } - if (sym_end.empty()) { - sym_end = "%b_end"; - } - sym_begin = ntrsprintf(sym_begin, posargs[0]); - sym_end = ntrsprintf(sym_end, posargs[0]); - if (section.empty()) { - section = readonly ? ".rodata" : ".data"; - } - if (alignment == 0) { - alignment = 1; - } else { - int i; - for (i = 0; i < 10; i++) { - if ((alignment >> i) & 1) { - if ((alignment >> i) & ~1) { - std::cerr << "Alignment must be a power of 2" << std::endl; - return 1; - } - break; - } - } - if (i == 10) { - std::cerr << "Alignment exceeds maximum value of 512" << std::endl; - return 1; - } - } - if (alignment < 4) { - alignment = 4; - } - std::ifstream binfile(posargs[0], std::ios::binary | std::ios::ate); - if (!binfile.good()) { - std::cerr << "Unable to open file " << posargs[0] << " for reading" << std::endl; - return 1; - } - std::ofstream objfile(posargs[1], std::ios::binary); - if (!objfile.good()) { - binfile.close(); - std::cerr << "Unable to open file " << posargs[1] << " for writing" << std::endl; - return 1; - } - size_t filesize = binfile.tellg(); - binfile.seekg(0); - - // Elf header - Elf32_Ehdr ehdr; - - static const unsigned char _eident[EI_NIDENT] { - ELFMAG0, // EI_MAG0 - ELFMAG1, // EI_MAG1 - ELFMAG2, // EI_MAG2 - ELFMAG3, // EI_MAG3 - ELFCLASS32, // EI_CLASS - endian, // EI_DATA - EV_CURRENT, // EI_VERSION - ELFOSABI_NONE, // EI_OSABI - 0, // EI_ABIVERSION - }; - memcpy(ehdr.e_ident, _eident, EI_NIDENT); - ehdr.e_type = ET_REL; - ehdr.e_machine = proc; - ehdr.e_version = EV_CURRENT; - ehdr.e_shoff = sizeof(Elf32_Ehdr); - ehdr.e_ehsize = sizeof(Elf32_Ehdr); - ehdr.e_shentsize = sizeof(Elf32_Shdr); - ehdr.e_shnum = 5; - ehdr.e_shstrndx = 1; - - // Five sections: NULL, user section, symtab, strtab, shstrtab - Elf32_Shdr shdr[5] = {}; - - size_t sh_name = 1; - shdr[SHNDX_SHSTRTAB].sh_type = SHT_STRTAB; - shdr[SHNDX_SHSTRTAB].sh_offset = ehdr.e_shoff + 5 * sizeof(Elf32_Shdr); - shdr[SHNDX_SHSTRTAB].sh_name = sh_name; - sh_name += std::string(".shstrtab").length() + 1; - shdr[SHNDX_SYMTAB].sh_type = SHT_SYMTAB; - shdr[SHNDX_SYMTAB].sh_link = SHNDX_STRTAB; - shdr[SHNDX_SYMTAB].sh_info = 2; - shdr[SHNDX_SYMTAB].sh_addralign = 4; - shdr[SHNDX_SYMTAB].sh_name = sh_name; - shdr[SHNDX_SYMTAB].sh_entsize = sizeof(Elf32_Sym); - sh_name += std::string(".symtab").length() + 1; - shdr[SHNDX_STRTAB].sh_type = SHT_STRTAB; - shdr[SHNDX_STRTAB].sh_addralign = 1; - shdr[SHNDX_STRTAB].sh_name = sh_name; - sh_name += std::string(".strtab").length() + 1; - shdr[SHNDX_PROGBITS].sh_type = SHT_PROGBITS; - shdr[SHNDX_PROGBITS].sh_flags = SHF_ALLOC | (readonly ? 0 : SHF_WRITE); - shdr[SHNDX_PROGBITS].sh_addralign = alignment; - shdr[SHNDX_PROGBITS].sh_name = sh_name; - sh_name += section.length() + 1; - shdr[SHNDX_SHSTRTAB].sh_size = sh_name; - sh_name = (sh_name + 3) & ~3; - shdr[SHNDX_SYMTAB].sh_offset = shdr[SHNDX_SHSTRTAB].sh_offset + sh_name; - shdr[SHNDX_SYMTAB].sh_size = 3 * sizeof(Elf32_Sym); - shdr[SHNDX_STRTAB].sh_offset = shdr[SHNDX_SYMTAB].sh_offset + shdr[SHNDX_SYMTAB].sh_size; - size_t st_name = sym_begin.length() + sym_end.length() + 3; - shdr[SHNDX_STRTAB].sh_size = st_name; - st_name = (st_name + 3) & ~3; - shdr[SHNDX_PROGBITS].sh_offset = shdr[SHNDX_STRTAB].sh_offset + st_name; - shdr[SHNDX_PROGBITS].sh_size = filesize; - - // symtab - Elf32_Sym syms[3] = {}; - // begin - syms[1].st_info = ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT); - syms[1].st_shndx = SHNDX_PROGBITS; - syms[1].st_size = filesize; - syms[1].st_value = 0; - syms[1].st_name = 1; - // end - syms[2].st_info = ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT); - syms[2].st_shndx = SHNDX_PROGBITS; - syms[2].st_size = 0; - syms[2].st_value = filesize; - syms[2].st_name = sym_begin.length() + 2; - - // Write to file - char zeroes[3] = {0, 0, 0}; - unsigned padding; - // Elf header - objfile.write((char*)&ehdr, sizeof(ehdr)); - // Section headers - objfile.write((char*)shdr, sizeof(shdr)); - // Section string table - objfile.write(zeroes, 1); - objfile.write(".shstrtab", sizeof(".shstrtab")); - objfile.write(".symtab", sizeof(".symtab")); - objfile.write(".strtab", sizeof(".strtab")); - objfile.write(section.c_str(), static_cast(section.length() + 1)); - padding = (4 - (sizeof(".shstrtab") + sizeof(".symtab") + sizeof(".strtab") + section.length() + 2)) & 3; - objfile.write(zeroes, padding); - // Symbol table - objfile.write((char*)syms, sizeof(syms)); - // String table - objfile.write(zeroes, 1); - objfile.write(sym_begin.c_str(), static_cast(sym_begin.length() + 1)); - objfile.write(sym_end.c_str(), static_cast(sym_end.length() + 1)); - padding = (4 - (sym_begin.length() + sym_end.length() + 3)) & 3; - objfile.write(zeroes, padding); - // Data - char* rdbuf = new char[filesize]; - binfile.read(rdbuf, static_cast(filesize)); - objfile.write(rdbuf, static_cast(filesize)); - delete[] rdbuf; - - binfile.close(); - objfile.close(); - return 0; -} +#include +#include +#include +#include +#include +extern "C" { +#include "elf.h" +} + +enum Proc : unsigned char { + PROC_ARM = EM_ARM, + PROC_PPC = EM_PPC, +}; + +enum Endian : unsigned char { + END_LITTLE = ELFDATA2LSB, + END_BIG = ELFDATA2MSB, +}; + +enum Shndx { + SHNDX_SHSTRTAB = 1, + SHNDX_SYMTAB, + SHNDX_STRTAB, + SHNDX_PROGBITS, +}; + +static inline void usage() { + std::cout << "Usage: bin2obj [-b|--begin SYMBOL_BEGIN]" << std::endl; + std::cout << " [-e|--end SYMBOL_END]" << std::endl; + std::cout << " [-C|--compatible]" << std::endl; + std::cout << " [-a|--align ALIGNMENT]" << std::endl; + std::cout << " [-r|--readonly]" << std::endl; + std::cout << " [-s|--section SECTION]" << std::endl; + std::cout << " [-m|--machine [arm|ppc]]" << std::endl; + std::cout << " [-B|--big-endian]" << std::endl; + std::cout << " [-L|--little-endian] BINARY_FILE OBJECT_FILE" << std::endl; + std::cout << std::endl; + std::cout << " -b or --begin Set symbol name for top of binary. (*)" << std::endl; + std::cout << " -e or --end Set symbol name for bottom of binary. (*)" << std::endl; + std::cout << " -C or --compatible Use compatible symbols with BinToElf.exe." << std::endl; + std::cout << " Same as \"-b _binary_%f -e _binary_%f_end\"." << std::endl; + std::cout << " -a or --align Set binary data alignment in bytes." << std::endl; + std::cout << " -r or --readonly Handle binary data as readonly." << std::endl; + std::cout << " -s or --section Set section name." << std::endl; + std::cout << " -m or --machine [arm|ppc] Machine arch [arm|ppc].(default=arm)" << std::endl; + std::cout << " -B or --big-endian Output in big endian format." << std::endl; + std::cout << " -L or --little-endian Output in little endian format." << std::endl; + std::cout << std::endl; + std::cout << " (*) special % rules for symbols (ex. binary_file = \"filename.dat\")" << std::endl; + std::cout << " %f,%t replaced to file name of binary (%f = \"filename.dat\")" << std::endl; + std::cout << " %b replaced to base name of binary (%b = \"filename\")" << std::endl; + std::cout << " %e replaced to extension of binary (%e = \"dat\")" << std::endl; +} + +std::string& ntrsprintf(std::string& templ, std::string binfname) { + size_t pos; + if ((pos = binfname.rfind('/')) != std::string::npos) { + binfname = binfname.substr(pos + 1); + } + size_t extpos = binfname.rfind('.'); + if (extpos == std::string::npos) extpos = binfname.length() - 1; + if ((pos = templ.find("%f")) != std::string::npos || (pos = templ.find("%t")) != std::string::npos) { + templ = templ.substr(0, pos) + binfname + templ.substr(pos + 2); + } + if ((pos = templ.find("%b")) != std::string::npos) { + templ = templ.substr(0, pos) + binfname.substr(0, extpos) + templ.substr(pos + 2); + } + if ((pos = templ.find("%e")) != std::string::npos) { + templ = templ.substr(0, pos) + binfname.substr(extpos + 1) + templ.substr(pos + 2); + } + return templ; +} + +int main(int argc, char** argv) { + std::vector args(argv + 1, argv + argc); + std::vector posargs; + std::string sym_begin; + std::string sym_end; + bool compatible = false; + int alignment = 4; + bool readonly = false; + std::string section; + Proc proc = PROC_ARM; + Endian endian = END_LITTLE; + + for (auto arg_i = args.cbegin(); arg_i < args.cend(); arg_i++) { + const std::string cur_arg = *arg_i; + if (cur_arg == "-b" || cur_arg == "--begin") { + arg_i++; + sym_begin = *arg_i; + } else if (cur_arg == "-e" || cur_arg == "--end") { + arg_i++; + sym_end = *arg_i; + } else if (cur_arg == "-C" || cur_arg == "--compatible") { + compatible = true; + } else if (cur_arg == "-a" || cur_arg == "--align") { + arg_i++; + try { + alignment = std::stoi(*arg_i); + } catch (std::invalid_argument& e) { + if (e.what() == static_cast("stoi")) { + std::cerr << "Invalid integer value for " << cur_arg << ": " << *arg_i << std::endl; + } else { + std::cerr << "Unexpected error while parsing value for " << cur_arg << ": " << e.what() << std::endl; + } + return 1; + } + } else if (cur_arg == "-r" || cur_arg == "--readonly") { + readonly = true; + } else if (cur_arg == "-s" || cur_arg == "--section") { + arg_i++; + section = *arg_i; + } else if (cur_arg == "-m" || cur_arg == "--machine") { + arg_i++; + if (*arg_i == "arm") { + proc = PROC_ARM; + } else if (*arg_i == "ppc") { + proc = PROC_PPC; + } else { + std::cerr << "Invalid argument for " << cur_arg << ": " << *arg_i << std::endl; + return 1; + } + } else if (cur_arg == "-B" || cur_arg == "--big-endian") { + endian = END_BIG; + } else if (cur_arg == "-L" || cur_arg == "--little-endian") { + endian = END_LITTLE; + } else { + posargs.push_back(cur_arg); + } + } + + if (posargs.size() < 2) { + usage(); + std::cerr << "Missing required position argument: " << (posargs.empty() ? "BINARY_FILE" : "OBJECT_FILE") << std::endl; + return 1; + } else if (posargs.size() > 2) { + usage(); + std::cerr << "Unrecognized arguments (first one: " << posargs[2] << ")" << std::endl; + return 1; + } + if (compatible) { + sym_begin = "_binary_%f"; + sym_end = "_binary_%f_end"; + } + if (sym_begin.empty()) { + sym_begin = "%b_begin"; + } + if (sym_end.empty()) { + sym_end = "%b_end"; + } + sym_begin = ntrsprintf(sym_begin, posargs[0]); + sym_end = ntrsprintf(sym_end, posargs[0]); + if (section.empty()) { + section = readonly ? ".rodata" : ".data"; + } + if (alignment == 0) { + alignment = 1; + } else { + int i; + for (i = 0; i < 10; i++) { + if ((alignment >> i) & 1) { + if ((alignment >> i) & ~1) { + std::cerr << "Alignment must be a power of 2" << std::endl; + return 1; + } + break; + } + } + if (i == 10) { + std::cerr << "Alignment exceeds maximum value of 512" << std::endl; + return 1; + } + } + if (alignment < 4) { + alignment = 4; + } + std::ifstream binfile(posargs[0], std::ios::binary | std::ios::ate); + if (!binfile.good()) { + std::cerr << "Unable to open file " << posargs[0] << " for reading" << std::endl; + return 1; + } + std::ofstream objfile(posargs[1], std::ios::binary); + if (!objfile.good()) { + binfile.close(); + std::cerr << "Unable to open file " << posargs[1] << " for writing" << std::endl; + return 1; + } + size_t filesize = binfile.tellg(); + binfile.seekg(0); + + // Elf header + Elf32_Ehdr ehdr; + + static const unsigned char _eident[EI_NIDENT] { + ELFMAG0, // EI_MAG0 + ELFMAG1, // EI_MAG1 + ELFMAG2, // EI_MAG2 + ELFMAG3, // EI_MAG3 + ELFCLASS32, // EI_CLASS + endian, // EI_DATA + EV_CURRENT, // EI_VERSION + ELFOSABI_NONE, // EI_OSABI + 0, // EI_ABIVERSION + }; + memcpy(ehdr.e_ident, _eident, EI_NIDENT); + ehdr.e_type = ET_REL; + ehdr.e_machine = proc; + ehdr.e_version = EV_CURRENT; + ehdr.e_shoff = sizeof(Elf32_Ehdr); + ehdr.e_ehsize = sizeof(Elf32_Ehdr); + ehdr.e_shentsize = sizeof(Elf32_Shdr); + ehdr.e_shnum = 5; + ehdr.e_shstrndx = 1; + + // Five sections: NULL, user section, symtab, strtab, shstrtab + Elf32_Shdr shdr[5] = {}; + + size_t sh_name = 1; + shdr[SHNDX_SHSTRTAB].sh_type = SHT_STRTAB; + shdr[SHNDX_SHSTRTAB].sh_offset = ehdr.e_shoff + 5 * sizeof(Elf32_Shdr); + shdr[SHNDX_SHSTRTAB].sh_name = sh_name; + sh_name += std::string(".shstrtab").length() + 1; + shdr[SHNDX_SYMTAB].sh_type = SHT_SYMTAB; + shdr[SHNDX_SYMTAB].sh_link = SHNDX_STRTAB; + shdr[SHNDX_SYMTAB].sh_info = 2; + shdr[SHNDX_SYMTAB].sh_addralign = 4; + shdr[SHNDX_SYMTAB].sh_name = sh_name; + shdr[SHNDX_SYMTAB].sh_entsize = sizeof(Elf32_Sym); + sh_name += std::string(".symtab").length() + 1; + shdr[SHNDX_STRTAB].sh_type = SHT_STRTAB; + shdr[SHNDX_STRTAB].sh_addralign = 1; + shdr[SHNDX_STRTAB].sh_name = sh_name; + sh_name += std::string(".strtab").length() + 1; + shdr[SHNDX_PROGBITS].sh_type = SHT_PROGBITS; + shdr[SHNDX_PROGBITS].sh_flags = SHF_ALLOC | (readonly ? 0 : SHF_WRITE); + shdr[SHNDX_PROGBITS].sh_addralign = alignment; + shdr[SHNDX_PROGBITS].sh_name = sh_name; + sh_name += section.length() + 1; + shdr[SHNDX_SHSTRTAB].sh_size = sh_name; + sh_name = (sh_name + 3) & ~3; + shdr[SHNDX_SYMTAB].sh_offset = shdr[SHNDX_SHSTRTAB].sh_offset + sh_name; + shdr[SHNDX_SYMTAB].sh_size = 3 * sizeof(Elf32_Sym); + shdr[SHNDX_STRTAB].sh_offset = shdr[SHNDX_SYMTAB].sh_offset + shdr[SHNDX_SYMTAB].sh_size; + size_t st_name = sym_begin.length() + sym_end.length() + 3; + shdr[SHNDX_STRTAB].sh_size = st_name; + st_name = (st_name + 3) & ~3; + shdr[SHNDX_PROGBITS].sh_offset = shdr[SHNDX_STRTAB].sh_offset + st_name; + shdr[SHNDX_PROGBITS].sh_size = filesize; + + // symtab + Elf32_Sym syms[3] = {}; + // begin + syms[1].st_info = ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT); + syms[1].st_shndx = SHNDX_PROGBITS; + syms[1].st_size = filesize; + syms[1].st_value = 0; + syms[1].st_name = 1; + // end + syms[2].st_info = ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT); + syms[2].st_shndx = SHNDX_PROGBITS; + syms[2].st_size = 0; + syms[2].st_value = filesize; + syms[2].st_name = sym_begin.length() + 2; + + // Write to file + char zeroes[3] = {0, 0, 0}; + unsigned padding; + // Elf header + objfile.write((char*)&ehdr, sizeof(ehdr)); + // Section headers + objfile.write((char*)shdr, sizeof(shdr)); + // Section string table + objfile.write(zeroes, 1); + objfile.write(".shstrtab", sizeof(".shstrtab")); + objfile.write(".symtab", sizeof(".symtab")); + objfile.write(".strtab", sizeof(".strtab")); + objfile.write(section.c_str(), static_cast(section.length() + 1)); + padding = (4 - (sizeof(".shstrtab") + sizeof(".symtab") + sizeof(".strtab") + section.length() + 2)) & 3; + objfile.write(zeroes, padding); + // Symbol table + objfile.write((char*)syms, sizeof(syms)); + // String table + objfile.write(zeroes, 1); + objfile.write(sym_begin.c_str(), static_cast(sym_begin.length() + 1)); + objfile.write(sym_end.c_str(), static_cast(sym_end.length() + 1)); + padding = (4 - (sym_begin.length() + sym_end.length() + 3)) & 3; + objfile.write(zeroes, padding); + // Data + char* rdbuf = new char[filesize]; + binfile.read(rdbuf, static_cast(filesize)); + objfile.write(rdbuf, static_cast(filesize)); + delete[] rdbuf; + + binfile.close(); + objfile.close(); + return 0; +} diff --git a/tools/mwasmarm_patcher/.gitignore b/tools/mwasmarm_patcher/.gitignore index f03366b23..c9b889c59 100644 --- a/tools/mwasmarm_patcher/.gitignore +++ b/tools/mwasmarm_patcher/.gitignore @@ -1 +1 @@ -mwasmarm_patcher +mwasmarm_patcher diff --git a/tools/mwasmarm_patcher/Makefile b/tools/mwasmarm_patcher/Makefile index 9765f713c..ffdf82d98 100644 --- a/tools/mwasmarm_patcher/Makefile +++ b/tools/mwasmarm_patcher/Makefile @@ -1,14 +1,14 @@ -.PHONY: all clean - -CC := gcc -CFLAGS := -O3 - -.PHONY: all clean - -all: mwasmarm_patcher - @: - -clean: ; $(RM) mwasmarm_patcher$(EXE) - -mwasmarm_patcher: mwasmarm_patcher.c - $(CC) $(CFLAGS) -o $@ $< +.PHONY: all clean + +CC := gcc +CFLAGS := -O3 + +.PHONY: all clean + +all: mwasmarm_patcher + @: + +clean: ; $(RM) mwasmarm_patcher$(EXE) + +mwasmarm_patcher: mwasmarm_patcher.c + $(CC) $(CFLAGS) -o $@ $< diff --git a/tools/mwasmarm_patcher/mwasmarm_patcher.c b/tools/mwasmarm_patcher/mwasmarm_patcher.c index 18572204e..1d7aa2044 100644 --- a/tools/mwasmarm_patcher/mwasmarm_patcher.c +++ b/tools/mwasmarm_patcher/mwasmarm_patcher.c @@ -1,254 +1,254 @@ -#include -#include -#include -#include -#include - -// mwasmarm patcher v1.2 -// Patches the Metrowerk C compiler assembler to stop the line ending bug and the 0x400 incbin bug. - -// Changelog: -// v1.1: Added patch definitions and looped over them to find the matching -// definition as well as the version. -// v1.2: Switched to array system for applying multiple patches for compiler -// versions and added 0x400 incbin fix for each version. - -struct PatchPair { - int offsetPatch; - int newByte; -}; - -struct PatchDef { - char *version; - char *sha1before; - char *sha1after; - struct PatchPair *patches; -}; - -// Patch definitions for each of the respective assembler versions. -struct PatchPair g12BasePatches[] = { - { 0x57614, 0x5 }, - { 0xD47, 0x8D }, - {0} -}; - -struct PatchPair g20BasePatches[] = { - { 0x57644, 0x5 }, - { 0xD47, 0x8D }, - {0} -}; - -struct PatchPair g20sp2p4Patches[] = { - { 0x57834, 0x5 }, - { 0xD47, 0x8D }, - {0} -}; - -// Table of definitions for each assembler version -struct PatchDef gPatchDefs[] = { - // mwasmarm 1.2/base definition - { - "mwasmarm 1.2/base", - "87f942cc0a0e90e73550d8d6f3fffcdeb5f69fa5", - "3395ac5decf49135d892e93a3e6dd38676025983", - g12BasePatches - }, - // mwasmarm 2.0/base definition - { - "mwasmarm 2.0/base", - "9d63877c776245129b4727b41d3e9e63cfc9cd28", - "ef75c3fb9f8d90cb4881386c41d8dc3ab4de7153", - g20BasePatches - }, - // mwasmarm 2.0/sp2p4 definition - { - "mwasmarm 2.0/sp2p4", - "448cb0c7f1ace4393e9a9562f819f7a9f049be83", - "caa84dd90b1987ab7b42749bd5c9dcfdcfef59f3", - g20sp2p4Patches - }, - {0} -}; - -// --------------------------------------------------------- -// Credit to ax6 for implementation of sha1 hash functions -// --------------------------------------------------------- - -void sha1_process_block (const unsigned char * block, uint32_t * state); - -unsigned char * calculate_sha1 (const void * data, unsigned length) { - uint32_t state[5] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; - const char * current; - unsigned remaining; - for (current = data, remaining = length; remaining >= 64; current += 64, remaining -= 64) sha1_process_block((const uint8_t *)current, state); - // technically only {0} is necessary, but better safe than sorry - unsigned char last_block[64] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - memcpy(last_block, current, remaining); - last_block[remaining] = 0x80; - if (remaining >= 56) { - sha1_process_block(last_block, state); - memset(last_block, 0, 64); - } - unsigned long long bit_length = ((unsigned long long) length) << 3; - for (remaining = 5; remaining; remaining --) { - last_block[58 + remaining] = bit_length; - bit_length >>= 8; - } - sha1_process_block(last_block, state); - unsigned char * result = malloc(20); - for (remaining = 0; remaining < 20; remaining ++) result[remaining] = state[remaining >> 2] >> ((~remaining & 3) << 3); - return result; -} - -static inline unsigned sha1_rotate (unsigned value, unsigned count) { - return (value << count) | (value >> (32 - count)); -} - -void sha1_process_block (const unsigned char * block, uint32_t * state) { - uint32_t words[80]; - unsigned pos, temp, count, a, b, c, d, e; - // constants used by SHA-1; they are actually simply the square roots of 2, 3, 5 and 10 as a fixed-point number (2.30 format) - const uint32_t hash_constants[4] = {0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6}; - memset(words, 0, 16 * sizeof(uint32_t)); - for (pos = 0; pos < 64; pos ++) words[pos >> 2] = (words[pos >> 2] << 8) | block[pos]; - for (pos = 16; pos < 80; pos ++) words[pos] = sha1_rotate(words[pos - 3] ^ words[pos - 8] ^ words[pos - 14] ^ words[pos - 16], 1); - a = *state; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - for (pos = 0; pos < 4; pos ++) for (count = 0; count < 20; count ++) { - temp = sha1_rotate(a, 5) + e + words[pos * 20 + count] + hash_constants[pos]; - switch (pos) { - case 0: - temp += (b & c) | (~b & d); - break; - case 2: - temp += (b & c) | (b & d) | (c & d); - break; - default: - temp += b ^ c ^ d; - } - e = d; - d = c; - c = sha1_rotate(b, 30); - b = a; - a = temp; - } - *state += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; -} - -// --------------------------------------------------------- -// ax6 code end -// --------------------------------------------------------- - -__attribute__((format(printf, 1, 2))) -void fatal_printf(char *str, ...) { - va_list args; - va_start(args, str); - vprintf(str, args); - va_end(args); - exit(1); -} - -// return size in bytes -int get_file_size (FILE * fp) { - int curpos = ftell(fp); - fseek(fp, 0, SEEK_END); - int result = ftell(fp); - fseek(fp, curpos, SEEK_SET); - return result; -} - -#define SHA_DIGEST_LENGTH 20 - -void print_help(void) { - printf("Usage:\n" - "\tmwasmarm_patcher [OPTIONS] FILENAME\n\n" - "Arguments:\n" - "\tFILENAME: path to MWASMARM.exe program\n\n" - "OPTIONS:\n" - "\t-q/--quietly: Suppress verbose output\n" - "\t-h/--help: Print this message and exit\n"); -} - -int main(int argc, char *argv[]) { - int quietly = 0; - char* filename = NULL; - for (int i = 1; i < argc; i++) - { - if (argv[i][0] == '-') { - if (strcmp(argv[i], "-q") == 0 || strcmp(argv[i], "--quietly") == 0) - quietly = 1; - else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - print_help(); - exit(0); - } - else - { - print_help(); - fatal_printf("Unrecognized option: %s\n", argv[i]); - } - } else if (filename != NULL) { - print_help(); - fatal_printf("Excess filename supplied\n"); - } - else - filename = argv[i]; - } - if (filename == NULL) { - print_help(); - fatal_printf("Missing required argument: filename\n"); - } else { - // Open the file and read it's sha1 hash. - FILE *f = fopen(filename, "rb+"); - if (f == NULL) { - fatal_printf("ERROR: No file detected\n"); - } - int fsize = get_file_size(f); - unsigned char *string = malloc(fsize + 1); - if (string == NULL) { - fatal_printf("ERROR: Failed to allocate string variable\n"); - } - int readvar = fread(string, 1, fsize, f); // var to surpress warning - - // Check if sha1 matches either known assembler hashes. - unsigned char *sha1 = calculate_sha1(string, fsize); - if (sha1 == NULL) { - fatal_printf("ERROR: Failed to retrieve sha1 hash\n"); - } - free(string); - - char buf[(SHA_DIGEST_LENGTH*2)+1]; - for (int i=0; i < SHA_DIGEST_LENGTH; i++) { - sprintf(&(buf[i*2]), "%02x", sha1[i]); - } - free(sha1); - - // loop over each patch definition to attempt to locate a supported version and, if - // needed, apply the patch definitions. - for (int i = 0; gPatchDefs[i].sha1before != NULL; i++) { - // check if already patched for the current loop. - if (!strcmp(buf, gPatchDefs[i].sha1after)) { - if (!quietly) printf("Supported patched version detected (%s): no action needed\n", gPatchDefs[i].version); - return 0; - } else if(!strcmp(buf, gPatchDefs[i].sha1before)) { - // we found an unpatched version: apply the patches. - for (int j = 0; gPatchDefs[i].patches[j].offsetPatch != 0; j++) { - fseek(f, gPatchDefs[i].patches[j].offsetPatch, SEEK_SET); - fputc(gPatchDefs[i].patches[j].newByte, f); - } - if (!quietly) printf("Supported unpatched version detected (%s): assembler patched\n", gPatchDefs[i].version); - return 0; - } - } - // Unable to locate supported version, quitting - fatal_printf("ERROR: Unsupported mwasmarm.exe version\n"); - } - return 0; -} +#include +#include +#include +#include +#include + +// mwasmarm patcher v1.2 +// Patches the Metrowerk C compiler assembler to stop the line ending bug and the 0x400 incbin bug. + +// Changelog: +// v1.1: Added patch definitions and looped over them to find the matching +// definition as well as the version. +// v1.2: Switched to array system for applying multiple patches for compiler +// versions and added 0x400 incbin fix for each version. + +struct PatchPair { + int offsetPatch; + int newByte; +}; + +struct PatchDef { + char *version; + char *sha1before; + char *sha1after; + struct PatchPair *patches; +}; + +// Patch definitions for each of the respective assembler versions. +struct PatchPair g12BasePatches[] = { + { 0x57614, 0x5 }, + { 0xD47, 0x8D }, + {0} +}; + +struct PatchPair g20BasePatches[] = { + { 0x57644, 0x5 }, + { 0xD47, 0x8D }, + {0} +}; + +struct PatchPair g20sp2p4Patches[] = { + { 0x57834, 0x5 }, + { 0xD47, 0x8D }, + {0} +}; + +// Table of definitions for each assembler version +struct PatchDef gPatchDefs[] = { + // mwasmarm 1.2/base definition + { + "mwasmarm 1.2/base", + "87f942cc0a0e90e73550d8d6f3fffcdeb5f69fa5", + "3395ac5decf49135d892e93a3e6dd38676025983", + g12BasePatches + }, + // mwasmarm 2.0/base definition + { + "mwasmarm 2.0/base", + "9d63877c776245129b4727b41d3e9e63cfc9cd28", + "ef75c3fb9f8d90cb4881386c41d8dc3ab4de7153", + g20BasePatches + }, + // mwasmarm 2.0/sp2p4 definition + { + "mwasmarm 2.0/sp2p4", + "448cb0c7f1ace4393e9a9562f819f7a9f049be83", + "caa84dd90b1987ab7b42749bd5c9dcfdcfef59f3", + g20sp2p4Patches + }, + {0} +}; + +// --------------------------------------------------------- +// Credit to ax6 for implementation of sha1 hash functions +// --------------------------------------------------------- + +void sha1_process_block (const unsigned char * block, uint32_t * state); + +unsigned char * calculate_sha1 (const void * data, unsigned length) { + uint32_t state[5] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; + const char * current; + unsigned remaining; + for (current = data, remaining = length; remaining >= 64; current += 64, remaining -= 64) sha1_process_block((const uint8_t *)current, state); + // technically only {0} is necessary, but better safe than sorry + unsigned char last_block[64] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + memcpy(last_block, current, remaining); + last_block[remaining] = 0x80; + if (remaining >= 56) { + sha1_process_block(last_block, state); + memset(last_block, 0, 64); + } + unsigned long long bit_length = ((unsigned long long) length) << 3; + for (remaining = 5; remaining; remaining --) { + last_block[58 + remaining] = bit_length; + bit_length >>= 8; + } + sha1_process_block(last_block, state); + unsigned char * result = malloc(20); + for (remaining = 0; remaining < 20; remaining ++) result[remaining] = state[remaining >> 2] >> ((~remaining & 3) << 3); + return result; +} + +static inline unsigned sha1_rotate (unsigned value, unsigned count) { + return (value << count) | (value >> (32 - count)); +} + +void sha1_process_block (const unsigned char * block, uint32_t * state) { + uint32_t words[80]; + unsigned pos, temp, count, a, b, c, d, e; + // constants used by SHA-1; they are actually simply the square roots of 2, 3, 5 and 10 as a fixed-point number (2.30 format) + const uint32_t hash_constants[4] = {0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6}; + memset(words, 0, 16 * sizeof(uint32_t)); + for (pos = 0; pos < 64; pos ++) words[pos >> 2] = (words[pos >> 2] << 8) | block[pos]; + for (pos = 16; pos < 80; pos ++) words[pos] = sha1_rotate(words[pos - 3] ^ words[pos - 8] ^ words[pos - 14] ^ words[pos - 16], 1); + a = *state; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + for (pos = 0; pos < 4; pos ++) for (count = 0; count < 20; count ++) { + temp = sha1_rotate(a, 5) + e + words[pos * 20 + count] + hash_constants[pos]; + switch (pos) { + case 0: + temp += (b & c) | (~b & d); + break; + case 2: + temp += (b & c) | (b & d) | (c & d); + break; + default: + temp += b ^ c ^ d; + } + e = d; + d = c; + c = sha1_rotate(b, 30); + b = a; + a = temp; + } + *state += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; +} + +// --------------------------------------------------------- +// ax6 code end +// --------------------------------------------------------- + +__attribute__((format(printf, 1, 2))) +void fatal_printf(char *str, ...) { + va_list args; + va_start(args, str); + vprintf(str, args); + va_end(args); + exit(1); +} + +// return size in bytes +int get_file_size (FILE * fp) { + int curpos = ftell(fp); + fseek(fp, 0, SEEK_END); + int result = ftell(fp); + fseek(fp, curpos, SEEK_SET); + return result; +} + +#define SHA_DIGEST_LENGTH 20 + +void print_help(void) { + printf("Usage:\n" + "\tmwasmarm_patcher [OPTIONS] FILENAME\n\n" + "Arguments:\n" + "\tFILENAME: path to MWASMARM.exe program\n\n" + "OPTIONS:\n" + "\t-q/--quietly: Suppress verbose output\n" + "\t-h/--help: Print this message and exit\n"); +} + +int main(int argc, char *argv[]) { + int quietly = 0; + char* filename = NULL; + for (int i = 1; i < argc; i++) + { + if (argv[i][0] == '-') { + if (strcmp(argv[i], "-q") == 0 || strcmp(argv[i], "--quietly") == 0) + quietly = 1; + else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + print_help(); + exit(0); + } + else + { + print_help(); + fatal_printf("Unrecognized option: %s\n", argv[i]); + } + } else if (filename != NULL) { + print_help(); + fatal_printf("Excess filename supplied\n"); + } + else + filename = argv[i]; + } + if (filename == NULL) { + print_help(); + fatal_printf("Missing required argument: filename\n"); + } else { + // Open the file and read it's sha1 hash. + FILE *f = fopen(filename, "rb+"); + if (f == NULL) { + fatal_printf("ERROR: No file detected\n"); + } + int fsize = get_file_size(f); + unsigned char *string = malloc(fsize + 1); + if (string == NULL) { + fatal_printf("ERROR: Failed to allocate string variable\n"); + } + int readvar = fread(string, 1, fsize, f); // var to surpress warning + + // Check if sha1 matches either known assembler hashes. + unsigned char *sha1 = calculate_sha1(string, fsize); + if (sha1 == NULL) { + fatal_printf("ERROR: Failed to retrieve sha1 hash\n"); + } + free(string); + + char buf[(SHA_DIGEST_LENGTH*2)+1]; + for (int i=0; i < SHA_DIGEST_LENGTH; i++) { + sprintf(&(buf[i*2]), "%02x", sha1[i]); + } + free(sha1); + + // loop over each patch definition to attempt to locate a supported version and, if + // needed, apply the patch definitions. + for (int i = 0; gPatchDefs[i].sha1before != NULL; i++) { + // check if already patched for the current loop. + if (!strcmp(buf, gPatchDefs[i].sha1after)) { + if (!quietly) printf("Supported patched version detected (%s): no action needed\n", gPatchDefs[i].version); + return 0; + } else if(!strcmp(buf, gPatchDefs[i].sha1before)) { + // we found an unpatched version: apply the patches. + for (int j = 0; gPatchDefs[i].patches[j].offsetPatch != 0; j++) { + fseek(f, gPatchDefs[i].patches[j].offsetPatch, SEEK_SET); + fputc(gPatchDefs[i].patches[j].newByte, f); + } + if (!quietly) printf("Supported unpatched version detected (%s): assembler patched\n", gPatchDefs[i].version); + return 0; + } + } + // Unable to locate supported version, quitting + fatal_printf("ERROR: Unsupported mwasmarm.exe version\n"); + } + return 0; +}