diff --git a/asm/include/main_0207F894.inc b/asm/include/main_0207F894.inc index 69d19100..0429a3eb 100644 --- a/asm/include/main_0207F894.inc +++ b/asm/include/main_0207F894.inc @@ -47,7 +47,33 @@ .public _022BCA74 .public _f2d .public _ll_udiv +.public Card_CheckEnabled +.public Card_IsPulledOut +.public Cardi_CheckPulledOutCore +.public Cardi_ReadRom +.public Cardi_Request +.public Cardi_SetTask +.public Cardi_WaitAsync +.public CARDi_InitCommon +.public CARDi_TaskThread +.public CARDi_OnFifoRecv +.public CARD_Init +.public CARD_InitPulledOutCallback .public CopyAndInterleave +.public Ctrdg_Enable +.public Ctrdg_IsExisting +.public Ctrdgi_Enable +.public Ctrdgi_InitTaskThread +.public Ctrdgi_IsExisting +.public CTRDGi_InitCommon +.public CTRDGi_LockByProcessor +.public CTRDGi_UnlockByProcessor +.public CTRDGi_RestoreAccessCycle +.public CTRDGi_ChangeLatestAccessCycle +.public CTRDGi_SendtoPxi +.public Dgt_Hash2Init +.public Dgt_Hash2Update +.public Dgt_Hash2GetHash .public DC_FlushAll .public DC_FlushRange .public DC_InvalidateRange @@ -99,6 +125,7 @@ .public OS_WakeupThread .public OS_WakeupThreadDirect .public OSi_ReferSymbol +.public PM_ForceToPowerOff .public PXI_Init .public PXI_IsCallbackReady .public PXI_SendWordByFifo diff --git a/asm/main_0207F894.s b/asm/main_0207F894.s index 63c08c71..386cf5e4 100644 --- a/asm/main_0207F894.s +++ b/asm/main_0207F894.s @@ -5193,3187 +5193,3 @@ Card_TryWaitBackupAsync: ; 0x02083C80 _02083C88: .word Cardi_TryWaitAsync arm_func_end Card_TryWaitBackupAsync - arm_func_start CARDi_ReadFromCache -CARDi_ReadFromCache: ; 0x02083C8C - stmdb sp!, {r3, r4, r5, lr} - ldr r4, _02083D14 ; =_022BB7E0 - mov r1, #0x200 - ldr r3, [r4, #0x1c] - rsb r1, r1, #0 - ldr r2, [r0, #8] - and r3, r3, r1 - cmp r3, r2 - bne _02083D00 - ldr r2, [r4, #0x1c] - ldr r1, [r4, #0x24] - sub r3, r2, r3 - rsb r5, r3, #0x200 - cmp r5, r1 - movhi r5, r1 - add r0, r0, #0x20 - ldr r1, [r4, #0x20] - mov r2, r5 - add r0, r0, r3 - bl MI_CpuCopy8 - ldr r2, [r4, #0x1c] - ldr r1, [r4, #0x20] - ldr r0, [r4, #0x24] - add r2, r2, r5 - add r1, r1, r5 - sub r0, r0, r5 - str r2, [r4, #0x1c] - str r1, [r4, #0x20] - str r0, [r4, #0x24] -_02083D00: - ldr r0, [r4, #0x24] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02083D14: .word _022BB7E0 - arm_func_end CARDi_ReadFromCache - - arm_func_start CARDi_SetRomOp -CARDi_SetRomOp: ; 0x02083D18 - ldr r3, _02083D70 ; =0x040001A4 -_02083D1C: - ldr r2, [r3] - tst r2, #0x80000000 - bne _02083D1C - ldr r3, _02083D74 ; =0x040001A1 - mov r2, #0xc0 - strb r2, [r3] - mov r2, r0, lsr #0x18 - strb r2, [r3, #7] - mov r2, r0, lsr #0x10 - strb r2, [r3, #8] - mov r2, r0, lsr #8 - strb r2, [r3, #9] - strb r0, [r3, #0xa] - mov r0, r1, lsr #0x18 - strb r0, [r3, #0xb] - mov r0, r1, lsr #0x10 - strb r0, [r3, #0xc] - mov r0, r1, lsr #8 - strb r0, [r3, #0xd] - strb r1, [r3, #0xe] - bx lr - .align 2, 0 -_02083D70: .word 0x040001A4 -_02083D74: .word 0x040001A1 - arm_func_end CARDi_SetRomOp - - arm_func_start sub_02083D78 -sub_02083D78: ; 0x02083D78 - stmdb sp!, {r3, r4, r5, lr} - ldr r4, _02083DBC ; =_022BB7E0 - ldr r1, _02083DC0 ; =0x04100010 - ldr r0, [r4, #0x28] - ldr r2, [r4, #0x20] - mov r3, #0x200 - ldr r5, _02083DC4 ; =_022BBE20 - bl MTi_CardDmaCopy32 - ldr r1, [r4, #0x1c] - mov r0, r1, lsr #8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r1, [r5, #4] - ldr r0, _02083DC8 ; =0x040001A4 - str r1, [r0] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02083DBC: .word _022BB7E0 -_02083DC0: .word 0x04100010 -_02083DC4: .word _022BBE20 -_02083DC8: .word 0x040001A4 - arm_func_end sub_02083D78 - - arm_func_start sub_02083DCC -sub_02083DCC: ; 0x02083DCC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _02083E98 ; =_022BB7E0 - ldr r0, [r0, #0x28] - bl MI_StopDma - ldr r3, _02083E98 ; =_022BB7E0 - ldr r0, [r3, #0x24] - ldr r2, [r3, #0x1c] - ldr r1, [r3, #0x20] - subs r0, r0, #0x200 - str r0, [r3, #0x24] - movne r0, #1 - add r2, r2, #0x200 - add r1, r1, #0x200 - moveq r0, #0 - str r2, [r3, #0x1c] - str r1, [r3, #0x20] - cmp r0, #0 - bne _02083E90 - mov r0, #0x80000 - bl OS_DisableIrqMask - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - ldr r4, _02083E98 ; =_022BB7E0 - bl sub_02084118 - bl Cardi_CheckPulledOutCore - ldr r0, [r4] - mov r1, #0 - str r1, [r0] - ldr r5, [r4, #0x38] - ldr r6, [r4, #0x3c] - bl EnableIrqFlag - ldr r1, [r4, #0x114] - mov r7, r0 - bic r0, r1, #0x4c - str r0, [r4, #0x114] - add r0, r4, #0x10c - bl OS_WakeupThread - ldr r0, [r4, #0x114] - tst r0, #0x10 - beq _02083E74 - add r0, r4, #0x44 - bl OS_WakeupThreadDirect -_02083E74: - mov r0, r7 - bl SetIrqFlag - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - blx r5 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02083E90: - bl sub_02083D78 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02083E98: .word _022BB7E0 - arm_func_end sub_02083DCC - - arm_func_start Cardi_TryReadCardDma -Cardi_TryReadCardDma: ; 0x02083E9C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r4, _02084014 ; =_022BB7E0 - mov r6, #0 - ldr sb, [r4, #0x20] - mov fp, r0 - mov r7, r6 - mov r8, r6 - mov r1, r6 - ands sl, sb, #0x1f - ldr r5, [r4, #0x24] - bne _02083ED4 - ldr r0, [r4, #0x28] - cmp r0, #3 - movls r1, #1 -_02083ED4: - cmp r1, #0 - beq _02083F28 - bl OS_GetDTCMAddress - ldr r1, _02084018 ; =CopyAndInterleave - add r3, sb, r5 - cmp r3, r1 - mov r1, #1 - mov r2, #0 - bls _02083F00 - cmp sb, #0x2000000 - movlo r2, r1 -_02083F00: - cmp r2, #0 - bne _02083F20 - cmp r0, r3 - bhs _02083F1C - add r0, r0, #0x4000 - cmp r0, sb - bhi _02083F20 -_02083F1C: - mov r1, #0 -_02083F20: - cmp r1, #0 - moveq r8, #1 -_02083F28: - cmp r8, #0 - beq _02083F44 - ldr r1, [r4, #0x1c] - ldr r0, _0208401C ; =0x000001FF - orr r1, r1, r5 - tst r1, r0 - moveq r7, #1 -_02083F44: - ldr r0, _02084020 ; =_020B2ED0 - cmp r7, #0 - ldr r0, [r0] - cmpne r5, #0 - ldr r0, [r0, #0x60] - movne r6, #1 - bic r0, r0, #0x7000000 - orr r0, r0, #0xa1000000 - cmp r6, #0 - str r0, [fp, #4] - beq _0208400C - bl EnableIrqFlag - ldr r1, [r4, #0x118] - mov r7, r0 - cmp r5, r1 - bhs _02083F94 - mov r0, sb - mov r1, r5 - bl IC_InvalidateRange - b _02083F98 -_02083F94: - bl IC_InvalidateAll -_02083F98: - ldr r0, [r4, #0x11c] - cmp r5, r0 - bhs _02083FE0 - cmp sl, #0 - beq _02083FCC - sub sb, sb, sl - mov r0, sb - mov r1, #0x20 - bl DC_StoreRange - add r0, sb, r5 - mov r1, #0x20 - bl DC_StoreRange - add r5, r5, #0x20 -_02083FCC: - mov r0, sb - mov r1, r5 - bl DC_InvalidateRange - bl DC_WaitWriteBufferEmpty - b _02083FE4 -_02083FE0: - bl DC_FlushAll -_02083FE4: - ldr r1, _02084024 ; =_02083DCC - mov r0, #0x80000 - bl OS_SetIrqFunction - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - mov r0, #0x80000 - bl OS_EnableIrqMask - mov r0, r7 - bl SetIrqFlag - bl sub_02083D78 -_0208400C: - mov r0, r6 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02084014: .word _022BB7E0 -_02084018: .word CopyAndInterleave -_0208401C: .word 0x000001FF -_02084020: .word _020B2ED0 -_02084024: .word sub_02083DCC - arm_func_end Cardi_TryReadCardDma - - arm_func_start CARDi_ReadCard -CARDi_ReadCard: ; 0x02084028 - stmdb sp!, {r4, r5, r6, lr} - ldr r4, _0208410C ; =_022BB7E0 - mov r6, r0 -_02084034: - mov r0, #0x200 - ldr r1, [r4, #0x1c] - rsb r0, r0, #0 - and r2, r1, r0 - cmp r2, r1 - bne _02084064 - ldr r5, [r4, #0x20] - tst r5, #3 - bne _02084064 - ldr r0, [r4, #0x24] - cmp r0, #0x200 - bhs _0208406C -_02084064: - str r2, [r6, #8] - add r5, r6, #0x20 -_0208406C: - mov r0, r2, lsr #8 - orr r0, r0, #0xb7000000 - mov r1, r2, lsl #0x18 - bl CARDi_SetRomOp - mov ip, #0 - ldr r0, [r6, #4] - ldr r2, _02084110 ; =0x040001A4 - mov lr, ip - str r0, [r2] - ldr r1, _02084114 ; =0x04100010 -_02084094: - ldr r3, [r2] - tst r3, #0x800000 - beq _020840B4 - ldr r0, [r1] - cmp lr, #0x200 - strlo r0, [r5, ip, lsl #2] - addlo lr, lr, #4 - addlo ip, ip, #1 -_020840B4: - tst r3, #0x80000000 - bne _02084094 - ldr r0, [r4, #0x20] - cmp r5, r0 - bne _020840F8 - ldr r0, _0208410C ; =_022BB7E0 - ldr r1, [r0, #0x1c] - add r1, r1, #0x200 - str r1, [r0, #0x1c] - ldr r1, [r0, #0x20] - add r1, r1, #0x200 - str r1, [r0, #0x20] - ldr r1, [r0, #0x24] - subs r1, r1, #0x200 - str r1, [r0, #0x24] - ldmeqia sp!, {r4, r5, r6, pc} - b _02084034 -_020840F8: - mov r0, r6 - bl CARDi_ReadFromCache - cmp r0, #0 - bne _02084034 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0208410C: .word _022BB7E0 -_02084110: .word 0x040001A4 -_02084114: .word 0x04100010 - arm_func_end CARDi_ReadCard - - arm_func_start sub_02084118 -sub_02084118: ; 0x02084118 - stmdb sp!, {r3, lr} - mov r0, #0xb8000000 - mov r1, #0 - bl CARDi_SetRomOp - ldr r1, _02084168 ; =_020B2ED0 - mov r0, #0x2000 - ldr r1, [r1] - rsb r0, r0, #0 - ldr r2, [r1, #0x60] - ldr r1, _0208416C ; =0x040001A4 - bic r2, r2, #0x7000000 - orr r2, r2, #0xa7000000 - and r0, r2, r0 - str r0, [r1] -_02084150: - ldr r0, [r1] - tst r0, #0x800000 - beq _02084150 - ldr r0, _02084170 ; =0x04100010 - ldr r0, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02084168: .word _020B2ED0 -_0208416C: .word 0x040001A4 -_02084170: .word 0x04100010 - arm_func_end sub_02084118 - - arm_func_start Cardi_ReadRomSyncCore -Cardi_ReadRomSyncCore: ; 0x02084174 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r4, _02084204 ; =_022BBE20 - mov r0, r4 - bl CARDi_ReadFromCache - cmp r0, #0 - beq _02084198 - ldr r1, [r4] - mov r0, r4 - blx r1 -_02084198: - ldr r4, _02084208 ; =_022BB7E0 - bl sub_02084118 - bl Cardi_CheckPulledOutCore - ldr r0, [r4] - mov r1, #0 - str r1, [r0] - ldr r5, [r4, #0x38] - ldr r6, [r4, #0x3c] - bl EnableIrqFlag - ldr r1, [r4, #0x114] - mov r7, r0 - bic r0, r1, #0x4c - str r0, [r4, #0x114] - add r0, r4, #0x10c - bl OS_WakeupThread - ldr r0, [r4, #0x114] - tst r0, #0x10 - beq _020841E8 - add r0, r4, #0x44 - bl OS_WakeupThreadDirect -_020841E8: - mov r0, r7 - bl SetIrqFlag - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - blx r5 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02084204: .word _022BBE20 -_02084208: .word _022BB7E0 - arm_func_end Cardi_ReadRomSyncCore - - arm_func_start Cardi_ReadRom -Cardi_ReadRom: ; 0x0208420C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r7, r3 - ldr r4, _020842F0 ; =_022BBE20 - ldr r5, _020842F4 ; =_022BB7E0 - bl Card_CheckEnabled - bl EnableIrqFlag - mov r6, r0 - b _02084240 -_02084238: - add r0, r5, #0x10c - bl OS_SleepThread -_02084240: - ldr r0, [r5, #0x114] - tst r0, #4 - bne _02084238 - ldr r0, [r5, #0x114] - ldr r2, [sp, #0x20] - ldr r1, [sp, #0x24] - orr r3, r0, #4 - mov r0, r6 - str r3, [r5, #0x114] - str r2, [r5, #0x38] - str r1, [r5, #0x3c] - bl SetIrqFlag - ldr r0, _020842F8 ; =_022BBE00 - str sl, [r5, #0x28] - ldr r0, [r0] - str r8, [r5, #0x20] - add r0, sb, r0 - str r0, [r5, #0x1c] - str r7, [r5, #0x24] - cmp sl, #3 - bhi _0208429C - mov r0, sl - bl MI_StopDma -_0208429C: - mov r0, r4 - bl Cardi_TryReadCardDma - cmp r0, #0 - beq _020842C0 - ldr r0, [sp, #0x28] - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - bl Card_WaitRomAsync - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_020842C0: - ldr r0, [sp, #0x28] - cmp r0, #0 - beq _020842D8 - ldr r0, _020842FC ; =Cardi_ReadRomSyncCore - bl Cardi_SetTask - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_020842D8: - ldr r1, _02084300 ; =_022B966C - mov r0, r5 - ldr r1, [r1, #4] - str r1, [r5, #0x104] - bl Cardi_ReadRomSyncCore - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020842F0: .word _022BBE20 -_020842F4: .word _022BB7E0 -_020842F8: .word _022BBE00 -_020842FC: .word Cardi_ReadRomSyncCore -_02084300: .word _022B966C - arm_func_end Cardi_ReadRom - - arm_func_start CARD_Init -CARD_Init: ; 0x02084304 - stmdb sp!, {r3, lr} - ldr ip, _02084360 ; =_022BB7E0 - ldr r0, [ip, #0x114] - cmp r0, #0 - ldmneia sp!, {r3, pc} - mov r2, #0 - ldr r0, _02084364 ; =_022BBE00 - sub r1, r2, #1 - mov r3, #1 - str r3, [ip, #0x114] - str r2, [ip, #0x24] - str r2, [ip, #0x20] - str r2, [ip, #0x1c] - str r1, [ip, #0x28] - str r2, [ip, #0x38] - str r2, [ip, #0x3c] - str r2, [r0] - bl CARDi_InitCommon - bl CARDi_GetRomAccessor - ldr r1, _02084364 ; =_022BBE00 - str r0, [r1, #0x20] - bl CARD_InitPulledOutCallback - ldmia sp!, {r3, pc} - .align 2, 0 -_02084360: .word _022BB7E0 -_02084364: .word _022BBE00 - arm_func_end CARD_Init - - arm_func_start Card_WaitRomAsync -Card_WaitRomAsync: ; 0x02084368 - ldr ip, _02084370 ; =Cardi_WaitAsync - bx ip - .align 2, 0 -_02084370: .word Cardi_WaitAsync - arm_func_end Card_WaitRomAsync - - arm_func_start CARDi_GetRomAccessor -CARDi_GetRomAccessor: ; 0x02084374 - ldr r0, _0208437C ; =CARDi_ReadCard - bx lr - .align 2, 0 -_0208437C: .word CARDi_ReadCard - arm_func_end CARDi_GetRomAccessor - - arm_func_start CARDi_OnFifoRecv -CARDi_OnFifoRecv: ; 0x02084380 - stmdb sp!, {r3, lr} - cmp r0, #0xb - ldmneia sp!, {r3, pc} - cmp r2, #0 - ldmeqia sp!, {r3, pc} - ldr r2, _020843B0 ; =_022BB7E0 - ldr r1, [r2, #0x114] - ldr r0, [r2, #0x104] - bic r1, r1, #0x20 - str r1, [r2, #0x114] - bl OS_WakeupThreadDirect - ldmia sp!, {r3, pc} - .align 2, 0 -_020843B0: .word _022BB7E0 - arm_func_end CARDi_OnFifoRecv - - arm_func_start CARDi_TaskThread -CARDi_TaskThread: ; 0x020843B4 - stmdb sp!, {r4, r5, r6, lr} - ldr r5, _02084400 ; =_022BB7E0 - mov r4, #0 -_020843C0: - bl EnableIrqFlag - ldr r1, [r5, #0x114] - mov r6, r0 - tst r1, #8 - bne _020843E8 -_020843D4: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r5, #0x114] - tst r0, #8 - beq _020843D4 -_020843E8: - mov r0, r6 - bl SetIrqFlag - ldr r1, [r5, #0x40] - mov r0, r5 - blx r1 - b _020843C0 - .align 2, 0 -_02084400: .word _022BB7E0 - arm_func_end CARDi_TaskThread - - arm_func_start Cardi_Request -Cardi_Request: ; 0x02084404 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - ldr r0, [sl, #0x114] - mov sb, r1 - str r2, [sp] - tst r0, #2 - bne _02084478 - ldr r1, [sl, #0x114] - mov r0, #0xb - orr r2, r1, #2 - mov r1, #1 - str r2, [sl, #0x114] - bl PXI_IsCallbackReady - cmp r0, #0 - bne _02084468 - mov r6, #0x64 - mov r5, #0xb - mov r4, #1 -_0208444C: - mov r0, r6 - bl OS_SpinWait - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0 - beq _0208444C -_02084468: - mov r0, sl - mov r1, #0 - mov r2, #1 - bl Cardi_Request -_02084478: - ldr r0, [sl] - mov r1, #0x60 - bl DC_FlushRange - bl DC_WaitWriteBufferEmpty - mov r7, #0xb - mov r6, #1 - mov r5, r7 - mov r4, r6 - mov fp, #0 -_0208449C: - str sb, [sl, #4] - ldr r0, [sl, #0x114] - orr r0, r0, #0x20 - str r0, [sl, #0x114] -_020844AC: - mov r0, r7 - mov r1, sb - mov r2, r6 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _020844AC - cmp sb, #0 - bne _020844E8 - ldr r8, [sl] -_020844D0: - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _020844D0 -_020844E8: - bl EnableIrqFlag - ldr r1, [sl, #0x114] - mov r8, r0 - tst r1, #0x20 - beq _02084510 -_020844FC: - mov r0, fp - bl OS_SleepThread - ldr r0, [sl, #0x114] - tst r0, #0x20 - bne _020844FC -_02084510: - mov r0, r8 - bl SetIrqFlag - ldr r0, [sl] - mov r1, #0x60 - bl DC_InvalidateRange - ldr r0, [sl] - ldr r1, [r0] - cmp r1, #4 - bne _02084548 - ldr r0, [sp] - sub r0, r0, #1 - str r0, [sp] - cmp r0, #0 - bgt _0208449C -_02084548: - cmp r1, #0 - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end Cardi_Request - - arm_func_start CARD_InitPulledOutCallback -CARD_InitPulledOutCallback: ; 0x02084558 - stmdb sp!, {r3, lr} - bl PXI_Init - ldr r1, _0208457C ; =CARDi_PulledOutCallback - mov r0, #0xe - bl PXI_SetFifoRecvCallback - ldr r0, _02084580 ; =_022BC040 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_0208457C: .word CARDi_PulledOutCallback -_02084580: .word _022BC040 - arm_func_end CARD_InitPulledOutCallback - - arm_func_start CARDi_PulledOutCallback -CARDi_PulledOutCallback: ; 0x02084584 - stmdb sp!, {r3, lr} - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020845CC - ldr r1, _020845D4 ; =_022BC040 - ldr r0, [r1] - cmp r0, #0 - ldmneia sp!, {r3, pc} - mov r0, #1 - str r0, [r1] - ldr r1, [r1, #4] - cmp r1, #0 - beq _020845BC - blx r1 -_020845BC: - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl Card_TerminateForPulledOut - ldmia sp!, {r3, pc} -_020845CC: - bl WaitForever2 - ldmia sp!, {r3, pc} - .align 2, 0 -_020845D4: .word _022BC040 - arm_func_end CARDi_PulledOutCallback - - arm_func_start Card_SetPulledOutCallback -Card_SetPulledOutCallback: ; 0x020845D8 - ldr r1, _020845E4 ; =_022BC040 - str r0, [r1, #4] - bx lr - .align 2, 0 -_020845E4: .word _022BC040 - arm_func_end Card_SetPulledOutCallback - - arm_func_start Card_IsPulledOut -Card_IsPulledOut: ; 0x020845E8 - ldr r0, _020845F4 ; =_022BC040 - ldr r0, [r0] - bx lr - .align 2, 0 -_020845F4: .word _022BC040 - arm_func_end Card_IsPulledOut - - arm_func_start Card_TerminateForPulledOut -Card_TerminateForPulledOut: ; 0x020845F8 - stmdb sp!, {r3, r4, r5, lr} - mov r0, #0 - mov r5, #1 - bl MI_StopDma - mov r0, r5 - bl MI_StopDma - mov r0, #2 - bl MI_StopDma - mov r0, #3 - bl MI_StopDma - ldr r0, _0208467C ; =0x027FFFA8 - ldrh r0, [r0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - beq _02084660 - bl PM_ForceToPowerOff - cmp r0, #4 - bne _02084658 - ldr r4, _02084680 ; =0x000A3A47 -_02084644: - mov r0, r4 - bl OS_SpinWait - bl PM_ForceToPowerOff - cmp r0, #4 - beq _02084644 -_02084658: - cmp r0, #0 - moveq r5, #0 -_02084660: - cmp r5, #0 - beq _02084674 - mov r0, #1 - mov r1, r0 - bl Cardi_SendtoPxi -_02084674: - bl WaitForever2 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0208467C: .word 0x027FFFA8 -_02084680: .word 0x000A3A47 - arm_func_end Card_TerminateForPulledOut - - arm_func_start Cardi_CheckPulledOutCore -Cardi_CheckPulledOutCore: ; 0x02084684 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr r2, _020846E0 ; =0x027FFC10 - ldrh r1, [r2] - cmp r1, #0 - subeq r1, r2, #0x410 - subne r1, r2, #0x10 - ldr r1, [r1] - str r1, [sp] - ldr r1, [sp] - cmp r0, r1 - addeq sp, sp, #4 - ldmeqia sp!, {r3, r4, pc} - bl EnableIrqFlag - mov r4, r0 - mov r0, #0xe - mov r1, #0x11 - mov r2, #0 - bl CARDi_PulledOutCallback - mov r0, r4 - bl SetIrqFlag - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_020846E0: .word 0x027FFC10 - arm_func_end Cardi_CheckPulledOutCore - - arm_func_start Cardi_SendtoPxi -Cardi_SendtoPxi: ; 0x020846E4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r1, r7 - mov r0, #0xe - mov r2, #0 - bl PXI_SendWordByFifo - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r5, #0xe - mov r4, #0 -_02084710: - mov r0, r6 - blx SVC_WaitByLoop - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _02084710 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end Cardi_SendtoPxi - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ; 0x02084734 - stmdb sp!, {r3, lr} - ldr r1, _02084760 ; =_022BC04C - mov r3, #0 - ldr r2, _02084764 ; =0x05000001 - add r0, sp, #0 - str r3, [sp] - blx SVC_CpuSet - bl OS_GetLockID - ldr r1, _02084768 ; =_022BC048 - strh r0, [r1, #6] - ldmia sp!, {r3, pc} - .align 2, 0 -_02084760: .word _022BC04C -_02084764: .word 0x05000001 -_02084768: .word _022BC048 - arm_func_end CTRDGi_InitCommon - - arm_func_start Ctrdg_IsOptionCartridge -Ctrdg_IsOptionCartridge: ; 0x0208476C - stmdb sp!, {r3, lr} - bl Ctrdg_IsExisting - cmp r0, #0 - beq _0208478C - bl Ctrdgi_IsAgbCartridgeAtInit - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r3, pc} -_0208478C: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end Ctrdg_IsOptionCartridge - - arm_func_start Ctrdgi_IsAgbCartridgeAtInit -Ctrdgi_IsAgbCartridgeAtInit: ; 0x02084794 - ldr r0, _020847A8 ; =0x027FFC30 - ldrb r0, [r0, #5] - mov r0, r0, lsl #0x1f - mov r0, r0, lsr #0x1f - bx lr - .align 2, 0 -_020847A8: .word 0x027FFC30 - arm_func_end Ctrdgi_IsAgbCartridgeAtInit - - arm_func_start Ctrdg_IsExisting -Ctrdg_IsExisting: ; 0x020847AC - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr r2, _020848AC ; =0x027FFC30 - mov r4, #1 - ldrh r1, [r2] - rsb r0, r4, #0x10000 - cmp r1, r0 - addeq sp, sp, #0x10 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldrb r0, [r2, #5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - cmp r0, #1 - addeq sp, sp, #0x10 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _020848B0 ; =_022BC048 - add r1, sp, #8 - ldrh r0, [r0, #6] - bl CTRDGi_LockByProcessor - add r0, sp, #0 - bl CTRDGi_ChangeLatestAccessCycle - mov r0, #0x8000000 - ldrb r2, [r0, #0xb2] - cmp r2, #0x96 - bne _0208482C - ldr r1, _020848AC ; =0x027FFC30 - ldrh r0, [r0, #0xbe] - ldrh r1, [r1] - cmp r1, r0 - bne _02084874 -_0208482C: - cmp r2, #0x96 - beq _0208484C - ldr r1, _020848AC ; =0x027FFC30 - ldr r0, _020848B4 ; =0x0801FFFE - ldrh r1, [r1] - ldrh r0, [r0] - cmp r1, r0 - bne _02084874 -_0208484C: - ldr r2, _020848AC ; =0x027FFC30 - mov r0, #0x8000000 - ldr r1, [r2, #8] - ldr r0, [r0, #0xac] - cmp r1, r0 - beq _02084888 - ldrb r0, [r2, #5] - mov r0, r0, lsl #0x1f - movs r0, r0, lsr #0x1f - beq _02084888 -_02084874: - ldr r1, _020848AC ; =0x027FFC30 - mov r4, #0 - ldrb r0, [r1, #5] - orr r0, r0, #2 - strb r0, [r1, #5] -_02084888: - add r0, sp, #0 - bl CTRDGi_RestoreAccessCycle - ldr r0, _020848B0 ; =_022BC048 - add r1, sp, #8 - ldrh r0, [r0, #6] - bl CTRDGi_UnlockByProcessor - mov r0, r4 - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_020848AC: .word 0x027FFC30 -_020848B0: .word _022BC048 -_020848B4: .word 0x0801FFFE - arm_func_end Ctrdg_IsExisting - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ; 0x020848B8 - ldr r2, _020848FC ; =0x04000204 - ldrh r1, [r2] - and r1, r1, #0xc - mov r1, r1, asr #2 - str r1, [r0] - ldrh r1, [r2] - and r1, r1, #0x10 - mov r1, r1, asr #4 - str r1, [r0, #4] - ldrh r0, [r2] - bic r0, r0, #0xc - orr r0, r0, #0xc - strh r0, [r2] - ldrh r0, [r2] - bic r0, r0, #0x10 - strh r0, [r2] - bx lr - .align 2, 0 -_020848FC: .word 0x04000204 - arm_func_end CTRDGi_ChangeLatestAccessCycle - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ; 0x02084900 - ldr r3, _02084930 ; =0x04000204 - ldr r2, [r0] - ldrh r1, [r3] - bic r1, r1, #0xc - orr r1, r1, r2, lsl #2 - strh r1, [r3] - ldrh r1, [r3] - ldr r2, [r0, #4] - bic r0, r1, #0x10 - orr r0, r0, r2, lsl #4 - strh r0, [r3] - bx lr - .align 2, 0 -_02084930: .word 0x04000204 - arm_func_end CTRDGi_RestoreAccessCycle - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ; 0x02084934 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r5, _0208498C ; =0x027FFFE8 - mov r7, r0 - mov r6, r1 - mov r4, #1 -_02084948: - bl EnableIrqFlag - str r0, [r6, #4] - mov r0, r5 - bl OS_ReadOwnerOfLockWord - ands r0, r0, #0x40 - str r0, [r6] - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - bl OS_TryLockCartridge - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, [r6, #4] - bl SetIrqFlag - mov r0, r4 - blx SVC_WaitByLoop - b _02084948 -_02084988: - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0208498C: .word 0x027FFFE8 - arm_func_end CTRDGi_LockByProcessor - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ; 0x02084990 - stmdb sp!, {r4, lr} - mov r4, r1 - ldr r1, [r4] - cmp r1, #0 - bne _020849A8 - bl OS_UnlockCartridgeVeneer -_020849A8: - ldr r0, [r4, #4] - bl SetIrqFlag - ldmia sp!, {r4, pc} - arm_func_end CTRDGi_UnlockByProcessor - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ; 0x020849B4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r1, r7 - mov r0, #0xd - mov r2, #0 - bl PXI_SendWordByFifo - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r6, #1 - mov r5, #0xd - mov r4, #0 -_020849E0: - mov r0, r6 - blx SVC_WaitByLoop - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _020849E0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CTRDGi_SendtoPxi - - arm_func_start Ctrdg_Enable -Ctrdg_Enable: ; 0x02084A04 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl EnableIrqFlag - ldr r1, _02084A48 ; =_022BC048 - mov r4, r0 - str r5, [r1] - bl Ctrdg_IsOptionCartridge - cmp r0, #0 - bne _02084A3C - cmp r5, #0 - movne r1, #0x1000 - moveq r1, #0x5000 - mov r0, #0xf000 - bl OS_SetDPermissionsForProtectionRegion -_02084A3C: - mov r0, r4 - bl SetIrqFlag - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02084A48: .word _022BC048 - arm_func_end Ctrdg_Enable - - arm_func_start CTRDG_Init -CTRDG_Init: ; 0x02084A4C - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _02084AEC ; =_022BC060 - ldr r1, [r0, #8] - cmp r1, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r1, #1 - str r1, [r0, #8] - bl CTRDGi_InitCommon - ldr r0, _02084AEC ; =_022BC060 - mov r1, #0 - str r1, [r0, #0xc] - bl PXI_Init - mov r5, #0xd - mov r4, #1 -_02084A84: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0 - beq _02084A84 - ldr r1, _02084AF0 ; =CTRDGi_CallbackForInitModuleInfo - mov r0, #0xd - bl PXI_SetFifoRecvCallback - bl CTRDGi_InitModuleInfo - mov r0, #0xd - mov r1, #0 - bl PXI_SetFifoRecvCallback - ldr r1, _02084AF4 ; =CTRDGi_PulledOutCallback - mov r0, #0xd - bl PXI_SetFifoRecvCallback - ldr r1, _02084AEC ; =_022BC060 - mov r2, #0 - ldr r0, _02084AF8 ; =_022BC140 - str r2, [r1, #0x18] - bl Ctrdgi_InitTaskThread - ldr r1, _02084AFC ; =_02084D90 - mov r0, #0x11 - bl PXI_SetFifoRecvCallback - mov r0, #0 - bl Ctrdg_Enable - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02084AEC: .word _022BC060 -_02084AF0: .word CTRDGi_CallbackForInitModuleInfo -_02084AF4: .word CTRDGi_PulledOutCallback -_02084AF8: .word _022BC140 -_02084AFC: .word Ctrdgi_CallbackForSetPhi - arm_func_end CTRDG_Init - - arm_func_start CTRDGi_InitModuleInfo -CTRDGi_InitModuleInfo: ; 0x02084B00 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - ldr r0, _02084CC8 ; =_022BC060 - ldr r1, [r0] - cmp r1, #0 - addne sp, sp, #0x10 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r1, _02084CCC ; =0x04000300 - mov r2, #1 - ldrh r1, [r1] - str r2, [r0] - tst r1, #1 - addeq sp, sp, #0x10 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r3, _02084CD0 ; =0x04000208 - mov r2, #1 - ldrh r5, [r3] - ldr r1, _02084CD4 ; =_022BC04C - mov r4, r0 - strh r2, [r3] - ldrh r0, [r1, #2] - add r1, sp, #8 - bl CTRDGi_LockByProcessor - ldr r1, _02084CD8 ; =0x04000204 - add r0, sp, #0 - ldrh r1, [r1] - and r1, r1, #0x8000 - mov r6, r1, asr #0xf - bl CTRDGi_ChangeLatestAccessCycle - ldr r3, _02084CD8 ; =0x04000204 - ldr r0, _02084CDC ; =_022BC080 - ldrh r2, [r3] - add r0, r0, #0x80 - mov r1, #0x40 - bic r2, r2, #0x8000 - strh r2, [r3] - bl DC_InvalidateRange - ldr r2, _02084CDC ; =_022BC080 - ldr r1, _02084CE0 ; =0x08000080 - mov r0, #1 - mov r3, #0x40 - add r2, r2, #0x80 - bl MI_DmaCopy16 - ldr r2, _02084CD8 ; =0x04000204 - add r0, sp, #0 - ldrh r1, [r2] - bic r1, r1, #0x8000 - orr r1, r1, r6, lsl #15 - strh r1, [r2] - bl CTRDGi_RestoreAccessCycle - ldr r0, _02084CD4 ; =_022BC04C - add r1, sp, #8 - ldrh r0, [r0, #2] - bl CTRDGi_UnlockByProcessor - ldr r1, _02084CE4 ; =0x027FFF9B - ldrb r0, [r1] - cmp r0, #0 - bne _02084BFC - ldrb r0, [r1, #-1] - cmp r0, #0 - bne _02084C60 -_02084BFC: - ldr r3, _02084CDC ; =_022BC080 - ldr r6, _02084CE8 ; =0x027FFC30 - ldrh r0, [r3, #0xbe] - mov r2, #0 - strh r0, [r6] - b _02084C28 -_02084C14: - add r0, r3, r2 - ldrb r1, [r0, #0xb5] - add r0, r6, r2 - add r2, r2, #1 - strb r1, [r0, #2] -_02084C28: - cmp r2, #3 - blt _02084C14 - ldrh r0, [r3, #0xb0] - strh r0, [r6, #6] - ldr r0, [r3, #0xac] - str r0, [r6, #8] - bl Ctrdg_IsExisting - cmp r0, #0 - movne r2, #1 - ldr r1, _02084CE4 ; =0x027FFF9B - moveq r2, #0 - mov r0, #1 - strb r2, [r1] - strb r0, [r1, #-1] -_02084C60: - ldr r0, _02084CEC ; =0xFFFF0020 - ldr r1, _02084CF0 ; =_022BC084 - mov r2, #0x9c - bl MTi_CpuCopy32 - bl DC_FlushAll - ldr r0, _02084CDC ; =_022BC080 - add r0, r0, #0xfe000000 - mov r0, r0, lsr #5 - mov r0, r0, lsl #6 - orr r0, r0, #1 - bl CTRDGi_SendtoPxi - mov r7, #1 - ldr r6, _02084CD4 ; =_022BC04C - b _02084CA0 -_02084C98: - mov r0, r7 - blx SVC_WaitByLoop -_02084CA0: - ldrh r0, [r6] - cmp r0, #1 - bne _02084C98 - ldr r2, _02084CD0 ; =0x04000208 - mov r0, r4 - ldrh r1, [r2] - strh r5, [r2] - bl OS_SetIrqMask - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02084CC8: .word _022BC060 -_02084CCC: .word 0x04000300 -_02084CD0: .word 0x04000208 -_02084CD4: .word _022BC04C -_02084CD8: .word 0x04000204 -_02084CDC: .word _022BC080 -_02084CE0: .word 0x08000080 -_02084CE4: .word 0x027FFF9B -_02084CE8: .word 0x027FFC30 -_02084CEC: .word 0xFFFF0020 -_02084CF0: .word _022BC084 - arm_func_end CTRDGi_InitModuleInfo - - arm_func_start CTRDGi_CallbackForInitModuleInfo -CTRDGi_CallbackForInitModuleInfo: ; 0x02084CF4 - stmdb sp!, {r3, lr} - and r0, r1, #0x3f - cmp r0, #1 - bne _02084D14 - ldr r0, _02084D1C ; =_022BC04C - mov r1, #1 - strh r1, [r0] - ldmia sp!, {r3, pc} -_02084D14: - bl WaitForever2 - ldmia sp!, {r3, pc} - .align 2, 0 -_02084D1C: .word _022BC04C - arm_func_end CTRDGi_CallbackForInitModuleInfo - - arm_func_start CTRDGi_PulledOutCallback -CTRDGi_PulledOutCallback: ; 0x02084D20 - stmdb sp!, {r3, lr} - and r0, r1, #0x3f - cmp r0, #0x11 - bne _02084D70 - ldr r0, _02084D78 ; =_022BC060 - ldr r1, [r0, #0xc] - cmp r1, #0 - ldmneia sp!, {r3, pc} - ldr r1, [r0, #0x18] - mov r0, #0 - cmp r1, #0 - beq _02084D54 - blx r1 -_02084D54: - cmp r0, #0 - beq _02084D60 - bl CTRDG_TerminateForPulledOut -_02084D60: - ldr r0, _02084D78 ; =_022BC060 - mov r1, #1 - str r1, [r0, #0xc] - ldmia sp!, {r3, pc} -_02084D70: - bl WaitForever2 - ldmia sp!, {r3, pc} - .align 2, 0 -_02084D78: .word _022BC060 - arm_func_end CTRDGi_PulledOutCallback - - arm_func_start CTRDG_TerminateForPulledOut -CTRDG_TerminateForPulledOut: ; 0x02084D7C - stmdb sp!, {r3, lr} - mov r0, #2 - bl CTRDGi_SendtoPxi - bl WaitForever2 - ldmia sp!, {r3, pc} - arm_func_end CTRDG_TerminateForPulledOut - - arm_func_start Ctrdgi_CallbackForSetPhi -Ctrdgi_CallbackForSetPhi: ; 0x02084D90 - ldr r0, _02084DA0 ; =_022BC060 - mov r1, #0 - str r1, [r0, #4] - bx lr - .align 2, 0 -_02084DA0: .word _022BC060 - arm_func_end Ctrdgi_CallbackForSetPhi - - arm_func_start Ctrdgi_InitTaskThread -Ctrdgi_InitTaskThread: ; 0x02084DA4 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r5, r0 - bl EnableIrqFlag - ldr r1, _02084E20 ; =_022BC228 - mov r4, r0 - ldr r0, [r1] - cmp r0, #0 - bne _02084E10 - add r0, r5, #0xc4 - str r5, [r1] - bl Ctrdgi_InitTaskInfo - ldr r0, _02084E24 ; =_022BC22C - bl Ctrdgi_InitTaskInfo - mov r0, #0 - str r0, [r5, #0xc0] - mov r2, #0x400 - ldr r1, _02084E28 ; =Ctrdgi_TaskThread - ldr r3, _02084E2C ; =_022BC650 - mov r0, r5 - str r2, [sp] - mov r2, #0x14 - str r2, [sp, #4] - mov r2, r5 - bl OS_CreateThread - mov r0, r5 - bl OS_WakeupThreadDirect -_02084E10: - mov r0, r4 - bl SetIrqFlag - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02084E20: .word _022BC228 -_02084E24: .word _022BC22C -_02084E28: .word Ctrdgi_TaskThread -_02084E2C: .word _022BC650 - arm_func_end Ctrdgi_InitTaskThread - - arm_func_start Ctrdgi_InitTaskInfo -Ctrdgi_InitTaskInfo: ; 0x02084E30 - ldr ip, _02084E40 ; =MI_CpuFill8 - mov r1, #0 - mov r2, #0x24 - bx ip - .align 2, 0 -_02084E40: .word MI_CpuFill8 - arm_func_end Ctrdgi_InitTaskInfo - - arm_func_start Ctrdgi_TaskThread -Ctrdgi_TaskThread: ; 0x02084E44 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x24 - mov r4, #0 - mov r8, r0 - add r6, sp, #0 - mov sl, r4 - mov sb, r4 - mov r5, r4 - mov fp, #0x24 -_02084E68: - mov r0, r6 - mov r1, r5 - mov r2, fp - bl MI_CpuFill8 - bl EnableIrqFlag - ldr r1, [r8, #0xc0] - mov r7, r0 - cmp r1, #0 - bne _02084EA0 -_02084E8C: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r8, #0xc0] - cmp r0, #0 - beq _02084E8C -_02084EA0: - ldr lr, [r8, #0xc0] - add ip, sp, #0 - ldmia lr!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - ldmia lr!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - ldr r1, [lr] - mov r0, r7 - str r1, [ip] - bl SetIrqFlag - ldr r1, [sp] - cmp r1, #0 - beq _02084EE0 - mov r0, r6 - blx r1 - str r0, [sp, #8] -_02084EE0: - bl EnableIrqFlag - ldr r2, [sp, #4] - ldr r1, _02084F30 ; =_022BC228 - mov r7, r0 - strb sl, [r1, #0x26] - cmp r2, #0 - beq _02084F04 - mov r0, r6 - blx r2 -_02084F04: - ldr r0, _02084F30 ; =_022BC228 - ldr r0, [r0] - cmp r0, #0 - beq _02084F24 - mov r0, r7 - str sb, [r8, #0xc0] - bl SetIrqFlag - b _02084E68 -_02084F24: - bl OS_ExitThread - add sp, sp, #0x24 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02084F30: .word _022BC228 - arm_func_end Ctrdgi_TaskThread - - arm_func_start Math_CountPopulation -Math_CountPopulation: ; 0x02084F34 - ldr r1, _02084F6C ; =0x55555555 - ldr r2, _02084F70 ; =0x33333333 - and r1, r1, r0, lsr #1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #2 - add r1, r1, r0 - ldr r0, _02084F74 ; =0x0F0F0F0F - add r1, r1, r1, lsr #4 - and r0, r1, r0 - add r0, r0, r0, lsr #8 - add r0, r0, r0, lsr #16 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02084F6C: .word 0x55555555 -_02084F70: .word 0x33333333 -_02084F74: .word 0x0F0F0F0F - arm_func_end Math_CountPopulation - - arm_func_start Math_CalcSha1 -Math_CalcSha1: ; 0x02084F78 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0 - mov r5, r1 - mov r4, r2 - bl Dgt_Hash2Init - add r0, sp, #0 - mov r1, r5 - mov r2, r4 - bl Dgt_Hash2Update - add r0, sp, #0 - mov r1, r6 - bl Dgt_Hash2GetHash - add sp, sp, #0x68 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end Math_CalcSha1 - - arm_func_start Mathi_Crc8InitTable -Mathi_Crc8InitTable: ; 0x02084FB8 - stmdb sp!, {r3, lr} - mov ip, #0 - mov r2, ip -_02084FC4: - mov r3, ip - mov lr, r2 -_02084FCC: - tst r3, #0x80 - eorne r3, r1, r3, lsl #1 - add lr, lr, #1 - moveq r3, r3, lsl #1 - cmp lr, #8 - blo _02084FCC - strb r3, [r0, ip] - add ip, ip, #1 - cmp ip, #0x100 - blo _02084FC4 - ldmia sp!, {r3, pc} - arm_func_end Mathi_Crc8InitTable - - arm_func_start Mathi_Crc8Update -Mathi_Crc8Update: ; 0x02084FF8 - stmdb sp!, {r4, lr} - cmp r3, #0 - ldrb lr, [r1] - mov r4, #0 - bls _02085028 -_0208500C: - ldrb ip, [r2], #1 - add r4, r4, #1 - cmp r4, r3 - eor ip, lr, ip - and ip, ip, #0xff - ldrb lr, [r0, ip] - blo _0208500C -_02085028: - strb lr, [r1] - ldmia sp!, {r4, pc} - arm_func_end Mathi_Crc8Update - - arm_func_start Mathi_Crc16InitTable -Mathi_Crc16InitTable: ; 0x02085030 - stmdb sp!, {r3, lr} - mov lr, #0 - mov r3, lr -_0208503C: - mov ip, lr - mov r2, r3 -_02085044: - tst ip, #1 - eorne ip, r1, ip, lsr #1 - add r2, r2, #1 - moveq ip, ip, lsr #1 - cmp r2, #8 - blo _02085044 - mov r2, lr, lsl #1 - add lr, lr, #1 - strh ip, [r0, r2] - cmp lr, #0x100 - blo _0208503C - ldmia sp!, {r3, pc} - arm_func_end Mathi_Crc16InitTable - - arm_func_start Mathi_Crc16Update -Mathi_Crc16Update: ; 0x02085074 - stmdb sp!, {r4, lr} - cmp r3, #0 - ldrh lr, [r1] - mov r4, #0 - bls _020850AC -_02085088: - ldrb ip, [r2], #1 - add r4, r4, #1 - cmp r4, r3 - eor ip, lr, ip - mov ip, ip, lsl #0x18 - mov ip, ip, lsr #0x17 - ldrh ip, [r0, ip] - eor lr, ip, lr, lsr #8 - blo _02085088 -_020850AC: - strh lr, [r1] - ldmia sp!, {r4, pc} - arm_func_end Mathi_Crc16Update - - arm_func_start Mathi_Crc32InitTable -Mathi_Crc32InitTable: ; 0x020850B4 - stmdb sp!, {r3, lr} - mov ip, #0 - mov r2, ip -_020850C0: - mov r3, ip - mov lr, r2 -_020850C8: - tst r3, #1 - eorne r3, r1, r3, lsr #1 - add lr, lr, #1 - moveq r3, r3, lsr #1 - cmp lr, #8 - blo _020850C8 - str r3, [r0, ip, lsl #2] - add ip, ip, #1 - cmp ip, #0x100 - blo _020850C0 - ldmia sp!, {r3, pc} - arm_func_end Mathi_Crc32InitTable - - arm_func_start Mathi_Crc32Update -Mathi_Crc32Update: ; 0x020850F4 - stmdb sp!, {r4, lr} - cmp r3, #0 - ldr lr, [r1] - mov r4, #0 - bls _02085128 -_02085108: - ldrb ip, [r2], #1 - add r4, r4, #1 - cmp r4, r3 - eor ip, lr, ip - and ip, ip, #0xff - ldr ip, [r0, ip, lsl #2] - eor lr, ip, lr, lsr #8 - blo _02085108 -_02085128: - str lr, [r1] - ldmia sp!, {r4, pc} - arm_func_end Mathi_Crc32Update - - arm_func_start Math_CalcCrc8 -Math_CalcCrc8: ; 0x02085130 - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, #0 - mov r3, r2 - add r1, sp, #0 - mov r2, lr - strb ip, [sp] - bl Mathi_Crc8Update - ldrb r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end Math_CalcCrc8 - - arm_func_start Math_CalcCrc16 -Math_CalcCrc16: ; 0x02085158 - stmdb sp!, {r3, lr} - mov lr, r1 - mov ip, #0 - mov r3, r2 - add r1, sp, #0 - mov r2, lr - strh ip, [sp] - bl Mathi_Crc16Update - ldrh r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end Math_CalcCrc16 - - arm_func_start Math_CalcCrc32 -Math_CalcCrc32: ; 0x02085180 - stmdb sp!, {r3, lr} - mov lr, r1 - mvn ip, #0 - mov r3, r2 - add r1, sp, #0 - mov r2, lr - str ip, [sp] - bl Mathi_Crc32Update - ldr r0, [sp] - mvn r0, r0 - ldmia sp!, {r3, pc} - arm_func_end Math_CalcCrc32 - - arm_func_start sub_020851AC -sub_020851AC: ; 0x020851AC - stmdb sp!, {r4, lr} - sub sp, sp, #8 - movs r4, r0 - addeq sp, sp, #8 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldrh r0, [r4, #0x3c] - cmp r0, #0 - addeq sp, sp, #8 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - add r1, sp, #0 - add r0, r4, #0x50 - mov r2, #8 - bl MI_CpuCopy8 - add r0, sp, #0 - mov r1, #8 - bl DC_StoreRange - ldr r0, [r4, #0x44] - cmp r0, #0 - bne _02085230 - ldrh r1, [sp] - ldr r0, _0208523C ; =0x00002348 - cmp r1, r0 - ldrneh r1, [sp] - ldrne r0, _02085240 ; =0x0000BD8A - cmpne r1, r0 - bne _02085230 - ldrh r0, [sp, #6] - cmp r0, #4 - addeq sp, sp, #8 - moveq r0, #1 - ldmeqia sp!, {r4, pc} -_02085230: - mov r0, #0 - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_0208523C: .word 0x00002348 -_02085240: .word 0x0000BD8A - arm_func_end sub_020851AC - - arm_func_start Std_CopyLString -Std_CopyLString: ; 0x02085244 - stmdb sp!, {r4, lr} - sub ip, r2, #1 - mov r4, r1 - cmp ip, #0 - mov lr, #0 - ble _02085280 -_0208525C: - ldrsb r3, [r4] - strb r3, [r0, lr] - ldrsb r3, [r4] - cmp r3, #0 - beq _02085280 - add lr, lr, #1 - cmp lr, ip - add r4, r4, #1 - blt _0208525C -_02085280: - sub r3, r2, #1 - cmp lr, r3 - blt _02085298 - cmp r2, #0 - movne r2, #0 - strneb r2, [r0, lr] -_02085298: - mov r0, r1 - bl Std_GetStringLength - ldmia sp!, {r4, pc} - arm_func_end Std_CopyLString - - arm_func_start Std_GetStringLength -Std_GetStringLength: ; 0x020852A4 - ldrsb r1, [r0] - mov r2, #0 - cmp r1, #0 - beq _020852C4 -_020852B4: - add r2, r2, #1 - ldrsb r1, [r0, r2] - cmp r1, #0 - bne _020852B4 -_020852C4: - mov r0, r2 - bx lr - arm_func_end Std_GetStringLength - - arm_func_start Std_CompareString__020852CC -Std_CompareString__020852CC: ; 0x020852CC - b _020852D8 -_020852D0: - add r0, r0, #1 - add r1, r1, #1 -_020852D8: - ldrsb r3, [r1] - ldrsb r2, [r0] - cmp r2, r3 - bne _020852F0 - cmp r2, #0 - bne _020852D0 -_020852F0: - sub r0, r2, r3 - bx lr - arm_func_end Std_CompareString__020852CC - - arm_func_start Std_CompareNString -Std_CompareNString: ; 0x020852F8 - stmdb sp!, {r3, lr} - cmp r2, #0 - beq _02085330 - cmp r2, #0 - mov lr, #0 - ble _02085330 -_02085310: - ldrb ip, [r0, lr] - ldrb r3, [r1, lr] - cmp ip, r3 - subne r0, ip, r3 - ldmneia sp!, {r3, pc} - add lr, lr, #1 - cmp lr, r2 - blt _02085310 -_02085330: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end Std_CompareNString - - arm_func_start Std_TsScanf -Std_TsScanf: ; 0x02085338 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r2, sp, #0xc - bic r2, r2, #3 - ldr r1, [sp, #0xc] - add r2, r2, #4 - bl Std_TvsScanf - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end Std_TsScanf - - arm_func_start Stdi_IsSpace -Stdi_IsSpace: ; 0x02085360 - sub r3, r0, #9 - cmp r3, #0x17 - mov r0, #0 - bxhi lr - ldr r1, _02085384 ; =0x0080001F - mov r2, #1 - tst r1, r2, lsl r3 - movne r0, r2 - bx lr - .align 2, 0 -_02085384: .word 0x0080001F - arm_func_end Stdi_IsSpace - - arm_func_start Stdi_FillBitset -Stdi_FillBitset: ; 0x02085388 - stmdb sp!, {r3, r4, r5, lr} - cmp r1, r2 - ldmhsia sp!, {r3, r4, r5, pc} - and r3, r2, #0x1f - mov ip, #1 - mov r3, ip, lsl r3 - sub r5, r3, #1 - mvn ip, #0 -_020853A8: - and r3, r1, #0x1f - mov lr, r1, lsr #5 - mov r4, ip, lsl r3 - add r1, lr, #1 - cmp r2, r1, lsl #5 - ldr r3, [r0, lr, lsl #2] - andlo r4, r4, r5 - mov r1, r1, lsl #5 - orr r3, r3, r4 - cmp r1, r2 - str r3, [r0, lr, lsl #2] - blo _020853A8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end Stdi_FillBitset - - arm_func_start Std_TvsScanf -Std_TvsScanf: ; 0x020853DC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x34 - mov r8, r1 - ldrsb r4, [r8] - mov sb, r0 - mov r0, #0 - str r0, [sp, #0xc] - str r2, [sp] - str sb, [sp, #0x10] - str r0, [sp, #4] - cmp r4, #0 - beq _02085AD4 -_0208540C: - mov r0, r4 - bl Stdi_IsSpace - cmp r0, #0 - beq _02085460 - ldrsb r0, [r8] - bl Stdi_IsSpace - cmp r0, #0 - beq _0208543C -_0208542C: - ldrsb r0, [r8, #1]! - bl Stdi_IsSpace - cmp r0, #0 - bne _0208542C -_0208543C: - ldrsb r0, [sb] - bl Stdi_IsSpace - cmp r0, #0 - beq _02085AC8 -_0208544C: - ldrsb r0, [sb, #1]! - bl Stdi_IsSpace - cmp r0, #0 - bne _0208544C - b _02085AC8 -_02085460: - cmp r4, #0x25 - beq _020854A0 - ldrsb r0, [sb] - cmp r4, r0 - bne _02085AD4 - and r0, r4, #0xff - eor r0, r0, #0x20 - sub r0, r0, #0xa1 - cmp r0, #0x3c - bhs _02085494 - ldrsb r0, [sb, #1]! - cmp r4, r0 - bne _02085AD4 -_02085494: - add sb, sb, #1 - add r8, r8, #1 - b _02085AC8 -_020854A0: - ldrsb r0, [r8, #1] - cmp r0, #0x25 - bne _020854C0 - ldrsb r0, [sb] - cmp r4, r0 - bne _02085AD4 - add r8, r8, #2 - b _02085AC8 -_020854C0: - ldrsb r0, [r8, #1]! - mov sl, #0 - mov r5, sl - cmp r0, #0x2a - mov fp, sl - mov r6, sl - orreq r5, sl, #0x2000 - ldreqsb r0, [r8, #1]! - mov r1, #0xa - b _020854F4 -_020854E8: - mla r2, r6, r1, r0 - ldrsb r0, [r8, #1]! - sub r6, r2, #0x30 -_020854F4: - cmp r0, #0x30 - blt _02085504 - cmp r0, #0x39 - ble _020854E8 -_02085504: - cmp r0, #0x68 - beq _02085518 - cmp r0, #0x6c - beq _02085530 - b _02085544 -_02085518: - ldrsb r0, [r8, #1]! - cmp r0, #0x68 - orrne r5, r5, #0x40 - orreq r5, r5, #0x100 - ldreqsb r0, [r8, #1]! - b _02085544 -_02085530: - ldrsb r0, [r8, #1]! - cmp r0, #0x6c - orrne r5, r5, #0x20 - ldreqsb r0, [r8, #1]! - orreq r5, r5, #0x80 -_02085544: - cmp r0, #0x69 - bgt _02085590 - cmp r0, #0x64 - blt _02085564 - beq _020855D8 - cmp r0, #0x69 - beq _020855E0 - b _02085AD4 -_02085564: - cmp r0, #0x5b - bgt _02085584 - cmp r0, #0x58 - blt _02085AD4 - beq _020855FC - cmp r0, #0x5b - beq _020858D0 - b _02085AD4 -_02085584: - cmp r0, #0x63 - beq _020857D8 - b _02085AD4 -_02085590: - cmp r0, #0x6e - bgt _020855A0 - beq _02085608 - b _02085AD4 -_020855A0: - sub r1, r0, #0x6f - cmp r1, #9 - addls pc, pc, r1, lsl #2 - b _02085AD4 -_020855B0: ; jump table - b _020855E8 ; case 0 - b _020855FC ; case 1 - b _02085AD4 ; case 2 - b _02085AD4 ; case 3 - b _020857D8 ; case 4 - b _02085AD4 ; case 5 - b _020855F0 ; case 6 - b _02085AD4 ; case 7 - b _02085AD4 ; case 8 - b _020855FC ; case 9 -_020855D8: - mov r4, #0xa - b _0208562C -_020855E0: - mvn r4, #0 - b _0208562C -_020855E8: - mov r4, #8 - b _0208562C -_020855F0: - orr r5, r5, #0x1000 - mov r4, #0xa - b _0208562C -_020855FC: - orr r5, r5, #0x1000 - mov r4, #0x10 - b _0208562C -_02085608: - tst r5, #0x2000 - ldreq r0, [sp, #4] - add r8, r8, #1 - subeq r0, r0, #1 - streq r0, [sp, #4] - ldr r0, [sp, #0x10] - sub sl, sb, r0 - mov fp, sl, asr #0x1f - b _0208574C -_0208562C: - ldrsb r7, [sb] - add r8, r8, #1 - mov r0, r7 - bl Stdi_IsSpace - cmp r0, #0 - beq _02085658 -_02085644: - ldrsb r7, [sb, #1]! - mov r0, r7 - bl Stdi_IsSpace - cmp r0, #0 - bne _02085644 -_02085658: - cmp r7, #0x2b - orreq r5, r5, #2 - beq _02085670 - cmp r7, #0x2d - bne _02085678 - orr r5, r5, #8 -_02085670: - ldrsb r7, [sb, #1]! - b _02085658 -_02085678: - mvn r0, #0 - cmp r4, r0 - bne _020856A4 - cmp r7, #0x30 - movne r4, #0xa - bne _020856A4 - ldrsb r0, [sb, #1] - cmp r0, #0x78 - cmpne r0, #0x58 - moveq r4, #0x10 - movne r4, #8 -_020856A4: - cmp r4, #0x10 - cmpeq r7, #0x30 - bne _020856C0 - ldrsb r0, [sb, #1] - cmp r0, #0x78 - cmpne r0, #0x58 - ldreqsb r7, [sb, #2]! -_020856C0: - cmp r6, #0 - mvneq r6, #0x80000000 - cmp r6, #0 - mov r2, #0 - ble _0208572C - mov ip, r4, asr #0x1f -_020856D8: - sub r3, r7, #0x30 - cmp r3, #0xa - blo _02085700 - sub r0, r3, #0x31 - cmp r0, #6 - sublo r3, r3, #0x27 - blo _02085700 - sub r3, r3, #0x11 - cmp r3, #6 - addlo r3, r3, #0xa -_02085700: - cmp r3, r4 - bhs _0208572C - ldrsb r7, [sb, #1]! - add r2, r2, #1 - umull r1, r0, sl, r4 - mla r0, sl, ip, r0 - adds sl, r3, r1 - mla r0, fp, r4, r0 - adc fp, r0, #0 - cmp r2, r6 - blt _020856D8 -_0208572C: - cmp r2, #0 - beq _02085AD4 - tst r5, #8 - beq _02085744 - rsbs sl, sl, #0 - rsc fp, fp, #0 -_02085744: - mov r0, #1 - str r0, [sp, #0xc] -_0208574C: - tst r5, #0x2000 - bne _02085AC8 - ldr r0, [sp, #4] - tst r5, #0x100 - add r0, r0, #1 - str r0, [sp, #4] - beq _02085780 - ldr r0, [sp] - add r0, r0, #4 - str r0, [sp] - ldr r0, [r0, #-4] - strb sl, [r0] - b _02085AC8 -_02085780: - tst r5, #0x40 - beq _020857A0 - ldr r0, [sp] - add r0, r0, #4 - str r0, [sp] - ldr r0, [r0, #-4] - strh sl, [r0] - b _02085AC8 -_020857A0: - tst r5, #0x80 - beq _020857C0 - ldr r0, [sp] - add r0, r0, #4 - str r0, [sp] - ldr r0, [r0, #-4] - stmia r0, {sl, fp} - b _02085AC8 -_020857C0: - ldr r0, [sp] - add r0, r0, #4 - str r0, [sp] - ldr r0, [r0, #-4] - str sl, [r0] - b _02085AC8 -_020857D8: - mov r1, #1 - tst r5, #0x2000 - add r8, r8, #1 - mov r4, #0 - str r1, [sp, #0xc] - bne _0208580C - ldr r1, [sp] - add r1, r1, #4 - str r1, [sp] - ldr r4, [r1, #-4] - ldr r1, [sp, #4] - add r1, r1, #1 - str r1, [sp, #4] -_0208580C: - cmp r0, #0x73 - bne _02085888 - ldrsb r5, [sb] - cmp r6, #0 - mvneq r6, #0x80000000 - mov r0, r5 - bl Stdi_IsSpace - cmp r0, #0 - beq _02085858 -_02085830: - ldrsb r5, [sb, #1]! - mov r0, r5 - bl Stdi_IsSpace - cmp r0, #0 - bne _02085830 - b _02085858 -_02085848: - cmp r4, #0 - strneb r5, [r4], #1 - ldrsb r5, [sb, #1]! - sub r6, r6, #1 -_02085858: - cmp r5, #0 - beq _02085878 - mov r0, r5 - bl Stdi_IsSpace - cmp r0, #0 - bne _02085878 - cmp r6, #0 - bgt _02085848 -_02085878: - cmp r4, #0 - movne r0, #0 - strneb r0, [r4] - b _02085AC8 -_02085888: - cmp r6, #0 - moveq r6, #1 - ldrsb r0, [sb] - b _020858A8 -_02085898: - cmp r4, #0 - strneb r0, [r4], #1 - ldrsb r0, [sb, #1]! - sub r6, r6, #1 -_020858A8: - cmp r0, #0 - beq _020858B8 - cmp r6, #0 - bgt _02085898 -_020858B8: - cmp r4, #0 - beq _02085AC8 - cmp r6, #0 - movgt r0, #0 - strgtb r0, [r4] - b _02085AC8 -_020858D0: - mov sl, #0 - mov r3, #1 - add r1, sp, #0x14 - mov r0, sl - mov r2, #0x20 - mov r7, sl - mov fp, sl - str r3, [sp, #8] - bl MTi_CpuClear32 - ldrsb r0, [r8, #1]! - cmp r0, #0x5e - moveq r0, sl - addeq r8, r8, #1 - streq r0, [sp, #8] - ldrsb r0, [r8] - cmp r0, #0x5d - bne _02085938 - and r2, r0, #0xff - mov r0, r2, lsr #5 - add r1, sp, #0x14 - ldr r4, [r1, r0, lsl #2] - and r2, r2, #0x1f - mov r3, #1 - orr r2, r4, r3, lsl r2 - str r2, [r1, r0, lsl #2] - add r8, r8, #1 -_02085938: - add r4, sp, #0x14 -_0208593C: - ldrsb r0, [r8] - cmp r0, #0 - cmpne r0, #0x5d - bne _0208598C - cmp fp, #0 - beq _0208597C - add r4, sp, #0x14 - mov r3, r7, lsr #5 - ldr r2, [r4, r3, lsl #2] - and r0, r7, #0x1f - mov r1, #1 - orr r0, r2, r1, lsl r0 - str r0, [r4, r3, lsl #2] - ldr r0, [sp, #0x18] - orr r0, r0, #0x2000 - str r0, [sp, #0x18] -_0208597C: - ldrsb r0, [r8] - cmp r0, #0x5d - addeq r8, r8, #1 - b _02085A38 -_0208598C: - cmp fp, #0 - bne _020859CC - cmp r7, #0 - beq _020859A8 - cmp r0, #0x2d - moveq fp, #1 - beq _02085A30 -_020859A8: - and r0, r0, #0xff - mov r3, r0, lsr #5 - ldr r2, [r4, r3, lsl #2] - and r1, r0, #0x1f - mov r0, #1 - orr r0, r2, r0, lsl r1 - str r0, [r4, r3, lsl #2] - ldrb r7, [r8] - b _02085A30 -_020859CC: - and r2, r0, #0xff - cmp r7, r2 - bls _02085A18 - mov r1, r7, lsr #5 - ldr fp, [r4, r1, lsl #2] - and r7, r7, #0x1f - mov r3, #1 - orr r3, fp, r3, lsl r7 - str r3, [r4, r1, lsl #2] - ldr r1, [sp, #0x18] - mov r0, r2, lsr #5 - orr r1, r1, #0x2000 - str r1, [sp, #0x18] - ldr r3, [r4, r0, lsl #2] - and r2, r2, #0x1f - mov r1, #1 - orr r1, r3, r1, lsl r2 - str r1, [r4, r0, lsl #2] - b _02085A28 -_02085A18: - mov r1, r7 - add r2, r2, #1 - mov r0, r4 - bl Stdi_FillBitset -_02085A28: - mov fp, #0 - mov r7, fp -_02085A30: - add r8, r8, #1 - b _0208593C -_02085A38: - mov r0, #1 - tst r5, #0x2000 - str r0, [sp, #0xc] - bne _02085A64 - ldr r0, [sp] - add r0, r0, #4 - str r0, [sp] - ldr sl, [r0, #-4] - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02085A64: - cmp r6, #0 - mvneq r6, #0x80000000 - ldrsb r0, [sb] - add r3, sp, #0x14 - b _02085AAC -_02085A78: - and r4, r0, #0xff - mov r1, r4, lsr #5 - ldr r2, [r3, r1, lsl #2] - and r1, r4, #0x1f - mov r1, r2, lsr r1 - and r2, r1, #1 - ldr r1, [sp, #8] - cmp r1, r2 - bne _02085ABC - cmp sl, #0 - strneb r0, [sl], #1 - ldrsb r0, [sb, #1]! - sub r6, r6, #1 -_02085AAC: - cmp r0, #0 - beq _02085ABC - cmp r6, #0 - bgt _02085A78 -_02085ABC: - cmp sl, #0 - movne r0, #0 - strneb r0, [sl] -_02085AC8: - ldrsb r4, [r8] - cmp r4, #0 - bne _0208540C -_02085AD4: - ldrsb r0, [sb] - cmp r0, #0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0 - mvneq r0, #0 - streq r0, [sp, #4] - ldr r0, [sp, #4] - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end Std_TvsScanf - - arm_func_start string_put_char -string_put_char: ; 0x02085AF8 - ldr r2, [r0] - cmp r2, #0 - beq _02085B18 - ldr r2, [r0, #4] - strb r1, [r2] - ldr r1, [r0] - sub r1, r1, #1 - str r1, [r0] -_02085B18: - ldr r1, [r0, #4] - add r1, r1, #1 - str r1, [r0, #4] - bx lr - arm_func_end string_put_char - - arm_func_start string_fill_char -string_fill_char: ; 0x02085B28 - stmdb sp!, {r3, lr} - cmp r2, #0 - ldmleia sp!, {r3, pc} - ldr lr, [r0] - mov ip, #0 - cmp lr, r2 - movhi lr, r2 - cmp lr, #0 - bls _02085B60 -_02085B4C: - ldr r3, [r0, #4] - strb r1, [r3, ip] - add ip, ip, #1 - cmp ip, lr - blo _02085B4C -_02085B60: - ldr r1, [r0] - sub r1, r1, lr - str r1, [r0] - ldr r1, [r0, #4] - add r1, r1, r2 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - arm_func_end string_fill_char - - arm_func_start string_put_string -string_put_string: ; 0x02085B7C - stmdb sp!, {r4, lr} - cmp r2, #0 - ldmleia sp!, {r4, pc} - ldr r4, [r0] - mov lr, #0 - cmp r4, r2 - movhi r4, r2 - cmp r4, #0 - bls _02085BB8 -_02085BA0: - ldrsb ip, [r1, lr] - ldr r3, [r0, #4] - strb ip, [r3, lr] - add lr, lr, #1 - cmp lr, r4 - blo _02085BA0 -_02085BB8: - ldr r1, [r0] - sub r1, r1, r4 - str r1, [r0] - ldr r1, [r0, #4] - add r1, r1, r2 - str r1, [r0, #4] - ldmia sp!, {r4, pc} - arm_func_end string_put_string - - arm_func_start OS_VsNPrintfEx -OS_VsNPrintfEx: ; 0x02085BD4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - mov sb, r2 - str r1, [sp, #0xc] - str r0, [sp, #0x14] - str r0, [sp, #0x10] - ldrsb r0, [sb] - str r1, [sp] - mov fp, r3 - cmp r0, #0 - beq _02086400 -_02085C00: - ldrsb r1, [sb] - and r0, r1, #0xff - eor r0, r0, #0x20 - sub r0, r0, #0xa1 - cmp r0, #0x3c - bhs _02085C3C - add r0, sp, #0xc - bl string_put_char - ldrsb r1, [sb, #1]! - cmp r1, #0 - beq _020863F4 - add r0, sp, #0xc - add sb, sb, #1 - bl string_put_char - b _020863F4 -_02085C3C: - cmp r1, #0x25 - beq _02085C54 - add r0, sp, #0xc - add sb, sb, #1 - bl string_put_char - b _020863F4 -_02085C54: - mov r5, #0 - mov sl, r5 - mov r2, sb - sub r6, r5, #1 - mov r0, #0xa - mov r3, #0x57 -_02085C6C: - ldrsb r4, [sb, #1]! - cmp r4, #0x20 - bgt _02085C80 - beq _02085CBC - b _02085CD4 -_02085C80: - cmp r4, #0x30 - bgt _02085CD4 - cmp r4, #0x2b - blt _02085CD4 - beq _02085CA8 - cmp r4, #0x2d - beq _02085CC4 - cmp r4, #0x30 - beq _02085CCC - b _02085CD4 -_02085CA8: - ldrsb r1, [sb, #-1] - cmp r1, #0x20 - bne _02085CD4 - orr r5, r5, #2 - b _02085C6C -_02085CBC: - orr r5, r5, #1 - b _02085C6C -_02085CC4: - orr r5, r5, #8 - b _02085C6C -_02085CCC: - orr r5, r5, #0x10 - b _02085C6C -_02085CD4: - cmp r4, #0x2a - bne _02085CF8 - add fp, fp, #4 - ldr sl, [fp, #-4] - add sb, sb, #1 - cmp sl, #0 - rsblt sl, sl, #0 - orrlt r5, r5, #8 - b _02085D20 -_02085CF8: - mov r1, #0xa - b _02085D0C -_02085D00: - ldrsb r4, [sb], #1 - mla r4, sl, r1, r4 - sub sl, r4, #0x30 -_02085D0C: - ldrsb r4, [sb] - cmp r4, #0x30 - blt _02085D20 - cmp r4, #0x39 - ble _02085D00 -_02085D20: - ldrsb r1, [sb] - cmp r1, #0x2e - bne _02085D7C - ldrsb r1, [sb, #1]! - mov r6, #0 - cmp r1, #0x2a - bne _02085D54 - add fp, fp, #4 - ldr r6, [fp, #-4] - add sb, sb, #1 - cmp r6, #0 - mvnlt r6, #0 - b _02085D7C -_02085D54: - mov r1, #0xa - b _02085D68 -_02085D5C: - ldrsb r4, [sb], #1 - mla r4, r6, r1, r4 - sub r6, r4, #0x30 -_02085D68: - ldrsb r4, [sb] - cmp r4, #0x30 - blt _02085D7C - cmp r4, #0x39 - ble _02085D5C -_02085D7C: - ldrsb r1, [sb] - cmp r1, #0x68 - beq _02085D94 - cmp r1, #0x6c - beq _02085DAC - b _02085DC0 -_02085D94: - ldrsb r1, [sb, #1]! - cmp r1, #0x68 - orrne r5, r5, #0x40 - addeq sb, sb, #1 - orreq r5, r5, #0x100 - b _02085DC0 -_02085DAC: - ldrsb r1, [sb, #1]! - cmp r1, #0x6c - orrne r5, r5, #0x20 - addeq sb, sb, #1 - orreq r5, r5, #0x80 -_02085DC0: - ldrsb r1, [sb] - cmp r1, #0x69 - bgt _02085E04 - cmp r1, #0x63 - blt _02085DE8 - beq _02085E74 - cmp r1, #0x64 - cmpne r1, #0x69 - beq _0208602C - b _02086010 -_02085DE8: - cmp r1, #0x25 - bgt _02085DF8 - beq _02085FF4 - b _02086010 -_02085DF8: - cmp r1, #0x58 - beq _02085E60 - b _02086010 -_02085E04: - cmp r1, #0x6e - bgt _02085E14 - beq _02085F9C - b _02086010 -_02085E14: - sub r1, r1, #0x6f - cmp r1, #9 - addls pc, pc, r1, lsl #2 - b _02086010 -_02085E24: ; jump table - b _02085E4C ; case 0 - b _02085E68 ; case 1 - b _02086010 ; case 2 - b _02086010 ; case 3 - b _02085EE8 ; case 4 - b _02086010 ; case 5 - b _02085E58 ; case 6 - b _02086010 ; case 7 - b _02086010 ; case 8 - b _02086024 ; case 9 -_02085E4C: - orr r5, r5, #0x1000 - mov r0, #8 - b _0208602C -_02085E58: - orr r5, r5, #0x1000 - b _0208602C -_02085E60: - mov r3, #0x37 - b _02086024 -_02085E68: - orr r5, r5, #4 - mov r6, #8 - b _02086024 -_02085E74: - cmp r6, #0 - bge _02086010 - add fp, fp, #4 - tst r5, #8 - ldr r4, [fp, #-4] - beq _02085EB0 - mov r1, r4, lsl #0x18 - add r0, sp, #0xc - mov r1, r1, asr #0x18 - bl string_put_char - add r0, sp, #0xc - sub r2, sl, #1 - mov r1, #0x20 - bl string_fill_char - b _02085EE0 -_02085EB0: - tst r5, #0x10 - movne r0, #0x30 - moveq r0, #0x20 - mov r1, r0, lsl #0x18 - add r0, sp, #0xc - mov r1, r1, asr #0x18 - sub r2, sl, #1 - bl string_fill_char - mov r1, r4, lsl #0x18 - add r0, sp, #0xc - mov r1, r1, asr #0x18 - bl string_put_char -_02085EE0: - add sb, sb, #1 - b _020863F4 -_02085EE8: - add fp, fp, #4 - cmp r6, #0 - ldr r7, [fp, #-4] - mov r4, #0 - bge _02085F20 - ldrsb r0, [r7] - cmp r0, #0 - beq _02085F34 -_02085F08: - add r4, r4, #1 - ldrsb r0, [r7, r4] - cmp r0, #0 - bne _02085F08 - b _02085F34 -_02085F1C: - add r4, r4, #1 -_02085F20: - cmp r4, r6 - bge _02085F34 - ldrsb r0, [r7, r4] - cmp r0, #0 - bne _02085F1C -_02085F34: - tst r5, #8 - sub sl, sl, r4 - beq _02085F64 - add r0, sp, #0xc - mov r1, r7 - mov r2, r4 - bl string_put_string - add r0, sp, #0xc - mov r2, sl - mov r1, #0x20 - bl string_fill_char - b _02085F94 -_02085F64: - tst r5, #0x10 - movne r0, #0x30 - moveq r0, #0x20 - mov r1, r0, lsl #0x18 - add r0, sp, #0xc - mov r2, sl - mov r1, r1, asr #0x18 - bl string_fill_char - add r0, sp, #0xc - mov r1, r7 - mov r2, r4 - bl string_put_string -_02085F94: - add sb, sb, #1 - b _020863F4 -_02085F9C: - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x14] - tst r5, #0x100 - sub r2, r1, r0 - bne _02085FEC - tst r5, #0x40 - beq _02085FC8 - add fp, fp, #4 - ldr r0, [fp, #-4] - strh r2, [r0] - b _02085FEC -_02085FC8: - add fp, fp, #4 - tst r5, #0x80 - ldreq r0, [fp, #-4] - streq r2, [r0] - beq _02085FEC - ldr r0, [fp, #-4] - mov r1, r2, asr #0x1f - str r2, [r0] - str r1, [r0, #4] -_02085FEC: - add sb, sb, #1 - b _020863F4 -_02085FF4: - add r0, r2, #1 - cmp r0, sb - bne _02086010 - add r0, sp, #0xc - add sb, sb, #1 - bl string_put_char - b _020863F4 -_02086010: - mov r1, r2 - add r0, sp, #0xc - sub r2, sb, r2 - bl string_put_string - b _020863F4 -_02086024: - orr r5, r5, #0x1000 - mov r0, #0x10 -_0208602C: - tst r5, #8 - bicne r5, r5, #0x10 - cmp r6, #0 - bicge r5, r5, #0x10 - movlt r6, #1 - mov r4, #0 - tst r5, #0x1000 - beq _020860EC - tst r5, #0x100 - beq _02086064 - add fp, fp, #4 - ldrb r7, [fp, #-4] - mov r1, #0 - b _0208609C -_02086064: - tst r5, #0x40 - beq _0208607C - add fp, fp, #4 - ldrh r7, [fp, #-4] - mov r1, #0 - b _0208609C -_0208607C: - tst r5, #0x80 - addeq fp, fp, #4 - ldreq r7, [fp, #-4] - moveq r1, #0 - beq _0208609C - add fp, fp, #8 - ldr r7, [fp, #-8] - ldr r1, [fp, #-4] -_0208609C: - bic r5, r5, #3 - tst r5, #4 - beq _020861AC - cmp r0, #0x10 - bne _020860D4 - cmp r1, #0 - cmpeq r7, #0 - beq _020861AC - add r4, r3, #0x21 - mov r2, #0x30 - strb r4, [sp, #8] - strb r2, [sp, #9] - mov r4, #2 - b _020861AC -_020860D4: - cmp r0, #8 - bne _020861AC - mov r2, #0x30 - strb r2, [sp, #8] - mov r4, #1 - b _020861AC -_020860EC: - tst r5, #0x100 - beq _02086104 - add fp, fp, #4 - ldrsb r7, [fp, #-4] - mov r1, r7, asr #0x1f - b _0208613C -_02086104: - tst r5, #0x40 - beq _0208611C - add fp, fp, #4 - ldrsh r7, [fp, #-4] - mov r1, r7, asr #0x1f - b _0208613C -_0208611C: - tst r5, #0x80 - addeq fp, fp, #4 - ldreq r7, [fp, #-4] - moveq r1, r7, asr #0x1f - beq _0208613C - add fp, fp, #8 - ldr r7, [fp, #-8] - ldr r1, [fp, #-4] -_0208613C: - mov ip, #0 - and r2, ip, #0 - and r8, r1, #0x80000000 - cmp r2, #0 - cmpeq r8, #0 - beq _02086174 - mvn r4, r7 - mov r2, #0x2d - mvn r1, r1 - strb r2, [sp, #8] - adds r7, r4, #1 - adc r1, r1, ip - mov r4, #1 - b _020861AC -_02086174: - cmp r1, ip - cmpeq r7, ip - cmpeq r6, #0 - beq _020861AC - tst r5, #2 - beq _0208619C - mov r2, #0x2b - strb r2, [sp, #8] - mov r4, #1 - b _020861AC -_0208619C: - tst r5, #1 - movne r2, #0x20 - strneb r2, [sp, #8] - movne r4, #1 -_020861AC: - cmp r0, #8 - mov r8, #0 - beq _020861CC - cmp r0, #0xa - beq _02086218 - cmp r0, #0x10 - beq _020862B0 - b _020862FC -_020861CC: - cmp r1, r8 - cmpeq r7, r8 - beq _020862FC - add r2, sp, #0x18 - mov r0, r8 - mov lr, #7 - mov ip, r8 -_020861E8: - and r3, r7, lr - add r3, r3, #0x30 - strb r3, [r2, r8] - mov r3, r1, lsr #3 - cmp r3, r0 - mov r7, r7, lsr #3 - orr r7, r7, r1, lsl #29 - mov r1, r3 - cmpeq r7, ip - add r8, r8, #1 - bne _020861E8 - b _020862FC -_02086218: - mov r0, r8 - cmp r0, r8 - cmpeq r1, r8 - bne _02086264 - cmp r7, #0 - beq _020862FC - ldr ip, _0208644C ; =0xCCCCCCCD - add r3, sp, #0x18 - mov r2, #0xa -_0208623C: - umull r1, r0, r7, ip - movs r0, r0, lsr #3 - mul r1, r0, r2 - sub r1, r7, r1 - mov r7, r0 - add r0, r1, #0x30 - strb r0, [r3, r8] - add r8, r8, #1 - bne _0208623C - b _020862FC -_02086264: - cmp r1, r8 - cmpeq r7, r8 - beq _020862FC -_02086270: - mov r0, r7 - mov r2, #0xa - mov r3, #0 - bl _ll_udiv - mov r2, #0xa - umull r3, r2, r0, r2 - subs r2, r7, r3 - add r3, r2, #0x30 - add r2, sp, #0x18 - strb r3, [r2, r8] - cmp r1, #0 - cmpeq r0, #0 - mov r7, r0 - add r8, r8, #1 - bne _02086270 - b _020862FC -_020862B0: - cmp r1, r8 - cmpeq r7, r8 - beq _020862FC - add ip, sp, #0x18 - mov lr, #0xf -_020862C4: - and r2, r7, lr - mov r7, r7, lsr #4 - mov r0, r1, lsr #4 - orr r7, r7, r1, lsl #28 - cmp r2, #0xa - mov r1, r0 - addlt r0, r2, #0x30 - addge r0, r2, r3 - strb r0, [ip, r8] - mov r0, #0 - cmp r1, r0 - cmpeq r7, r0 - add r8, r8, #1 - bne _020862C4 -_020862FC: - cmp r4, #0 - ble _02086324 - ldrsb r0, [sp, #8] - cmp r0, #0x30 - bne _02086324 - add r0, sp, #0x18 - mov r1, #0x30 - strb r1, [r0, r8] - add r8, r8, #1 - mov r4, #0 -_02086324: - tst r5, #0x10 - sub r6, r6, r8 - beq _02086340 - sub r0, sl, r8 - sub r0, r0, r4 - cmp r6, r0 - movlt r6, r0 -_02086340: - cmp r6, #0 - subgt sl, sl, r6 - add r0, r4, r8 - sub sl, sl, r0 - ands r0, r5, #8 - str r0, [sp, #4] - bne _0208636C - add r0, sp, #0xc - mov r2, sl - mov r1, #0x20 - bl string_fill_char -_0208636C: - cmp r4, #0 - ble _02086398 - add r0, sp, #8 - add r5, r0, r4 - add r7, sp, #0xc -_02086380: - ldrsb r1, [r5, #-1]! - mov r0, r7 - sub r4, r4, #1 - bl string_put_char - cmp r4, #0 - bgt _02086380 -_02086398: - add r0, sp, #0xc - mov r2, r6 - mov r1, #0x30 - bl string_fill_char - cmp r8, #0 - ble _020863D4 - add r0, sp, #0x18 - add r5, r0, r8 - add r4, sp, #0xc -_020863BC: - ldrsb r1, [r5, #-1]! - mov r0, r4 - sub r8, r8, #1 - bl string_put_char - cmp r8, #0 - bgt _020863BC -_020863D4: - ldr r0, [sp, #4] - cmp r0, #0 - beq _020863F0 - add r0, sp, #0xc - mov r2, sl - mov r1, #0x20 - bl string_fill_char -_020863F0: - add sb, sb, #1 -_020863F4: - ldrsb r0, [sb] - cmp r0, #0 - bne _02085C00 -_02086400: - ldr r0, [sp, #0xc] - cmp r0, #0 - beq _0208641C - ldr r0, [sp, #0x10] - mov r1, #0 - strb r1, [r0] - b _02086438 -_0208641C: - ldr r0, [sp] - cmp r0, #0 - beq _02086438 - ldr r1, [sp, #0x14] - mov r2, #0 - add r0, r1, r0 - strb r2, [r0, #-1] -_02086438: - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0208644C: .word 0xCCCCCCCD - arm_func_end OS_VsNPrintfEx - - arm_func_start NotANumber -NotANumber: ; 0x02086450 - ldr r0, _02086460 ; =_020B2FBC - ldr ip, _02086464 ; =_f2d - ldr r0, [r0] - bx ip - .align 2, 0 -_02086460: .word _020B2FBC -_02086464: .word _f2d - arm_func_end NotANumber - - arm_func_start _flush_line_buffered_output_files -_flush_line_buffered_output_files: ; 0x02086468 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r0, _020864F0 ; =_020B2ED4 - mov r4, #0 - mov r5, #1 - mov r8, r0 - mvn sb, #0 - mov r7, r4 - mov r6, #0x4c -_02086488: - ldr r1, [r0, #4] - mov r2, r1, lsl #0x16 - movs r2, r2, lsr #0x1d - beq _020864C8 - mov r1, r1, lsl #0x19 - mov r1, r1, lsr #0x1e - tst r1, #1 - beq _020864C8 - ldr r1, [r0, #8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #1 - bne _020864C8 - bl fflush - cmp r0, #0 - movne r4, sb -_020864C8: - cmp r5, #3 - movge r0, r7 - bge _020864E0 - mul r0, r5, r6 - add r5, r5, #1 - add r0, r8, r0 -_020864E0: - cmp r0, #0 - bne _02086488 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_020864F0: .word _020B2ED4 - arm_func_end _flush_line_buffered_output_files - - arm_func_start _flush_all -_flush_all: ; 0x020864F4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r0, _02086558 ; =_020B2ED4 - mov r4, #0 - mov r5, #1 - mov r8, r0 - mvn sb, #0 - mov r7, r4 - mov r6, #0x4c -_02086514: - ldr r1, [r0, #4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - beq _02086530 - bl fflush - cmp r0, #0 - movne r4, sb -_02086530: - cmp r5, #3 - movge r0, r7 - bge _02086548 - mul r0, r5, r6 - add r5, r5, #1 - add r0, r8, r0 -_02086548: - cmp r0, #0 - bne _02086514 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02086558: .word _020B2ED4 - arm_func_end _flush_all diff --git a/lib/MSL_C/asm/include/main_0207F894.inc b/lib/MSL_C/asm/include/main_0207F894.inc new file mode 100644 index 00000000..69d19100 --- /dev/null +++ b/lib/MSL_C/asm/include/main_0207F894.inc @@ -0,0 +1,113 @@ +#pragma once +.public _02000BC4 +.public _020AEC5C +.public _020B2BB4 +.public _020B2BB8 +.public _020B2BC0 +.public _020B2BC4 +.public _020B2C84 +.public _020B2D88 +.public _020B2E9C +.public _020B2ED0 +.public _020B2ED4 +.public _020B2FBC +.public _020B3364 +.public _022B966C +.public _022BB5EC +.public _022BB5FC +.public _022BB604 +.public _022BB60C +.public _022BB614 +.public _022BB670 +.public _022BB68C +.public _022BB6AC +.public _022BB6B8 +.public _022BB6C4 +.public _022BB6C8 +.public _022BB6D8 +.public _022BB6F0 +.public _022BB6F4 +.public _022BB718 +.public _022BB724 +.public _022BB760 +.public _022BB780 +.public _022BB7E0 +.public _022BBE00 +.public _022BBE20 +.public _022BC040 +.public _022BC048 +.public _022BC04C +.public _022BC060 +.public _022BC080 +.public _022BC084 +.public _022BC140 +.public _022BC228 +.public _022BC22C +.public _022BC650 +.public _022BCA74 +.public _f2d +.public _ll_udiv +.public CopyAndInterleave +.public DC_FlushAll +.public DC_FlushRange +.public DC_InvalidateRange +.public DC_StoreRange +.public DC_WaitWriteBufferEmpty +.public EnableIrqFlag +.public fflush +.public FileInit +.public FS_CloseFile +.public FS_InitArchive +.public FS_LoadArchive +.public FS_NotifyArchiveAsyncEnd +.public FS_OpenFileDirect +.public FS_OpenFileFast +.public FS_ReadFile +.public FS_RegisterArchiveName +.public FS_SetArchiveProc +.public FSi_FindPath +.public GetIrqFlag +.public IC_InvalidateAll +.public IC_InvalidateRange +.public MI_CpuCopy8 +.public MI_CpuFill8 +.public MI_DmaCopy16 +.public MI_StopDma +.public MIi_UncompressBackward +.public MTi_CardDmaCopy32 +.public MTi_CpuClear32 +.public MTi_CpuClearFast +.public MTi_CpuCopy32 +.public OS_DisableIrqMask +.public OS_EnableIrqMask +.public OS_GetDTCMAddress +.public OS_GetLockID +.public OS_InitMutex +.public OS_IsTickAvailable +.public OS_LockCard +.public OS_ReadOwnerOfLockWord +.public OS_ResetRequestIrqMask +.public OS_SetDPermissionsForProtectionRegion +.public OS_SetIrqFunction +.public OS_SetIrqMask +.public OS_SetThreadPriority +.public OS_SleepThread +.public OS_SpinWait +.public OS_TryLockCartridge +.public OS_UnlockCard +.public OS_UnlockCartridgeVeneer +.public OS_WakeupThread +.public OS_WakeupThreadDirect +.public OSi_ReferSymbol +.public PXI_Init +.public PXI_IsCallbackReady +.public PXI_SendWordByFifo +.public PXI_SetFifoRecvCallback +.public PXIi_HandlerRecvFifoNotEmpty +.public SetIrqFlag +.public OS_CreateThread +.public SVC_CpuSet +.public SVC_WaitByLoop +.public OS_ExitThread +.public WaitForever2 +.public WaitForInterrupt diff --git a/lib/MSL_C/asm/msl.s b/lib/MSL_C/asm/msl.s new file mode 100644 index 00000000..a5ff9b96 --- /dev/null +++ b/lib/MSL_C/asm/msl.s @@ -0,0 +1,93 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start NotANumber +NotANumber: ; 0x02086450 + ldr r0, _02086460 ; =_020B2FBC + ldr ip, _02086464 ; =_f2d + ldr r0, [r0] + bx ip + .align 2, 0 +_02086460: .word _020B2FBC +_02086464: .word _f2d + arm_func_end NotANumber + + arm_func_start _flush_line_buffered_output_files +_flush_line_buffered_output_files: ; 0x02086468 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r0, _020864F0 ; =_020B2ED4 + mov r4, #0 + mov r5, #1 + mov r8, r0 + mvn sb, #0 + mov r7, r4 + mov r6, #0x4c +_02086488: + ldr r1, [r0, #4] + mov r2, r1, lsl #0x16 + movs r2, r2, lsr #0x1d + beq _020864C8 + mov r1, r1, lsl #0x19 + mov r1, r1, lsr #0x1e + tst r1, #1 + beq _020864C8 + ldr r1, [r0, #8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #1 + bne _020864C8 + bl fflush + cmp r0, #0 + movne r4, sb +_020864C8: + cmp r5, #3 + movge r0, r7 + bge _020864E0 + mul r0, r5, r6 + add r5, r5, #1 + add r0, r8, r0 +_020864E0: + cmp r0, #0 + bne _02086488 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_020864F0: .word _020B2ED4 + arm_func_end _flush_line_buffered_output_files + + arm_func_start _flush_all +_flush_all: ; 0x020864F4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r0, _02086558 ; =_020B2ED4 + mov r4, #0 + mov r5, #1 + mov r8, r0 + mvn sb, #0 + mov r7, r4 + mov r6, #0x4c +_02086514: + ldr r1, [r0, #4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + beq _02086530 + bl fflush + cmp r0, #0 + movne r4, sb +_02086530: + cmp r5, #3 + movge r0, r7 + bge _02086548 + mul r0, r5, r6 + add r5, r5, #1 + add r0, r8, r0 +_02086548: + cmp r0, #0 + bne _02086514 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02086558: .word _020B2ED4 + arm_func_end _flush_all + diff --git a/lib/NitroSDK/asm/card_pullOut.s b/lib/NitroSDK/asm/card_pullOut.s new file mode 100644 index 00000000..dc2a0ba4 --- /dev/null +++ b/lib/NitroSDK/asm/card_pullOut.s @@ -0,0 +1,165 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x02084558 + stmdb sp!, {r3, lr} + bl PXI_Init + ldr r1, _0208457C ; =CARDi_PulledOutCallback + mov r0, #0xe + bl PXI_SetFifoRecvCallback + ldr r0, _02084580 ; =_022BC040 + mov r1, #0 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + .align 2, 0 +_0208457C: .word CARDi_PulledOutCallback +_02084580: .word _022BC040 + arm_func_end CARD_InitPulledOutCallback + + arm_func_start CARDi_PulledOutCallback +CARDi_PulledOutCallback: ; 0x02084584 + stmdb sp!, {r3, lr} + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020845CC + ldr r1, _020845D4 ; =_022BC040 + ldr r0, [r1] + cmp r0, #0 + ldmneia sp!, {r3, pc} + mov r0, #1 + str r0, [r1] + ldr r1, [r1, #4] + cmp r1, #0 + beq _020845BC + blx r1 +_020845BC: + cmp r0, #0 + ldmeqia sp!, {r3, pc} + bl Card_TerminateForPulledOut + ldmia sp!, {r3, pc} +_020845CC: + bl WaitForever2 + ldmia sp!, {r3, pc} + .align 2, 0 +_020845D4: .word _022BC040 + arm_func_end CARDi_PulledOutCallback + + arm_func_start Card_SetPulledOutCallback +Card_SetPulledOutCallback: ; 0x020845D8 + ldr r1, _020845E4 ; =_022BC040 + str r0, [r1, #4] + bx lr + .align 2, 0 +_020845E4: .word _022BC040 + arm_func_end Card_SetPulledOutCallback + + arm_func_start Card_IsPulledOut +Card_IsPulledOut: ; 0x020845E8 + ldr r0, _020845F4 ; =_022BC040 + ldr r0, [r0] + bx lr + .align 2, 0 +_020845F4: .word _022BC040 + arm_func_end Card_IsPulledOut + + arm_func_start Card_TerminateForPulledOut +Card_TerminateForPulledOut: ; 0x020845F8 + stmdb sp!, {r3, r4, r5, lr} + mov r0, #0 + mov r5, #1 + bl MI_StopDma + mov r0, r5 + bl MI_StopDma + mov r0, #2 + bl MI_StopDma + mov r0, #3 + bl MI_StopDma + ldr r0, _0208467C ; =0x027FFFA8 + ldrh r0, [r0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + beq _02084660 + bl PM_ForceToPowerOff + cmp r0, #4 + bne _02084658 + ldr r4, _02084680 ; =0x000A3A47 +_02084644: + mov r0, r4 + bl OS_SpinWait + bl PM_ForceToPowerOff + cmp r0, #4 + beq _02084644 +_02084658: + cmp r0, #0 + moveq r5, #0 +_02084660: + cmp r5, #0 + beq _02084674 + mov r0, #1 + mov r1, r0 + bl Cardi_SendtoPxi +_02084674: + bl WaitForever2 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0208467C: .word 0x027FFFA8 +_02084680: .word 0x000A3A47 + arm_func_end Card_TerminateForPulledOut + + arm_func_start Cardi_CheckPulledOutCore +Cardi_CheckPulledOutCore: ; 0x02084684 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr r2, _020846E0 ; =0x027FFC10 + ldrh r1, [r2] + cmp r1, #0 + subeq r1, r2, #0x410 + subne r1, r2, #0x10 + ldr r1, [r1] + str r1, [sp] + ldr r1, [sp] + cmp r0, r1 + addeq sp, sp, #4 + ldmeqia sp!, {r3, r4, pc} + bl EnableIrqFlag + mov r4, r0 + mov r0, #0xe + mov r1, #0x11 + mov r2, #0 + bl CARDi_PulledOutCallback + mov r0, r4 + bl SetIrqFlag + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_020846E0: .word 0x027FFC10 + arm_func_end Cardi_CheckPulledOutCore + + arm_func_start Cardi_SendtoPxi +Cardi_SendtoPxi: ; 0x020846E4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r1, r7 + mov r0, #0xe + mov r2, #0 + bl PXI_SendWordByFifo + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r5, #0xe + mov r4, #0 +_02084710: + mov r0, r6 + blx SVC_WaitByLoop + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _02084710 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end Cardi_SendtoPxi + diff --git a/lib/NitroSDK/asm/card_request.s b/lib/NitroSDK/asm/card_request.s new file mode 100644 index 00000000..4be64e0a --- /dev/null +++ b/lib/NitroSDK/asm/card_request.s @@ -0,0 +1,150 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x02084380 + stmdb sp!, {r3, lr} + cmp r0, #0xb + ldmneia sp!, {r3, pc} + cmp r2, #0 + ldmeqia sp!, {r3, pc} + ldr r2, _020843B0 ; =_022BB7E0 + ldr r1, [r2, #0x114] + ldr r0, [r2, #0x104] + bic r1, r1, #0x20 + str r1, [r2, #0x114] + bl OS_WakeupThreadDirect + ldmia sp!, {r3, pc} + .align 2, 0 +_020843B0: .word _022BB7E0 + arm_func_end CARDi_OnFifoRecv + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x020843B4 + stmdb sp!, {r4, r5, r6, lr} + ldr r5, _02084400 ; =_022BB7E0 + mov r4, #0 +_020843C0: + bl EnableIrqFlag + ldr r1, [r5, #0x114] + mov r6, r0 + tst r1, #8 + bne _020843E8 +_020843D4: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r5, #0x114] + tst r0, #8 + beq _020843D4 +_020843E8: + mov r0, r6 + bl SetIrqFlag + ldr r1, [r5, #0x40] + mov r0, r5 + blx r1 + b _020843C0 + .align 2, 0 +_02084400: .word _022BB7E0 + arm_func_end CARDi_TaskThread + + arm_func_start Cardi_Request +Cardi_Request: ; 0x02084404 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + ldr r0, [sl, #0x114] + mov sb, r1 + str r2, [sp] + tst r0, #2 + bne _02084478 + ldr r1, [sl, #0x114] + mov r0, #0xb + orr r2, r1, #2 + mov r1, #1 + str r2, [sl, #0x114] + bl PXI_IsCallbackReady + cmp r0, #0 + bne _02084468 + mov r6, #0x64 + mov r5, #0xb + mov r4, #1 +_0208444C: + mov r0, r6 + bl OS_SpinWait + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0 + beq _0208444C +_02084468: + mov r0, sl + mov r1, #0 + mov r2, #1 + bl Cardi_Request +_02084478: + ldr r0, [sl] + mov r1, #0x60 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty + mov r7, #0xb + mov r6, #1 + mov r5, r7 + mov r4, r6 + mov fp, #0 +_0208449C: + str sb, [sl, #4] + ldr r0, [sl, #0x114] + orr r0, r0, #0x20 + str r0, [sl, #0x114] +_020844AC: + mov r0, r7 + mov r1, sb + mov r2, r6 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _020844AC + cmp sb, #0 + bne _020844E8 + ldr r8, [sl] +_020844D0: + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _020844D0 +_020844E8: + bl EnableIrqFlag + ldr r1, [sl, #0x114] + mov r8, r0 + tst r1, #0x20 + beq _02084510 +_020844FC: + mov r0, fp + bl OS_SleepThread + ldr r0, [sl, #0x114] + tst r0, #0x20 + bne _020844FC +_02084510: + mov r0, r8 + bl SetIrqFlag + ldr r0, [sl] + mov r1, #0x60 + bl DC_InvalidateRange + ldr r0, [sl] + ldr r1, [r0] + cmp r1, #4 + bne _02084548 + ldr r0, [sp] + sub r0, r0, #1 + str r0, [sp] + cmp r0, #0 + bgt _0208449C +_02084548: + cmp r1, #0 + moveq r0, #1 + movne r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end Cardi_Request + diff --git a/lib/NitroSDK/asm/card_rom.s b/lib/NitroSDK/asm/card_rom.s new file mode 100644 index 00000000..ea94cd38 --- /dev/null +++ b/lib/NitroSDK/asm/card_rom.s @@ -0,0 +1,540 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start CARDi_ReadFromCache +CARDi_ReadFromCache: ; 0x02083C8C + stmdb sp!, {r3, r4, r5, lr} + ldr r4, _02083D14 ; =_022BB7E0 + mov r1, #0x200 + ldr r3, [r4, #0x1c] + rsb r1, r1, #0 + ldr r2, [r0, #8] + and r3, r3, r1 + cmp r3, r2 + bne _02083D00 + ldr r2, [r4, #0x1c] + ldr r1, [r4, #0x24] + sub r3, r2, r3 + rsb r5, r3, #0x200 + cmp r5, r1 + movhi r5, r1 + add r0, r0, #0x20 + ldr r1, [r4, #0x20] + mov r2, r5 + add r0, r0, r3 + bl MI_CpuCopy8 + ldr r2, [r4, #0x1c] + ldr r1, [r4, #0x20] + ldr r0, [r4, #0x24] + add r2, r2, r5 + add r1, r1, r5 + sub r0, r0, r5 + str r2, [r4, #0x1c] + str r1, [r4, #0x20] + str r0, [r4, #0x24] +_02083D00: + ldr r0, [r4, #0x24] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02083D14: .word _022BB7E0 + arm_func_end CARDi_ReadFromCache + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x02083D18 + ldr r3, _02083D70 ; =0x040001A4 +_02083D1C: + ldr r2, [r3] + tst r2, #0x80000000 + bne _02083D1C + ldr r3, _02083D74 ; =0x040001A1 + mov r2, #0xc0 + strb r2, [r3] + mov r2, r0, lsr #0x18 + strb r2, [r3, #7] + mov r2, r0, lsr #0x10 + strb r2, [r3, #8] + mov r2, r0, lsr #8 + strb r2, [r3, #9] + strb r0, [r3, #0xa] + mov r0, r1, lsr #0x18 + strb r0, [r3, #0xb] + mov r0, r1, lsr #0x10 + strb r0, [r3, #0xc] + mov r0, r1, lsr #8 + strb r0, [r3, #0xd] + strb r1, [r3, #0xe] + bx lr + .align 2, 0 +_02083D70: .word 0x040001A4 +_02083D74: .word 0x040001A1 + arm_func_end CARDi_SetRomOp + + arm_func_start sub_02083D78 +sub_02083D78: ; 0x02083D78 + stmdb sp!, {r3, r4, r5, lr} + ldr r4, _02083DBC ; =_022BB7E0 + ldr r1, _02083DC0 ; =0x04100010 + ldr r0, [r4, #0x28] + ldr r2, [r4, #0x20] + mov r3, #0x200 + ldr r5, _02083DC4 ; =_022BBE20 + bl MTi_CardDmaCopy32 + ldr r1, [r4, #0x1c] + mov r0, r1, lsr #8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r1, [r5, #4] + ldr r0, _02083DC8 ; =0x040001A4 + str r1, [r0] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02083DBC: .word _022BB7E0 +_02083DC0: .word 0x04100010 +_02083DC4: .word _022BBE20 +_02083DC8: .word 0x040001A4 + arm_func_end sub_02083D78 + + arm_func_start sub_02083DCC +sub_02083DCC: ; 0x02083DCC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _02083E98 ; =_022BB7E0 + ldr r0, [r0, #0x28] + bl MI_StopDma + ldr r3, _02083E98 ; =_022BB7E0 + ldr r0, [r3, #0x24] + ldr r2, [r3, #0x1c] + ldr r1, [r3, #0x20] + subs r0, r0, #0x200 + str r0, [r3, #0x24] + movne r0, #1 + add r2, r2, #0x200 + add r1, r1, #0x200 + moveq r0, #0 + str r2, [r3, #0x1c] + str r1, [r3, #0x20] + cmp r0, #0 + bne _02083E90 + mov r0, #0x80000 + bl OS_DisableIrqMask + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + ldr r4, _02083E98 ; =_022BB7E0 + bl sub_02084118 + bl Cardi_CheckPulledOutCore + ldr r0, [r4] + mov r1, #0 + str r1, [r0] + ldr r5, [r4, #0x38] + ldr r6, [r4, #0x3c] + bl EnableIrqFlag + ldr r1, [r4, #0x114] + mov r7, r0 + bic r0, r1, #0x4c + str r0, [r4, #0x114] + add r0, r4, #0x10c + bl OS_WakeupThread + ldr r0, [r4, #0x114] + tst r0, #0x10 + beq _02083E74 + add r0, r4, #0x44 + bl OS_WakeupThreadDirect +_02083E74: + mov r0, r7 + bl SetIrqFlag + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + blx r5 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02083E90: + bl sub_02083D78 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02083E98: .word _022BB7E0 + arm_func_end sub_02083DCC + + arm_func_start Cardi_TryReadCardDma +Cardi_TryReadCardDma: ; 0x02083E9C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r4, _02084014 ; =_022BB7E0 + mov r6, #0 + ldr sb, [r4, #0x20] + mov fp, r0 + mov r7, r6 + mov r8, r6 + mov r1, r6 + ands sl, sb, #0x1f + ldr r5, [r4, #0x24] + bne _02083ED4 + ldr r0, [r4, #0x28] + cmp r0, #3 + movls r1, #1 +_02083ED4: + cmp r1, #0 + beq _02083F28 + bl OS_GetDTCMAddress + ldr r1, _02084018 ; =CopyAndInterleave + add r3, sb, r5 + cmp r3, r1 + mov r1, #1 + mov r2, #0 + bls _02083F00 + cmp sb, #0x2000000 + movlo r2, r1 +_02083F00: + cmp r2, #0 + bne _02083F20 + cmp r0, r3 + bhs _02083F1C + add r0, r0, #0x4000 + cmp r0, sb + bhi _02083F20 +_02083F1C: + mov r1, #0 +_02083F20: + cmp r1, #0 + moveq r8, #1 +_02083F28: + cmp r8, #0 + beq _02083F44 + ldr r1, [r4, #0x1c] + ldr r0, _0208401C ; =0x000001FF + orr r1, r1, r5 + tst r1, r0 + moveq r7, #1 +_02083F44: + ldr r0, _02084020 ; =_020B2ED0 + cmp r7, #0 + ldr r0, [r0] + cmpne r5, #0 + ldr r0, [r0, #0x60] + movne r6, #1 + bic r0, r0, #0x7000000 + orr r0, r0, #0xa1000000 + cmp r6, #0 + str r0, [fp, #4] + beq _0208400C + bl EnableIrqFlag + ldr r1, [r4, #0x118] + mov r7, r0 + cmp r5, r1 + bhs _02083F94 + mov r0, sb + mov r1, r5 + bl IC_InvalidateRange + b _02083F98 +_02083F94: + bl IC_InvalidateAll +_02083F98: + ldr r0, [r4, #0x11c] + cmp r5, r0 + bhs _02083FE0 + cmp sl, #0 + beq _02083FCC + sub sb, sb, sl + mov r0, sb + mov r1, #0x20 + bl DC_StoreRange + add r0, sb, r5 + mov r1, #0x20 + bl DC_StoreRange + add r5, r5, #0x20 +_02083FCC: + mov r0, sb + mov r1, r5 + bl DC_InvalidateRange + bl DC_WaitWriteBufferEmpty + b _02083FE4 +_02083FE0: + bl DC_FlushAll +_02083FE4: + ldr r1, _02084024 ; =_02083DCC + mov r0, #0x80000 + bl OS_SetIrqFunction + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + mov r0, #0x80000 + bl OS_EnableIrqMask + mov r0, r7 + bl SetIrqFlag + bl sub_02083D78 +_0208400C: + mov r0, r6 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02084014: .word _022BB7E0 +_02084018: .word CopyAndInterleave +_0208401C: .word 0x000001FF +_02084020: .word _020B2ED0 +_02084024: .word sub_02083DCC + arm_func_end Cardi_TryReadCardDma + + arm_func_start CARDi_ReadCard +CARDi_ReadCard: ; 0x02084028 + stmdb sp!, {r4, r5, r6, lr} + ldr r4, _0208410C ; =_022BB7E0 + mov r6, r0 +_02084034: + mov r0, #0x200 + ldr r1, [r4, #0x1c] + rsb r0, r0, #0 + and r2, r1, r0 + cmp r2, r1 + bne _02084064 + ldr r5, [r4, #0x20] + tst r5, #3 + bne _02084064 + ldr r0, [r4, #0x24] + cmp r0, #0x200 + bhs _0208406C +_02084064: + str r2, [r6, #8] + add r5, r6, #0x20 +_0208406C: + mov r0, r2, lsr #8 + orr r0, r0, #0xb7000000 + mov r1, r2, lsl #0x18 + bl CARDi_SetRomOp + mov ip, #0 + ldr r0, [r6, #4] + ldr r2, _02084110 ; =0x040001A4 + mov lr, ip + str r0, [r2] + ldr r1, _02084114 ; =0x04100010 +_02084094: + ldr r3, [r2] + tst r3, #0x800000 + beq _020840B4 + ldr r0, [r1] + cmp lr, #0x200 + strlo r0, [r5, ip, lsl #2] + addlo lr, lr, #4 + addlo ip, ip, #1 +_020840B4: + tst r3, #0x80000000 + bne _02084094 + ldr r0, [r4, #0x20] + cmp r5, r0 + bne _020840F8 + ldr r0, _0208410C ; =_022BB7E0 + ldr r1, [r0, #0x1c] + add r1, r1, #0x200 + str r1, [r0, #0x1c] + ldr r1, [r0, #0x20] + add r1, r1, #0x200 + str r1, [r0, #0x20] + ldr r1, [r0, #0x24] + subs r1, r1, #0x200 + str r1, [r0, #0x24] + ldmeqia sp!, {r4, r5, r6, pc} + b _02084034 +_020840F8: + mov r0, r6 + bl CARDi_ReadFromCache + cmp r0, #0 + bne _02084034 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0208410C: .word _022BB7E0 +_02084110: .word 0x040001A4 +_02084114: .word 0x04100010 + arm_func_end CARDi_ReadCard + + arm_func_start sub_02084118 +sub_02084118: ; 0x02084118 + stmdb sp!, {r3, lr} + mov r0, #0xb8000000 + mov r1, #0 + bl CARDi_SetRomOp + ldr r1, _02084168 ; =_020B2ED0 + mov r0, #0x2000 + ldr r1, [r1] + rsb r0, r0, #0 + ldr r2, [r1, #0x60] + ldr r1, _0208416C ; =0x040001A4 + bic r2, r2, #0x7000000 + orr r2, r2, #0xa7000000 + and r0, r2, r0 + str r0, [r1] +_02084150: + ldr r0, [r1] + tst r0, #0x800000 + beq _02084150 + ldr r0, _02084170 ; =0x04100010 + ldr r0, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02084168: .word _020B2ED0 +_0208416C: .word 0x040001A4 +_02084170: .word 0x04100010 + arm_func_end sub_02084118 + + arm_func_start Cardi_ReadRomSyncCore +Cardi_ReadRomSyncCore: ; 0x02084174 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r4, _02084204 ; =_022BBE20 + mov r0, r4 + bl CARDi_ReadFromCache + cmp r0, #0 + beq _02084198 + ldr r1, [r4] + mov r0, r4 + blx r1 +_02084198: + ldr r4, _02084208 ; =_022BB7E0 + bl sub_02084118 + bl Cardi_CheckPulledOutCore + ldr r0, [r4] + mov r1, #0 + str r1, [r0] + ldr r5, [r4, #0x38] + ldr r6, [r4, #0x3c] + bl EnableIrqFlag + ldr r1, [r4, #0x114] + mov r7, r0 + bic r0, r1, #0x4c + str r0, [r4, #0x114] + add r0, r4, #0x10c + bl OS_WakeupThread + ldr r0, [r4, #0x114] + tst r0, #0x10 + beq _020841E8 + add r0, r4, #0x44 + bl OS_WakeupThreadDirect +_020841E8: + mov r0, r7 + bl SetIrqFlag + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + blx r5 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02084204: .word _022BBE20 +_02084208: .word _022BB7E0 + arm_func_end Cardi_ReadRomSyncCore + + arm_func_start Cardi_ReadRom +Cardi_ReadRom: ; 0x0208420C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r7, r3 + ldr r4, _020842F0 ; =_022BBE20 + ldr r5, _020842F4 ; =_022BB7E0 + bl Card_CheckEnabled + bl EnableIrqFlag + mov r6, r0 + b _02084240 +_02084238: + add r0, r5, #0x10c + bl OS_SleepThread +_02084240: + ldr r0, [r5, #0x114] + tst r0, #4 + bne _02084238 + ldr r0, [r5, #0x114] + ldr r2, [sp, #0x20] + ldr r1, [sp, #0x24] + orr r3, r0, #4 + mov r0, r6 + str r3, [r5, #0x114] + str r2, [r5, #0x38] + str r1, [r5, #0x3c] + bl SetIrqFlag + ldr r0, _020842F8 ; =_022BBE00 + str sl, [r5, #0x28] + ldr r0, [r0] + str r8, [r5, #0x20] + add r0, sb, r0 + str r0, [r5, #0x1c] + str r7, [r5, #0x24] + cmp sl, #3 + bhi _0208429C + mov r0, sl + bl MI_StopDma +_0208429C: + mov r0, r4 + bl Cardi_TryReadCardDma + cmp r0, #0 + beq _020842C0 + ldr r0, [sp, #0x28] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl Card_WaitRomAsync + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_020842C0: + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _020842D8 + ldr r0, _020842FC ; =Cardi_ReadRomSyncCore + bl Cardi_SetTask + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_020842D8: + ldr r1, _02084300 ; =_022B966C + mov r0, r5 + ldr r1, [r1, #4] + str r1, [r5, #0x104] + bl Cardi_ReadRomSyncCore + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020842F0: .word _022BBE20 +_020842F4: .word _022BB7E0 +_020842F8: .word _022BBE00 +_020842FC: .word Cardi_ReadRomSyncCore +_02084300: .word _022B966C + arm_func_end Cardi_ReadRom + + arm_func_start CARD_Init +CARD_Init: ; 0x02084304 + stmdb sp!, {r3, lr} + ldr ip, _02084360 ; =_022BB7E0 + ldr r0, [ip, #0x114] + cmp r0, #0 + ldmneia sp!, {r3, pc} + mov r2, #0 + ldr r0, _02084364 ; =_022BBE00 + sub r1, r2, #1 + mov r3, #1 + str r3, [ip, #0x114] + str r2, [ip, #0x24] + str r2, [ip, #0x20] + str r2, [ip, #0x1c] + str r1, [ip, #0x28] + str r2, [ip, #0x38] + str r2, [ip, #0x3c] + str r2, [r0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _02084364 ; =_022BBE00 + str r0, [r1, #0x20] + bl CARD_InitPulledOutCallback + ldmia sp!, {r3, pc} + .align 2, 0 +_02084360: .word _022BB7E0 +_02084364: .word _022BBE00 + arm_func_end CARD_Init + + arm_func_start Card_WaitRomAsync +Card_WaitRomAsync: ; 0x02084368 + ldr ip, _02084370 ; =Cardi_WaitAsync + bx ip + .align 2, 0 +_02084370: .word Cardi_WaitAsync + arm_func_end Card_WaitRomAsync + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x02084374 + ldr r0, _0208437C ; =CARDi_ReadCard + bx lr + .align 2, 0 +_0208437C: .word CARDi_ReadCard + arm_func_end CARDi_GetRomAccessor + diff --git a/lib/NitroSDK/asm/ctrdg.s b/lib/NitroSDK/asm/ctrdg.s new file mode 100644 index 00000000..7de71e88 --- /dev/null +++ b/lib/NitroSDK/asm/ctrdg.s @@ -0,0 +1,260 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ; 0x02084734 + stmdb sp!, {r3, lr} + ldr r1, _02084760 ; =_022BC04C + mov r3, #0 + ldr r2, _02084764 ; =0x05000001 + add r0, sp, #0 + str r3, [sp] + blx SVC_CpuSet + bl OS_GetLockID + ldr r1, _02084768 ; =_022BC048 + strh r0, [r1, #6] + ldmia sp!, {r3, pc} + .align 2, 0 +_02084760: .word _022BC04C +_02084764: .word 0x05000001 +_02084768: .word _022BC048 + arm_func_end CTRDGi_InitCommon + + arm_func_start Ctrdg_IsOptionCartridge +Ctrdg_IsOptionCartridge: ; 0x0208476C + stmdb sp!, {r3, lr} + bl Ctrdg_IsExisting + cmp r0, #0 + beq _0208478C + bl Ctrdgi_IsAgbCartridgeAtInit + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r3, pc} +_0208478C: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end Ctrdg_IsOptionCartridge + + arm_func_start Ctrdgi_IsAgbCartridgeAtInit +Ctrdgi_IsAgbCartridgeAtInit: ; 0x02084794 + ldr r0, _020847A8 ; =0x027FFC30 + ldrb r0, [r0, #5] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + bx lr + .align 2, 0 +_020847A8: .word 0x027FFC30 + arm_func_end Ctrdgi_IsAgbCartridgeAtInit + + arm_func_start Ctrdg_IsExisting +Ctrdg_IsExisting: ; 0x020847AC + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r2, _020848AC ; =0x027FFC30 + mov r4, #1 + ldrh r1, [r2] + rsb r0, r4, #0x10000 + cmp r1, r0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldrb r0, [r2, #5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + cmp r0, #1 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _020848B0 ; =_022BC048 + add r1, sp, #8 + ldrh r0, [r0, #6] + bl CTRDGi_LockByProcessor + add r0, sp, #0 + bl CTRDGi_ChangeLatestAccessCycle + mov r0, #0x8000000 + ldrb r2, [r0, #0xb2] + cmp r2, #0x96 + bne _0208482C + ldr r1, _020848AC ; =0x027FFC30 + ldrh r0, [r0, #0xbe] + ldrh r1, [r1] + cmp r1, r0 + bne _02084874 +_0208482C: + cmp r2, #0x96 + beq _0208484C + ldr r1, _020848AC ; =0x027FFC30 + ldr r0, _020848B4 ; =0x0801FFFE + ldrh r1, [r1] + ldrh r0, [r0] + cmp r1, r0 + bne _02084874 +_0208484C: + ldr r2, _020848AC ; =0x027FFC30 + mov r0, #0x8000000 + ldr r1, [r2, #8] + ldr r0, [r0, #0xac] + cmp r1, r0 + beq _02084888 + ldrb r0, [r2, #5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _02084888 +_02084874: + ldr r1, _020848AC ; =0x027FFC30 + mov r4, #0 + ldrb r0, [r1, #5] + orr r0, r0, #2 + strb r0, [r1, #5] +_02084888: + add r0, sp, #0 + bl CTRDGi_RestoreAccessCycle + ldr r0, _020848B0 ; =_022BC048 + add r1, sp, #8 + ldrh r0, [r0, #6] + bl CTRDGi_UnlockByProcessor + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_020848AC: .word 0x027FFC30 +_020848B0: .word _022BC048 +_020848B4: .word 0x0801FFFE + arm_func_end Ctrdg_IsExisting + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ; 0x020848B8 + ldr r2, _020848FC ; =0x04000204 + ldrh r1, [r2] + and r1, r1, #0xc + mov r1, r1, asr #2 + str r1, [r0] + ldrh r1, [r2] + and r1, r1, #0x10 + mov r1, r1, asr #4 + str r1, [r0, #4] + ldrh r0, [r2] + bic r0, r0, #0xc + orr r0, r0, #0xc + strh r0, [r2] + ldrh r0, [r2] + bic r0, r0, #0x10 + strh r0, [r2] + bx lr + .align 2, 0 +_020848FC: .word 0x04000204 + arm_func_end CTRDGi_ChangeLatestAccessCycle + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ; 0x02084900 + ldr r3, _02084930 ; =0x04000204 + ldr r2, [r0] + ldrh r1, [r3] + bic r1, r1, #0xc + orr r1, r1, r2, lsl #2 + strh r1, [r3] + ldrh r1, [r3] + ldr r2, [r0, #4] + bic r0, r1, #0x10 + orr r0, r0, r2, lsl #4 + strh r0, [r3] + bx lr + .align 2, 0 +_02084930: .word 0x04000204 + arm_func_end CTRDGi_RestoreAccessCycle + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ; 0x02084934 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r5, _0208498C ; =0x027FFFE8 + mov r7, r0 + mov r6, r1 + mov r4, #1 +_02084948: + bl EnableIrqFlag + str r0, [r6, #4] + mov r0, r5 + bl OS_ReadOwnerOfLockWord + ands r0, r0, #0x40 + str r0, [r6] + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + bl OS_TryLockCartridge + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, [r6, #4] + bl SetIrqFlag + mov r0, r4 + blx SVC_WaitByLoop + b _02084948 +_02084988: + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0208498C: .word 0x027FFFE8 + arm_func_end CTRDGi_LockByProcessor + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ; 0x02084990 + stmdb sp!, {r4, lr} + mov r4, r1 + ldr r1, [r4] + cmp r1, #0 + bne _020849A8 + bl OS_UnlockCartridgeVeneer +_020849A8: + ldr r0, [r4, #4] + bl SetIrqFlag + ldmia sp!, {r4, pc} + arm_func_end CTRDGi_UnlockByProcessor + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ; 0x020849B4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r1, r7 + mov r0, #0xd + mov r2, #0 + bl PXI_SendWordByFifo + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r6, #1 + mov r5, #0xd + mov r4, #0 +_020849E0: + mov r0, r6 + blx SVC_WaitByLoop + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _020849E0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CTRDGi_SendtoPxi + + arm_func_start Ctrdg_Enable +Ctrdg_Enable: ; 0x02084A04 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl EnableIrqFlag + ldr r1, _02084A48 ; =_022BC048 + mov r4, r0 + str r5, [r1] + bl Ctrdg_IsOptionCartridge + cmp r0, #0 + bne _02084A3C + cmp r5, #0 + movne r1, #0x1000 + moveq r1, #0x5000 + mov r0, #0xf000 + bl OS_SetDPermissionsForProtectionRegion +_02084A3C: + mov r0, r4 + bl SetIrqFlag + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02084A48: .word _022BC048 + arm_func_end Ctrdg_Enable + diff --git a/lib/NitroSDK/asm/ctrdg_proc.s b/lib/NitroSDK/asm/ctrdg_proc.s new file mode 100644 index 00000000..e5992f43 --- /dev/null +++ b/lib/NitroSDK/asm/ctrdg_proc.s @@ -0,0 +1,259 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start CTRDG_Init +CTRDG_Init: ; 0x02084A4C + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _02084AEC ; =_022BC060 + ldr r1, [r0, #8] + cmp r1, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r1, #1 + str r1, [r0, #8] + bl CTRDGi_InitCommon + ldr r0, _02084AEC ; =_022BC060 + mov r1, #0 + str r1, [r0, #0xc] + bl PXI_Init + mov r5, #0xd + mov r4, #1 +_02084A84: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0 + beq _02084A84 + ldr r1, _02084AF0 ; =CTRDGi_CallbackForInitModuleInfo + mov r0, #0xd + bl PXI_SetFifoRecvCallback + bl CTRDGi_InitModuleInfo + mov r0, #0xd + mov r1, #0 + bl PXI_SetFifoRecvCallback + ldr r1, _02084AF4 ; =CTRDGi_PulledOutCallback + mov r0, #0xd + bl PXI_SetFifoRecvCallback + ldr r1, _02084AEC ; =_022BC060 + mov r2, #0 + ldr r0, _02084AF8 ; =_022BC140 + str r2, [r1, #0x18] + bl Ctrdgi_InitTaskThread + ldr r1, _02084AFC ; =_02084D90 + mov r0, #0x11 + bl PXI_SetFifoRecvCallback + mov r0, #0 + bl Ctrdg_Enable + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02084AEC: .word _022BC060 +_02084AF0: .word CTRDGi_CallbackForInitModuleInfo +_02084AF4: .word CTRDGi_PulledOutCallback +_02084AF8: .word _022BC140 +_02084AFC: .word Ctrdgi_CallbackForSetPhi + arm_func_end CTRDG_Init + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ; 0x02084B00 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x10 + ldr r0, _02084CC8 ; =_022BC060 + ldr r1, [r0] + cmp r1, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r1, _02084CCC ; =0x04000300 + mov r2, #1 + ldrh r1, [r1] + str r2, [r0] + tst r1, #1 + addeq sp, sp, #0x10 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r3, _02084CD0 ; =0x04000208 + mov r2, #1 + ldrh r5, [r3] + ldr r1, _02084CD4 ; =_022BC04C + mov r4, r0 + strh r2, [r3] + ldrh r0, [r1, #2] + add r1, sp, #8 + bl CTRDGi_LockByProcessor + ldr r1, _02084CD8 ; =0x04000204 + add r0, sp, #0 + ldrh r1, [r1] + and r1, r1, #0x8000 + mov r6, r1, asr #0xf + bl CTRDGi_ChangeLatestAccessCycle + ldr r3, _02084CD8 ; =0x04000204 + ldr r0, _02084CDC ; =_022BC080 + ldrh r2, [r3] + add r0, r0, #0x80 + mov r1, #0x40 + bic r2, r2, #0x8000 + strh r2, [r3] + bl DC_InvalidateRange + ldr r2, _02084CDC ; =_022BC080 + ldr r1, _02084CE0 ; =0x08000080 + mov r0, #1 + mov r3, #0x40 + add r2, r2, #0x80 + bl MI_DmaCopy16 + ldr r2, _02084CD8 ; =0x04000204 + add r0, sp, #0 + ldrh r1, [r2] + bic r1, r1, #0x8000 + orr r1, r1, r6, lsl #15 + strh r1, [r2] + bl CTRDGi_RestoreAccessCycle + ldr r0, _02084CD4 ; =_022BC04C + add r1, sp, #8 + ldrh r0, [r0, #2] + bl CTRDGi_UnlockByProcessor + ldr r1, _02084CE4 ; =0x027FFF9B + ldrb r0, [r1] + cmp r0, #0 + bne _02084BFC + ldrb r0, [r1, #-1] + cmp r0, #0 + bne _02084C60 +_02084BFC: + ldr r3, _02084CDC ; =_022BC080 + ldr r6, _02084CE8 ; =0x027FFC30 + ldrh r0, [r3, #0xbe] + mov r2, #0 + strh r0, [r6] + b _02084C28 +_02084C14: + add r0, r3, r2 + ldrb r1, [r0, #0xb5] + add r0, r6, r2 + add r2, r2, #1 + strb r1, [r0, #2] +_02084C28: + cmp r2, #3 + blt _02084C14 + ldrh r0, [r3, #0xb0] + strh r0, [r6, #6] + ldr r0, [r3, #0xac] + str r0, [r6, #8] + bl Ctrdg_IsExisting + cmp r0, #0 + movne r2, #1 + ldr r1, _02084CE4 ; =0x027FFF9B + moveq r2, #0 + mov r0, #1 + strb r2, [r1] + strb r0, [r1, #-1] +_02084C60: + ldr r0, _02084CEC ; =0xFFFF0020 + ldr r1, _02084CF0 ; =_022BC084 + mov r2, #0x9c + bl MTi_CpuCopy32 + bl DC_FlushAll + ldr r0, _02084CDC ; =_022BC080 + add r0, r0, #0xfe000000 + mov r0, r0, lsr #5 + mov r0, r0, lsl #6 + orr r0, r0, #1 + bl CTRDGi_SendtoPxi + mov r7, #1 + ldr r6, _02084CD4 ; =_022BC04C + b _02084CA0 +_02084C98: + mov r0, r7 + blx SVC_WaitByLoop +_02084CA0: + ldrh r0, [r6] + cmp r0, #1 + bne _02084C98 + ldr r2, _02084CD0 ; =0x04000208 + mov r0, r4 + ldrh r1, [r2] + strh r5, [r2] + bl OS_SetIrqMask + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02084CC8: .word _022BC060 +_02084CCC: .word 0x04000300 +_02084CD0: .word 0x04000208 +_02084CD4: .word _022BC04C +_02084CD8: .word 0x04000204 +_02084CDC: .word _022BC080 +_02084CE0: .word 0x08000080 +_02084CE4: .word 0x027FFF9B +_02084CE8: .word 0x027FFC30 +_02084CEC: .word 0xFFFF0020 +_02084CF0: .word _022BC084 + arm_func_end CTRDGi_InitModuleInfo + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ; 0x02084CF4 + stmdb sp!, {r3, lr} + and r0, r1, #0x3f + cmp r0, #1 + bne _02084D14 + ldr r0, _02084D1C ; =_022BC04C + mov r1, #1 + strh r1, [r0] + ldmia sp!, {r3, pc} +_02084D14: + bl WaitForever2 + ldmia sp!, {r3, pc} + .align 2, 0 +_02084D1C: .word _022BC04C + arm_func_end CTRDGi_CallbackForInitModuleInfo + + arm_func_start CTRDGi_PulledOutCallback +CTRDGi_PulledOutCallback: ; 0x02084D20 + stmdb sp!, {r3, lr} + and r0, r1, #0x3f + cmp r0, #0x11 + bne _02084D70 + ldr r0, _02084D78 ; =_022BC060 + ldr r1, [r0, #0xc] + cmp r1, #0 + ldmneia sp!, {r3, pc} + ldr r1, [r0, #0x18] + mov r0, #0 + cmp r1, #0 + beq _02084D54 + blx r1 +_02084D54: + cmp r0, #0 + beq _02084D60 + bl CTRDG_TerminateForPulledOut +_02084D60: + ldr r0, _02084D78 ; =_022BC060 + mov r1, #1 + str r1, [r0, #0xc] + ldmia sp!, {r3, pc} +_02084D70: + bl WaitForever2 + ldmia sp!, {r3, pc} + .align 2, 0 +_02084D78: .word _022BC060 + arm_func_end CTRDGi_PulledOutCallback + + arm_func_start CTRDG_TerminateForPulledOut +CTRDG_TerminateForPulledOut: ; 0x02084D7C + stmdb sp!, {r3, lr} + mov r0, #2 + bl CTRDGi_SendtoPxi + bl WaitForever2 + ldmia sp!, {r3, pc} + arm_func_end CTRDG_TerminateForPulledOut + + arm_func_start Ctrdgi_CallbackForSetPhi +Ctrdgi_CallbackForSetPhi: ; 0x02084D90 + ldr r0, _02084DA0 ; =_022BC060 + mov r1, #0 + str r1, [r0, #4] + bx lr + .align 2, 0 +_02084DA0: .word _022BC060 + arm_func_end Ctrdgi_CallbackForSetPhi + diff --git a/lib/NitroSDK/asm/ctrdg_task.s b/lib/NitroSDK/asm/ctrdg_task.s new file mode 100644 index 00000000..243ebf52 --- /dev/null +++ b/lib/NitroSDK/asm/ctrdg_task.s @@ -0,0 +1,127 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start Ctrdgi_InitTaskThread +Ctrdgi_InitTaskThread: ; 0x02084DA4 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r5, r0 + bl EnableIrqFlag + ldr r1, _02084E20 ; =_022BC228 + mov r4, r0 + ldr r0, [r1] + cmp r0, #0 + bne _02084E10 + add r0, r5, #0xc4 + str r5, [r1] + bl Ctrdgi_InitTaskInfo + ldr r0, _02084E24 ; =_022BC22C + bl Ctrdgi_InitTaskInfo + mov r0, #0 + str r0, [r5, #0xc0] + mov r2, #0x400 + ldr r1, _02084E28 ; =Ctrdgi_TaskThread + ldr r3, _02084E2C ; =_022BC650 + mov r0, r5 + str r2, [sp] + mov r2, #0x14 + str r2, [sp, #4] + mov r2, r5 + bl OS_CreateThread + mov r0, r5 + bl OS_WakeupThreadDirect +_02084E10: + mov r0, r4 + bl SetIrqFlag + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02084E20: .word _022BC228 +_02084E24: .word _022BC22C +_02084E28: .word Ctrdgi_TaskThread +_02084E2C: .word _022BC650 + arm_func_end Ctrdgi_InitTaskThread + + arm_func_start Ctrdgi_InitTaskInfo +Ctrdgi_InitTaskInfo: ; 0x02084E30 + ldr ip, _02084E40 ; =MI_CpuFill8 + mov r1, #0 + mov r2, #0x24 + bx ip + .align 2, 0 +_02084E40: .word MI_CpuFill8 + arm_func_end Ctrdgi_InitTaskInfo + + arm_func_start Ctrdgi_TaskThread +Ctrdgi_TaskThread: ; 0x02084E44 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + mov r4, #0 + mov r8, r0 + add r6, sp, #0 + mov sl, r4 + mov sb, r4 + mov r5, r4 + mov fp, #0x24 +_02084E68: + mov r0, r6 + mov r1, r5 + mov r2, fp + bl MI_CpuFill8 + bl EnableIrqFlag + ldr r1, [r8, #0xc0] + mov r7, r0 + cmp r1, #0 + bne _02084EA0 +_02084E8C: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r8, #0xc0] + cmp r0, #0 + beq _02084E8C +_02084EA0: + ldr lr, [r8, #0xc0] + add ip, sp, #0 + ldmia lr!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldmia lr!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldr r1, [lr] + mov r0, r7 + str r1, [ip] + bl SetIrqFlag + ldr r1, [sp] + cmp r1, #0 + beq _02084EE0 + mov r0, r6 + blx r1 + str r0, [sp, #8] +_02084EE0: + bl EnableIrqFlag + ldr r2, [sp, #4] + ldr r1, _02084F30 ; =_022BC228 + mov r7, r0 + strb sl, [r1, #0x26] + cmp r2, #0 + beq _02084F04 + mov r0, r6 + blx r2 +_02084F04: + ldr r0, _02084F30 ; =_022BC228 + ldr r0, [r0] + cmp r0, #0 + beq _02084F24 + mov r0, r7 + str sb, [r8, #0xc0] + bl SetIrqFlag + b _02084E68 +_02084F24: + bl OS_ExitThread + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02084F30: .word _022BC228 + arm_func_end Ctrdgi_TaskThread + diff --git a/asm/main_0207E84C.s b/lib/NitroSDK/asm/fs_archive.s similarity index 100% rename from asm/main_0207E84C.s rename to lib/NitroSDK/asm/fs_archive.s diff --git a/asm/main_0207F40C.s b/lib/NitroSDK/asm/fs_file.s similarity index 100% rename from asm/main_0207F40C.s rename to lib/NitroSDK/asm/fs_file.s diff --git a/lib/NitroSDK/asm/include/main_0207F894.inc b/lib/NitroSDK/asm/include/main_0207F894.inc new file mode 100644 index 00000000..0429a3eb --- /dev/null +++ b/lib/NitroSDK/asm/include/main_0207F894.inc @@ -0,0 +1,140 @@ +#pragma once +.public _02000BC4 +.public _020AEC5C +.public _020B2BB4 +.public _020B2BB8 +.public _020B2BC0 +.public _020B2BC4 +.public _020B2C84 +.public _020B2D88 +.public _020B2E9C +.public _020B2ED0 +.public _020B2ED4 +.public _020B2FBC +.public _020B3364 +.public _022B966C +.public _022BB5EC +.public _022BB5FC +.public _022BB604 +.public _022BB60C +.public _022BB614 +.public _022BB670 +.public _022BB68C +.public _022BB6AC +.public _022BB6B8 +.public _022BB6C4 +.public _022BB6C8 +.public _022BB6D8 +.public _022BB6F0 +.public _022BB6F4 +.public _022BB718 +.public _022BB724 +.public _022BB760 +.public _022BB780 +.public _022BB7E0 +.public _022BBE00 +.public _022BBE20 +.public _022BC040 +.public _022BC048 +.public _022BC04C +.public _022BC060 +.public _022BC080 +.public _022BC084 +.public _022BC140 +.public _022BC228 +.public _022BC22C +.public _022BC650 +.public _022BCA74 +.public _f2d +.public _ll_udiv +.public Card_CheckEnabled +.public Card_IsPulledOut +.public Cardi_CheckPulledOutCore +.public Cardi_ReadRom +.public Cardi_Request +.public Cardi_SetTask +.public Cardi_WaitAsync +.public CARDi_InitCommon +.public CARDi_TaskThread +.public CARDi_OnFifoRecv +.public CARD_Init +.public CARD_InitPulledOutCallback +.public CopyAndInterleave +.public Ctrdg_Enable +.public Ctrdg_IsExisting +.public Ctrdgi_Enable +.public Ctrdgi_InitTaskThread +.public Ctrdgi_IsExisting +.public CTRDGi_InitCommon +.public CTRDGi_LockByProcessor +.public CTRDGi_UnlockByProcessor +.public CTRDGi_RestoreAccessCycle +.public CTRDGi_ChangeLatestAccessCycle +.public CTRDGi_SendtoPxi +.public Dgt_Hash2Init +.public Dgt_Hash2Update +.public Dgt_Hash2GetHash +.public DC_FlushAll +.public DC_FlushRange +.public DC_InvalidateRange +.public DC_StoreRange +.public DC_WaitWriteBufferEmpty +.public EnableIrqFlag +.public fflush +.public FileInit +.public FS_CloseFile +.public FS_InitArchive +.public FS_LoadArchive +.public FS_NotifyArchiveAsyncEnd +.public FS_OpenFileDirect +.public FS_OpenFileFast +.public FS_ReadFile +.public FS_RegisterArchiveName +.public FS_SetArchiveProc +.public FSi_FindPath +.public GetIrqFlag +.public IC_InvalidateAll +.public IC_InvalidateRange +.public MI_CpuCopy8 +.public MI_CpuFill8 +.public MI_DmaCopy16 +.public MI_StopDma +.public MIi_UncompressBackward +.public MTi_CardDmaCopy32 +.public MTi_CpuClear32 +.public MTi_CpuClearFast +.public MTi_CpuCopy32 +.public OS_DisableIrqMask +.public OS_EnableIrqMask +.public OS_GetDTCMAddress +.public OS_GetLockID +.public OS_InitMutex +.public OS_IsTickAvailable +.public OS_LockCard +.public OS_ReadOwnerOfLockWord +.public OS_ResetRequestIrqMask +.public OS_SetDPermissionsForProtectionRegion +.public OS_SetIrqFunction +.public OS_SetIrqMask +.public OS_SetThreadPriority +.public OS_SleepThread +.public OS_SpinWait +.public OS_TryLockCartridge +.public OS_UnlockCard +.public OS_UnlockCartridgeVeneer +.public OS_WakeupThread +.public OS_WakeupThreadDirect +.public OSi_ReferSymbol +.public PM_ForceToPowerOff +.public PXI_Init +.public PXI_IsCallbackReady +.public PXI_SendWordByFifo +.public PXI_SetFifoRecvCallback +.public PXIi_HandlerRecvFifoNotEmpty +.public SetIrqFlag +.public OS_CreateThread +.public SVC_CpuSet +.public SVC_WaitByLoop +.public OS_ExitThread +.public WaitForever2 +.public WaitForInterrupt diff --git a/lib/NitroSDK/asm/math_crc.s b/lib/NitroSDK/asm/math_crc.s new file mode 100644 index 00000000..74b3b218 --- /dev/null +++ b/lib/NitroSDK/asm/math_crc.s @@ -0,0 +1,222 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start Mathi_Crc8InitTable +Mathi_Crc8InitTable: ; 0x02084FB8 + stmdb sp!, {r3, lr} + mov ip, #0 + mov r2, ip +_02084FC4: + mov r3, ip + mov lr, r2 +_02084FCC: + tst r3, #0x80 + eorne r3, r1, r3, lsl #1 + add lr, lr, #1 + moveq r3, r3, lsl #1 + cmp lr, #8 + blo _02084FCC + strb r3, [r0, ip] + add ip, ip, #1 + cmp ip, #0x100 + blo _02084FC4 + ldmia sp!, {r3, pc} + arm_func_end Mathi_Crc8InitTable + + arm_func_start Mathi_Crc8Update +Mathi_Crc8Update: ; 0x02084FF8 + stmdb sp!, {r4, lr} + cmp r3, #0 + ldrb lr, [r1] + mov r4, #0 + bls _02085028 +_0208500C: + ldrb ip, [r2], #1 + add r4, r4, #1 + cmp r4, r3 + eor ip, lr, ip + and ip, ip, #0xff + ldrb lr, [r0, ip] + blo _0208500C +_02085028: + strb lr, [r1] + ldmia sp!, {r4, pc} + arm_func_end Mathi_Crc8Update + + arm_func_start Mathi_Crc16InitTable +Mathi_Crc16InitTable: ; 0x02085030 + stmdb sp!, {r3, lr} + mov lr, #0 + mov r3, lr +_0208503C: + mov ip, lr + mov r2, r3 +_02085044: + tst ip, #1 + eorne ip, r1, ip, lsr #1 + add r2, r2, #1 + moveq ip, ip, lsr #1 + cmp r2, #8 + blo _02085044 + mov r2, lr, lsl #1 + add lr, lr, #1 + strh ip, [r0, r2] + cmp lr, #0x100 + blo _0208503C + ldmia sp!, {r3, pc} + arm_func_end Mathi_Crc16InitTable + + arm_func_start Mathi_Crc16Update +Mathi_Crc16Update: ; 0x02085074 + stmdb sp!, {r4, lr} + cmp r3, #0 + ldrh lr, [r1] + mov r4, #0 + bls _020850AC +_02085088: + ldrb ip, [r2], #1 + add r4, r4, #1 + cmp r4, r3 + eor ip, lr, ip + mov ip, ip, lsl #0x18 + mov ip, ip, lsr #0x17 + ldrh ip, [r0, ip] + eor lr, ip, lr, lsr #8 + blo _02085088 +_020850AC: + strh lr, [r1] + ldmia sp!, {r4, pc} + arm_func_end Mathi_Crc16Update + + arm_func_start Mathi_Crc32InitTable +Mathi_Crc32InitTable: ; 0x020850B4 + stmdb sp!, {r3, lr} + mov ip, #0 + mov r2, ip +_020850C0: + mov r3, ip + mov lr, r2 +_020850C8: + tst r3, #1 + eorne r3, r1, r3, lsr #1 + add lr, lr, #1 + moveq r3, r3, lsr #1 + cmp lr, #8 + blo _020850C8 + str r3, [r0, ip, lsl #2] + add ip, ip, #1 + cmp ip, #0x100 + blo _020850C0 + ldmia sp!, {r3, pc} + arm_func_end Mathi_Crc32InitTable + + arm_func_start Mathi_Crc32Update +Mathi_Crc32Update: ; 0x020850F4 + stmdb sp!, {r4, lr} + cmp r3, #0 + ldr lr, [r1] + mov r4, #0 + bls _02085128 +_02085108: + ldrb ip, [r2], #1 + add r4, r4, #1 + cmp r4, r3 + eor ip, lr, ip + and ip, ip, #0xff + ldr ip, [r0, ip, lsl #2] + eor lr, ip, lr, lsr #8 + blo _02085108 +_02085128: + str lr, [r1] + ldmia sp!, {r4, pc} + arm_func_end Mathi_Crc32Update + + arm_func_start Math_CalcCrc8 +Math_CalcCrc8: ; 0x02085130 + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, #0 + mov r3, r2 + add r1, sp, #0 + mov r2, lr + strb ip, [sp] + bl Mathi_Crc8Update + ldrb r0, [sp] + ldmia sp!, {r3, pc} + arm_func_end Math_CalcCrc8 + + arm_func_start Math_CalcCrc16 +Math_CalcCrc16: ; 0x02085158 + stmdb sp!, {r3, lr} + mov lr, r1 + mov ip, #0 + mov r3, r2 + add r1, sp, #0 + mov r2, lr + strh ip, [sp] + bl Mathi_Crc16Update + ldrh r0, [sp] + ldmia sp!, {r3, pc} + arm_func_end Math_CalcCrc16 + + arm_func_start Math_CalcCrc32 +Math_CalcCrc32: ; 0x02085180 + stmdb sp!, {r3, lr} + mov lr, r1 + mvn ip, #0 + mov r3, r2 + add r1, sp, #0 + mov r2, lr + str ip, [sp] + bl Mathi_Crc32Update + ldr r0, [sp] + mvn r0, r0 + ldmia sp!, {r3, pc} + arm_func_end Math_CalcCrc32 + + arm_func_start sub_020851AC +sub_020851AC: ; 0x020851AC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + movs r4, r0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldrh r0, [r4, #0x3c] + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r1, sp, #0 + add r0, r4, #0x50 + mov r2, #8 + bl MI_CpuCopy8 + add r0, sp, #0 + mov r1, #8 + bl DC_StoreRange + ldr r0, [r4, #0x44] + cmp r0, #0 + bne _02085230 + ldrh r1, [sp] + ldr r0, _0208523C ; =0x00002348 + cmp r1, r0 + ldrneh r1, [sp] + ldrne r0, _02085240 ; =0x0000BD8A + cmpne r1, r0 + bne _02085230 + ldrh r0, [sp, #6] + cmp r0, #4 + addeq sp, sp, #8 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_02085230: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_0208523C: .word 0x00002348 +_02085240: .word 0x0000BD8A + arm_func_end sub_020851AC + diff --git a/lib/NitroSDK/asm/math_dgt.s b/lib/NitroSDK/asm/math_dgt.s new file mode 100644 index 00000000..380733c8 --- /dev/null +++ b/lib/NitroSDK/asm/math_dgt.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start Math_CalcSha1 +Math_CalcSha1: ; 0x02084F78 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0 + mov r5, r1 + mov r4, r2 + bl Dgt_Hash2Init + add r0, sp, #0 + mov r1, r5 + mov r2, r4 + bl Dgt_Hash2Update + add r0, sp, #0 + mov r1, r6 + bl Dgt_Hash2GetHash + add sp, sp, #0x68 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end Math_CalcSha1 + diff --git a/lib/NitroSDK/asm/math_math.s b/lib/NitroSDK/asm/math_math.s new file mode 100644 index 00000000..f899510b --- /dev/null +++ b/lib/NitroSDK/asm/math_math.s @@ -0,0 +1,28 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start Math_CountPopulation +Math_CountPopulation: ; 0x02084F34 + ldr r1, _02084F6C ; =0x55555555 + ldr r2, _02084F70 ; =0x33333333 + and r1, r1, r0, lsr #1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #2 + add r1, r1, r0 + ldr r0, _02084F74 ; =0x0F0F0F0F + add r1, r1, r1, lsr #4 + and r0, r1, r0 + add r0, r0, r0, lsr #8 + add r0, r0, r0, lsr #16 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02084F6C: .word 0x55555555 +_02084F70: .word 0x33333333 +_02084F74: .word 0x0F0F0F0F + arm_func_end Math_CountPopulation + + diff --git a/lib/NitroSDK/asm/os_printf.s b/lib/NitroSDK/asm/os_printf.s new file mode 100644 index 00000000..fba82e44 --- /dev/null +++ b/lib/NitroSDK/asm/os_printf.s @@ -0,0 +1,704 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start string_put_char +string_put_char: ; 0x02085AF8 + ldr r2, [r0] + cmp r2, #0 + beq _02085B18 + ldr r2, [r0, #4] + strb r1, [r2] + ldr r1, [r0] + sub r1, r1, #1 + str r1, [r0] +_02085B18: + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + bx lr + arm_func_end string_put_char + + arm_func_start string_fill_char +string_fill_char: ; 0x02085B28 + stmdb sp!, {r3, lr} + cmp r2, #0 + ldmleia sp!, {r3, pc} + ldr lr, [r0] + mov ip, #0 + cmp lr, r2 + movhi lr, r2 + cmp lr, #0 + bls _02085B60 +_02085B4C: + ldr r3, [r0, #4] + strb r1, [r3, ip] + add ip, ip, #1 + cmp ip, lr + blo _02085B4C +_02085B60: + ldr r1, [r0] + sub r1, r1, lr + str r1, [r0] + ldr r1, [r0, #4] + add r1, r1, r2 + str r1, [r0, #4] + ldmia sp!, {r3, pc} + arm_func_end string_fill_char + + arm_func_start string_put_string +string_put_string: ; 0x02085B7C + stmdb sp!, {r4, lr} + cmp r2, #0 + ldmleia sp!, {r4, pc} + ldr r4, [r0] + mov lr, #0 + cmp r4, r2 + movhi r4, r2 + cmp r4, #0 + bls _02085BB8 +_02085BA0: + ldrsb ip, [r1, lr] + ldr r3, [r0, #4] + strb ip, [r3, lr] + add lr, lr, #1 + cmp lr, r4 + blo _02085BA0 +_02085BB8: + ldr r1, [r0] + sub r1, r1, r4 + str r1, [r0] + ldr r1, [r0, #4] + add r1, r1, r2 + str r1, [r0, #4] + ldmia sp!, {r4, pc} + arm_func_end string_put_string + + arm_func_start OS_VsNPrintfEx +OS_VsNPrintfEx: ; 0x02085BD4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + mov sb, r2 + str r1, [sp, #0xc] + str r0, [sp, #0x14] + str r0, [sp, #0x10] + ldrsb r0, [sb] + str r1, [sp] + mov fp, r3 + cmp r0, #0 + beq _02086400 +_02085C00: + ldrsb r1, [sb] + and r0, r1, #0xff + eor r0, r0, #0x20 + sub r0, r0, #0xa1 + cmp r0, #0x3c + bhs _02085C3C + add r0, sp, #0xc + bl string_put_char + ldrsb r1, [sb, #1]! + cmp r1, #0 + beq _020863F4 + add r0, sp, #0xc + add sb, sb, #1 + bl string_put_char + b _020863F4 +_02085C3C: + cmp r1, #0x25 + beq _02085C54 + add r0, sp, #0xc + add sb, sb, #1 + bl string_put_char + b _020863F4 +_02085C54: + mov r5, #0 + mov sl, r5 + mov r2, sb + sub r6, r5, #1 + mov r0, #0xa + mov r3, #0x57 +_02085C6C: + ldrsb r4, [sb, #1]! + cmp r4, #0x20 + bgt _02085C80 + beq _02085CBC + b _02085CD4 +_02085C80: + cmp r4, #0x30 + bgt _02085CD4 + cmp r4, #0x2b + blt _02085CD4 + beq _02085CA8 + cmp r4, #0x2d + beq _02085CC4 + cmp r4, #0x30 + beq _02085CCC + b _02085CD4 +_02085CA8: + ldrsb r1, [sb, #-1] + cmp r1, #0x20 + bne _02085CD4 + orr r5, r5, #2 + b _02085C6C +_02085CBC: + orr r5, r5, #1 + b _02085C6C +_02085CC4: + orr r5, r5, #8 + b _02085C6C +_02085CCC: + orr r5, r5, #0x10 + b _02085C6C +_02085CD4: + cmp r4, #0x2a + bne _02085CF8 + add fp, fp, #4 + ldr sl, [fp, #-4] + add sb, sb, #1 + cmp sl, #0 + rsblt sl, sl, #0 + orrlt r5, r5, #8 + b _02085D20 +_02085CF8: + mov r1, #0xa + b _02085D0C +_02085D00: + ldrsb r4, [sb], #1 + mla r4, sl, r1, r4 + sub sl, r4, #0x30 +_02085D0C: + ldrsb r4, [sb] + cmp r4, #0x30 + blt _02085D20 + cmp r4, #0x39 + ble _02085D00 +_02085D20: + ldrsb r1, [sb] + cmp r1, #0x2e + bne _02085D7C + ldrsb r1, [sb, #1]! + mov r6, #0 + cmp r1, #0x2a + bne _02085D54 + add fp, fp, #4 + ldr r6, [fp, #-4] + add sb, sb, #1 + cmp r6, #0 + mvnlt r6, #0 + b _02085D7C +_02085D54: + mov r1, #0xa + b _02085D68 +_02085D5C: + ldrsb r4, [sb], #1 + mla r4, r6, r1, r4 + sub r6, r4, #0x30 +_02085D68: + ldrsb r4, [sb] + cmp r4, #0x30 + blt _02085D7C + cmp r4, #0x39 + ble _02085D5C +_02085D7C: + ldrsb r1, [sb] + cmp r1, #0x68 + beq _02085D94 + cmp r1, #0x6c + beq _02085DAC + b _02085DC0 +_02085D94: + ldrsb r1, [sb, #1]! + cmp r1, #0x68 + orrne r5, r5, #0x40 + addeq sb, sb, #1 + orreq r5, r5, #0x100 + b _02085DC0 +_02085DAC: + ldrsb r1, [sb, #1]! + cmp r1, #0x6c + orrne r5, r5, #0x20 + addeq sb, sb, #1 + orreq r5, r5, #0x80 +_02085DC0: + ldrsb r1, [sb] + cmp r1, #0x69 + bgt _02085E04 + cmp r1, #0x63 + blt _02085DE8 + beq _02085E74 + cmp r1, #0x64 + cmpne r1, #0x69 + beq _0208602C + b _02086010 +_02085DE8: + cmp r1, #0x25 + bgt _02085DF8 + beq _02085FF4 + b _02086010 +_02085DF8: + cmp r1, #0x58 + beq _02085E60 + b _02086010 +_02085E04: + cmp r1, #0x6e + bgt _02085E14 + beq _02085F9C + b _02086010 +_02085E14: + sub r1, r1, #0x6f + cmp r1, #9 + addls pc, pc, r1, lsl #2 + b _02086010 +_02085E24: ; jump table + b _02085E4C ; case 0 + b _02085E68 ; case 1 + b _02086010 ; case 2 + b _02086010 ; case 3 + b _02085EE8 ; case 4 + b _02086010 ; case 5 + b _02085E58 ; case 6 + b _02086010 ; case 7 + b _02086010 ; case 8 + b _02086024 ; case 9 +_02085E4C: + orr r5, r5, #0x1000 + mov r0, #8 + b _0208602C +_02085E58: + orr r5, r5, #0x1000 + b _0208602C +_02085E60: + mov r3, #0x37 + b _02086024 +_02085E68: + orr r5, r5, #4 + mov r6, #8 + b _02086024 +_02085E74: + cmp r6, #0 + bge _02086010 + add fp, fp, #4 + tst r5, #8 + ldr r4, [fp, #-4] + beq _02085EB0 + mov r1, r4, lsl #0x18 + add r0, sp, #0xc + mov r1, r1, asr #0x18 + bl string_put_char + add r0, sp, #0xc + sub r2, sl, #1 + mov r1, #0x20 + bl string_fill_char + b _02085EE0 +_02085EB0: + tst r5, #0x10 + movne r0, #0x30 + moveq r0, #0x20 + mov r1, r0, lsl #0x18 + add r0, sp, #0xc + mov r1, r1, asr #0x18 + sub r2, sl, #1 + bl string_fill_char + mov r1, r4, lsl #0x18 + add r0, sp, #0xc + mov r1, r1, asr #0x18 + bl string_put_char +_02085EE0: + add sb, sb, #1 + b _020863F4 +_02085EE8: + add fp, fp, #4 + cmp r6, #0 + ldr r7, [fp, #-4] + mov r4, #0 + bge _02085F20 + ldrsb r0, [r7] + cmp r0, #0 + beq _02085F34 +_02085F08: + add r4, r4, #1 + ldrsb r0, [r7, r4] + cmp r0, #0 + bne _02085F08 + b _02085F34 +_02085F1C: + add r4, r4, #1 +_02085F20: + cmp r4, r6 + bge _02085F34 + ldrsb r0, [r7, r4] + cmp r0, #0 + bne _02085F1C +_02085F34: + tst r5, #8 + sub sl, sl, r4 + beq _02085F64 + add r0, sp, #0xc + mov r1, r7 + mov r2, r4 + bl string_put_string + add r0, sp, #0xc + mov r2, sl + mov r1, #0x20 + bl string_fill_char + b _02085F94 +_02085F64: + tst r5, #0x10 + movne r0, #0x30 + moveq r0, #0x20 + mov r1, r0, lsl #0x18 + add r0, sp, #0xc + mov r2, sl + mov r1, r1, asr #0x18 + bl string_fill_char + add r0, sp, #0xc + mov r1, r7 + mov r2, r4 + bl string_put_string +_02085F94: + add sb, sb, #1 + b _020863F4 +_02085F9C: + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x14] + tst r5, #0x100 + sub r2, r1, r0 + bne _02085FEC + tst r5, #0x40 + beq _02085FC8 + add fp, fp, #4 + ldr r0, [fp, #-4] + strh r2, [r0] + b _02085FEC +_02085FC8: + add fp, fp, #4 + tst r5, #0x80 + ldreq r0, [fp, #-4] + streq r2, [r0] + beq _02085FEC + ldr r0, [fp, #-4] + mov r1, r2, asr #0x1f + str r2, [r0] + str r1, [r0, #4] +_02085FEC: + add sb, sb, #1 + b _020863F4 +_02085FF4: + add r0, r2, #1 + cmp r0, sb + bne _02086010 + add r0, sp, #0xc + add sb, sb, #1 + bl string_put_char + b _020863F4 +_02086010: + mov r1, r2 + add r0, sp, #0xc + sub r2, sb, r2 + bl string_put_string + b _020863F4 +_02086024: + orr r5, r5, #0x1000 + mov r0, #0x10 +_0208602C: + tst r5, #8 + bicne r5, r5, #0x10 + cmp r6, #0 + bicge r5, r5, #0x10 + movlt r6, #1 + mov r4, #0 + tst r5, #0x1000 + beq _020860EC + tst r5, #0x100 + beq _02086064 + add fp, fp, #4 + ldrb r7, [fp, #-4] + mov r1, #0 + b _0208609C +_02086064: + tst r5, #0x40 + beq _0208607C + add fp, fp, #4 + ldrh r7, [fp, #-4] + mov r1, #0 + b _0208609C +_0208607C: + tst r5, #0x80 + addeq fp, fp, #4 + ldreq r7, [fp, #-4] + moveq r1, #0 + beq _0208609C + add fp, fp, #8 + ldr r7, [fp, #-8] + ldr r1, [fp, #-4] +_0208609C: + bic r5, r5, #3 + tst r5, #4 + beq _020861AC + cmp r0, #0x10 + bne _020860D4 + cmp r1, #0 + cmpeq r7, #0 + beq _020861AC + add r4, r3, #0x21 + mov r2, #0x30 + strb r4, [sp, #8] + strb r2, [sp, #9] + mov r4, #2 + b _020861AC +_020860D4: + cmp r0, #8 + bne _020861AC + mov r2, #0x30 + strb r2, [sp, #8] + mov r4, #1 + b _020861AC +_020860EC: + tst r5, #0x100 + beq _02086104 + add fp, fp, #4 + ldrsb r7, [fp, #-4] + mov r1, r7, asr #0x1f + b _0208613C +_02086104: + tst r5, #0x40 + beq _0208611C + add fp, fp, #4 + ldrsh r7, [fp, #-4] + mov r1, r7, asr #0x1f + b _0208613C +_0208611C: + tst r5, #0x80 + addeq fp, fp, #4 + ldreq r7, [fp, #-4] + moveq r1, r7, asr #0x1f + beq _0208613C + add fp, fp, #8 + ldr r7, [fp, #-8] + ldr r1, [fp, #-4] +_0208613C: + mov ip, #0 + and r2, ip, #0 + and r8, r1, #0x80000000 + cmp r2, #0 + cmpeq r8, #0 + beq _02086174 + mvn r4, r7 + mov r2, #0x2d + mvn r1, r1 + strb r2, [sp, #8] + adds r7, r4, #1 + adc r1, r1, ip + mov r4, #1 + b _020861AC +_02086174: + cmp r1, ip + cmpeq r7, ip + cmpeq r6, #0 + beq _020861AC + tst r5, #2 + beq _0208619C + mov r2, #0x2b + strb r2, [sp, #8] + mov r4, #1 + b _020861AC +_0208619C: + tst r5, #1 + movne r2, #0x20 + strneb r2, [sp, #8] + movne r4, #1 +_020861AC: + cmp r0, #8 + mov r8, #0 + beq _020861CC + cmp r0, #0xa + beq _02086218 + cmp r0, #0x10 + beq _020862B0 + b _020862FC +_020861CC: + cmp r1, r8 + cmpeq r7, r8 + beq _020862FC + add r2, sp, #0x18 + mov r0, r8 + mov lr, #7 + mov ip, r8 +_020861E8: + and r3, r7, lr + add r3, r3, #0x30 + strb r3, [r2, r8] + mov r3, r1, lsr #3 + cmp r3, r0 + mov r7, r7, lsr #3 + orr r7, r7, r1, lsl #29 + mov r1, r3 + cmpeq r7, ip + add r8, r8, #1 + bne _020861E8 + b _020862FC +_02086218: + mov r0, r8 + cmp r0, r8 + cmpeq r1, r8 + bne _02086264 + cmp r7, #0 + beq _020862FC + ldr ip, _0208644C ; =0xCCCCCCCD + add r3, sp, #0x18 + mov r2, #0xa +_0208623C: + umull r1, r0, r7, ip + movs r0, r0, lsr #3 + mul r1, r0, r2 + sub r1, r7, r1 + mov r7, r0 + add r0, r1, #0x30 + strb r0, [r3, r8] + add r8, r8, #1 + bne _0208623C + b _020862FC +_02086264: + cmp r1, r8 + cmpeq r7, r8 + beq _020862FC +_02086270: + mov r0, r7 + mov r2, #0xa + mov r3, #0 + bl _ll_udiv + mov r2, #0xa + umull r3, r2, r0, r2 + subs r2, r7, r3 + add r3, r2, #0x30 + add r2, sp, #0x18 + strb r3, [r2, r8] + cmp r1, #0 + cmpeq r0, #0 + mov r7, r0 + add r8, r8, #1 + bne _02086270 + b _020862FC +_020862B0: + cmp r1, r8 + cmpeq r7, r8 + beq _020862FC + add ip, sp, #0x18 + mov lr, #0xf +_020862C4: + and r2, r7, lr + mov r7, r7, lsr #4 + mov r0, r1, lsr #4 + orr r7, r7, r1, lsl #28 + cmp r2, #0xa + mov r1, r0 + addlt r0, r2, #0x30 + addge r0, r2, r3 + strb r0, [ip, r8] + mov r0, #0 + cmp r1, r0 + cmpeq r7, r0 + add r8, r8, #1 + bne _020862C4 +_020862FC: + cmp r4, #0 + ble _02086324 + ldrsb r0, [sp, #8] + cmp r0, #0x30 + bne _02086324 + add r0, sp, #0x18 + mov r1, #0x30 + strb r1, [r0, r8] + add r8, r8, #1 + mov r4, #0 +_02086324: + tst r5, #0x10 + sub r6, r6, r8 + beq _02086340 + sub r0, sl, r8 + sub r0, r0, r4 + cmp r6, r0 + movlt r6, r0 +_02086340: + cmp r6, #0 + subgt sl, sl, r6 + add r0, r4, r8 + sub sl, sl, r0 + ands r0, r5, #8 + str r0, [sp, #4] + bne _0208636C + add r0, sp, #0xc + mov r2, sl + mov r1, #0x20 + bl string_fill_char +_0208636C: + cmp r4, #0 + ble _02086398 + add r0, sp, #8 + add r5, r0, r4 + add r7, sp, #0xc +_02086380: + ldrsb r1, [r5, #-1]! + mov r0, r7 + sub r4, r4, #1 + bl string_put_char + cmp r4, #0 + bgt _02086380 +_02086398: + add r0, sp, #0xc + mov r2, r6 + mov r1, #0x30 + bl string_fill_char + cmp r8, #0 + ble _020863D4 + add r0, sp, #0x18 + add r5, r0, r8 + add r4, sp, #0xc +_020863BC: + ldrsb r1, [r5, #-1]! + mov r0, r4 + sub r8, r8, #1 + bl string_put_char + cmp r8, #0 + bgt _020863BC +_020863D4: + ldr r0, [sp, #4] + cmp r0, #0 + beq _020863F0 + add r0, sp, #0xc + mov r2, sl + mov r1, #0x20 + bl string_fill_char +_020863F0: + add sb, sb, #1 +_020863F4: + ldrsb r0, [sb] + cmp r0, #0 + bne _02085C00 +_02086400: + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _0208641C + ldr r0, [sp, #0x10] + mov r1, #0 + strb r1, [r0] + b _02086438 +_0208641C: + ldr r0, [sp] + cmp r0, #0 + beq _02086438 + ldr r1, [sp, #0x14] + mov r2, #0 + add r0, r1, r0 + strb r2, [r0, #-1] +_02086438: + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0208644C: .word 0xCCCCCCCD + arm_func_end OS_VsNPrintfEx + diff --git a/lib/NitroSDK/asm/std_string.s b/lib/NitroSDK/asm/std_string.s new file mode 100644 index 00000000..da673b3f --- /dev/null +++ b/lib/NitroSDK/asm/std_string.s @@ -0,0 +1,673 @@ + .include "asm/macros.inc" + .include "main_0207F894.inc" + + .text + + arm_func_start Std_CopyLString +Std_CopyLString: ; 0x02085244 + stmdb sp!, {r4, lr} + sub ip, r2, #1 + mov r4, r1 + cmp ip, #0 + mov lr, #0 + ble _02085280 +_0208525C: + ldrsb r3, [r4] + strb r3, [r0, lr] + ldrsb r3, [r4] + cmp r3, #0 + beq _02085280 + add lr, lr, #1 + cmp lr, ip + add r4, r4, #1 + blt _0208525C +_02085280: + sub r3, r2, #1 + cmp lr, r3 + blt _02085298 + cmp r2, #0 + movne r2, #0 + strneb r2, [r0, lr] +_02085298: + mov r0, r1 + bl Std_GetStringLength + ldmia sp!, {r4, pc} + arm_func_end Std_CopyLString + + arm_func_start Std_GetStringLength +Std_GetStringLength: ; 0x020852A4 + ldrsb r1, [r0] + mov r2, #0 + cmp r1, #0 + beq _020852C4 +_020852B4: + add r2, r2, #1 + ldrsb r1, [r0, r2] + cmp r1, #0 + bne _020852B4 +_020852C4: + mov r0, r2 + bx lr + arm_func_end Std_GetStringLength + + arm_func_start Std_CompareString__020852CC +Std_CompareString__020852CC: ; 0x020852CC + b _020852D8 +_020852D0: + add r0, r0, #1 + add r1, r1, #1 +_020852D8: + ldrsb r3, [r1] + ldrsb r2, [r0] + cmp r2, r3 + bne _020852F0 + cmp r2, #0 + bne _020852D0 +_020852F0: + sub r0, r2, r3 + bx lr + arm_func_end Std_CompareString__020852CC + + arm_func_start Std_CompareNString +Std_CompareNString: ; 0x020852F8 + stmdb sp!, {r3, lr} + cmp r2, #0 + beq _02085330 + cmp r2, #0 + mov lr, #0 + ble _02085330 +_02085310: + ldrb ip, [r0, lr] + ldrb r3, [r1, lr] + cmp ip, r3 + subne r0, ip, r3 + ldmneia sp!, {r3, pc} + add lr, lr, #1 + cmp lr, r2 + blt _02085310 +_02085330: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end Std_CompareNString + + arm_func_start Std_TsScanf +Std_TsScanf: ; 0x02085338 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, lr} + add r2, sp, #0xc + bic r2, r2, #3 + ldr r1, [sp, #0xc] + add r2, r2, #4 + bl Std_TvsScanf + ldmia sp!, {r3, lr} + add sp, sp, #0x10 + bx lr + arm_func_end Std_TsScanf + + arm_func_start Stdi_IsSpace +Stdi_IsSpace: ; 0x02085360 + sub r3, r0, #9 + cmp r3, #0x17 + mov r0, #0 + bxhi lr + ldr r1, _02085384 ; =0x0080001F + mov r2, #1 + tst r1, r2, lsl r3 + movne r0, r2 + bx lr + .align 2, 0 +_02085384: .word 0x0080001F + arm_func_end Stdi_IsSpace + + arm_func_start Stdi_FillBitset +Stdi_FillBitset: ; 0x02085388 + stmdb sp!, {r3, r4, r5, lr} + cmp r1, r2 + ldmhsia sp!, {r3, r4, r5, pc} + and r3, r2, #0x1f + mov ip, #1 + mov r3, ip, lsl r3 + sub r5, r3, #1 + mvn ip, #0 +_020853A8: + and r3, r1, #0x1f + mov lr, r1, lsr #5 + mov r4, ip, lsl r3 + add r1, lr, #1 + cmp r2, r1, lsl #5 + ldr r3, [r0, lr, lsl #2] + andlo r4, r4, r5 + mov r1, r1, lsl #5 + orr r3, r3, r4 + cmp r1, r2 + str r3, [r0, lr, lsl #2] + blo _020853A8 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end Stdi_FillBitset + + arm_func_start Std_TvsScanf +Std_TvsScanf: ; 0x020853DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x34 + mov r8, r1 + ldrsb r4, [r8] + mov sb, r0 + mov r0, #0 + str r0, [sp, #0xc] + str r2, [sp] + str sb, [sp, #0x10] + str r0, [sp, #4] + cmp r4, #0 + beq _02085AD4 +_0208540C: + mov r0, r4 + bl Stdi_IsSpace + cmp r0, #0 + beq _02085460 + ldrsb r0, [r8] + bl Stdi_IsSpace + cmp r0, #0 + beq _0208543C +_0208542C: + ldrsb r0, [r8, #1]! + bl Stdi_IsSpace + cmp r0, #0 + bne _0208542C +_0208543C: + ldrsb r0, [sb] + bl Stdi_IsSpace + cmp r0, #0 + beq _02085AC8 +_0208544C: + ldrsb r0, [sb, #1]! + bl Stdi_IsSpace + cmp r0, #0 + bne _0208544C + b _02085AC8 +_02085460: + cmp r4, #0x25 + beq _020854A0 + ldrsb r0, [sb] + cmp r4, r0 + bne _02085AD4 + and r0, r4, #0xff + eor r0, r0, #0x20 + sub r0, r0, #0xa1 + cmp r0, #0x3c + bhs _02085494 + ldrsb r0, [sb, #1]! + cmp r4, r0 + bne _02085AD4 +_02085494: + add sb, sb, #1 + add r8, r8, #1 + b _02085AC8 +_020854A0: + ldrsb r0, [r8, #1] + cmp r0, #0x25 + bne _020854C0 + ldrsb r0, [sb] + cmp r4, r0 + bne _02085AD4 + add r8, r8, #2 + b _02085AC8 +_020854C0: + ldrsb r0, [r8, #1]! + mov sl, #0 + mov r5, sl + cmp r0, #0x2a + mov fp, sl + mov r6, sl + orreq r5, sl, #0x2000 + ldreqsb r0, [r8, #1]! + mov r1, #0xa + b _020854F4 +_020854E8: + mla r2, r6, r1, r0 + ldrsb r0, [r8, #1]! + sub r6, r2, #0x30 +_020854F4: + cmp r0, #0x30 + blt _02085504 + cmp r0, #0x39 + ble _020854E8 +_02085504: + cmp r0, #0x68 + beq _02085518 + cmp r0, #0x6c + beq _02085530 + b _02085544 +_02085518: + ldrsb r0, [r8, #1]! + cmp r0, #0x68 + orrne r5, r5, #0x40 + orreq r5, r5, #0x100 + ldreqsb r0, [r8, #1]! + b _02085544 +_02085530: + ldrsb r0, [r8, #1]! + cmp r0, #0x6c + orrne r5, r5, #0x20 + ldreqsb r0, [r8, #1]! + orreq r5, r5, #0x80 +_02085544: + cmp r0, #0x69 + bgt _02085590 + cmp r0, #0x64 + blt _02085564 + beq _020855D8 + cmp r0, #0x69 + beq _020855E0 + b _02085AD4 +_02085564: + cmp r0, #0x5b + bgt _02085584 + cmp r0, #0x58 + blt _02085AD4 + beq _020855FC + cmp r0, #0x5b + beq _020858D0 + b _02085AD4 +_02085584: + cmp r0, #0x63 + beq _020857D8 + b _02085AD4 +_02085590: + cmp r0, #0x6e + bgt _020855A0 + beq _02085608 + b _02085AD4 +_020855A0: + sub r1, r0, #0x6f + cmp r1, #9 + addls pc, pc, r1, lsl #2 + b _02085AD4 +_020855B0: ; jump table + b _020855E8 ; case 0 + b _020855FC ; case 1 + b _02085AD4 ; case 2 + b _02085AD4 ; case 3 + b _020857D8 ; case 4 + b _02085AD4 ; case 5 + b _020855F0 ; case 6 + b _02085AD4 ; case 7 + b _02085AD4 ; case 8 + b _020855FC ; case 9 +_020855D8: + mov r4, #0xa + b _0208562C +_020855E0: + mvn r4, #0 + b _0208562C +_020855E8: + mov r4, #8 + b _0208562C +_020855F0: + orr r5, r5, #0x1000 + mov r4, #0xa + b _0208562C +_020855FC: + orr r5, r5, #0x1000 + mov r4, #0x10 + b _0208562C +_02085608: + tst r5, #0x2000 + ldreq r0, [sp, #4] + add r8, r8, #1 + subeq r0, r0, #1 + streq r0, [sp, #4] + ldr r0, [sp, #0x10] + sub sl, sb, r0 + mov fp, sl, asr #0x1f + b _0208574C +_0208562C: + ldrsb r7, [sb] + add r8, r8, #1 + mov r0, r7 + bl Stdi_IsSpace + cmp r0, #0 + beq _02085658 +_02085644: + ldrsb r7, [sb, #1]! + mov r0, r7 + bl Stdi_IsSpace + cmp r0, #0 + bne _02085644 +_02085658: + cmp r7, #0x2b + orreq r5, r5, #2 + beq _02085670 + cmp r7, #0x2d + bne _02085678 + orr r5, r5, #8 +_02085670: + ldrsb r7, [sb, #1]! + b _02085658 +_02085678: + mvn r0, #0 + cmp r4, r0 + bne _020856A4 + cmp r7, #0x30 + movne r4, #0xa + bne _020856A4 + ldrsb r0, [sb, #1] + cmp r0, #0x78 + cmpne r0, #0x58 + moveq r4, #0x10 + movne r4, #8 +_020856A4: + cmp r4, #0x10 + cmpeq r7, #0x30 + bne _020856C0 + ldrsb r0, [sb, #1] + cmp r0, #0x78 + cmpne r0, #0x58 + ldreqsb r7, [sb, #2]! +_020856C0: + cmp r6, #0 + mvneq r6, #0x80000000 + cmp r6, #0 + mov r2, #0 + ble _0208572C + mov ip, r4, asr #0x1f +_020856D8: + sub r3, r7, #0x30 + cmp r3, #0xa + blo _02085700 + sub r0, r3, #0x31 + cmp r0, #6 + sublo r3, r3, #0x27 + blo _02085700 + sub r3, r3, #0x11 + cmp r3, #6 + addlo r3, r3, #0xa +_02085700: + cmp r3, r4 + bhs _0208572C + ldrsb r7, [sb, #1]! + add r2, r2, #1 + umull r1, r0, sl, r4 + mla r0, sl, ip, r0 + adds sl, r3, r1 + mla r0, fp, r4, r0 + adc fp, r0, #0 + cmp r2, r6 + blt _020856D8 +_0208572C: + cmp r2, #0 + beq _02085AD4 + tst r5, #8 + beq _02085744 + rsbs sl, sl, #0 + rsc fp, fp, #0 +_02085744: + mov r0, #1 + str r0, [sp, #0xc] +_0208574C: + tst r5, #0x2000 + bne _02085AC8 + ldr r0, [sp, #4] + tst r5, #0x100 + add r0, r0, #1 + str r0, [sp, #4] + beq _02085780 + ldr r0, [sp] + add r0, r0, #4 + str r0, [sp] + ldr r0, [r0, #-4] + strb sl, [r0] + b _02085AC8 +_02085780: + tst r5, #0x40 + beq _020857A0 + ldr r0, [sp] + add r0, r0, #4 + str r0, [sp] + ldr r0, [r0, #-4] + strh sl, [r0] + b _02085AC8 +_020857A0: + tst r5, #0x80 + beq _020857C0 + ldr r0, [sp] + add r0, r0, #4 + str r0, [sp] + ldr r0, [r0, #-4] + stmia r0, {sl, fp} + b _02085AC8 +_020857C0: + ldr r0, [sp] + add r0, r0, #4 + str r0, [sp] + ldr r0, [r0, #-4] + str sl, [r0] + b _02085AC8 +_020857D8: + mov r1, #1 + tst r5, #0x2000 + add r8, r8, #1 + mov r4, #0 + str r1, [sp, #0xc] + bne _0208580C + ldr r1, [sp] + add r1, r1, #4 + str r1, [sp] + ldr r4, [r1, #-4] + ldr r1, [sp, #4] + add r1, r1, #1 + str r1, [sp, #4] +_0208580C: + cmp r0, #0x73 + bne _02085888 + ldrsb r5, [sb] + cmp r6, #0 + mvneq r6, #0x80000000 + mov r0, r5 + bl Stdi_IsSpace + cmp r0, #0 + beq _02085858 +_02085830: + ldrsb r5, [sb, #1]! + mov r0, r5 + bl Stdi_IsSpace + cmp r0, #0 + bne _02085830 + b _02085858 +_02085848: + cmp r4, #0 + strneb r5, [r4], #1 + ldrsb r5, [sb, #1]! + sub r6, r6, #1 +_02085858: + cmp r5, #0 + beq _02085878 + mov r0, r5 + bl Stdi_IsSpace + cmp r0, #0 + bne _02085878 + cmp r6, #0 + bgt _02085848 +_02085878: + cmp r4, #0 + movne r0, #0 + strneb r0, [r4] + b _02085AC8 +_02085888: + cmp r6, #0 + moveq r6, #1 + ldrsb r0, [sb] + b _020858A8 +_02085898: + cmp r4, #0 + strneb r0, [r4], #1 + ldrsb r0, [sb, #1]! + sub r6, r6, #1 +_020858A8: + cmp r0, #0 + beq _020858B8 + cmp r6, #0 + bgt _02085898 +_020858B8: + cmp r4, #0 + beq _02085AC8 + cmp r6, #0 + movgt r0, #0 + strgtb r0, [r4] + b _02085AC8 +_020858D0: + mov sl, #0 + mov r3, #1 + add r1, sp, #0x14 + mov r0, sl + mov r2, #0x20 + mov r7, sl + mov fp, sl + str r3, [sp, #8] + bl MTi_CpuClear32 + ldrsb r0, [r8, #1]! + cmp r0, #0x5e + moveq r0, sl + addeq r8, r8, #1 + streq r0, [sp, #8] + ldrsb r0, [r8] + cmp r0, #0x5d + bne _02085938 + and r2, r0, #0xff + mov r0, r2, lsr #5 + add r1, sp, #0x14 + ldr r4, [r1, r0, lsl #2] + and r2, r2, #0x1f + mov r3, #1 + orr r2, r4, r3, lsl r2 + str r2, [r1, r0, lsl #2] + add r8, r8, #1 +_02085938: + add r4, sp, #0x14 +_0208593C: + ldrsb r0, [r8] + cmp r0, #0 + cmpne r0, #0x5d + bne _0208598C + cmp fp, #0 + beq _0208597C + add r4, sp, #0x14 + mov r3, r7, lsr #5 + ldr r2, [r4, r3, lsl #2] + and r0, r7, #0x1f + mov r1, #1 + orr r0, r2, r1, lsl r0 + str r0, [r4, r3, lsl #2] + ldr r0, [sp, #0x18] + orr r0, r0, #0x2000 + str r0, [sp, #0x18] +_0208597C: + ldrsb r0, [r8] + cmp r0, #0x5d + addeq r8, r8, #1 + b _02085A38 +_0208598C: + cmp fp, #0 + bne _020859CC + cmp r7, #0 + beq _020859A8 + cmp r0, #0x2d + moveq fp, #1 + beq _02085A30 +_020859A8: + and r0, r0, #0xff + mov r3, r0, lsr #5 + ldr r2, [r4, r3, lsl #2] + and r1, r0, #0x1f + mov r0, #1 + orr r0, r2, r0, lsl r1 + str r0, [r4, r3, lsl #2] + ldrb r7, [r8] + b _02085A30 +_020859CC: + and r2, r0, #0xff + cmp r7, r2 + bls _02085A18 + mov r1, r7, lsr #5 + ldr fp, [r4, r1, lsl #2] + and r7, r7, #0x1f + mov r3, #1 + orr r3, fp, r3, lsl r7 + str r3, [r4, r1, lsl #2] + ldr r1, [sp, #0x18] + mov r0, r2, lsr #5 + orr r1, r1, #0x2000 + str r1, [sp, #0x18] + ldr r3, [r4, r0, lsl #2] + and r2, r2, #0x1f + mov r1, #1 + orr r1, r3, r1, lsl r2 + str r1, [r4, r0, lsl #2] + b _02085A28 +_02085A18: + mov r1, r7 + add r2, r2, #1 + mov r0, r4 + bl Stdi_FillBitset +_02085A28: + mov fp, #0 + mov r7, fp +_02085A30: + add r8, r8, #1 + b _0208593C +_02085A38: + mov r0, #1 + tst r5, #0x2000 + str r0, [sp, #0xc] + bne _02085A64 + ldr r0, [sp] + add r0, r0, #4 + str r0, [sp] + ldr sl, [r0, #-4] + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02085A64: + cmp r6, #0 + mvneq r6, #0x80000000 + ldrsb r0, [sb] + add r3, sp, #0x14 + b _02085AAC +_02085A78: + and r4, r0, #0xff + mov r1, r4, lsr #5 + ldr r2, [r3, r1, lsl #2] + and r1, r4, #0x1f + mov r1, r2, lsr r1 + and r2, r1, #1 + ldr r1, [sp, #8] + cmp r1, r2 + bne _02085ABC + cmp sl, #0 + strneb r0, [sl], #1 + ldrsb r0, [sb, #1]! + sub r6, r6, #1 +_02085AAC: + cmp r0, #0 + beq _02085ABC + cmp r6, #0 + bgt _02085A78 +_02085ABC: + cmp sl, #0 + movne r0, #0 + strneb r0, [sl] +_02085AC8: + ldrsb r4, [r8] + cmp r4, #0 + bne _0208540C +_02085AD4: + ldrsb r0, [sb] + cmp r0, #0 + ldreq r0, [sp, #0xc] + cmpeq r0, #0 + mvneq r0, #0 + streq r0, [sp, #4] + ldr r0, [sp, #4] + add sp, sp, #0x34 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end Std_TvsScanf + diff --git a/src/main_0207E81C.c b/lib/NitroSDK/src/fs_command_default_1.c similarity index 60% rename from src/main_0207E81C.c rename to lib/NitroSDK/src/fs_command_default_1.c index e6de9eb3..72252764 100644 --- a/src/main_0207E81C.c +++ b/lib/NitroSDK/src/fs_command_default_1.c @@ -1,6 +1,6 @@ #include "main_0207E81C.h" -u8 FSi_OpenFileDirectCommand(s32 *param_0) // FSi_OpenFileDirectCommand +u8 FSi_OpenFileDirectCommand(s32 *param_0) { param_0[9] = param_0[12]; param_0[11] = param_0[12]; @@ -10,7 +10,8 @@ u8 FSi_OpenFileDirectCommand(s32 *param_0) // FSi_OpenFileDirectCommand return 0; } -u8 FSi_CloseFileCommand() // FSi_CloseFileCommand +u8 FSi_CloseFileCommand() { return 0; } + diff --git a/main.lsf b/main.lsf index c3a667f5..63fb041c 100644 --- a/main.lsf +++ b/main.lsf @@ -278,12 +278,24 @@ Static main Object lib/NitroSDK/asm/pxi_fifo.o Object lib/NitroSDK/asm/fs_command.o Object lib/NitroSDK/asm/fs_command_default.o - Object src/main_0207E81C.o - Object asm/main_0207E84C.o + Object lib/NitroSDK/src/fs_command_default_1.o + Object lib/NitroSDK/asm/fs_archive.o Object src/main_0207F3E4.o - Object asm/main_0207F40C.o + Object lib/NitroSDK/asm/fs_file.o Object src/main_0207F818.o Object asm/main_0207F894.o + Object lib/NitroSDK/asm/card_rom.o + Object lib/NitroSDK/asm/card_request.o + Object lib/NitroSDK/asm/card_pullOut.o + Object lib/NitroSDK/asm/ctrdg.o + Object lib/NitroSDK/asm/ctrdg_proc.o + Object lib/NitroSDK/asm/ctrdg_task.o + Object lib/NitroSDK/asm/math_math.o + Object lib/NitroSDK/asm/math_dgt.o + Object lib/NitroSDK/asm/math_crc.o + Object lib/NitroSDK/asm/std_string.o + Object lib/NitroSDK/asm/os_printf.o + Object lib/MSL_C/asm/msl.o Object lib/MSL_C/src/arith.o Object lib/MSL_C/asm/MSL_Common_buffer_io.o Object asm/main_02086568.o