summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/CTRDG_arm9.s3238
-rw-r--r--asm/MATH_arm9.s320
-rw-r--r--asm/rom2dism.s3105
-rw-r--r--global.inc6
-rw-r--r--pokediamond.lcf2
5 files changed, 3566 insertions, 3105 deletions
diff --git a/asm/CTRDG_arm9.s b/asm/CTRDG_arm9.s
new file mode 100644
index 00000000..02592388
--- /dev/null
+++ b/asm/CTRDG_arm9.s
@@ -0,0 +1,3238 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CTRDG_CheckEnabled
+CTRDG_CheckEnabled:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsOptionCartridge
+_020DB128: ; 0x020DB128
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl CTRDG_IsEnabled
+_020DB13C: ; 0x020DB13C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_Enable
+CTRDG_Enable: ; 0x020DB15C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020DB1AC ; =0x021D6940
+ mov r4, r0
+ str r5, [r1, #0x0]
+ bl CTRDG_IsOptionCartridge
+_020DB17C: ; 0x020DB17C
+ cmp r0, #0x0
+ bne _020DB198
+ cmp r5, #0x0
+ movne r1, #0x1000
+ moveq r1, #0x5000
+ mov r0, #0xf000
+ bl OS_SetDPermissionsForProtectionRegion
+_020DB198:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DB1AC: .word 0x021D6940
+
+ arm_func_start CTRDG_IsEnabled
+CTRDG_IsEnabled:
+ ldr r0, _020DB1BC ; =0x021D6940
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020DB1BC: .word 0x021D6940
+
+ arm_func_start CTRDGi_AccessCommon
+CTRDGi_AccessCommon: ; 0x020DB1C0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl CTRDG_IsExisting
+_020DB1DC: ; 0x020DB1DC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl CTRDG_CheckEnabled
+ ldr r0, _020DB2BC ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_LockCartridge
+ cmp r4, #0x21
+ bhi _020DB240
+ cmp r4, #0x21
+ bhs _020DB270
+ cmp r4, #0x11
+ bhi _020DB234
+ cmp r4, #0x10
+ blo _020DB294
+ cmp r4, #0x10
+ beq _020DB290
+ cmp r4, #0x11
+ beq _020DB260
+ b _020DB294
+_020DB234:
+ cmp r4, #0x20
+ streqh r6, [r7, #0x0]
+ b _020DB294
+_020DB240:
+ cmp r4, #0x40
+ bhi _020DB254
+ cmp r4, #0x40
+ streq r6, [r7, #0x0]
+ b _020DB294
+_020DB254:
+ cmp r4, #0x41
+ beq _020DB280
+ b _020DB294
+_020DB260:
+ cmp r5, #0x0
+ ldrneb r0, [r7, #0x0]
+ strneb r0, [r5, #0x0]
+ b _020DB294
+_020DB270:
+ cmp r5, #0x0
+ ldrneh r0, [r7, #0x0]
+ strneh r0, [r5, #0x0]
+ b _020DB294
+_020DB280:
+ cmp r5, #0x0
+ ldrne r0, [r7, #0x0]
+ strne r0, [r5, #0x0]
+ b _020DB294
+_020DB290:
+ strb r6, [r7, #0x0]
+_020DB294:
+ ldr r0, _020DB2BC ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_UnlockCartridge
+ bl CTRDG_IsExisting
+_020DB2A4: ; 0x020DB2A4
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB2BC: .word 0x021D6944
+
+ arm_func_start CTRDG_Read32
+CTRDG_Read32: ; 0x020DB2C0
+ ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon
+ mov r2, r1
+ mov r1, #0x0
+ mov r3, #0x41
+ bx r12
+ .balign 4
+_020DB2D4: .word CTRDGi_AccessCommon
+
+ arm_func_start CTRDGi_CopyCommon
+CTRDGi_CopyCommon: ; 0x020DB2D8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl CTRDG_IsExisting
+_020DB2F4: ; 0x020DB2F4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl CTRDG_CheckEnabled
+ ldr r0, _020DB42C ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_LockCartridge
+ ldr r0, [sp, #0x18]
+ ands r0, r0, #0x1
+ bne _020DB338
+ mov r0, r7
+ bl MI_StopDma
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+_020DB338:
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x11
+ bhi _020DB36C
+ cmp r0, #0x10
+ blo _020DB360
+ cmp r0, #0x10
+ beq _020DB38C
+ cmp r0, #0x11
+ beq _020DB3BC
+ b _020DB404
+_020DB360:
+ cmp r0, #0x1
+ beq _020DB3E4
+ b _020DB404
+_020DB36C:
+ cmp r0, #0x20
+ bhi _020DB380
+ cmp r0, #0x20
+ beq _020DB3A4
+ b _020DB404
+_020DB380:
+ cmp r0, #0x21
+ beq _020DB3D0
+ b _020DB404
+_020DB38C:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl MI_DmaCopy16
+ b _020DB404
+_020DB3A4:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl MI_DmaCopy32
+ b _020DB404
+_020DB3BC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MIi_CpuCopy16
+ b _020DB404
+_020DB3D0:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MIi_CpuCopy32
+ b _020DB404
+_020DB3E4:
+ cmp r4, #0x0
+ mov r1, #0x0
+ bls _020DB404
+_020DB3F0:
+ ldrb r0, [r6], #0x1
+ add r1, r1, #0x1
+ cmp r1, r4
+ strb r0, [r5], #0x1
+ blo _020DB3F0
+_020DB404:
+ ldr r0, _020DB42C ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_UnlockCartridge
+ bl CTRDG_IsExisting
+_020DB414: ; 0x020DB414
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB42C: .word 0x021D6944
+
+ arm_func_start CTRDG_CpuCopy32
+CTRDG_CpuCopy32: ; 0x020DB430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x21
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_CpuCopy16
+CTRDG_CpuCopy16: ; 0x020DB464
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x11
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_CpuCopy8
+CTRDG_CpuCopy8: ; 0x020DB498
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ cmp lr, #0x8000000
+ blo _020DB4DC
+ ldr r2, _020DB500 ; =0x0A010000
+ cmp lr, r2
+ bhs _020DB4DC
+ mov r12, #0x1
+ mov r2, r0
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020DB4DC:
+ mov r12, #0x1
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB500: .word 0x0A010000
+
+ arm_func_start CTRDGi_SendtoPxi
+CTRDGi_SendtoPxi: ; 0x020DB504
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r1, r7
+ mov r0, #0xd
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020DB520: ; 0x020DB520
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r6, #0x1
+ mov r5, #0xd
+ mov r4, #0x0
+_020DB53C:
+ mov r0, r6
+ blx FUN_020005F2
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020DB554: ; 0x020DB554
+ cmp r0, #0x0
+ bne _020DB53C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CTRDGi_UnlockByProcessor
+CTRDGi_UnlockByProcessor: ; 0x020DB568
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ bne _020DB580
+ bl OS_UnlockCartridge
+_020DB580:
+ ldr r0, [r4, #0x4]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_LockByProcessor
+CTRDGi_LockByProcessor: ; 0x020DB590
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ ldr r5, _020DB60C ; =0x027FFFE8
+ mov r4, #0x1
+_020DB5A8:
+ bl OS_DisableInterrupts
+ str r0, [r6, #0x4]
+ mov r0, r5
+ bl OS_ReadOwnerOfLockWord
+ and r0, r0, #0x40
+ str r0, [r6, #0x0]
+ ldr r0, [r6, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, r7
+ bl OS_TryLockCartridge
+_020DB5DC: ; 0x020DB5DC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r6, #0x4]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ blx FUN_020005F2
+ b _020DB5A8
+_020DB600: ; 0x020DB600
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB60C: .word 0x027FFFE8
+
+ arm_func_start CTRDGi_RestoreAccessCycle
+CTRDGi_RestoreAccessCycle: ; 0x020DB610
+ ldr r3, _020DB640 ; =0x04000204
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r3, #0x0]
+ bic r1, r1, #0xc
+ orr r1, r1, r2, lsl #0x2
+ strh r1, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ ldr r2, [r0, #0x4]
+ bic r0, r1, #0x10
+ orr r0, r0, r2, lsl #0x4
+ strh r0, [r3, #0x0]
+ bx lr
+ .balign 4
+_020DB640: .word 0x04000204
+
+ arm_func_start CTRDGi_ChangeLatestAccessCycle
+CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644
+ ldr r2, _020DB688 ; =0x04000204
+ ldrh r1, [r2, #0x0]
+ and r1, r1, #0xc
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x0]
+ ldrh r1, [r2, #0x0]
+ and r1, r1, #0x10
+ mov r1, r1, asr #0x4
+ str r1, [r0, #0x4]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0xc
+ orr r0, r0, #0xc
+ strh r0, [r2, #0x0]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0x10
+ strh r0, [r2, #0x0]
+ bx lr
+ .balign 4
+_020DB688: .word 0x04000204
+
+ arm_func_start CTRDG_IsExisting
+CTRDG_IsExisting:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ ldr r2, _020DB798 ; =0x027FFC30
+ ldr r0, _020DB79C ; =0x0000FFFF
+ ldrh r1, [r2, #0x0]
+ mov r4, #0x1
+ cmp r1, r0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1e
+ mov r0, r0, lsr #0x1f
+ cmp r0, #0x1
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _020DB7A0 ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_LockByProcessor
+ add r0, sp, #0x8
+ bl CTRDGi_ChangeLatestAccessCycle
+ mov r0, #0x8000000
+ ldrb r2, [r0, #0xb2]
+ cmp r2, #0x96
+ bne _020DB714
+ ldr r1, _020DB798 ; =0x027FFC30
+ ldrh r0, [r0, #0xbe]
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ bne _020DB75C
+_020DB714:
+ cmp r2, #0x96
+ beq _020DB734
+ ldr r1, _020DB798 ; =0x027FFC30
+ ldr r0, _020DB7A4 ; =0x0801FFFE
+ ldrh r1, [r1, #0x0]
+ ldrh r0, [r0, #0x0]
+ cmp r1, r0
+ bne _020DB75C
+_020DB734:
+ ldr r2, _020DB798 ; =0x027FFC30
+ mov r0, #0x8000000
+ ldr r1, [r2, #0x8]
+ ldr r0, [r0, #0xac]
+ cmp r1, r0
+ beq _020DB770
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ beq _020DB770
+_020DB75C:
+ ldr r1, _020DB798 ; =0x027FFC30
+ mov r4, #0x0
+ ldrb r0, [r1, #0x5]
+ orr r0, r0, #0x2
+ strb r0, [r1, #0x5]
+_020DB770:
+ add r0, sp, #0x8
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _020DB7A0 ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_UnlockByProcessor
+ mov r0, r4
+ add sp, sp, #0x10
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB798: .word 0x027FFC30
+_020DB79C: .word 0x0000FFFF
+_020DB7A0: .word 0x021D6944
+_020DB7A4: .word 0x0801FFFE
+
+ arm_func_start CTRDG_IsPulledOut
+CTRDG_IsPulledOut: ; 0x020DB7A8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020DB800 ; =0x027FFC30
+ ldr r0, _020DB804 ; =0x0000FFFF
+ ldrh r1, [r2, #0x0]
+ cmp r1, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, lsr #0x1f
+ bne _020DB7E4
+ bl CTRDG_IsExisting
+_020DB7E4:
+ ldr r0, _020DB800 ; =0x027FFC30
+ ldrb r0, [r0, #0x5]
+ mov r0, r0, lsl #0x1e
+ mov r0, r0, lsr #0x1f
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB800: .word 0x027FFC30
+_020DB804: .word 0x0000FFFF
+
+ arm_func_start CTRDGi_GetAgbMakerCodeAtInit
+CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB814: ; 0x020DB814
+ cmp r0, #0x0
+ ldrne r0, _020DB82C ; =0x027FFC30
+ ldrneh r4, [r0, #0x6]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB82C: .word 0x027FFC30
+
+ arm_func_start CTRDG_GetAgbMakerCode
+CTRDG_GetAgbMakerCode: ; 0x020DB830
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDG_IsExisting
+_020DB83C: ; 0x020DB83C
+ cmp r0, #0x0
+ beq _020DB84C
+ bl CTRDGi_GetAgbMakerCodeAtInit
+ mov r4, r0
+_020DB84C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_GetAgbGameCodeAtInit
+CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB864: ; 0x020DB864
+ cmp r0, #0x0
+ ldrne r0, _020DB87C ; =0x027FFC30
+ ldrne r4, [r0, #0x8]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB87C: .word 0x027FFC30
+
+ arm_func_start CTRDG_GetAgbGameCode
+CTRDG_GetAgbGameCode: ; 0x020DB880
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDG_IsExisting
+_020DB88C: ; 0x020DB88C
+ cmp r0, #0x0
+ beq _020DB89C
+ bl CTRDGi_GetAgbGameCodeAtInit
+ mov r4, r0
+_020DB89C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_IsAgbCartridgeAtInit
+CTRDGi_IsAgbCartridgeAtInit:
+ ldr r0, _020DB8BC ; =0x027FFC30
+ ldrb r0, [r0, #0x5]
+ mov r0, r0, lsl #0x1f
+ mov r0, r0, lsr #0x1f
+ bx lr
+ .balign 4
+_020DB8BC: .word 0x027FFC30
+
+ arm_func_start CTRDG_IsOptionCartridge
+CTRDG_IsOptionCartridge:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsExisting
+_020DB8CC: ; 0x020DB8CC
+ cmp r0, #0x0
+ beq _020DB8EC
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB8D8: ; 0x020DB8D8
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {lr}
+ bxeq lr
+_020DB8EC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_IsAgbCartridge
+CTRDG_IsAgbCartridge: ; 0x020DB8FC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsExisting
+_020DB908: ; 0x020DB908
+ cmp r0, #0x0
+ beq _020DB928
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB914: ; 0x020DB914
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {lr}
+ bxne lr
+_020DB928:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_InitCommon
+CTRDGi_InitCommon: ; 0x020DB938
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020DB970 ; =0x021D6944
+ mov r3, #0x0
+ ldr r2, _020DB974 ; =0x05000001
+ add r0, sp, #0x0
+ str r3, [sp, #0x0]
+ blx FUN_020002FE
+ bl OS_GetLockID
+ ldr r1, _020DB970 ; =0x021D6944
+ strh r0, [r1, #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB970: .word 0x021D6944
+_020DB974: .word 0x05000001
+
+ arm_func_start CTRDGi_CallbackForSetPhi
+CTRDGi_CallbackForSetPhi: ; 0x020DB978
+ ldr r0, _020DB988 ; =0x021D694C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020DB988: .word 0x021D694C
+
+ arm_func_start CTRDG_TerminateForPulledOut
+CTRDG_TerminateForPulledOut: ; 0x020DB98C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x2
+ bl CTRDGi_SendtoPxi
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_PulledOutCallback
+CTRDGi_PulledOutCallback: ; 0x020DB9AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x11
+ bne _020DBA14
+ ldr r0, _020DBA24 ; =0x021D6954
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020DBA28 ; =0x021D6958
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020DB9F0
+ blx r1
+_020DB9F0:
+ cmp r0, #0x0
+ beq _020DB9FC
+ bl CTRDG_TerminateForPulledOut
+_020DB9FC:
+ ldr r0, _020DBA24 ; =0x021D6954
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020DBA14:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBA24: .word 0x021D6954
+_020DBA28: .word 0x021D6958
+
+ arm_func_start CTRDGi_CallbackForInitModuleInfo
+CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x1
+ ldreq r0, _020DBA64 ; =0x021D6944
+ moveq r1, #0x1
+ streqh r1, [r0, #0x0]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBA64: .word 0x021D6944
+
+ arm_func_start CTRDGi_InitModuleInfo
+CTRDGi_InitModuleInfo: ; 0x020DBA68
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ ldr r0, _020DBC50 ; =0x021D6948
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x14
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, _020DBC54 ; =0x04000300
+ mov r2, #0x1
+ str r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x1
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, #0x40000
+ bl OS_SetIrqMask
+ ldr r3, _020DBC58 ; =0x04000208
+ mov r2, #0x1
+ ldrh r4, [r3, #0x0]
+ ldr r1, _020DBC5C ; =0x021D6944
+ mov r6, r0
+ strh r2, [r3, #0x0]
+ ldrh r0, [r1, #0x2]
+ add r1, sp, #0x0
+ bl CTRDGi_LockByProcessor
+ ldr r1, _020DBC60 ; =0x04000204
+ add r0, sp, #0x8
+ ldrh r1, [r1, #0x0]
+ and r1, r1, #0x8000
+ mov r5, r1, asr #0xf
+ bl CTRDGi_ChangeLatestAccessCycle
+ ldr r3, _020DBC60 ; =0x04000204
+ ldr r0, _020DBC64 ; =0x021D6960
+ ldrh r2, [r3, #0x0]
+ add r0, r0, #0x80
+ mov r1, #0x40
+ bic r2, r2, #0x8000
+ strh r2, [r3, #0x0]
+ bl DC_InvalidateRange
+ ldr r2, _020DBC64 ; =0x021D6960
+ ldr r1, _020DBC68 ; =0x08000080
+ mov r0, #0x1
+ mov r3, #0x40
+ add r2, r2, #0x80
+ bl MI_DmaCopy16
+ ldr r2, _020DBC60 ; =0x04000204
+ add r0, sp, #0x8
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x8000
+ orr r1, r1, r5, lsl #0xf
+ strh r1, [r2, #0x0]
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _020DBC5C ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_UnlockByProcessor
+ ldr r0, _020DBC6C ; =0x027FFF9B
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020DBB70
+ ldr r0, _020DBC70 ; =0x027FFF9A
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020DBBDC
+_020DBB70:
+ ldr r2, _020DBC64 ; =0x021D6960
+ ldr r0, _020DBC74 ; =0x027FFC30
+ ldrh r1, [r2, #0xbe]
+ mov r3, #0x0
+ strh r1, [r0, #0x0]
+_020DBB84:
+ add r0, r2, r3
+ ldrb r1, [r0, #0xb5]
+ add r0, r3, #0x2700000
+ add r0, r0, #0xff000
+ add r3, r3, #0x1
+ strb r1, [r0, #0xC32]
+ cmp r3, #0x3
+ blt _020DBB84
+ ldrh r0, [r2, #0xb0]
+ ldr r1, _020DBC74 ; =0x027FFC30
+ strh r0, [r1, #0x6]
+ ldr r0, [r2, #0xac]
+ str r0, [r1, #0x8]
+ bl CTRDG_IsExisting
+_020DBBBC: ; 0x020DBBBC
+ cmp r0, #0x0
+ movne r2, #0x1
+ ldr r1, _020DBC6C ; =0x027FFF9B
+ moveq r2, #0x0
+ strb r2, [r1, #0x0]
+ ldr r0, _020DBC70 ; =0x027FFF9A
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+_020DBBDC:
+ ldr r0, _020DBC78 ; =0xFFFF0020
+ ldr r1, _020DBC7C ; =0x021D6964
+ mov r2, #0x9c
+ bl MIi_CpuCopy32
+ bl DC_FlushAll
+ ldr r0, _020DBC64 ; =0x021D6960
+ add r0, r0, #0xfe000000
+ mov r0, r0, lsr #0x5
+ mov r0, r0, lsl #0x6
+ orr r0, r0, #0x1
+ bl CTRDGi_SendtoPxi
+ ldr r5, _020DBC5C ; =0x021D6944
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x1
+ beq _020DBC30
+ mov r7, #0x1
+_020DBC1C:
+ mov r0, r7
+ blx FUN_020005F2
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x1
+ bne _020DBC1C
+_020DBC30:
+ ldr r2, _020DBC58 ; =0x04000208
+ mov r0, r6
+ ldrh r1, [r2, #0x0]
+ strh r4, [r2, #0x0]
+ bl OS_SetIrqMask
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DBC50: .word 0x021D6948
+_020DBC54: .word 0x04000300
+_020DBC58: .word 0x04000208
+_020DBC5C: .word 0x021D6944
+_020DBC60: .word 0x04000204
+_020DBC64: .word 0x021D6960
+_020DBC68: .word 0x08000080
+_020DBC6C: .word 0x027FFF9B
+_020DBC70: .word 0x027FFF9A
+_020DBC74: .word 0x027FFC30
+_020DBC78: .word 0xFFFF0020
+_020DBC7C: .word 0x021D6964
+
+ arm_func_start CTRDG_Init
+CTRDG_Init: ; 0x020DBC80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DBD34 ; =0x021D6950
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ bl CTRDGi_InitCommon
+ ldr r0, _020DBD38 ; =0x021D6954
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bl PXI_Init
+ mov r5, #0xd
+ mov r4, #0x1
+_020DBCC4:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020DBCD0: ; 0x020DBCD0
+ cmp r0, #0x0
+ beq _020DBCC4
+ ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo
+ mov r0, #0xd
+ bl PXI_SetFifoRecvCallback
+ bl CTRDGi_InitModuleInfo
+ mov r0, #0xd
+ mov r1, #0x0
+ bl PXI_SetFifoRecvCallback
+ ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback
+ mov r0, #0xd
+ bl PXI_SetFifoRecvCallback
+ ldr r1, _020DBD44 ; =0x021D6958
+ mov r2, #0x0
+ ldr r0, _020DBD48 ; =0x021D6A20
+ str r2, [r1, #0x0]
+ bl CTRDGi_InitTaskThread
+ ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi
+ mov r0, #0x11
+ bl PXI_SetFifoRecvCallback
+_020DBD20: ; 0x020DBD20
+ mov r0, #0x0
+ bl CTRDG_Enable
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DBD34: .word 0x021D6950
+_020DBD38: .word 0x021D6954
+_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo
+_020DBD40: .word CTRDGi_PulledOutCallback
+_020DBD44: .word 0x021D6958
+_020DBD48: .word 0x021D6A20
+_020DBD4C: .word CTRDGi_CallbackForSetPhi
+
+ arm_func_start CTRDG_IdentifyAgbBackup
+CTRDG_IdentifyAgbBackup: ; 0x020DBD50
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ cmp r7, #0x1
+ mov r0, #0x1
+ bhi _020DBEAC
+ bl OS_GetLockID
+ ldr r1, _020DBED8 ; =0x021D6B0C
+ strh r0, [r1, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_LockCartridge
+ ldr r6, _020DBEDC ; =0x04000204
+ ldr r1, _020DBEE0 ; =0x02103FE4
+ ldrh r3, [r6, #0x0]
+ ldrh r2, [r6, #0x0]
+ ldr r0, _020DBEE4 ; =0x021D6B28
+ and r4, r3, #0x3
+ bic r2, r2, #0x3
+ orr r2, r2, #0x3
+ strh r2, [r6, #0x0]
+ str r1, [r0, #0x0]
+ bl CTRDGi_ReadFlashID
+ ldr r2, _020DBEDC ; =0x04000204
+ mov r6, r0
+ ldrh r1, [r2, #0x0]
+ cmp r7, #0x0
+ ldreq r5, _020DBEE8 ; =0x02103FF4
+ bic r1, r1, #0x3
+ orr r1, r1, r4
+ cmp r7, #0x1
+ ldr r0, _020DBED8 ; =0x021D6B0C
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ ldreq r5, _020DBEEC ; =0x02103FE8
+ bl OS_UnlockCartridge2
+ ldr r2, [r5, #0x0]
+ mov r0, #0x1
+ ldrh r1, [r2, #0x38]
+ cmp r1, #0x0
+ beq _020DBE14
+ and r3, r6, #0xff
+_020DBDF4:
+ ldrh r1, [r2, #0x38]
+ cmp r3, r1
+ moveq r0, #0x0
+ beq _020DBE14
+ ldr r2, [r5, #0x4]!
+ ldrh r1, [r2, #0x38]
+ cmp r1, #0x0
+ bne _020DBDF4
+_020DBE14:
+ ldr r2, [r2, #0x0]
+ ldr r1, _020DBEF0 ; =0x021D6B14
+ ldr r3, _020DBEF4 ; =0x021D6B34
+ str r2, [r1, #0x0]
+ ldr r1, [r5, #0x0]
+ ldr r2, _020DBEF8 ; =0x021D6B2C
+ ldr r4, [r1, #0x4]
+ ldr r1, _020DBEFC ; =0x021D6B18
+ str r4, [r3, #0x0]
+ ldr r3, [r5, #0x0]
+ ldr r6, _020DBF00 ; =0x021D6B1C
+ ldr r3, [r3, #0x8]
+ ldr r4, _020DBF04 ; =0x021D6B30
+ str r3, [r2, #0x0]
+ ldr r2, [r5, #0x0]
+ ldr r3, _020DBF08 ; =0x021D6B24
+ ldr r7, [r2, #0xc]
+ ldr r2, _020DBEE4 ; =0x021D6B28
+ str r7, [r1, #0x0]
+ ldr r7, [r5, #0x0]
+ ldr r1, _020DBF0C ; =0x021D6B20
+ ldr r7, [r7, #0x10]
+ add sp, sp, #0x4
+ str r7, [r6, #0x0]
+ ldr r6, [r5, #0x0]
+ ldr r6, [r6, #0x14]
+ str r6, [r4, #0x0]
+ ldr r4, [r5, #0x0]
+ ldr r4, [r4, #0x18]
+ str r4, [r3, #0x0]
+ ldr r3, [r5, #0x0]
+ ldr r3, [r3, #0x1c]
+ str r3, [r2, #0x0]
+ ldr r2, [r5, #0x0]
+ add r2, r2, #0x20
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020DBEAC:
+ cmp r7, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ bl OS_GetLockID
+ ldr r1, _020DBF10 ; =0x021D6B4C
+ strh r0, [r1, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DBED8: .word 0x021D6B0C
+_020DBEDC: .word 0x04000204
+_020DBEE0: .word 0x02103FE4
+_020DBEE4: .word 0x021D6B28
+_020DBEE8: .word 0x02103FF4
+_020DBEEC: .word 0x02103FE8
+_020DBEF0: .word 0x021D6B14
+_020DBEF4: .word 0x021D6B34
+_020DBEF8: .word 0x021D6B2C
+_020DBEFC: .word 0x021D6B18
+_020DBF00: .word 0x021D6B1C
+_020DBF04: .word 0x021D6B30
+_020DBF08: .word 0x021D6B24
+_020DBF0C: .word 0x021D6B20
+_020DBF10: .word 0x021D6B4C
+
+ arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync
+CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ str r2, [sp, #0x18]
+ ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore
+ add r0, sp, #0x0
+ mov r2, r3
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore
+
+ arm_func_start CTRDG_VerifyAgbFlash
+CTRDG_VerifyAgbFlash:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ str r2, [sp, #0x18]
+ bl CTRDGi_VerifyAgbFlashCore
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_WriteAgbFlashSector
+CTRDG_WriteAgbFlashSector:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020DBF90 ; =0x021D6B14
+ ldr r2, [r2, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBF90: .word 0x021D6B14
+
+ arm_func_start CTRDG_ReadAgbFlash
+CTRDG_ReadAgbFlash: ; 0x020DBF94
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0x14]
+ str r2, [sp, #0x1c]
+ str r3, [sp, #0x18]
+ bl CTRDGi_ReadAgbFlashCore
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore
+CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r4, r0
+ ldmia r4!, {r0-r3}
+ add r12, sp, #0x0
+ stmia r12!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r0, [r4, #0x0]
+ mov r7, #0x0
+ str r0, [r12, #0x0]
+ ldrh r6, [sp, #0x20]
+ ldr r5, [sp, #0xc]
+ ldr r4, [sp, #0x18]
+_020DBFF8:
+ mov r0, r6
+ mov r1, r5
+ bl CTRDG_WriteAgbFlashSector
+_020DC004: ; 0x020DC004
+ cmp r0, #0x0
+ bne _020DC02C
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl CTRDG_VerifyAgbFlash
+_020DC01C: ; 0x020DC01C
+ cmp r0, #0x0
+ addeq sp, sp, #0x24
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_020DC02C:
+ add r1, r7, #0x1
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ cmp r7, #0x3
+ blo _020DBFF8
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CTRDGi_VerifyAgbFlashCore
+CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC128 ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r6, [sp, #0x20]
+ ldr r5, [sp, #0xc]
+ ldr r4, [sp, #0x18]
+ bl OS_LockCartridge
+ ldr r3, _020DC12C ; =0x04000204
+ ldr r0, _020DC130 ; =0x021D6B20
+ ldrh r2, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ and r7, r2, #0x3
+ bic r1, r1, #0x3
+ orr r1, r1, #0x3
+ strh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x20000
+ bne _020DC0D4
+ mov r0, r6, lsl #0xc
+ mov r0, r0, lsr #0x10
+ bl CTRDGi_SetFlashBankMx
+ and r0, r6, #0xf
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+_020DC0D4:
+ ldr r1, _020DC130 ; =0x021D6B20
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ mov r2, r4
+ ldrh r1, [r1, #0x8]
+ mov r1, r6, lsl r1
+ add r1, r1, #0xa000000
+ bl CTRDGi_VerifyFlashSectorCore
+ ldr r3, _020DC12C ; =0x04000204
+ ldr r1, _020DC128 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r7
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DC128: .word 0x021D6B0C
+_020DC12C: .word 0x04000204
+_020DC130: .word 0x021D6B20
+
+ arm_func_start CTRDGi_VerifyFlashSectorCore
+CTRDGi_VerifyFlashSectorCore: ; 0x020DC134
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ beq _020DC160
+_020DC140:
+ ldrb r12, [r1], #0x1
+ ldrb r3, [r0], #0x1
+ cmp r12, r3
+ subne r0, r1, #0x1
+ bxne lr
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ bne _020DC140
+_020DC160:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start CTRDGi_ReadAgbFlashCore
+CTRDGi_ReadAgbFlashCore: ; 0x020DC168
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC25C ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r7, [sp, #0x20]
+ ldr r6, [sp, #0x14]
+ ldr r5, [sp, #0x1c]
+ ldr r4, [sp, #0x18]
+ bl OS_LockCartridge
+ ldr r3, _020DC260 ; =0x04000204
+ ldr r0, _020DC264 ; =0x021D6B20
+ ldrh r2, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ and r8, r2, #0x3
+ bic r1, r1, #0x3
+ orr r1, r1, #0x3
+ strh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x20000
+ bne _020DC1F4
+ mov r0, r7, lsl #0xc
+ mov r0, r0, lsr #0x10
+ bl CTRDGi_SetFlashBankMx
+ and r0, r7, #0xf
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+_020DC1F4:
+ ldr r0, _020DC264 ; =0x021D6B20
+ cmp r4, #0x0
+ ldr r0, [r0, #0x0]
+ sub r4, r4, #0x1
+ ldrh r0, [r0, #0x8]
+ mov r0, r7, lsl r0
+ add r0, r0, #0xa000000
+ add r1, r6, r0
+ beq _020DC22C
+_020DC218:
+ ldrb r0, [r1], #0x1
+ cmp r4, #0x0
+ sub r4, r4, #0x1
+ strb r0, [r5], #0x1
+ bne _020DC218
+_020DC22C:
+ ldr r2, _020DC260 ; =0x04000204
+ ldr r0, _020DC25C ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x3
+ orr r1, r1, r8
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, #0x0
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC25C: .word 0x021D6B0C
+_020DC260: .word 0x04000204
+_020DC264: .word 0x021D6B20
+
+ arm_func_start CTRDGi_PollingSR1MCOMMON
+CTRDGi_PollingSR1MCOMMON: ; 0x020DC268
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, #0x0
+ bl StartFlashTimer
+ ldr r4, _020DC318 ; =0x021D6B10
+_020DC284:
+ bl CheckFlashTimer
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+ cmp r0, r6
+ beq _020DC300
+ ands r0, r0, #0x20
+ beq _020DC2CC
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+_020DC2A8: ; 0x020DC2A8
+ cmp r6, r0
+ beq _020DC300
+ orr r0, r8, #0xa000
+ mov r0, r0, lsl #0x10
+ ldr r1, _020DC31C ; =0x0A005555
+ mov r2, #0xf0
+ strb r2, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+ b _020DC300
+_020DC2CC:
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC284
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+_020DC2E0: ; 0x020DC2E0
+ cmp r6, r0
+ beq _020DC300
+ orr r0, r8, #0xc000
+ mov r0, r0, lsl #0x10
+ ldr r1, _020DC31C ; =0x0A005555
+ mov r2, #0xf0
+ strb r2, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+_020DC300:
+ bl CTRDG_IsExisting
+_020DC304: ; 0x020DC304
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ mov r0, r5
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC318: .word 0x021D6B10
+_020DC31C: .word 0x0A005555
+
+ arm_func_start CTRDGi_PollingSR512kCOMMON
+CTRDGi_PollingSR512kCOMMON: ; 0x020DC320
+ stmdb sp!, {r4-r8,lr}
+ mov r4, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, #0x0
+ bl StartFlashTimer
+ ldr r5, _020DC3A8 ; =0x021D6B10
+_020DC33C:
+ mov r0, r8
+ bl CTRDGi_ReadSrFunc
+ cmp r0, r7
+ beq _020DC390
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DC33C
+ mov r0, r8
+ bl CTRDGi_ReadSrFunc
+_020DC360: ; 0x020DC360
+ cmp r7, r0
+ beq _020DC390
+ ldr r0, _020DC3AC ; =0x021D6B20
+ ldr r0, [r0, #0x0]
+ ldrh r0, [r0, #0x18]
+ cmp r0, #0xc2
+ ldreq r0, _020DC3B0 ; =0x0A005555
+ moveq r1, #0xf0
+ streqb r1, [r0, #0x0]
+ orr r0, r4, #0xc000
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+_020DC390:
+ bl CTRDG_IsExisting
+_020DC394: ; 0x020DC394
+ cmp r0, #0x0
+ moveq r6, #0x1000
+ mov r0, r6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC3A8: .word 0x021D6B10
+_020DC3AC: .word 0x021D6B20
+_020DC3B0: .word 0x0A005555
+
+ arm_func_start CTRDGi_ReadSrFunc
+CTRDGi_ReadSrFunc:
+ ldrb r0, [r0, #0x0]
+ bx lr
+
+ arm_func_start CheckFlashTimer
+CheckFlashTimer: ; 0x020DC3BC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_GetTick
+ ldr r3, _020DC420 ; =0x021D6B44
+ ldr r2, _020DC424 ; =0x000082EA
+ ldr r12, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ subs r12, r0, r12
+ sbc r0, r1, r3
+ mov r1, r0, lsl #0x6
+ orr r1, r1, r12, lsr #0x1a
+ mov r0, r12, lsl #0x6
+ mov r3, #0x0
+ bl _ll_udiv
+ ldr r2, _020DC428 ; =0x021D6B3C
+ ldr r3, [r2, #0x4]
+ ldr r2, [r2, #0x0]
+ cmp r3, r1
+ cmpeq r2, r0
+ ldrls r0, _020DC42C ; =0x021D6B10
+ movls r1, #0x1
+ strlsh r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC420: .word 0x021D6B44
+_020DC424: .word 0x000082EA
+_020DC428: .word 0x021D6B3C
+_020DC42C: .word 0x021D6B10
+
+ arm_func_start StartFlashTimer
+StartFlashTimer: ; 0x020DC430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020DC47C ; =0x021D6B28
+ ldr r2, _020DC480 ; =0x021D6B10
+ mov r3, #0x0
+ ldr r1, [r1, #0x0]
+ strh r3, [r2, #0x0]
+ mov r0, r0, lsl #0x1
+ ldrh r1, [r1, r0]
+ ldr r0, _020DC484 ; =0x021D6B3C
+ str r1, [r0, #0x0]
+ str r3, [r0, #0x4]
+ bl OS_GetTick
+ ldr r2, _020DC488 ; =0x021D6B44
+ str r0, [r2, #0x0]
+ str r1, [r2, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC47C: .word 0x021D6B28
+_020DC480: .word 0x021D6B10
+_020DC484: .word 0x021D6B3C
+_020DC488: .word 0x021D6B44
+
+ arm_func_start CTRDGi_ReadFlashID
+CTRDGi_ReadFlashID: ; 0x020DC48C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020DC590 ; =0x04000208
+ mov r0, #0x0
+ ldrh r2, [r5, #0x0]
+ ldr r1, _020DC594 ; =0x021D6B38
+ ldr r4, _020DC598 ; =0x0A005555
+ strh r0, [r5, #0x0]
+ str r2, [r1, #0x0]
+ mov r3, #0xaa
+ ldr r2, _020DC59C ; =0x0A002AAA
+ strb r3, [r4, #0x0]
+ mov r3, #0x55
+ strb r3, [r2, #0x0]
+ mov r2, #0x90
+ strb r2, [r4, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ strh r1, [r5, #0x0]
+ bl StartFlashTimer
+ ldr r4, _020DC5A0 ; =0x021D6B10
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020DC4FC
+_020DC4EC:
+ bl CheckFlashTimer
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC4EC
+_020DC4FC:
+ ldr r0, _020DC5A4 ; =0x0A000001
+ bl CTRDGi_ReadSrFunc
+ mov r4, r0, lsl #0x18
+ mov r0, #0xa000000
+ bl CTRDGi_ReadSrFunc
+ ldr ip, _020DC590 ; =0x04000208
+ orr r4, r0, r4, lsr #0x10
+ ldrh r2, [r12, #0x0]
+ mov r0, #0x0
+ ldr r1, _020DC594 ; =0x021D6B38
+ strh r0, [r12, #0x0]
+ ldr r5, _020DC598 ; =0x0A005555
+ str r2, [r1, #0x0]
+ mov r3, #0xaa
+ ldr r2, _020DC59C ; =0x0A002AAA
+ strb r3, [r5, #0x0]
+ mov r3, #0x55
+ strb r3, [r2, #0x0]
+ mov r2, #0xf0
+ strb r2, [r5, #0x0]
+ strb r2, [r5, #0x0]
+ ldrh r2, [r12, #0x0]
+ ldr r1, [r1, #0x0]
+ strh r1, [r12, #0x0]
+ bl StartFlashTimer
+ ldr r5, _020DC5A0 ; =0x021D6B10
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ bne _020DC580
+_020DC570:
+ bl CheckFlashTimer
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DC570
+_020DC580:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DC590: .word 0x04000208
+_020DC594: .word 0x021D6B38
+_020DC598: .word 0x0A005555
+_020DC59C: .word 0x0A002AAA
+_020DC5A0: .word 0x021D6B10
+_020DC5A4: .word 0x0A000001
+
+ arm_func_start CTRDGi_SetFlashBankMx
+CTRDGi_SetFlashBankMx: ; 0x020DC5A8
+ ldr r3, _020DC5D4 ; =0x0A005555
+ mov r2, #0xaa
+ ldr r1, _020DC5D8 ; =0x0A002AAA
+ strb r2, [r3, #0x0]
+ mov r2, #0x55
+ strb r2, [r1, #0x0]
+ mov r1, #0xb0
+ strb r1, [r3, #0x0]
+ mov r1, #0xa000000
+ strb r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020DC5D4: .word 0x0A005555
+_020DC5D8: .word 0x0A002AAA
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncAT
+CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC604: .word CTRDGi_WriteFlashSectorCoreAT
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncAT
+CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC630: .word CTRDGi_EraseFlashSectorCoreAT
+
+ arm_func_start CTRDGi_WriteFlashSectorAT
+CTRDGi_WriteFlashSectorAT: ; 0x020DC634
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorAT
+CTRDGi_EraseFlashSectorAT:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlash4KBAsyncAT
+CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT
+
+ arm_func_start CTRDGi_EraseFlash4KBAsyncAT
+CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncAT
+CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC704: .word CTRDGi_EraseFlashChipCoreAT
+
+ arm_func_start CTRDGi_WriteFlash4KBAT
+CTRDGi_WriteFlash4KBAT: ; 0x020DC708
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlash4KBCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlash4KBAT
+CTRDGi_EraseFlash4KBAT: ; 0x020DC734
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlash4KBCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipAT
+CTRDGi_EraseFlashChipAT: ; 0x020DC75C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlash4KBCoreAT
+CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r0, [sp, #0x20]
+ ldr r7, [sp, #0xc]
+ cmp r0, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DC85C ; =0x000080FF
+ ldmcsia sp!, {r4-r9,lr}
+ bxcs lr
+ ldr r1, _020DC860 ; =0x0210400C
+ mov r0, r0, lsl #0x15
+ ldr r1, [r1, #0x24]
+ ldr r4, _020DC864 ; =0x021D6B08
+ mov r8, r0, lsr #0x10
+ strh r1, [r4, #0x0]
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC84C
+ ldr r0, _020DC868 ; =0x02104048
+ ldr r6, [r0, #0x24]
+ mov r5, #0x2
+_020DC7F4:
+ mov r9, r5
+_020DC7F8:
+ mov r0, r8
+ mov r1, r7
+ bl CTRDGi_WriteFlashSectorAT
+ movs r12, r0
+ beq _020DC81C
+ sub r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ movs r9, r0, lsr #0x10
+ bne _020DC7F8
+_020DC81C:
+ cmp r12, #0x0
+ bne _020DC84C
+ ldrh r1, [r4, #0x0]
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ sub r1, r1, r6
+ strh r1, [r4, #0x0]
+ ldrh r1, [r4, #0x0]
+ add r7, r7, r6
+ mov r8, r0, lsr #0x10
+ cmp r1, #0x0
+ bne _020DC7F4
+_020DC84C:
+ mov r0, r12
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020DC85C: .word 0x000080FF
+_020DC860: .word 0x0210400C
+_020DC864: .word 0x021D6B08
+_020DC868: .word 0x02104048
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreAT
+CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ add r4, sp, #0x0
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC984 ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldr r4, [sp, #0xc]
+ bl OS_LockCartridge
+ ldr r5, _020DC988 ; =0x04000204
+ ldr r1, _020DC98C ; =0x021D6B20
+ ldrh r0, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r3, [r1, #0x10]
+ ldr r1, _020DC990 ; =0x02104048
+ bic r2, r2, #0x3
+ orr r2, r2, r3
+ strh r2, [r5, #0x0]
+ ldr r5, _020DC994 ; =0x04000208
+ ldrh lr, [sp, #0x20]
+ ldrh r12, [r1, #0x28]
+ ldrh r2, [r5, #0x0]
+ mov r3, #0x0
+ mov lr, lr, lsl r12
+ strh r3, [r5, #0x0]
+ ldr ip, _020DC998 ; =0x0A005555
+ mov r5, #0xaa
+ strb r5, [r12, #0x0]
+ ldr r3, _020DC99C ; =0x0A002AAA
+ mov r5, #0x55
+ strb r5, [r3, #0x0]
+ mov r3, #0xa0
+ strb r3, [r12, #0x0]
+ ldr r3, [r1, #0x24]
+ and r5, r0, #0x3
+ cmp r3, #0x0
+ add r1, lr, #0xa000000
+ beq _020DC92C
+_020DC91C:
+ ldrb r0, [r4], #0x1
+ subs r3, r3, #0x1
+ strb r0, [r1], #0x1
+ bne _020DC91C
+_020DC92C:
+ ldr ip, _020DC994 ; =0x04000208
+ ldr r3, _020DC9A0 ; =0x021D6B24
+ ldrh r0, [r12, #0x0]
+ sub r1, r1, #0x1
+ mov r0, #0x1
+ strh r2, [r12, #0x0]
+ ldrb r2, [r4, #-0x1]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r3, _020DC988 ; =0x04000204
+ ldr r1, _020DC984 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DC984: .word 0x021D6B0C
+_020DC988: .word 0x04000204
+_020DC98C: .word 0x021D6B20
+_020DC990: .word 0x02104048
+_020DC994: .word 0x04000208
+_020DC998: .word 0x0A005555
+_020DC99C: .word 0x0A002AAA
+_020DC9A0: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlash4KBCoreAT
+CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r0, [sp, #0x20]
+ cmp r0, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DCA54 ; =0x000080FF
+ ldmcsia sp!, {r4-r7,lr}
+ bxcs lr
+ mov r0, r0, lsl #0x15
+ mov r5, r0, lsr #0x10
+ mov r6, #0x0
+ mov r4, #0x2
+_020DC9F4:
+ mov r7, r4
+_020DC9F8:
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorAT
+_020DCA00: ; 0x020DCA00
+ cmp r0, #0x0
+ beq _020DCA18
+ sub r1, r7, #0x1
+ mov r1, r1, lsl #0x10
+ movs r7, r1, lsr #0x10
+ bne _020DC9F8
+_020DCA18:
+ add r1, r5, #0x1
+ mov r1, r1, lsl #0x10
+ cmp r0, #0x0
+ mov r5, r1, lsr #0x10
+ addne sp, sp, #0x24
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ add r1, r6, #0x1
+ mov r1, r1, lsl #0x10
+ mov r6, r1, lsr #0x10
+ cmp r6, #0x20
+ blo _020DC9F4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DCA54: .word 0x000080FF
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreAT
+CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ ldr r1, _020DCB80 ; =0x02104048
+ str r0, [r4, #0x0]
+ ldr r0, _020DCB84 ; =0x021D6B0C
+ ldrh r2, [sp, #0x20]
+ ldrh r1, [r1, #0x28]
+ ldrh r0, [r0, #0x0]
+ mov r1, r2, lsl r1
+ add r5, r1, #0xa000000
+ bl OS_LockCartridge
+ ldr r4, _020DCB88 ; =0x04000204
+ ldr r1, _020DCB8C ; =0x021D6B20
+ ldrh r0, [r4, #0x0]
+ ldr r2, [r1, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r2, #0x10]
+ ldr r3, _020DCB90 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r2, [r3, #0x0]
+ mov r1, #0x0
+ ldr r4, _020DCB94 ; =0x0A005555
+ strh r1, [r3, #0x0]
+ mov r3, #0xaa
+ strb r3, [r4, #0x0]
+ ldr r1, _020DCB98 ; =0x0A002AAA
+ mov r3, #0x55
+ strb r3, [r1, #0x0]
+ mov r3, #0xa0
+ strb r3, [r4, #0x0]
+ ldr r1, _020DCB80 ; =0x02104048
+ and r4, r0, #0x3
+ ldr r1, [r1, #0x24]
+ cmp r1, #0x0
+ beq _020DCB18
+ mov r0, #0xff
+_020DCB0C:
+ strb r0, [r5], #0x1
+ subs r1, r1, #0x1
+ bne _020DCB0C
+_020DCB18:
+ ldr ip, _020DCB90 ; =0x04000208
+ ldr r3, _020DCB9C ; =0x021D6B24
+ ldrh r0, [r12, #0x0]
+ sub r1, r5, #0x1
+ strh r2, [r12, #0x0]
+ ldr r3, [r3, #0x0]
+ mov r0, #0x1
+ mov r2, #0xff
+ blx r3
+ ldr r2, _020DCB88 ; =0x04000204
+ movs r5, r0
+ ldrh r1, [r2, #0x0]
+ andne r0, r5, #0xff00
+ orrne r0, r0, #0x2
+ movne r0, r0, lsl #0x10
+ bic r1, r1, #0x3
+ movne r5, r0, lsr #0x10
+ orr r1, r1, r4
+ ldr r0, _020DCB84 ; =0x021D6B0C
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r5
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DCB80: .word 0x02104048
+_020DCB84: .word 0x021D6B0C
+_020DCB88: .word 0x04000204
+_020DCB8C: .word 0x021D6B20
+_020DCB90: .word 0x04000208
+_020DCB94: .word 0x0A005555
+_020DCB98: .word 0x0A002AAA
+_020DCB9C: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreAT
+CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DCC7C ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DCC80 ; =0x04000204
+ ldr r0, _020DCC84 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DCC88 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DCC8C ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DCC90 ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DCC94 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DCC98 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DCC80 ; =0x04000204
+ ldr r1, _020DCC7C ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DCC7C: .word 0x021D6B0C
+_020DCC80: .word 0x04000204
+_020DCC84: .word 0x021D6B20
+_020DCC88: .word 0x04000208
+_020DCC8C: .word 0x021D6B38
+_020DCC90: .word 0x0A005555
+_020DCC94: .word 0x0A002AAA
+_020DCC98: .word 0x021D6B24
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncLE
+CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncLE
+CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncLE
+CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCD18: .word CTRDGi_EraseFlashChipCoreLE
+
+ arm_func_start CTRDGi_WriteFlashSectorLE
+CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorLE
+CTRDGi_EraseFlashSectorLE: ; 0x020DCD48
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipLE
+CTRDGi_EraseFlashChipLE: ; 0x020DCD70
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_VerifyFlashErase
+CTRDGi_VerifyFlashErase: ; 0x020DCD94
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020DCE14 ; =0x021D6B0C
+ mov r4, r0
+ ldrh r0, [r2, #0x0]
+ mov r5, r1
+ bl OS_LockCartridge
+ ldr ip, _020DCE18 ; =0x04000204
+ ldr r0, _020DCE1C ; =0x021D6B20
+ ldrh r3, [r12, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r12, #0x0]
+ ldr r2, [r0, #0x10]
+ mov r0, r4
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r12, #0x0]
+ and r6, r3, #0x3
+ mov r4, #0x0
+ blx r5
+ cmp r0, #0x0
+ ldr r2, _020DCE18 ; =0x04000204
+ ldr r0, _020DCE14 ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ ldrne r4, _020DCE20 ; =0x00008004
+ bic r1, r1, #0x3
+ orr r1, r1, r6
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020DCE14: .word 0x021D6B0C
+_020DCE18: .word 0x04000204
+_020DCE1C: .word 0x021D6B20
+_020DCE20: .word 0x00008004
+
+ arm_func_start CTRDGi_VerifyFlashCoreFF
+CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24
+ ldr r1, _020DCE54 ; =0x021D6B20
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x4]
+ cmp r2, #0x0
+ beq _020DCE4C
+_020DCE38:
+ ldrb r1, [r0], #0x1
+ cmp r1, #0xff
+ bne _020DCE4C
+ subs r2, r2, #0x1
+ bne _020DCE38
+_020DCE4C:
+ mov r0, r2
+ bx lr
+ .balign 4
+_020DCE54: .word 0x021D6B20
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreLE
+CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r7, [sp, #0x20]
+ ldr r6, [sp, #0xc]
+ cmp r7, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DD018 ; =0x000080FF
+ ldmcsia sp!, {r4-r9,lr}
+ bxcs lr
+ ldr r0, _020DD01C ; =0x021D6B20
+ mov r9, #0x0
+ ldr r0, [r0, #0x0]
+ ldrh r0, [r0, #0x8]
+ mov r0, r7, lsl r0
+ add r4, r0, #0xa000000
+ ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF
+_020DCEB8:
+ mov r0, r7
+ bl CTRDGi_EraseFlashSectorLE
+ movs r8, r0
+ bne _020DCEE0
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_VerifyFlashErase
+ mov r0, r0, lsl #0x10
+ movs r8, r0, lsr #0x10
+ beq _020DCF04
+_020DCEE0:
+ add r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ cmp r9, #0x50
+ mov r9, r0, lsr #0x10
+ bne _020DCEB8
+ add sp, sp, #0x24
+ mov r0, r8
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020DCF04:
+ mov r5, #0x1
+ cmp r9, #0x0
+ movne r5, #0x6
+ cmp r5, #0x1
+ mov r9, #0x1
+ blo _020DCF38
+_020DCF1C:
+ mov r0, r7
+ bl CTRDGi_EraseFlashSectorLE
+ add r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ mov r9, r0, lsr #0x10
+ cmp r9, r5
+ bls _020DCF1C
+_020DCF38:
+ ldr r0, _020DD024 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r5, _020DD028 ; =0x04000204
+ ldr r1, _020DD01C ; =0x021D6B20
+ ldrh r0, [r5, #0x0]
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r3, [r3, #0x10]
+ ldr r7, _020DD02C ; =0x021D6B08
+ bic r2, r2, #0x3
+ orr r2, r2, r3
+ strh r2, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ ldr sb, _020DD030 ; =0x04000208
+ ldr r1, [r1, #0x4]
+ mov r2, #0x0
+ strh r1, [r7, #0x0]
+ ldrh r3, [r9, #0x0]
+ ldr r1, _020DD034 ; =0x021D6B38
+ and r5, r0, #0x3
+ strh r2, [r9, #0x0]
+ ldrh r0, [r7, #0x0]
+ str r3, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020DCFD4
+_020DCFA0:
+ mov r0, r6
+ mov r1, r4
+ bl CTRDGi_ProgramFlashByteLE
+ movs r8, r0
+ bne _020DCFD4
+ ldrh r0, [r7, #0x0]
+ add r6, r6, #0x1
+ add r4, r4, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r7, #0x0]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x0
+ bne _020DCFA0
+_020DCFD4:
+ ldr r3, _020DD030 ; =0x04000208
+ ldr r0, _020DD034 ; =0x021D6B38
+ ldrh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r2, _020DD028 ; =0x04000204
+ strh r0, [r3, #0x0]
+ ldrh r1, [r2, #0x0]
+ ldr r0, _020DD024 ; =0x021D6B0C
+ bic r1, r1, #0x3
+ orr r1, r1, r5
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r8
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020DD018: .word 0x000080FF
+_020DD01C: .word 0x021D6B20
+_020DD020: .word CTRDGi_VerifyFlashCoreFF
+_020DD024: .word 0x021D6B0C
+_020DD028: .word 0x04000204
+_020DD02C: .word 0x021D6B08
+_020DD030: .word 0x04000208
+_020DD034: .word 0x021D6B38
+
+ arm_func_start CTRDGi_ProgramFlashByteLE
+CTRDGi_ProgramFlashByteLE: ; 0x020DD038
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DD08C ; =0x0A005555
+ mov r3, #0xaa
+ ldr r2, _020DD090 ; =0x0A002AAA
+ strb r3, [r12, #0x0]
+ mov r3, #0x55
+ mov lr, r0
+ strb r3, [r2, #0x0]
+ mov r0, #0xa0
+ strb r0, [r12, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, _020DD094 ; =0x021D6B24
+ mov r0, #0x1
+ strb r2, [r1, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, [r3, #0x0]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD08C: .word 0x0A005555
+_020DD090: .word 0x0A002AAA
+_020DD094: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreLE
+CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r4, [sp, #0x20]
+ cmp r4, #0x10
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD1B8 ; =0x000080FF
+ ldmcsia sp!, {r4-r6,lr}
+ bxcs lr
+ ldr r0, _020DD1BC ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r6, _020DD1C0 ; =0x04000204
+ ldr r1, _020DD1C4 ; =0x021D6B20
+ ldrh r3, [r6, #0x0]
+ ldr r0, [r1, #0x0]
+ ldrh r2, [r6, #0x0]
+ ldr r5, [r0, #0x10]
+ ldr r0, _020DD1C8 ; =0x04000208
+ bic r2, r2, #0x3
+ orr r2, r2, r5
+ strh r2, [r6, #0x0]
+ ldr r1, [r1, #0x0]
+ ldrh r5, [r0, #0x0]
+ ldrh r12, [r1, #0x8]
+ mov r1, #0x0
+ ldr r2, _020DD1CC ; =0x021D6B38
+ strh r1, [r0, #0x0]
+ mov r6, r4, lsl r12
+ ldr lr, _020DD1D0 ; =0x0A005555
+ str r5, [r2, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD1D4 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r1, #0x80
+ strb r1, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ add r1, r6, #0xa000000
+ mov r4, #0x30
+ strb r4, [r1, #0x0]
+ ldrh r4, [r0, #0x0]
+ ldr r4, [r2, #0x0]
+ ldr r2, _020DD1D8 ; =0x021D6B24
+ strh r4, [r0, #0x0]
+ ldr r4, [r2, #0x0]
+ mov r0, #0x2
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD1C0 ; =0x04000204
+ ldr r1, _020DD1BC ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020DD1B8: .word 0x000080FF
+_020DD1BC: .word 0x021D6B0C
+_020DD1C0: .word 0x04000204
+_020DD1C4: .word 0x021D6B20
+_020DD1C8: .word 0x04000208
+_020DD1CC: .word 0x021D6B38
+_020DD1D0: .word 0x0A005555
+_020DD1D4: .word 0x0A002AAA
+_020DD1D8: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreLE
+CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DD2B8 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DD2BC ; =0x04000204
+ ldr r0, _020DD2C0 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DD2C4 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DD2C8 ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DD2CC ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD2D0 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DD2D4 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD2BC ; =0x04000204
+ ldr r1, _020DD2B8 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DD2B8: .word 0x021D6B0C
+_020DD2BC: .word 0x04000204
+_020DD2C0: .word 0x021D6B20
+_020DD2C4: .word 0x04000208
+_020DD2C8: .word 0x021D6B38
+_020DD2CC: .word 0x0A005555
+_020DD2D0: .word 0x0A002AAA
+_020DD2D4: .word 0x021D6B24
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncMX
+CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD300: .word CTRDGi_WriteFlashSectorCoreMX
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncMX
+CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncMX
+CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD354: .word CTRDGi_EraseFlashChipCoreMX
+
+ arm_func_start CTRDGi_WriteFlashSectorMX
+CTRDGi_WriteFlashSectorMX: ; 0x020DD358
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorMX
+CTRDGi_EraseFlashSectorMX: ; 0x020DD384
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipMX
+CTRDGi_EraseFlashChipMX: ; 0x020DD3AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreMX
+CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD540 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r5, [sp, #0x20]
+ ldrh r0, [r0, #0xa]
+ ldr r4, [sp, #0xc]
+ cmp r5, r0
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD544 ; =0x000080FF
+ ldmcsia sp!, {r4-r8,lr}
+ bxcs lr
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorMX
+ movs r6, r0
+ addne sp, sp, #0x28
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r0, _020DD548 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r7, _020DD54C ; =0x04000204
+ ldr r0, _020DD540 ; =0x021D6B20
+ ldrh r3, [r7, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r7, #0x0]
+ mov r0, r5, lsl #0xc
+ ldr r2, [r2, #0x10]
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ mov r0, r0, lsr #0x10
+ strh r1, [r7, #0x0]
+ and r7, r3, #0x3
+ bl CTRDGi_SetFlashBankMx
+ ldr r0, _020DD540 ; =0x021D6B20
+ and r1, r5, #0xf
+ ldr r3, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ ldr r2, [r3, #0x4]
+ ldr r8, _020DD550 ; =0x021D6B08
+ ldr r1, _020DD554 ; =0x04000208
+ strh r2, [r8, #0x0]
+ ldrh r3, [r3, #0x8]
+ mov r5, r0, lsr #0x10
+ ldrh r2, [r1, #0x0]
+ mov r0, #0x0
+ mov r3, r5, lsl r3
+ strh r0, [r1, #0x0]
+ ldrh r1, [r8, #0x0]
+ ldr r0, _020DD558 ; =0x021D6B38
+ add r5, r3, #0xa000000
+ str r2, [r0, #0x0]
+ cmp r1, #0x0
+ beq _020DD4FC
+_020DD4C8:
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_ProgramFlashByteMX
+ movs r6, r0
+ bne _020DD4FC
+ ldrh r0, [r8, #0x0]
+ add r4, r4, #0x1
+ add r5, r5, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r8, #0x0]
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ bne _020DD4C8
+_020DD4FC:
+ ldr r3, _020DD554 ; =0x04000208
+ ldr r0, _020DD558 ; =0x021D6B38
+ ldrh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r2, _020DD54C ; =0x04000204
+ strh r0, [r3, #0x0]
+ ldrh r1, [r2, #0x0]
+ ldr r0, _020DD548 ; =0x021D6B0C
+ bic r1, r1, #0x3
+ orr r1, r1, r7
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r6
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DD540: .word 0x021D6B20
+_020DD544: .word 0x000080FF
+_020DD548: .word 0x021D6B0C
+_020DD54C: .word 0x04000204
+_020DD550: .word 0x021D6B08
+_020DD554: .word 0x04000208
+_020DD558: .word 0x021D6B38
+
+ arm_func_start CTRDGi_ProgramFlashByteMX
+CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DD5B0 ; =0x0A005555
+ mov r3, #0xaa
+ ldr r2, _020DD5B4 ; =0x0A002AAA
+ strb r3, [r12, #0x0]
+ mov r3, #0x55
+ mov lr, r0
+ strb r3, [r2, #0x0]
+ mov r0, #0xa0
+ strb r0, [r12, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, _020DD5B8 ; =0x021D6B24
+ mov r0, #0x1
+ strb r2, [r1, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, [r3, #0x0]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD5B0: .word 0x0A005555
+_020DD5B4: .word 0x0A002AAA
+_020DD5B8: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreMX
+CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x10
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r4, [sp, #0x30]
+ ldrh r0, [r0, #0xa]
+ cmp r4, r0
+ addcs sp, sp, #0x34
+ ldrhs r0, _020DD74C ; =0x000080FF
+ ldmcsia sp!, {r4-r11,lr}
+ bxcs lr
+ ldr r0, _020DD750 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r5, _020DD754 ; =0x04000204
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldrh r3, [r5, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r5, #0x0]
+ mov r0, r4, lsl #0xc
+ ldr r2, [r2, #0x10]
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r5, #0x0]
+ and r1, r3, #0x3
+ mov r0, r0, lsr #0x10
+ str r1, [sp, #0x0]
+ bl CTRDGi_SetFlashBankMx
+ and r0, r4, #0xf
+ mov r0, r0, lsl #0x10
+ mov r9, r0, lsr #0x10
+ mov r0, #0x2
+ mov r10, #0x0
+ str r0, [sp, #0x8]
+ mov r0, #0xff
+ ldr r8, _020DD758 ; =0x04000208
+ mov r11, r10
+ mov r7, #0xaa
+ mov r6, #0x55
+ mov r5, #0x80
+ mov r4, #0x30
+ str r0, [sp, #0xc]
+_020DD684:
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldrh r12, [r8, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020DD75C ; =0x021D6B38
+ ldrh r1, [r0, #0x8]
+ ldr r0, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ strh r11, [r8, #0x0]
+ str r12, [r3, #0x0]
+ ldr r3, _020DD760 ; =0x0A005555
+ mov r1, r9, lsl r1
+ strb r7, [r3, #0x0]
+ ldr r3, _020DD764 ; =0x0A002AAA
+ add r1, r1, #0xa000000
+ strb r6, [r3, #0x0]
+ ldr r3, _020DD760 ; =0x0A005555
+ strb r5, [r3, #0x0]
+ strb r7, [r3, #0x0]
+ ldr r3, _020DD764 ; =0x0A002AAA
+ strb r6, [r3, #0x0]
+ strb r4, [r1, #0x0]
+ ldrh r3, [r8, #0x0]
+ ldr r3, _020DD75C ; =0x021D6B38
+ ldr r3, [r3, #0x0]
+ strh r3, [r8, #0x0]
+ ldr r3, _020DD768 ; =0x021D6B24
+ ldr r3, [r3, #0x0]
+ blx r3
+ str r0, [sp, #0x4]
+ ands r0, r0, #0xa000
+ beq _020DD714
+ cmp r10, #0x0
+ addeq r0, r10, #0x1
+ moveq r0, r0, lsl #0x10
+ moveq r10, r0, lsr #0x10
+ beq _020DD684
+_020DD714:
+ ldr r2, _020DD754 ; =0x04000204
+ ldr r1, _020DD750 ; =0x021D6B0C
+ ldrh r0, [r2, #0x0]
+ bic r3, r0, #0x3
+ ldr r0, [sp, #0x0]
+ orr r0, r3, r0
+ strh r0, [r2, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ ldr r0, [sp, #0x4]
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020DD748: .word 0x021D6B20
+_020DD74C: .word 0x000080FF
+_020DD750: .word 0x021D6B0C
+_020DD754: .word 0x04000204
+_020DD758: .word 0x04000208
+_020DD75C: .word 0x021D6B38
+_020DD760: .word 0x0A005555
+_020DD764: .word 0x0A002AAA
+_020DD768: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreMX
+CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DD848 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DD84C ; =0x04000204
+ ldr r0, _020DD850 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DD854 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DD858 ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DD85C ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD860 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DD864 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD84C ; =0x04000204
+ ldr r1, _020DD848 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DD848: .word 0x021D6B0C
+_020DD84C: .word 0x04000204
+_020DD850: .word 0x021D6B20
+_020DD854: .word 0x04000208
+_020DD858: .word 0x021D6B38
+_020DD85C: .word 0x0A005555
+_020DD860: .word 0x0A002AAA
+_020DD864: .word 0x021D6B24
+
+ arm_func_start FUN_020DD868
+FUN_020DD868: ; 0x020DD868
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD890 ; =FUN_020DD8C0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD890: .word FUN_020DD8C0
+
+ arm_func_start FUN_020DD894
+FUN_020DD894: ; 0x020DD894
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl FUN_020DD8C0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020DD8C0
+FUN_020DD8C0: ; 0x020DD8C0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD9E8 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r5, [sp, #0x20]
+ ldrh r0, [r0, #0xa]
+ ldr r4, [sp, #0xc]
+ cmp r5, r0
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD9EC ; =0x000080FF
+ ldmcsia sp!, {r4-r8,lr}
+ bxcs lr
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorLE
+ movs r6, r0
+ addne sp, sp, #0x28
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r0, _020DD9F0 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r7, _020DD9F4 ; =0x04000204
+ ldr r0, _020DD9E8 ; =0x021D6B20
+ ldrh r3, [r7, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r7, #0x0]
+ ldr r2, [r2, #0x10]
+ ldr r8, _020DD9F8 ; =0x021D6B08
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r7, #0x0]
+ ldr r1, [r0, #0x0]
+ and r7, r3, #0x3
+ ldr r0, [r1, #0x4]
+ strh r0, [r8, #0x0]
+ ldrh r1, [r1, #0x8]
+ ldrh r0, [r8, #0x0]
+ mov r1, r5, lsl r1
+ cmp r0, #0x0
+ add r5, r1, #0xa000000
+ beq _020DD9B8
+_020DD984:
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_ProgramFlashByteLE
+ movs r6, r0
+ bne _020DD9B8
+ ldrh r0, [r8, #0x0]
+ add r4, r4, #0x1
+ add r5, r5, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r8, #0x0]
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ bne _020DD984
+_020DD9B8:
+ ldr r2, _020DD9F4 ; =0x04000204
+ ldr r0, _020DD9F0 ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x3
+ orr r1, r1, r7
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r6
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DD9E8: .word 0x021D6B20
+_020DD9EC: .word 0x000080FF
+_020DD9F0: .word 0x021D6B0C
+_020DD9F4: .word 0x04000204
+_020DD9F8: .word 0x021D6B08
+
+ arm_func_start CTRDGi_SetTask
+CTRDGi_SetTask: ; 0x020DD9FC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020DDAA8 ; =0x021D6B50
+ mov r7, r0
+ mov r4, r1
+ mov r6, r2
+ ldr r5, [r3, #0x0]
+ bl CTRDGi_IsTaskAvailable
+_020DDA1C: ; 0x020DDA1C
+ cmp r0, #0x0
+ bne _020DDA28
+ bl OS_Terminate
+_020DDA28:
+ ldr r0, _020DDAAC ; =0x021D6B54
+ ldrb r0, [r0, #0x22]
+ cmp r0, #0x0
+ beq _020DDA3C
+ bl OS_Terminate
+_020DDA3C:
+ bl OS_DisableInterrupts
+ mov r1, #0x1
+ strb r1, [r7, #0x22]
+ str r4, [r7, #0x0]
+ add r1, r5, #0xc4
+ cmp r7, r1
+ mov r4, r0
+ ldreq r0, _020DDAA8 ; =0x021D6B50
+ str r6, [r7, #0x4]
+ moveq r1, #0x0
+ streq r1, [r0, #0x0]
+ ldr ip, _020DDAAC ; =0x021D6B54
+ ldmia r7!, {r0-r3}
+ mov r6, r12
+ stmia r12!, {r0-r3}
+ ldmia r7!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [r7, #0x0]
+ mov r0, r5
+ str r1, [r12, #0x0]
+ str r6, [r5, #0xc0]
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DDAA8: .word 0x021D6B50
+_020DDAAC: .word 0x021D6B54
+
+ arm_func_start CTRDGi_TaskThread
+CTRDGi_TaskThread: ; 0x020DDAB0
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ ldr r6, _020DDB94 ; =0x021D6B54
+ ldr r5, _020DDB98 ; =0x021D6B50
+ mov r4, r0
+ add r9, sp, #0x0
+ mov r8, #0x0
+ mov r7, #0x24
+_020DDAD0:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ bl MI_CpuFill8
+ bl OS_DisableInterrupts
+ ldr r1, [r4, #0xc0]
+ mov r10, r0
+ cmp r1, #0x0
+ bne _020DDB08
+_020DDAF4:
+ mov r0, r8
+ bl OS_SleepThread
+ ldr r0, [r4, #0xc0]
+ cmp r0, #0x0
+ beq _020DDAF4
+_020DDB08:
+ ldr lr, [r4, #0xc0]
+ add r12, sp, #0x0
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [lr, #0x0]
+ mov r0, r10
+ str r1, [r12, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r1, [sp, #0x0]
+ cmp r1, #0x0
+ beq _020DDB48
+ mov r0, r9
+ blx r1
+ str r0, [sp, #0x8]
+_020DDB48:
+ bl OS_DisableInterrupts
+ ldr r1, [sp, #0x4]
+ mov r10, r0
+ strb r8, [r6, #0x22]
+ cmp r1, #0x0
+ beq _020DDB68
+ mov r0, r9
+ blx r1
+_020DDB68:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DDB84
+ mov r0, r10
+ str r8, [r4, #0xc0]
+ bl OS_RestoreInterrupts
+ b _020DDAD0
+_020DDB84:
+ bl OS_ExitThread
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020DDB94: .word 0x021D6B54
+_020DDB98: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskInfo
+CTRDGi_InitTaskInfo:
+ ldr ip, _020DDBAC ; =MI_CpuFill8
+ mov r1, #0x0
+ mov r2, #0x24
+ bx r12
+ .balign 4
+_020DDBAC: .word MI_CpuFill8
+
+ arm_func_start CTRDGi_IsTaskAvailable
+CTRDGi_IsTaskAvailable:
+ ldr r0, _020DDBC8 ; =0x021D6B50
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020DDBC8: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskThread
+CTRDGi_InitTaskThread: ; 0x020DDBCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020DDC4C ; =0x021D6B50
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020DDC38
+ add r0, r5, #0xc4
+ str r5, [r1, #0x0]
+ bl CTRDGi_InitTaskInfo
+ ldr r0, _020DDC50 ; =0x021D6B54
+ bl CTRDGi_InitTaskInfo
+_020DDC04: ; 0x020DDC04
+ mov r0, #0x0
+ str r0, [r5, #0xc0]
+ mov r2, #0x400
+ ldr r1, _020DDC54 ; =CTRDGi_TaskThread
+ ldr r3, _020DDC58 ; =0x021D6F78
+ mov r0, r5
+ str r2, [sp, #0x0]
+ mov r2, #0x14
+ str r2, [sp, #0x4]
+ mov r2, r5
+ bl OS_CreateThread
+ mov r0, r5
+ bl OS_WakeupThreadDirect
+_020DDC38:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DDC4C: .word 0x021D6B50
+_020DDC50: .word 0x021D6B54
+_020DDC54: .word CTRDGi_TaskThread
+_020DDC58: .word 0x021D6F78
diff --git a/asm/MATH_arm9.s b/asm/MATH_arm9.s
new file mode 100644
index 00000000..3b384077
--- /dev/null
+++ b/asm/MATH_arm9.s
@@ -0,0 +1,320 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start MATH_CountPopulation
+MATH_CountPopulation: ; 0x020DDC5C
+ ldr r1, _020DDC94 ; =0x55555555
+ ldr r2, _020DDC98 ; =0x33333333
+ and r1, r1, r0, lsr #0x1
+ sub r0, r0, r1
+ and r1, r0, r2
+ and r0, r2, r0, lsr #0x2
+ add r1, r1, r0
+ ldr r0, _020DDC9C ; =0x0F0F0F0F
+ add r1, r1, r1, lsr #0x4
+ and r0, r1, r0
+ add r0, r0, r0, lsr #0x8
+ add r0, r0, r0, lsr #0x10
+ and r0, r0, #0xff
+ bx lr
+ .balign 4
+_020DDC94: .word 0x55555555
+_020DDC98: .word 0x33333333
+_020DDC9C: .word 0x0F0F0F0F
+
+ arm_func_start MATH_CalcSHA1
+MATH_CalcSHA1: ; 0x020DDCA0
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x68
+ mov r6, r0
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, r2
+ bl MATH_SHA1Init
+_020DDCBC: ; 0x020DDCBC
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl MATH_SHA1Update
+_020DDCCC: ; 0x020DDCCC
+ add r0, sp, #0x0
+ mov r1, r6
+ bl MATH_SHA1GetHash
+ add sp, sp, #0x68
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MATH_CalcMD5
+MATH_CalcMD5: ; 0x020DDCE4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x58
+ mov r6, r0
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, r2
+ bl MATH_MD5Init
+_020DDD00: ; 0x020DDD00
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl MATH_MD5Update
+ add r1, sp, #0x0
+ mov r0, r6
+ bl MATH_MD5GetHash
+ add sp, sp, #0x58
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC32
+MATH_CalcCRC32: ; 0x020DDD28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mvn r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ str r12, [sp, #0x0]
+ bl MATHi_CRC32UpdateRev
+_020DDD4C: ; 0x020DDD4C
+ ldr r0, [sp, #0x0]
+ mvn r0, r0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC16CCITT
+MATH_CalcCRC16CCITT: ; 0x020DDD60
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DDD94 ; =0x0000FFFF
+ mov lr, r1
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strh r12, [sp, #0x0]
+ bl MATHi_CRC16Update
+ ldrh r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DDD94: .word 0x0000FFFF
+
+ arm_func_start MATH_CalcCRC16
+MATH_CalcCRC16: ; 0x020DDD98
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strh r12, [sp, #0x0]
+ bl MATHi_CRC16UpdateRev
+ ldrh r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC8
+MATH_CalcCRC8: ; 0x020DDDCC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strb r12, [sp, #0x0]
+ bl MATHi_CRC8Update
+_020DDDF0: ; 0x020DDDF0
+ ldrb r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATHi_CRC32UpdateRev
+MATHi_CRC32UpdateRev:
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldr r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDE38
+_020DDE14:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ ldr r12, [r0, r12, lsl #0x2]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsr #0x8
+ blo _020DDE14
+_020DDE38:
+ str r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC32InitTableRev
+MATHi_CRC32InitTableRev: ; 0x020DDE44
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DDE50:
+ mov r4, lr
+ mov r12, r3
+_020DDE58:
+ ands r2, r4, #0x1
+ eorne r4, r1, r4, lsr #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsr #0x1
+ cmp r12, #0x8
+ blo _020DDE58
+ str r4, [r0, lr, lsl #0x2]
+ add lr, lr, #0x1
+ cmp lr, #0x100
+ blo _020DDE50
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16UpdateRev
+MATHi_CRC16UpdateRev: ; 0x020DDE88
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrh r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDEC4
+_020DDE9C:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ mov r12, r12, lsl #0x1
+ ldrh r12, [r0, r12]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsr #0x8
+ blo _020DDE9C
+_020DDEC4:
+ strh r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16Update
+MATHi_CRC16Update: ; 0x020DDED0
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrh r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDF0C
+_020DDEE4:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r12, r4, lsr #0x8
+ and r12, r12, #0xff
+ mov r12, r12, lsl #0x1
+ ldrh r12, [r0, r12]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsl #0x8
+ blo _020DDEE4
+_020DDF0C:
+ strh r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16InitTableRev
+MATHi_CRC16InitTableRev: ; 0x020DDF18
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DDF24:
+ mov r4, lr
+ mov r12, r3
+_020DDF2C:
+ ands r2, r4, #0x1
+ eorne r4, r1, r4, lsr #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsr #0x1
+ cmp r12, #0x8
+ blo _020DDF2C
+ mov r2, lr, lsl #0x1
+ add lr, lr, #0x1
+ strh r4, [r0, r2]
+ cmp lr, #0x100
+ blo _020DDF24
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16InitTable
+MATHi_CRC16InitTable: ; 0x020DDF60
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, #0x0
+ mov r12, r4
+ mov r3, r4
+_020DDF74:
+ mov r5, r12
+ mov lr, r3
+_020DDF7C:
+ ands r2, r5, #0x8000
+ eorne r5, r1, r5, lsl #0x1
+ add lr, lr, #0x1
+ moveq r5, r5, lsl #0x1
+ cmp lr, #0x8
+ blo _020DDF7C
+ mov r2, r4, lsl #0x1
+ add r4, r4, #0x1
+ strh r5, [r0, r2]
+ cmp r4, #0x100
+ add r12, r12, #0x100
+ blo _020DDF74
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC8Update
+MATHi_CRC8Update:
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrb r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDFEC
+_020DDFCC:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ add r2, r2, #0x1
+ ldrb r4, [r0, r12]
+ blo _020DDFCC
+_020DDFEC:
+ strb r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC8InitTable
+MATHi_CRC8InitTable: ; 0x020DDFF8
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DE004:
+ mov r4, lr
+ mov r12, r3
+_020DE00C:
+ ands r2, r4, #0x80
+ eorne r4, r1, r4, lsl #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsl #0x1
+ cmp r12, #0x8
+ blo _020DE00C
+ strb r4, [r0, lr]
+ add lr, lr, #0x1
+ cmp lr, #0x100
+ blo _020DE004
+ ldmia sp!, {r4,lr}
+ bx lr
diff --git a/asm/rom2dism.s b/asm/rom2dism.s
index 051a235d..7994c2ed 100644
--- a/asm/rom2dism.s
+++ b/asm/rom2dism.s
@@ -5,3111 +5,6 @@
.text
- arm_func_start CTRDG_CheckEnabled
-CTRDG_CheckEnabled: ; 0x020DB11C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsOptionCartridge
-_020DB128:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12
- .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x1C, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3
- .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xBF, 0xC9, 0xFF, 0xEB
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDG_Enable
-CTRDG_Enable: ; 0x020DB15C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020DB1AC ; =0x021D6940
- mov r4, r0
- str r5, [r1, #0x0]
- bl CTRDG_IsOptionCartridge
-_020DB17C:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x04, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x1A, 0xA0, 0x13, 0x05, 0x1A, 0xA0, 0x03
- .byte 0x0F, 0x0A, 0xA0, 0xE3, 0x0F, 0xC6, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x60, 0xC8, 0xFF, 0xEB
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-_020DB1AC: .word 0x021D6940
-
- arm_func_start CTRDG_IsEnabled
-CTRDG_IsEnabled: ; 0x020DB1B0
- ldr r0, _020DB1BC ; =0x021D6940
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020DB1BC: .word 0x021D6940
-
- arm_func_start CTRDGi_AccessCommon
-CTRDGi_AccessCommon: ; 0x020DB1C0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl CTRDG_IsExisting
-_020DB1DC:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01
- .byte 0xC9, 0xFF, 0xFF, 0xEB, 0xC0, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x01, 0xBC, 0xFF, 0xEB
- .byte 0x21, 0x00, 0x54, 0xE3, 0x0D, 0x00, 0x00, 0x8A, 0x21, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A
- .byte 0x11, 0x00, 0x54, 0xE3, 0x06, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x54, 0xE3, 0x1C, 0x00, 0x00, 0x3A
- .byte 0x10, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x54, 0xE3, 0x0B, 0x00, 0x00, 0x0A
- .byte 0x17, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0xB0, 0x60, 0xC7, 0x01, 0x14, 0x00, 0x00, 0xEA
- .byte 0x40, 0x00, 0x54, 0xE3, 0x02, 0x00, 0x00, 0x8A, 0x40, 0x00, 0x54, 0xE3, 0x00, 0x60, 0x87, 0x05
- .byte 0x0F, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x00, 0xEA
- .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0xD7, 0x15, 0x00, 0x00, 0xC5, 0x15, 0x08, 0x00, 0x00, 0xEA
- .byte 0x00, 0x00, 0x55, 0xE3, 0xB0, 0x00, 0xD7, 0x11, 0xB0, 0x00, 0xC5, 0x11, 0x04, 0x00, 0x00, 0xEA
- .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x97, 0x15, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x00, 0xEA
- .byte 0x00, 0x60, 0xC7, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x7C, 0xBB, 0xFF, 0xEB
- .byte 0xF9, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02
-
- arm_func_start CTRDG_Read32
-CTRDG_Read32: ; 0x020DB2C0
- ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon
- mov r2, r1
- mov r1, #0x0
- mov r3, #0x41
- bx r12
- .balign 4
-_020DB2D4: .word CTRDGi_AccessCommon
-
- arm_func_start CTRDGi_CopyCommon
-CTRDGi_CopyCommon: ; 0x020DB2D8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl CTRDG_IsExisting
-_020DB2F4:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03
- .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x83, 0xFF, 0xFF, 0xEB, 0x18, 0x01, 0x9F, 0xE5
- .byte 0xB2, 0x00, 0xD0, 0xE1, 0xBB, 0xBB, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x10, 0xE2
- .byte 0x04, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1, 0x9A, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1
- .byte 0x04, 0x10, 0xA0, 0xE1, 0x88, 0xC3, 0xFF, 0xEB, 0x18, 0x00, 0x9D, 0xE5, 0x11, 0x00, 0x50, 0xE3
- .byte 0x09, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x50, 0xE3
- .byte 0x0D, 0x00, 0x00, 0x0A, 0x11, 0x00, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0xEA
- .byte 0x01, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x50, 0xE3
- .byte 0x02, 0x00, 0x00, 0x8A, 0x20, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x00, 0xEA
- .byte 0x21, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x1D, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1
- .byte 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x1A, 0xCA, 0xFF, 0xEB
- .byte 0x17, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1
- .byte 0x04, 0x30, 0xA0, 0xE1, 0x32, 0xCA, 0xFF, 0xEB, 0x11, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1
- .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x84, 0xCB, 0xFF, 0xEB, 0x0C, 0x00, 0x00, 0xEA
- .byte 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x8B, 0xCB, 0xFF, 0xEB
- .byte 0x07, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x9A
- .byte 0x01, 0x00, 0xD6, 0xE4, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x00, 0x51, 0xE1, 0x01, 0x00, 0xC5, 0xE4
- .byte 0xFA, 0xFF, 0xFF, 0x3A, 0x20, 0x00, 0x9F, 0xE5, 0xB2, 0x00, 0xD0, 0xE1, 0x20, 0xBB, 0xFF, 0xEB
- .byte 0x9D, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x44, 0x69, 0x1D, 0x02
-
- arm_func_start CTRDG_CpuCopy32
-CTRDG_CpuCopy32: ; 0x020DB430
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x21
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_CpuCopy16
-CTRDG_CpuCopy16: ; 0x020DB464
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x11
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_CpuCopy8
-CTRDG_CpuCopy8: ; 0x020DB498
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- cmp lr, #0x8000000
- blo _020DB4DC
- ldr r2, _020DB500 ; =0x0A010000
- cmp lr, r2
- bhs _020DB4DC
- mov r12, #0x1
- mov r2, r0
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020DB4DC:
- mov r12, #0x1
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB500: .word 0x0A010000
-
- arm_func_start CTRDGi_SendtoPxi
-CTRDGi_SendtoPxi: ; 0x020DB504
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r1, r7
- mov r0, #0xd
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020DB520:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01
- .byte 0x01, 0x60, 0xA0, 0xE3, 0x0D, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1
- .byte 0x2A, 0x94, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1
- .byte 0xE2, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2
- .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDGi_UnlockByProcessor
-CTRDGi_UnlockByProcessor: ; 0x020DB568
- stmdb sp!, {r4,lr}
- mov r4, r1
- ldr r1, [r4, #0x0]
- cmp r1, #0x0
- bne _020DB580
- bl OS_UnlockCartridge
-_020DB580:
- ldr r0, [r4, #0x4]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start CTRDGi_LockByProcessor
-CTRDGi_LockByProcessor: ; 0x020DB590
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- ldr r5, _020DB60C ; =0x027FFFE8
- mov r4, #0x1
- bl OS_DisableInterrupts
- str r0, [r6, #0x4]
- mov r0, r5
- bl OS_ReadOwnerOfLockWord
- and r0, r0, #0x40
- str r0, [r6, #0x0]
- ldr r0, [r6, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- mov r0, r7
- bl OS_TryLockCartridge
-_020DB5DC:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x96, 0xE5
- .byte 0x4B, 0xC7, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x93, 0xFC, 0xFB, 0xE9, 0xFF, 0xFF, 0xEA
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-_020DB60C: .word 0x027FFFE8
-
- arm_func_start CTRDGi_RestoreAccessCycle
-CTRDGi_RestoreAccessCycle: ; 0x020DB610
- ldr r3, _020DB640 ; =0x04000204
- ldr r2, [r0, #0x0]
- ldrh r1, [r3, #0x0]
- bic r1, r1, #0xc
- orr r1, r1, r2, lsl #0x2
- strh r1, [r3, #0x0]
- ldrh r1, [r3, #0x0]
- ldr r2, [r0, #0x4]
- bic r0, r1, #0x10
- orr r0, r0, r2, lsl #0x4
- strh r0, [r3, #0x0]
- bx lr
- .balign 4
-_020DB640: .word 0x04000204
-
- arm_func_start CTRDGi_ChangeLatestAccessCycle
-CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644
- ldr r2, _020DB688 ; =0x04000204
- ldrh r1, [r2, #0x0]
- and r1, r1, #0xc
- mov r1, r1, asr #0x2
- str r1, [r0, #0x0]
- ldrh r1, [r2, #0x0]
- and r1, r1, #0x10
- mov r1, r1, asr #0x4
- str r1, [r0, #0x4]
- ldrh r0, [r2, #0x0]
- bic r0, r0, #0xc
- orr r0, r0, #0xc
- strh r0, [r2, #0x0]
- ldrh r0, [r2, #0x0]
- bic r0, r0, #0x10
- strh r0, [r2, #0x0]
- bx lr
- .balign 4
-_020DB688: .word 0x04000204
-
- arm_func_start CTRDG_IsExisting
-CTRDG_IsExisting:
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x10
- ldr r2, _020DB798 ; =0x027FFC30
- ldr r0, _020DB79C ; =0x0000FFFF
- ldrh r1, [r2, #0x0]
- mov r4, #0x1
- cmp r1, r0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1e
- mov r0, r0, lsr #0x1f
- cmp r0, #0x1
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r0, _020DB7A0 ; =0x021D6944
- add r1, sp, #0x0
- ldrh r0, [r0, #0x2]
- bl CTRDGi_LockByProcessor
- add r0, sp, #0x8
- bl CTRDGi_ChangeLatestAccessCycle
- mov r0, #0x8000000
- ldrb r2, [r0, #0xb2]
- cmp r2, #0x96
- bne _020DB714
- ldr r1, _020DB798 ; =0x027FFC30
- ldrh r0, [r0, #0xbe]
- ldrh r1, [r1, #0x0]
- cmp r1, r0
- bne _020DB75C
-_020DB714:
- cmp r2, #0x96
- beq _020DB734
- ldr r1, _020DB798 ; =0x027FFC30
- ldr r0, _020DB7A4 ; =0x0801FFFE
- ldrh r1, [r1, #0x0]
- ldrh r0, [r0, #0x0]
- cmp r1, r0
- bne _020DB75C
-_020DB734:
- ldr r2, _020DB798 ; =0x027FFC30
- mov r0, #0x8000000
- ldr r1, [r2, #0x8]
- ldr r0, [r0, #0xac]
- cmp r1, r0
- beq _020DB770
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1f
- movs r0, r0, lsr #0x1f
- beq _020DB770
-_020DB75C:
- ldr r1, _020DB798 ; =0x027FFC30
- mov r4, #0x0
- ldrb r0, [r1, #0x5]
- orr r0, r0, #0x2
- strb r0, [r1, #0x5]
-_020DB770:
- add r0, sp, #0x8
- bl CTRDGi_RestoreAccessCycle
- ldr r0, _020DB7A0 ; =0x021D6944
- add r1, sp, #0x0
- ldrh r0, [r0, #0x2]
- bl CTRDGi_UnlockByProcessor
- mov r0, r4
- add sp, sp, #0x10
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020DB798: .word 0x027FFC30
-_020DB79C: .word 0x0000FFFF
-_020DB7A0: .word 0x021D6944
-_020DB7A4: .word 0x0801FFFE
-
- arm_func_start CTRDG_IsPulledOut
-CTRDG_IsPulledOut: ; 0x020DB7A8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020DB800 ; =0x027FFC30
- ldr r0, _020DB804 ; =0x0000FFFF
- ldrh r1, [r2, #0x0]
- cmp r1, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {lr}
- bxeq lr
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1e
- movs r0, r0, lsr #0x1f
- bne _020DB7E4
- bl CTRDG_IsExisting
-_020DB7E4:
- ldr r0, _020DB800 ; =0x027FFC30
- ldrb r0, [r0, #0x5]
- mov r0, r0, lsl #0x1e
- mov r0, r0, lsr #0x1f
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB800: .word 0x027FFC30
-_020DB804: .word 0x0000FFFF
-
- arm_func_start CTRDGi_GetAgbMakerCodeAtInit
-CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDGi_IsAgbCartridgeAtInit
-_020DB814:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0xB6, 0x40, 0xD0, 0x11
- .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02
-
- arm_func_start CTRDG_GetAgbMakerCode
-CTRDG_GetAgbMakerCode: ; 0x020DB830
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDG_IsExisting
-_020DB83C:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1
- .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDGi_GetAgbGameCodeAtInit
-CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDGi_IsAgbCartridgeAtInit
-_020DB864:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x08, 0x40, 0x90, 0x15
- .byte 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x30, 0xFC, 0x7F, 0x02
-
- arm_func_start CTRDG_GetAgbGameCode
-CTRDG_GetAgbGameCode: ; 0x020DB880
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDG_IsExisting
-_020DB88C:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x01, 0x00, 0x00, 0x0A, 0xEF, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1
- .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDGi_IsAgbCartridgeAtInit
-CTRDGi_IsAgbCartridgeAtInit:
- ldr r0, _020DB8BC ; =0x027FFC30
- ldrb r0, [r0, #0x5]
- mov r0, r0, lsl #0x1f
- mov r0, r0, lsr #0x1f
- bx lr
- .balign 4
-_020DB8BC: .word 0x027FFC30
-
- arm_func_start CTRDG_IsOptionCartridge
-CTRDG_IsOptionCartridge:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsExisting
-_020DB8CC:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x05, 0x00, 0x00, 0x0A, 0xF3, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02
- .byte 0x01, 0x00, 0xA0, 0x03, 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0xA0, 0xE3
- .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDG_IsAgbCartridge
-CTRDG_IsAgbCartridge: ; 0x020DB8FC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsExisting
-_020DB908:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A
- .byte 0xE4, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13
- .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2
- .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDGi_InitCommon
-CTRDGi_InitCommon: ; 0x020DB938
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020DB970 ; =0x021D6944
- mov r3, #0x0
- ldr r2, _020DB974 ; =0x05000001
- add r0, sp, #0x0
- str r3, [sp, #0x0]
- blx FUN_020002FE
- bl OS_GetLockID
- ldr r1, _020DB970 ; =0x021D6944
- strh r0, [r1, #0x2]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB970: .word 0x021D6944
-_020DB974: .word 0x05000001
-
- arm_func_start CTRDGi_CallbackForSetPhi
-CTRDGi_CallbackForSetPhi: ; 0x020DB978
- ldr r0, _020DB988 ; =0x021D694C
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020DB988: .word 0x021D694C
-
- arm_func_start CTRDG_TerminateForPulledOut
-CTRDG_TerminateForPulledOut: ; 0x020DB98C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, #0x2
- bl CTRDGi_SendtoPxi
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_PulledOutCallback
-CTRDGi_PulledOutCallback: ; 0x020DB9AC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- and r0, r1, #0x3f
- cmp r0, #0x11
- bne _020DBA14
- ldr r0, _020DBA24 ; =0x021D6954
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- ldr r1, _020DBA28 ; =0x021D6958
- mov r0, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- beq _020DB9F0
- blx r1
-_020DB9F0:
- cmp r0, #0x0
- beq _020DB9FC
- bl CTRDG_TerminateForPulledOut
-_020DB9FC:
- ldr r0, _020DBA24 ; =0x021D6954
- mov r1, #0x1
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020DBA14:
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DBA24: .word 0x021D6954
-_020DBA28: .word 0x021D6958
-
- arm_func_start CTRDGi_CallbackForInitModuleInfo
-CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- and r0, r1, #0x3f
- cmp r0, #0x1
- ldreq r0, _020DBA64 ; =0x021D6944
- moveq r1, #0x1
- streqh r1, [r0, #0x0]
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DBA64: .word 0x021D6944
-
- arm_func_start CTRDGi_InitModuleInfo
-CTRDGi_InitModuleInfo: ; 0x020DBA68
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x14
- ldr r0, _020DBC50 ; =0x021D6948
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x14
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldr r1, _020DBC54 ; =0x04000300
- mov r2, #0x1
- str r2, [r0, #0x0]
- ldrh r0, [r1, #0x0]
- ands r0, r0, #0x1
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, #0x40000
- bl OS_SetIrqMask
- ldr r3, _020DBC58 ; =0x04000208
- mov r2, #0x1
- ldrh r4, [r3, #0x0]
- ldr r1, _020DBC5C ; =0x021D6944
- mov r6, r0
- strh r2, [r3, #0x0]
- ldrh r0, [r1, #0x2]
- add r1, sp, #0x0
- bl CTRDGi_LockByProcessor
- ldr r1, _020DBC60 ; =0x04000204
- add r0, sp, #0x8
- ldrh r1, [r1, #0x0]
- and r1, r1, #0x8000
- mov r5, r1, asr #0xf
- bl CTRDGi_ChangeLatestAccessCycle
- ldr r3, _020DBC60 ; =0x04000204
- ldr r0, _020DBC64 ; =0x021D6960
- ldrh r2, [r3, #0x0]
- add r0, r0, #0x80
- mov r1, #0x40
- bic r2, r2, #0x8000
- strh r2, [r3, #0x0]
- bl DC_InvalidateRange
- ldr r2, _020DBC64 ; =0x021D6960
- ldr r1, _020DBC68 ; =0x08000080
- mov r0, #0x1
- mov r3, #0x40
- add r2, r2, #0x80
- bl MI_DmaCopy16
- ldr r2, _020DBC60 ; =0x04000204
- add r0, sp, #0x8
- ldrh r1, [r2, #0x0]
- bic r1, r1, #0x8000
- orr r1, r1, r5, lsl #0xf
- strh r1, [r2, #0x0]
- bl CTRDGi_RestoreAccessCycle
- ldr r0, _020DBC5C ; =0x021D6944
- add r1, sp, #0x0
- ldrh r0, [r0, #0x2]
- bl CTRDGi_UnlockByProcessor
- ldr r0, _020DBC6C ; =0x027FFF9B
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020DBB70
- ldr r0, _020DBC70 ; =0x027FFF9A
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020DBBDC
-_020DBB70:
- ldr r2, _020DBC64 ; =0x021D6960
- ldr r0, _020DBC74 ; =0x027FFC30
- ldrh r1, [r2, #0xbe]
- mov r3, #0x0
- strh r1, [r0, #0x0]
-_020DBB84:
- add r0, r2, r3
- ldrb r1, [r0, #0xb5]
- add r0, r3, #0x2700000
- add r0, r0, #0xff000
- add r3, r3, #0x1
- strb r1, [r0, #0xC32]
- cmp r3, #0x3
- blt _020DBB84
- ldrh r0, [r2, #0xb0]
- ldr r1, _020DBC74 ; =0x027FFC30
- strh r0, [r1, #0x6]
- ldr r0, [r2, #0xac]
- str r0, [r1, #0x8]
- bl CTRDG_IsExisting
-_020DBBBC:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x01, 0x20, 0xA0, 0x13, 0xA0, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0x03, 0x00, 0x20, 0xC1, 0xE5
- .byte 0x98, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5
-_020DBBDC:
- ldr r0, _020DBC78 ; =0xFFFF0020
- ldr r1, _020DBC7C ; =0x021D6964
- mov r2, #0x9c
- bl MIi_CpuCopy32
- bl DC_FlushAll
- ldr r0, _020DBC64 ; =0x021D6960
- add r0, r0, #0xfe000000
- mov r0, r0, lsr #0x5
- mov r0, r0, lsl #0x6
- orr r0, r0, #0x1
- bl CTRDGi_SendtoPxi
- ldr r5, _020DBC5C ; =0x021D6944
- ldrh r0, [r5, #0x0]
- cmp r0, #0x1
- beq _020DBC30
- mov r7, #0x1
-_020DBC1C:
- mov r0, r7
- blx FUN_020005F2
- ldrh r0, [r5, #0x0]
- cmp r0, #0x1
- bne _020DBC1C
-_020DBC30:
- ldr r2, _020DBC58 ; =0x04000208
- mov r0, r6
- ldrh r1, [r2, #0x0]
- strh r4, [r2, #0x0]
- bl OS_SetIrqMask
- add sp, sp, #0x14
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DBC50: .word 0x021D6948
-_020DBC54: .word 0x04000300
-_020DBC58: .word 0x04000208
-_020DBC5C: .word 0x021D6944
-_020DBC60: .word 0x04000204
-_020DBC64: .word 0x021D6960
-_020DBC68: .word 0x08000080
-_020DBC6C: .word 0x027FFF9B
-_020DBC70: .word 0x027FFF9A
-_020DBC74: .word 0x027FFC30
-_020DBC78: .word 0xFFFF0020
-_020DBC7C: .word 0x021D6964
-
- arm_func_start CTRDG_Init
-CTRDG_Init: ; 0x020DBC80
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020DBD34 ; =0x021D6950
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r1, #0x1
- str r1, [r0, #0x0]
- bl CTRDGi_InitCommon
- ldr r0, _020DBD38 ; =0x021D6954
- mov r1, #0x0
- str r1, [r0, #0x0]
- bl PXI_Init
- mov r5, #0xd
- mov r4, #0x1
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
-_020DBCD0:
- .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x5C, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3
- .byte 0x35, 0xD0, 0xFF, 0xEB, 0x5F, 0xFF, 0xFF, 0xEB, 0x0D, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3
- .byte 0x31, 0xD0, 0xFF, 0xEB, 0x44, 0x10, 0x9F, 0xE5, 0x0D, 0x00, 0xA0, 0xE3, 0x2E, 0xD0, 0xFF, 0xEB
- .byte 0x3C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5
- .byte 0xAD, 0x07, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x26, 0xD0, 0xFF, 0xEB
- .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8
- .byte 0x1E, 0xFF, 0x2F, 0xE1
-_020DBD34: .word 0x021D6950
-_020DBD38: .word 0x021D6954
-_020DBD3C:
- .byte 0x2C, 0xBA, 0x0D, 0x02
- .byte 0xAC, 0xB9, 0x0D, 0x02, 0x58, 0x69, 0x1D, 0x02, 0x20, 0x6A, 0x1D, 0x02, 0x78, 0xB9, 0x0D, 0x02
-
- arm_func_start CTRDG_IdentifyAgbBackup
-CTRDG_IdentifyAgbBackup: ; 0x020DBD50
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- cmp r7, #0x1
- mov r0, #0x1
- bhi _020DBEAC
- bl OS_GetLockID
- ldr r1, _020DBED8 ; =0x021D6B0C
- strh r0, [r1, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_LockCartridge
- ldr r6, _020DBEDC ; =0x04000204
- ldr r1, _020DBEE0 ; =0x02103FE4
- ldrh r3, [r6, #0x0]
- ldrh r2, [r6, #0x0]
- ldr r0, _020DBEE4 ; =0x021D6B28
- and r4, r3, #0x3
- bic r2, r2, #0x3
- orr r2, r2, #0x3
- strh r2, [r6, #0x0]
- str r1, [r0, #0x0]
- bl CTRDGi_ReadFlashID
- ldr r2, _020DBEDC ; =0x04000204
- mov r6, r0
- ldrh r1, [r2, #0x0]
- cmp r7, #0x0
- ldreq r5, _020DBEE8 ; =0x02103FF4
- bic r1, r1, #0x3
- orr r1, r1, r4
- cmp r7, #0x1
- ldr r0, _020DBED8 ; =0x021D6B0C
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- ldreq r5, _020DBEEC ; =0x02103FE8
- bl OS_UnlockCartridge2
- ldr r2, [r5, #0x0]
- mov r0, #0x1
- ldrh r1, [r2, #0x38]
- cmp r1, #0x0
- beq _020DBE14
- and r3, r6, #0xff
-_020DBDF4:
- ldrh r1, [r2, #0x38]
- cmp r3, r1
- moveq r0, #0x0
- beq _020DBE14
- ldr r2, [r5, #0x4]!
- ldrh r1, [r2, #0x38]
- cmp r1, #0x0
- bne _020DBDF4
-_020DBE14:
- ldr r2, [r2, #0x0]
- ldr r1, _020DBEF0 ; =0x021D6B14
- ldr r3, _020DBEF4 ; =0x021D6B34
- str r2, [r1, #0x0]
- ldr r1, [r5, #0x0]
- ldr r2, _020DBEF8 ; =0x021D6B2C
- ldr r4, [r1, #0x4]
- ldr r1, _020DBEFC ; =0x021D6B18
- str r4, [r3, #0x0]
- ldr r3, [r5, #0x0]
- ldr r6, _020DBF00 ; =0x021D6B1C
- ldr r3, [r3, #0x8]
- ldr r4, _020DBF04 ; =0x021D6B30
- str r3, [r2, #0x0]
- ldr r2, [r5, #0x0]
- ldr r3, _020DBF08 ; =0x021D6B24
- ldr r7, [r2, #0xc]
- ldr r2, _020DBEE4 ; =0x021D6B28
- str r7, [r1, #0x0]
- ldr r7, [r5, #0x0]
- ldr r1, _020DBF0C ; =0x021D6B20
- ldr r7, [r7, #0x10]
- add sp, sp, #0x4
- str r7, [r6, #0x0]
- ldr r6, [r5, #0x0]
- ldr r6, [r6, #0x14]
- str r6, [r4, #0x0]
- ldr r4, [r5, #0x0]
- ldr r4, [r4, #0x18]
- str r4, [r3, #0x0]
- ldr r3, [r5, #0x0]
- ldr r3, [r3, #0x1c]
- str r3, [r2, #0x0]
- ldr r2, [r5, #0x0]
- add r2, r2, #0x20
- str r2, [r1, #0x0]
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020DBEAC:
- cmp r7, #0x2
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- bl OS_GetLockID
- ldr r1, _020DBF10 ; =0x021D6B4C
- strh r0, [r1, #0x0]
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DBED8: .word 0x021D6B0C
-_020DBEDC: .word 0x04000204
-_020DBEE0: .word 0x02103FE4
-_020DBEE4: .word 0x021D6B28
-_020DBEE8: .word 0x02103FF4
-_020DBEEC: .word 0x02103FE8
-_020DBEF0: .word 0x021D6B14
-_020DBEF4: .word 0x021D6B34
-_020DBEF8: .word 0x021D6B2C
-_020DBEFC: .word 0x021D6B18
-_020DBF00: .word 0x021D6B1C
-_020DBF04: .word 0x021D6B30
-_020DBF08: .word 0x021D6B24
-_020DBF0C: .word 0x021D6B20
-_020DBF10: .word 0x021D6B4C
-
- arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync
-CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- str r1, [sp, #0xc]
- strh r0, [sp, #0x20]
- str r2, [sp, #0x18]
- ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore
- add r0, sp, #0x0
- mov r2, r3
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore
-
- arm_func_start CTRDG_VerifyAgbFlash
-CTRDG_VerifyAgbFlash: ; 0x020DBF48
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0xc]
- str r2, [sp, #0x18]
- bl CTRDGi_VerifyAgbFlashCore
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_WriteAgbFlashSector
-CTRDG_WriteAgbFlashSector:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020DBF90 ; =0x021D6B14
- ldr r2, [r2, #0x0]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DBF90: .word 0x021D6B14
-
- arm_func_start CTRDG_ReadAgbFlash
-CTRDG_ReadAgbFlash: ; 0x020DBF94
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0x14]
- str r2, [sp, #0x1c]
- str r3, [sp, #0x18]
- bl CTRDGi_ReadAgbFlashCore
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore
-CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x24
- mov r4, r0
- ldmia r4!, {r0-r3}
- add r12, sp, #0x0
- stmia r12!, {r0-r3}
- ldmia r4!, {r0-r3}
- stmia r12!, {r0-r3}
- ldr r0, [r4, #0x0]
- mov r7, #0x0
- str r0, [r12, #0x0]
- ldrh r6, [sp, #0x20]
- ldr r5, [sp, #0xc]
- ldr r4, [sp, #0x18]
- mov r0, r6
- mov r1, r5
- bl CTRDG_WriteAgbFlashSector
-_020DC004:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1
- .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCA, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3
- .byte 0x24, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x10, 0x87, 0xE2
- .byte 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x78, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE3, 0xED, 0xFF, 0xFF, 0x3A
- .byte 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start CTRDGi_VerifyAgbFlashCore
-CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, _020DC128 ; =0x021D6B0C
- ldr r1, [r5, #0x0]
- ldrh r0, [r0, #0x0]
- str r1, [r4, #0x0]
- ldrh r6, [sp, #0x20]
- ldr r5, [sp, #0xc]
- ldr r4, [sp, #0x18]
- bl OS_LockCartridge
- ldr r3, _020DC12C ; =0x04000204
- ldr r0, _020DC130 ; =0x021D6B20
- ldrh r2, [r3, #0x0]
- ldrh r1, [r3, #0x0]
- and r7, r2, #0x3
- bic r1, r1, #0x3
- orr r1, r1, #0x3
- strh r1, [r3, #0x0]
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x0]
- cmp r0, #0x20000
- bne _020DC0D4
- mov r0, r6, lsl #0xc
- mov r0, r0, lsr #0x10
- bl CTRDGi_SetFlashBankMx
- and r0, r6, #0xf
- mov r0, r0, lsl #0x10
- mov r6, r0, lsr #0x10
-_020DC0D4:
- ldr r1, _020DC130 ; =0x021D6B20
- mov r0, r5
- ldr r1, [r1, #0x0]
- mov r2, r4
- ldrh r1, [r1, #0x8]
- mov r1, r6, lsl r1
- add r1, r1, #0xa000000
- bl CTRDGi_VerifyFlashSectorCore
- ldr r3, _020DC12C ; =0x04000204
- ldr r1, _020DC128 ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r7
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x24
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DC128: .word 0x021D6B0C
-_020DC12C: .word 0x04000204
-_020DC130: .word 0x021D6B20
-
- arm_func_start CTRDGi_VerifyFlashSectorCore
-CTRDGi_VerifyFlashSectorCore: ; 0x020DC134
- cmp r2, #0x0
- sub r2, r2, #0x1
- beq _020DC160
-_020DC140:
- ldrb r12, [r1], #0x1
- ldrb r3, [r0], #0x1
- cmp r12, r3
- subne r0, r1, #0x1
- bxne lr
- cmp r2, #0x0
- sub r2, r2, #0x1
- bne _020DC140
-_020DC160:
- mov r0, #0x0
- bx lr
-
- arm_func_start CTRDGi_ReadAgbFlashCore
-CTRDGi_ReadAgbFlashCore: ; 0x020DC168
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x28
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, _020DC25C ; =0x021D6B0C
- ldr r1, [r5, #0x0]
- ldrh r0, [r0, #0x0]
- str r1, [r4, #0x0]
- ldrh r7, [sp, #0x20]
- ldr r6, [sp, #0x14]
- ldr r5, [sp, #0x1c]
- ldr r4, [sp, #0x18]
- bl OS_LockCartridge
- ldr r3, _020DC260 ; =0x04000204
- ldr r0, _020DC264 ; =0x021D6B20
- ldrh r2, [r3, #0x0]
- ldrh r1, [r3, #0x0]
- and r8, r2, #0x3
- bic r1, r1, #0x3
- orr r1, r1, #0x3
- strh r1, [r3, #0x0]
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x0]
- cmp r0, #0x20000
- bne _020DC1F4
- mov r0, r7, lsl #0xc
- mov r0, r0, lsr #0x10
- bl CTRDGi_SetFlashBankMx
- and r0, r7, #0xf
- mov r0, r0, lsl #0x10
- mov r7, r0, lsr #0x10
-_020DC1F4:
- ldr r0, _020DC264 ; =0x021D6B20
- cmp r4, #0x0
- ldr r0, [r0, #0x0]
- sub r4, r4, #0x1
- ldrh r0, [r0, #0x8]
- mov r0, r7, lsl r0
- add r0, r0, #0xa000000
- add r1, r6, r0
- beq _020DC22C
-_020DC218:
- ldrb r0, [r1], #0x1
- cmp r4, #0x0
- sub r4, r4, #0x1
- strb r0, [r5], #0x1
- bne _020DC218
-_020DC22C:
- ldr r2, _020DC260 ; =0x04000204
- ldr r0, _020DC25C ; =0x021D6B0C
- ldrh r1, [r2, #0x0]
- bic r1, r1, #0x3
- orr r1, r1, r8
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge2
- mov r0, #0x0
- add sp, sp, #0x28
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020DC25C: .word 0x021D6B0C
-_020DC260: .word 0x04000204
-_020DC264: .word 0x021D6B20
-
- arm_func_start CTRDGi_PollingSR1MCOMMON
-CTRDGi_PollingSR1MCOMMON: ; 0x020DC268
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, #0x0
- bl StartFlashTimer
- ldr r4, _020DC318 ; =0x021D6B10
-_020DC284:
- bl CheckFlashTimer
- mov r0, r7
- bl CTRDGi_ReadSrFunc
- cmp r0, r6
- beq _020DC300
- ands r0, r0, #0x20
- beq _020DC2CC
- mov r0, r7
- bl CTRDGi_ReadSrFunc
-_020DC2A8:
- .byte 0x00, 0x00, 0x56, 0xE1, 0x13, 0x00, 0x00, 0x0A
- .byte 0x0A, 0x0A, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x5C, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3
- .byte 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA
-_020DC2CC:
- ldrh r0, [r4, #0x0]
- cmp r0, #0x0
- beq _020DC284
- mov r0, r7
- bl CTRDGi_ReadSrFunc
-_020DC2E0:
- .byte 0x00, 0x00, 0x56, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x09, 0x88, 0xE3, 0x00, 0x08, 0xA0, 0xE1
- .byte 0x24, 0x10, 0x9F, 0xE5, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x20, 0xC1, 0xE5, 0x20, 0x58, 0xA0, 0xE1
-_020DC300:
- bl CTRDG_IsExisting
-_020DC304:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03, 0x05, 0x00, 0xA0, 0xE1
- .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-_020DC318: .word 0x021D6B10
-_020DC31C:
- .byte 0x55, 0x55, 0x00, 0x0A
-
- arm_func_start CTRDGi_PollingSR512kCOMMON
-CTRDGi_PollingSR512kCOMMON: ; 0x020DC320
- stmdb sp!, {r4-r8,lr}
- mov r4, r0
- mov r8, r1
- mov r7, r2
- mov r6, #0x0
- bl StartFlashTimer
- ldr r5, _020DC3A8 ; =0x021D6B10
-_020DC33C:
- mov r0, r8
- bl CTRDGi_ReadSrFunc
- cmp r0, r7
- beq _020DC390
- ldrh r0, [r5, #0x0]
- cmp r0, #0x0
- beq _020DC33C
- mov r0, r8
- bl CTRDGi_ReadSrFunc
-_020DC360:
- .byte 0x00, 0x00, 0x57, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5
- .byte 0xB8, 0x01, 0xD0, 0xE1, 0xC2, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x9F, 0x05, 0xF0, 0x10, 0xA0, 0x03
- .byte 0x00, 0x10, 0xC0, 0x05, 0x03, 0x09, 0x84, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x68, 0xA0, 0xE1
-_020DC390:
- bl CTRDG_IsExisting
-_020DC394:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x6A, 0xA0, 0x03, 0x06, 0x00, 0xA0, 0xE1
- .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-_020DC3A8: .word 0x021D6B10
-_020DC3AC:
- .byte 0x20, 0x6B, 0x1D, 0x02
- .byte 0x55, 0x55, 0x00, 0x0A
-
- arm_func_start CTRDGi_ReadSrFunc
-CTRDGi_ReadSrFunc:
- ldrb r0, [r0, #0x0]
- bx lr
-
- arm_func_start CheckFlashTimer
-CheckFlashTimer: ; 0x020DC3BC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl OS_GetTick
- ldr r3, _020DC420 ; =0x021D6B44
- ldr r2, _020DC424 ; =0x000082EA
- ldr r12, [r3, #0x0]
- ldr r3, [r3, #0x4]
- subs r12, r0, r12
- sbc r0, r1, r3
- mov r1, r0, lsl #0x6
- orr r1, r1, r12, lsr #0x1a
- mov r0, r12, lsl #0x6
- mov r3, #0x0
- bl _ll_udiv
- ldr r2, _020DC428 ; =0x021D6B3C
- ldr r3, [r2, #0x4]
- ldr r2, [r2, #0x0]
- cmp r3, r1
- cmpeq r2, r0
- ldrls r0, _020DC42C ; =0x021D6B10
- movls r1, #0x1
- strlsh r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC420: .word 0x021D6B44
-_020DC424: .word 0x000082EA
-_020DC428: .word 0x021D6B3C
-_020DC42C: .word 0x021D6B10
-
- arm_func_start StartFlashTimer
-StartFlashTimer: ; 0x020DC430
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020DC47C ; =0x021D6B28
- ldr r2, _020DC480 ; =0x021D6B10
- mov r3, #0x0
- ldr r1, [r1, #0x0]
- strh r3, [r2, #0x0]
- mov r0, r0, lsl #0x1
- ldrh r1, [r1, r0]
- ldr r0, _020DC484 ; =0x021D6B3C
- str r1, [r0, #0x0]
- str r3, [r0, #0x4]
- bl OS_GetTick
- ldr r2, _020DC488 ; =0x021D6B44
- str r0, [r2, #0x0]
- str r1, [r2, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC47C: .word 0x021D6B28
-_020DC480: .word 0x021D6B10
-_020DC484: .word 0x021D6B3C
-_020DC488: .word 0x021D6B44
-
- arm_func_start CTRDGi_ReadFlashID
-CTRDGi_ReadFlashID: ; 0x020DC48C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r5, _020DC590 ; =0x04000208
- mov r0, #0x0
- ldrh r2, [r5, #0x0]
- ldr r1, _020DC594 ; =0x021D6B38
- ldr r4, _020DC598 ; =0x0A005555
- strh r0, [r5, #0x0]
- str r2, [r1, #0x0]
- mov r3, #0xaa
- ldr r2, _020DC59C ; =0x0A002AAA
- strb r3, [r4, #0x0]
- mov r3, #0x55
- strb r3, [r2, #0x0]
- mov r2, #0x90
- strb r2, [r4, #0x0]
- ldrh r2, [r5, #0x0]
- ldr r1, [r1, #0x0]
- strh r1, [r5, #0x0]
- bl StartFlashTimer
- ldr r4, _020DC5A0 ; =0x021D6B10
- ldrh r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020DC4FC
-_020DC4EC:
- bl CheckFlashTimer
- ldrh r0, [r4, #0x0]
- cmp r0, #0x0
- beq _020DC4EC
-_020DC4FC:
- ldr r0, _020DC5A4 ; =0x0A000001
- bl CTRDGi_ReadSrFunc
- mov r4, r0, lsl #0x18
- mov r0, #0xa000000
- bl CTRDGi_ReadSrFunc
- ldr ip, _020DC590 ; =0x04000208
- orr r4, r0, r4, lsr #0x10
- ldrh r2, [r12, #0x0]
- mov r0, #0x0
- ldr r1, _020DC594 ; =0x021D6B38
- strh r0, [r12, #0x0]
- ldr r5, _020DC598 ; =0x0A005555
- str r2, [r1, #0x0]
- mov r3, #0xaa
- ldr r2, _020DC59C ; =0x0A002AAA
- strb r3, [r5, #0x0]
- mov r3, #0x55
- strb r3, [r2, #0x0]
- mov r2, #0xf0
- strb r2, [r5, #0x0]
- strb r2, [r5, #0x0]
- ldrh r2, [r12, #0x0]
- ldr r1, [r1, #0x0]
- strh r1, [r12, #0x0]
- bl StartFlashTimer
- ldr r5, _020DC5A0 ; =0x021D6B10
- ldrh r0, [r5, #0x0]
- cmp r0, #0x0
- bne _020DC580
-_020DC570:
- bl CheckFlashTimer
- ldrh r0, [r5, #0x0]
- cmp r0, #0x0
- beq _020DC570
-_020DC580:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DC590: .word 0x04000208
-_020DC594: .word 0x021D6B38
-_020DC598: .word 0x0A005555
-_020DC59C: .word 0x0A002AAA
-_020DC5A0: .word 0x021D6B10
-_020DC5A4: .word 0x0A000001
-
- arm_func_start CTRDGi_SetFlashBankMx
-CTRDGi_SetFlashBankMx: ; 0x020DC5A8
- ldr r3, _020DC5D4 ; =0x0A005555
- mov r2, #0xaa
- ldr r1, _020DC5D8 ; =0x0A002AAA
- strb r2, [r3, #0x0]
- mov r2, #0x55
- strb r2, [r1, #0x0]
- mov r1, #0xb0
- strb r1, [r3, #0x0]
- mov r1, #0xa000000
- strb r0, [r1, #0x0]
- bx lr
- .balign 4
-_020DC5D4: .word 0x0A005555
-_020DC5D8: .word 0x0A002AAA
-
- arm_func_start CTRDGi_WriteFlashSectorAsyncAT
-CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- str r1, [sp, #0xc]
- strh r0, [sp, #0x20]
- ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC604: .word CTRDGi_WriteFlashSectorCoreAT
-
- arm_func_start CTRDGi_EraseFlashSectorAsyncAT
-CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- mov r2, r1
- strh r0, [sp, #0x20]
- ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC630: .word CTRDGi_EraseFlashSectorCoreAT
-
- arm_func_start CTRDGi_WriteFlashSectorAT
-CTRDGi_WriteFlashSectorAT: ; 0x020DC634
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0xc]
- bl CTRDGi_WriteFlashSectorCoreAT
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashSectorAT
-CTRDGi_EraseFlashSectorAT:
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashSectorCoreAT
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_WriteFlash4KBAsyncAT
-CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- str r1, [sp, #0xc]
- strh r0, [sp, #0x20]
- ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT
-
- arm_func_start CTRDGi_EraseFlash4KBAsyncAT
-CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- mov r2, r1
- strh r0, [sp, #0x20]
- ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT
-
- arm_func_start CTRDGi_EraseFlashChipAsyncAT
-CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT
- mov r2, r0
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DC704: .word CTRDGi_EraseFlashChipCoreAT
-
- arm_func_start CTRDGi_WriteFlash4KBAT
-CTRDGi_WriteFlash4KBAT: ; 0x020DC708
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0xc]
- bl CTRDGi_WriteFlash4KBCoreAT
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlash4KBAT
-CTRDGi_EraseFlash4KBAT: ; 0x020DC734
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- bl CTRDGi_EraseFlash4KBCoreAT
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashChipAT
-CTRDGi_EraseFlashChipAT: ; 0x020DC75C
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashChipCoreAT
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_WriteFlash4KBCoreAT
-CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- str r0, [r4, #0x0]
- ldrh r0, [sp, #0x20]
- ldr r7, [sp, #0xc]
- cmp r0, #0x10
- addcs sp, sp, #0x24
- ldrhs r0, _020DC85C ; =0x000080FF
- ldmcsia sp!, {r4-r9,lr}
- bxcs lr
- ldr r1, _020DC860 ; =0x0210400C
- mov r0, r0, lsl #0x15
- ldr r1, [r1, #0x24]
- ldr r4, _020DC864 ; =0x021D6B08
- mov r8, r0, lsr #0x10
- strh r1, [r4, #0x0]
- ldrh r0, [r4, #0x0]
- cmp r0, #0x0
- beq _020DC84C
- ldr r0, _020DC868 ; =0x02104048
- ldr r6, [r0, #0x24]
- mov r5, #0x2
-_020DC7F4:
- mov r9, r5
-_020DC7F8:
- mov r0, r8
- mov r1, r7
- bl CTRDGi_WriteFlashSectorAT
- movs r12, r0
- beq _020DC81C
- sub r0, r9, #0x1
- mov r0, r0, lsl #0x10
- movs r9, r0, lsr #0x10
- bne _020DC7F8
-_020DC81C:
- cmp r12, #0x0
- bne _020DC84C
- ldrh r1, [r4, #0x0]
- add r0, r8, #0x1
- mov r0, r0, lsl #0x10
- sub r1, r1, r6
- strh r1, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- add r7, r7, r6
- mov r8, r0, lsr #0x10
- cmp r1, #0x0
- bne _020DC7F4
-_020DC84C:
- mov r0, r12
- add sp, sp, #0x24
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_020DC85C: .word 0x000080FF
-_020DC860: .word 0x0210400C
-_020DC864: .word 0x021D6B08
-_020DC868: .word 0x02104048
-
- arm_func_start CTRDGi_WriteFlashSectorCoreAT
-CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x24
- mov r5, r0
- add r4, sp, #0x0
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, _020DC984 ; =0x021D6B0C
- ldr r1, [r5, #0x0]
- ldrh r0, [r0, #0x0]
- str r1, [r4, #0x0]
- ldr r4, [sp, #0xc]
- bl OS_LockCartridge
- ldr r5, _020DC988 ; =0x04000204
- ldr r1, _020DC98C ; =0x021D6B20
- ldrh r0, [r5, #0x0]
- ldr r1, [r1, #0x0]
- ldrh r2, [r5, #0x0]
- ldr r3, [r1, #0x10]
- ldr r1, _020DC990 ; =0x02104048
- bic r2, r2, #0x3
- orr r2, r2, r3
- strh r2, [r5, #0x0]
- ldr r5, _020DC994 ; =0x04000208
- ldrh lr, [sp, #0x20]
- ldrh r12, [r1, #0x28]
- ldrh r2, [r5, #0x0]
- mov r3, #0x0
- mov lr, lr, lsl r12
- strh r3, [r5, #0x0]
- ldr ip, _020DC998 ; =0x0A005555
- mov r5, #0xaa
- strb r5, [r12, #0x0]
- ldr r3, _020DC99C ; =0x0A002AAA
- mov r5, #0x55
- strb r5, [r3, #0x0]
- mov r3, #0xa0
- strb r3, [r12, #0x0]
- ldr r3, [r1, #0x24]
- and r5, r0, #0x3
- cmp r3, #0x0
- add r1, lr, #0xa000000
- beq _020DC92C
-_020DC91C:
- ldrb r0, [r4], #0x1
- subs r3, r3, #0x1
- strb r0, [r1], #0x1
- bne _020DC91C
-_020DC92C:
- ldr ip, _020DC994 ; =0x04000208
- ldr r3, _020DC9A0 ; =0x021D6B24
- ldrh r0, [r12, #0x0]
- sub r1, r1, #0x1
- mov r0, #0x1
- strh r2, [r12, #0x0]
- ldrb r2, [r4, #-0x1]
- ldr r3, [r3, #0x0]
- blx r3
- ldr r3, _020DC988 ; =0x04000204
- ldr r1, _020DC984 ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x24
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DC984: .word 0x021D6B0C
-_020DC988: .word 0x04000204
-_020DC98C: .word 0x021D6B20
-_020DC990: .word 0x02104048
-_020DC994: .word 0x04000208
-_020DC998: .word 0x0A005555
-_020DC99C: .word 0x0A002AAA
-_020DC9A0: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlash4KBCoreAT
-CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- str r0, [r4, #0x0]
- ldrh r0, [sp, #0x20]
- cmp r0, #0x10
- addcs sp, sp, #0x24
- ldrhs r0, _020DCA54 ; =0x000080FF
- ldmcsia sp!, {r4-r7,lr}
- bxcs lr
- mov r0, r0, lsl #0x15
- mov r5, r0, lsr #0x10
- mov r6, #0x0
- mov r4, #0x2
- mov r7, r4
- mov r0, r5
- bl CTRDGi_EraseFlashSectorAT
-_020DCA00:
- .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x47, 0xE2, 0x01, 0x18, 0xA0, 0xE1
- .byte 0x21, 0x78, 0xB0, 0xE1, 0xF7, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x85, 0xE2, 0x01, 0x18, 0xA0, 0xE1
- .byte 0x00, 0x00, 0x50, 0xE3, 0x21, 0x58, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18
- .byte 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x10, 0x86, 0xE2, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x68, 0xA0, 0xE1
- .byte 0x20, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0x24, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8
- .byte 0x1E, 0xFF, 0x2F, 0xE1
-_020DCA54: .word 0x000080FF
-
- arm_func_start CTRDGi_EraseFlashSectorCoreAT
-CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- ldr r1, _020DCB80 ; =0x02104048
- str r0, [r4, #0x0]
- ldr r0, _020DCB84 ; =0x021D6B0C
- ldrh r2, [sp, #0x20]
- ldrh r1, [r1, #0x28]
- ldrh r0, [r0, #0x0]
- mov r1, r2, lsl r1
- add r5, r1, #0xa000000
- bl OS_LockCartridge
- ldr r4, _020DCB88 ; =0x04000204
- ldr r1, _020DCB8C ; =0x021D6B20
- ldrh r0, [r4, #0x0]
- ldr r2, [r1, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r2, #0x10]
- ldr r3, _020DCB90 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r2, [r3, #0x0]
- mov r1, #0x0
- ldr r4, _020DCB94 ; =0x0A005555
- strh r1, [r3, #0x0]
- mov r3, #0xaa
- strb r3, [r4, #0x0]
- ldr r1, _020DCB98 ; =0x0A002AAA
- mov r3, #0x55
- strb r3, [r1, #0x0]
- mov r3, #0xa0
- strb r3, [r4, #0x0]
- ldr r1, _020DCB80 ; =0x02104048
- and r4, r0, #0x3
- ldr r1, [r1, #0x24]
- cmp r1, #0x0
- beq _020DCB18
- mov r0, #0xff
-_020DCB0C:
- strb r0, [r5], #0x1
- subs r1, r1, #0x1
- bne _020DCB0C
-_020DCB18:
- ldr ip, _020DCB90 ; =0x04000208
- ldr r3, _020DCB9C ; =0x021D6B24
- ldrh r0, [r12, #0x0]
- sub r1, r5, #0x1
- strh r2, [r12, #0x0]
- ldr r3, [r3, #0x0]
- mov r0, #0x1
- mov r2, #0xff
- blx r3
- ldr r2, _020DCB88 ; =0x04000204
- movs r5, r0
- ldrh r1, [r2, #0x0]
- andne r0, r5, #0xff00
- orrne r0, r0, #0x2
- movne r0, r0, lsl #0x10
- bic r1, r1, #0x3
- movne r5, r0, lsr #0x10
- orr r1, r1, r4
- ldr r0, _020DCB84 ; =0x021D6B0C
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r5
- add sp, sp, #0x24
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DCB80: .word 0x02104048
-_020DCB84: .word 0x021D6B0C
-_020DCB88: .word 0x04000204
-_020DCB8C: .word 0x021D6B20
-_020DCB90: .word 0x04000208
-_020DCB94: .word 0x0A005555
-_020DCB98: .word 0x0A002AAA
-_020DCB9C: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlashChipCoreAT
-CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020DCC7C ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r4, _020DCC80 ; =0x04000204
- ldr r0, _020DCC84 ; =0x021D6B20
- ldrh r3, [r4, #0x0]
- ldr r0, [r0, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r0, #0x10]
- ldr r0, _020DCC88 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r4, [r0, #0x0]
- mov r2, #0x0
- ldr r1, _020DCC8C ; =0x021D6B38
- strh r2, [r0, #0x0]
- ldr lr, _020DCC90 ; =0x0A005555
- str r4, [r1, #0x0]
- mov r5, #0xaa
- ldr r4, _020DCC94 ; =0x0A002AAA
- strb r5, [lr, #0x0]
- mov r12, #0x55
- strb r12, [r4, #0x0]
- mov r2, #0x80
- strb r2, [lr, #0x0]
- strb r5, [lr, #0x0]
- strb r12, [r4, #0x0]
- mov r2, #0x10
- strb r2, [lr, #0x0]
- ldrh r2, [r0, #0x0]
- ldr r2, [r1, #0x0]
- ldr r1, _020DCC98 ; =0x021D6B24
- strh r2, [r0, #0x0]
- ldr r4, [r1, #0x0]
- mov r0, #0x3
- mov r1, #0xa000000
- mov r2, #0xff
- and r5, r3, #0x3
- blx r4
- ldr r3, _020DCC80 ; =0x04000204
- ldr r1, _020DCC7C ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DCC7C: .word 0x021D6B0C
-_020DCC80: .word 0x04000204
-_020DCC84: .word 0x021D6B20
-_020DCC88: .word 0x04000208
-_020DCC8C: .word 0x021D6B38
-_020DCC90: .word 0x0A005555
-_020DCC94: .word 0x0A002AAA
-_020DCC98: .word 0x021D6B24
-
- arm_func_start CTRDGi_WriteFlashSectorAsyncLE
-CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- str r1, [sp, #0xc]
- strh r0, [sp, #0x20]
- ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE
-
- arm_func_start CTRDGi_EraseFlashSectorAsyncLE
-CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- mov r2, r1
- strh r0, [sp, #0x20]
- ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE
-
- arm_func_start CTRDGi_EraseFlashChipAsyncLE
-CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE
- mov r2, r0
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DCD18: .word CTRDGi_EraseFlashChipCoreLE
-
- arm_func_start CTRDGi_WriteFlashSectorLE
-CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0xc]
- bl CTRDGi_WriteFlashSectorCoreLE
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashSectorLE
-CTRDGi_EraseFlashSectorLE: ; 0x020DCD48
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashSectorCoreLE
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashChipLE
-CTRDGi_EraseFlashChipLE: ; 0x020DCD70
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashChipCoreLE
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_VerifyFlashErase
-CTRDGi_VerifyFlashErase: ; 0x020DCD94
- stmdb sp!, {r4-r6,lr}
- ldr r2, _020DCE14 ; =0x021D6B0C
- mov r4, r0
- ldrh r0, [r2, #0x0]
- mov r5, r1
- bl OS_LockCartridge
- ldr ip, _020DCE18 ; =0x04000204
- ldr r0, _020DCE1C ; =0x021D6B20
- ldrh r3, [r12, #0x0]
- ldr r0, [r0, #0x0]
- ldrh r1, [r12, #0x0]
- ldr r2, [r0, #0x10]
- mov r0, r4
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r12, #0x0]
- and r6, r3, #0x3
- mov r4, #0x0
- blx r5
- cmp r0, #0x0
- ldr r2, _020DCE18 ; =0x04000204
- ldr r0, _020DCE14 ; =0x021D6B0C
- ldrh r1, [r2, #0x0]
- ldrne r4, _020DCE20 ; =0x00008004
- bic r1, r1, #0x3
- orr r1, r1, r6
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020DCE14: .word 0x021D6B0C
-_020DCE18: .word 0x04000204
-_020DCE1C: .word 0x021D6B20
-_020DCE20: .word 0x00008004
-
- arm_func_start CTRDGi_VerifyFlashCoreFF
-CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24
- ldr r1, _020DCE54 ; =0x021D6B20
- ldr r1, [r1, #0x0]
- ldr r2, [r1, #0x4]
- cmp r2, #0x0
- beq _020DCE4C
-_020DCE38:
- ldrb r1, [r0], #0x1
- cmp r1, #0xff
- bne _020DCE4C
- subs r2, r2, #0x1
- bne _020DCE38
-_020DCE4C:
- mov r0, r2
- bx lr
- .balign 4
-_020DCE54: .word 0x021D6B20
-
- arm_func_start CTRDGi_WriteFlashSectorCoreLE
-CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- str r0, [r4, #0x0]
- ldrh r7, [sp, #0x20]
- ldr r6, [sp, #0xc]
- cmp r7, #0x10
- addcs sp, sp, #0x24
- ldrhs r0, _020DD018 ; =0x000080FF
- ldmcsia sp!, {r4-r9,lr}
- bxcs lr
- ldr r0, _020DD01C ; =0x021D6B20
- mov r9, #0x0
- ldr r0, [r0, #0x0]
- ldrh r0, [r0, #0x8]
- mov r0, r7, lsl r0
- add r4, r0, #0xa000000
- ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF
-_020DCEB8:
- mov r0, r7
- bl CTRDGi_EraseFlashSectorLE
- movs r8, r0
- bne _020DCEE0
- mov r0, r4
- mov r1, r5
- bl CTRDGi_VerifyFlashErase
- mov r0, r0, lsl #0x10
- movs r8, r0, lsr #0x10
- beq _020DCF04
-_020DCEE0:
- add r0, r9, #0x1
- mov r0, r0, lsl #0x10
- cmp r9, #0x50
- mov r9, r0, lsr #0x10
- bne _020DCEB8
- add sp, sp, #0x24
- mov r0, r8
- ldmia sp!, {r4-r9,lr}
- bx lr
-_020DCF04:
- mov r5, #0x1
- cmp r9, #0x0
- movne r5, #0x6
- cmp r5, #0x1
- mov r9, #0x1
- blo _020DCF38
-_020DCF1C:
- mov r0, r7
- bl CTRDGi_EraseFlashSectorLE
- add r0, r9, #0x1
- mov r0, r0, lsl #0x10
- mov r9, r0, lsr #0x10
- cmp r9, r5
- bls _020DCF1C
-_020DCF38:
- ldr r0, _020DD024 ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r5, _020DD028 ; =0x04000204
- ldr r1, _020DD01C ; =0x021D6B20
- ldrh r0, [r5, #0x0]
- ldr r3, [r1, #0x0]
- ldrh r2, [r5, #0x0]
- ldr r3, [r3, #0x10]
- ldr r7, _020DD02C ; =0x021D6B08
- bic r2, r2, #0x3
- orr r2, r2, r3
- strh r2, [r5, #0x0]
- ldr r1, [r1, #0x0]
- ldr sb, _020DD030 ; =0x04000208
- ldr r1, [r1, #0x4]
- mov r2, #0x0
- strh r1, [r7, #0x0]
- ldrh r3, [r9, #0x0]
- ldr r1, _020DD034 ; =0x021D6B38
- and r5, r0, #0x3
- strh r2, [r9, #0x0]
- ldrh r0, [r7, #0x0]
- str r3, [r1, #0x0]
- cmp r0, #0x0
- beq _020DCFD4
-_020DCFA0:
- mov r0, r6
- mov r1, r4
- bl CTRDGi_ProgramFlashByteLE
- movs r8, r0
- bne _020DCFD4
- ldrh r0, [r7, #0x0]
- add r6, r6, #0x1
- add r4, r4, #0x1
- sub r0, r0, #0x1
- strh r0, [r7, #0x0]
- ldrh r0, [r7, #0x0]
- cmp r0, #0x0
- bne _020DCFA0
-_020DCFD4:
- ldr r3, _020DD030 ; =0x04000208
- ldr r0, _020DD034 ; =0x021D6B38
- ldrh r1, [r3, #0x0]
- ldr r0, [r0, #0x0]
- ldr r2, _020DD028 ; =0x04000204
- strh r0, [r3, #0x0]
- ldrh r1, [r2, #0x0]
- ldr r0, _020DD024 ; =0x021D6B0C
- bic r1, r1, #0x3
- orr r1, r1, r5
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r8
- add sp, sp, #0x24
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_020DD018: .word 0x000080FF
-_020DD01C: .word 0x021D6B20
-_020DD020: .word CTRDGi_VerifyFlashCoreFF
-_020DD024: .word 0x021D6B0C
-_020DD028: .word 0x04000204
-_020DD02C: .word 0x021D6B08
-_020DD030: .word 0x04000208
-_020DD034: .word 0x021D6B38
-
- arm_func_start CTRDGi_ProgramFlashByteLE
-CTRDGi_ProgramFlashByteLE: ; 0x020DD038
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr ip, _020DD08C ; =0x0A005555
- mov r3, #0xaa
- ldr r2, _020DD090 ; =0x0A002AAA
- strb r3, [r12, #0x0]
- mov r3, #0x55
- mov lr, r0
- strb r3, [r2, #0x0]
- mov r0, #0xa0
- strb r0, [r12, #0x0]
- ldrb r2, [lr, #0x0]
- ldr r3, _020DD094 ; =0x021D6B24
- mov r0, #0x1
- strb r2, [r1, #0x0]
- ldrb r2, [lr, #0x0]
- ldr r3, [r3, #0x0]
- blx r3
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DD08C: .word 0x0A005555
-_020DD090: .word 0x0A002AAA
-_020DD094: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlashSectorCoreLE
-CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x28
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- str r0, [r4, #0x0]
- ldrh r4, [sp, #0x20]
- cmp r4, #0x10
- addcs sp, sp, #0x28
- ldrhs r0, _020DD1B8 ; =0x000080FF
- ldmcsia sp!, {r4-r6,lr}
- bxcs lr
- ldr r0, _020DD1BC ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r6, _020DD1C0 ; =0x04000204
- ldr r1, _020DD1C4 ; =0x021D6B20
- ldrh r3, [r6, #0x0]
- ldr r0, [r1, #0x0]
- ldrh r2, [r6, #0x0]
- ldr r5, [r0, #0x10]
- ldr r0, _020DD1C8 ; =0x04000208
- bic r2, r2, #0x3
- orr r2, r2, r5
- strh r2, [r6, #0x0]
- ldr r1, [r1, #0x0]
- ldrh r5, [r0, #0x0]
- ldrh r12, [r1, #0x8]
- mov r1, #0x0
- ldr r2, _020DD1CC ; =0x021D6B38
- strh r1, [r0, #0x0]
- mov r6, r4, lsl r12
- ldr lr, _020DD1D0 ; =0x0A005555
- str r5, [r2, #0x0]
- mov r5, #0xaa
- ldr r4, _020DD1D4 ; =0x0A002AAA
- strb r5, [lr, #0x0]
- mov r12, #0x55
- strb r12, [r4, #0x0]
- mov r1, #0x80
- strb r1, [lr, #0x0]
- strb r5, [lr, #0x0]
- strb r12, [r4, #0x0]
- add r1, r6, #0xa000000
- mov r4, #0x30
- strb r4, [r1, #0x0]
- ldrh r4, [r0, #0x0]
- ldr r4, [r2, #0x0]
- ldr r2, _020DD1D8 ; =0x021D6B24
- strh r4, [r0, #0x0]
- ldr r4, [r2, #0x0]
- mov r0, #0x2
- mov r2, #0xff
- and r5, r3, #0x3
- blx r4
- ldr r3, _020DD1C0 ; =0x04000204
- ldr r1, _020DD1BC ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x28
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020DD1B8: .word 0x000080FF
-_020DD1BC: .word 0x021D6B0C
-_020DD1C0: .word 0x04000204
-_020DD1C4: .word 0x021D6B20
-_020DD1C8: .word 0x04000208
-_020DD1CC: .word 0x021D6B38
-_020DD1D0: .word 0x0A005555
-_020DD1D4: .word 0x0A002AAA
-_020DD1D8: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlashChipCoreLE
-CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020DD2B8 ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r4, _020DD2BC ; =0x04000204
- ldr r0, _020DD2C0 ; =0x021D6B20
- ldrh r3, [r4, #0x0]
- ldr r0, [r0, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r0, #0x10]
- ldr r0, _020DD2C4 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r4, [r0, #0x0]
- mov r2, #0x0
- ldr r1, _020DD2C8 ; =0x021D6B38
- strh r2, [r0, #0x0]
- ldr lr, _020DD2CC ; =0x0A005555
- str r4, [r1, #0x0]
- mov r5, #0xaa
- ldr r4, _020DD2D0 ; =0x0A002AAA
- strb r5, [lr, #0x0]
- mov r12, #0x55
- strb r12, [r4, #0x0]
- mov r2, #0x80
- strb r2, [lr, #0x0]
- strb r5, [lr, #0x0]
- strb r12, [r4, #0x0]
- mov r2, #0x10
- strb r2, [lr, #0x0]
- ldrh r2, [r0, #0x0]
- ldr r2, [r1, #0x0]
- ldr r1, _020DD2D4 ; =0x021D6B24
- strh r2, [r0, #0x0]
- ldr r4, [r1, #0x0]
- mov r0, #0x3
- mov r1, #0xa000000
- mov r2, #0xff
- and r5, r3, #0x3
- blx r4
- ldr r3, _020DD2BC ; =0x04000204
- ldr r1, _020DD2B8 ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DD2B8: .word 0x021D6B0C
-_020DD2BC: .word 0x04000204
-_020DD2C0: .word 0x021D6B20
-_020DD2C4: .word 0x04000208
-_020DD2C8: .word 0x021D6B38
-_020DD2CC: .word 0x0A005555
-_020DD2D0: .word 0x0A002AAA
-_020DD2D4: .word 0x021D6B24
-
- arm_func_start CTRDGi_WriteFlashSectorAsyncMX
-CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- str r1, [sp, #0xc]
- strh r0, [sp, #0x20]
- ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DD300: .word CTRDGi_WriteFlashSectorCoreMX
-
- arm_func_start CTRDGi_EraseFlashSectorAsyncMX
-CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- mov r2, r1
- strh r0, [sp, #0x20]
- ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX
-
- arm_func_start CTRDGi_EraseFlashChipAsyncMX
-CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX
- mov r2, r0
- add r0, sp, #0x0
- bl CTRDGi_SetTask
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DD354: .word CTRDGi_EraseFlashChipCoreMX
-
- arm_func_start CTRDGi_WriteFlashSectorMX
-CTRDGi_WriteFlashSectorMX: ; 0x020DD358
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- str r1, [sp, #0xc]
- bl CTRDGi_WriteFlashSectorCoreMX
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashSectorMX
-CTRDGi_EraseFlashSectorMX: ; 0x020DD384
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- strh r0, [sp, #0x20]
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashSectorCoreMX
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_EraseFlashChipMX
-CTRDGi_EraseFlashChipMX: ; 0x020DD3AC
- stmdb sp!, {lr}
- sub sp, sp, #0x24
- add r0, sp, #0x0
- bl CTRDGi_EraseFlashChipCoreMX
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x24
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_WriteFlashSectorCoreMX
-CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x28
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, _020DD540 ; =0x021D6B20
- ldr r1, [r5, #0x0]
- ldr r0, [r0, #0x0]
- str r1, [r4, #0x0]
- ldrh r5, [sp, #0x20]
- ldrh r0, [r0, #0xa]
- ldr r4, [sp, #0xc]
- cmp r5, r0
- addcs sp, sp, #0x28
- ldrhs r0, _020DD544 ; =0x000080FF
- ldmcsia sp!, {r4-r8,lr}
- bxcs lr
- mov r0, r5
- bl CTRDGi_EraseFlashSectorMX
- movs r6, r0
- addne sp, sp, #0x28
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldr r0, _020DD548 ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r7, _020DD54C ; =0x04000204
- ldr r0, _020DD540 ; =0x021D6B20
- ldrh r3, [r7, #0x0]
- ldr r2, [r0, #0x0]
- ldrh r1, [r7, #0x0]
- mov r0, r5, lsl #0xc
- ldr r2, [r2, #0x10]
- bic r1, r1, #0x3
- orr r1, r1, r2
- mov r0, r0, lsr #0x10
- strh r1, [r7, #0x0]
- and r7, r3, #0x3
- bl CTRDGi_SetFlashBankMx
- ldr r0, _020DD540 ; =0x021D6B20
- and r1, r5, #0xf
- ldr r3, [r0, #0x0]
- mov r0, r1, lsl #0x10
- ldr r2, [r3, #0x4]
- ldr r8, _020DD550 ; =0x021D6B08
- ldr r1, _020DD554 ; =0x04000208
- strh r2, [r8, #0x0]
- ldrh r3, [r3, #0x8]
- mov r5, r0, lsr #0x10
- ldrh r2, [r1, #0x0]
- mov r0, #0x0
- mov r3, r5, lsl r3
- strh r0, [r1, #0x0]
- ldrh r1, [r8, #0x0]
- ldr r0, _020DD558 ; =0x021D6B38
- add r5, r3, #0xa000000
- str r2, [r0, #0x0]
- cmp r1, #0x0
- beq _020DD4FC
-_020DD4C8:
- mov r0, r4
- mov r1, r5
- bl CTRDGi_ProgramFlashByteMX
- movs r6, r0
- bne _020DD4FC
- ldrh r0, [r8, #0x0]
- add r4, r4, #0x1
- add r5, r5, #0x1
- sub r0, r0, #0x1
- strh r0, [r8, #0x0]
- ldrh r0, [r8, #0x0]
- cmp r0, #0x0
- bne _020DD4C8
-_020DD4FC:
- ldr r3, _020DD554 ; =0x04000208
- ldr r0, _020DD558 ; =0x021D6B38
- ldrh r1, [r3, #0x0]
- ldr r0, [r0, #0x0]
- ldr r2, _020DD54C ; =0x04000204
- strh r0, [r3, #0x0]
- ldrh r1, [r2, #0x0]
- ldr r0, _020DD548 ; =0x021D6B0C
- bic r1, r1, #0x3
- orr r1, r1, r7
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r6
- add sp, sp, #0x28
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020DD540: .word 0x021D6B20
-_020DD544: .word 0x000080FF
-_020DD548: .word 0x021D6B0C
-_020DD54C: .word 0x04000204
-_020DD550: .word 0x021D6B08
-_020DD554: .word 0x04000208
-_020DD558: .word 0x021D6B38
-
- arm_func_start CTRDGi_ProgramFlashByteMX
-CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr ip, _020DD5B0 ; =0x0A005555
- mov r3, #0xaa
- ldr r2, _020DD5B4 ; =0x0A002AAA
- strb r3, [r12, #0x0]
- mov r3, #0x55
- mov lr, r0
- strb r3, [r2, #0x0]
- mov r0, #0xa0
- strb r0, [r12, #0x0]
- ldrb r2, [lr, #0x0]
- ldr r3, _020DD5B8 ; =0x021D6B24
- mov r0, #0x1
- strb r2, [r1, #0x0]
- ldrb r2, [lr, #0x0]
- ldr r3, [r3, #0x0]
- blx r3
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DD5B0: .word 0x0A005555
-_020DD5B4: .word 0x0A002AAA
-_020DD5B8: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlashSectorCoreMX
-CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x34
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x10
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, _020DD748 ; =0x021D6B20
- ldr r1, [r5, #0x0]
- ldr r0, [r0, #0x0]
- str r1, [r4, #0x0]
- ldrh r4, [sp, #0x30]
- ldrh r0, [r0, #0xa]
- cmp r4, r0
- addcs sp, sp, #0x34
- ldrhs r0, _020DD74C ; =0x000080FF
- ldmcsia sp!, {r4-r11,lr}
- bxcs lr
- ldr r0, _020DD750 ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r5, _020DD754 ; =0x04000204
- ldr r0, _020DD748 ; =0x021D6B20
- ldrh r3, [r5, #0x0]
- ldr r2, [r0, #0x0]
- ldrh r1, [r5, #0x0]
- mov r0, r4, lsl #0xc
- ldr r2, [r2, #0x10]
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r5, #0x0]
- and r1, r3, #0x3
- mov r0, r0, lsr #0x10
- str r1, [sp, #0x0]
- bl CTRDGi_SetFlashBankMx
- and r0, r4, #0xf
- mov r0, r0, lsl #0x10
- mov r9, r0, lsr #0x10
- mov r0, #0x2
- mov r10, #0x0
- str r0, [sp, #0x8]
- mov r0, #0xff
- ldr r8, _020DD758 ; =0x04000208
- mov r11, r10
- mov r7, #0xaa
- mov r6, #0x55
- mov r5, #0x80
- mov r4, #0x30
- str r0, [sp, #0xc]
-_020DD684:
- ldr r0, _020DD748 ; =0x021D6B20
- ldrh r12, [r8, #0x0]
- ldr r0, [r0, #0x0]
- ldr r3, _020DD75C ; =0x021D6B38
- ldrh r1, [r0, #0x8]
- ldr r0, [sp, #0x8]
- ldr r2, [sp, #0xc]
- strh r11, [r8, #0x0]
- str r12, [r3, #0x0]
- ldr r3, _020DD760 ; =0x0A005555
- mov r1, r9, lsl r1
- strb r7, [r3, #0x0]
- ldr r3, _020DD764 ; =0x0A002AAA
- add r1, r1, #0xa000000
- strb r6, [r3, #0x0]
- ldr r3, _020DD760 ; =0x0A005555
- strb r5, [r3, #0x0]
- strb r7, [r3, #0x0]
- ldr r3, _020DD764 ; =0x0A002AAA
- strb r6, [r3, #0x0]
- strb r4, [r1, #0x0]
- ldrh r3, [r8, #0x0]
- ldr r3, _020DD75C ; =0x021D6B38
- ldr r3, [r3, #0x0]
- strh r3, [r8, #0x0]
- ldr r3, _020DD768 ; =0x021D6B24
- ldr r3, [r3, #0x0]
- blx r3
- str r0, [sp, #0x4]
- ands r0, r0, #0xa000
- beq _020DD714
- cmp r10, #0x0
- addeq r0, r10, #0x1
- moveq r0, r0, lsl #0x10
- moveq r10, r0, lsr #0x10
- beq _020DD684
-_020DD714:
- ldr r2, _020DD754 ; =0x04000204
- ldr r1, _020DD750 ; =0x021D6B0C
- ldrh r0, [r2, #0x0]
- bic r3, r0, #0x3
- ldr r0, [sp, #0x0]
- orr r0, r3, r0
- strh r0, [r2, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- ldr r0, [sp, #0x4]
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020DD748: .word 0x021D6B20
-_020DD74C: .word 0x000080FF
-_020DD750: .word 0x021D6B0C
-_020DD754: .word 0x04000204
-_020DD758: .word 0x04000208
-_020DD75C: .word 0x021D6B38
-_020DD760: .word 0x0A005555
-_020DD764: .word 0x0A002AAA
-_020DD768: .word 0x021D6B24
-
- arm_func_start CTRDGi_EraseFlashChipCoreMX
-CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020DD848 ; =0x021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r4, _020DD84C ; =0x04000204
- ldr r0, _020DD850 ; =0x021D6B20
- ldrh r3, [r4, #0x0]
- ldr r0, [r0, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r0, #0x10]
- ldr r0, _020DD854 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r4, [r0, #0x0]
- mov r2, #0x0
- ldr r1, _020DD858 ; =0x021D6B38
- strh r2, [r0, #0x0]
- ldr lr, _020DD85C ; =0x0A005555
- str r4, [r1, #0x0]
- mov r5, #0xaa
- ldr r4, _020DD860 ; =0x0A002AAA
- strb r5, [lr, #0x0]
- mov r12, #0x55
- strb r12, [r4, #0x0]
- mov r2, #0x80
- strb r2, [lr, #0x0]
- strb r5, [lr, #0x0]
- strb r12, [r4, #0x0]
- mov r2, #0x10
- strb r2, [lr, #0x0]
- ldrh r2, [r0, #0x0]
- ldr r2, [r1, #0x0]
- ldr r1, _020DD864 ; =0x021D6B24
- strh r2, [r0, #0x0]
- ldr r4, [r1, #0x0]
- mov r0, #0x3
- mov r1, #0xa000000
- mov r2, #0xff
- and r5, r3, #0x3
- blx r4
- ldr r3, _020DD84C ; =0x04000204
- ldr r1, _020DD848 ; =0x021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge2
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DD848: .word 0x021D6B0C
-_020DD84C: .word 0x04000204
-_020DD850: .word 0x021D6B20
-_020DD854: .word 0x04000208
-_020DD858: .word 0x021D6B38
-_020DD85C: .word 0x0A005555
-_020DD860: .word 0x0A002AAA
-_020DD864: .word 0x021D6B24
-_020DD868:
- .byte 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2
- .byte 0x0C, 0x10, 0x8D, 0xE5, 0xB0, 0x02, 0xCD, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE2
- .byte 0x5D, 0x00, 0x00, 0xEB, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
- .byte 0xC0, 0xD8, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x24, 0xD0, 0x4D, 0xE2, 0xB0, 0x02, 0xCD, 0xE1
- .byte 0x00, 0x00, 0x8D, 0xE2, 0x0C, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x00, 0xEB, 0x00, 0x08, 0xA0, 0xE1
- .byte 0x20, 0x08, 0xA0, 0xE1, 0x24, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
- .byte 0xF0, 0x41, 0x2D, 0xE9, 0x28, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1, 0x0F, 0x00, 0xB5, 0xE8
- .byte 0x00, 0x40, 0x8D, 0xE2, 0x0F, 0x00, 0xA4, 0xE8, 0x0F, 0x00, 0xB5, 0xE8, 0x0F, 0x00, 0xA4, 0xE8
- .byte 0x00, 0x01, 0x9F, 0xE5, 0x00, 0x10, 0x95, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x84, 0xE5
- .byte 0xB0, 0x52, 0xDD, 0xE1, 0xBA, 0x00, 0xD0, 0xE1, 0x0C, 0x40, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE1
- .byte 0x28, 0xD0, 0x8D, 0x22, 0xE0, 0x00, 0x9F, 0x25, 0xF0, 0x41, 0xBD, 0x28, 0x1E, 0xFF, 0x2F, 0x21
- .byte 0x05, 0x00, 0xA0, 0xE1, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x28, 0xD0, 0x8D, 0x12
- .byte 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xC0, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1
- .byte 0x34, 0xB2, 0xFF, 0xEB, 0xB8, 0x70, 0x9F, 0xE5, 0xA8, 0x00, 0x9F, 0xE5, 0xB0, 0x30, 0xD7, 0xE1
- .byte 0x00, 0x20, 0x90, 0xE5, 0xB0, 0x10, 0xD7, 0xE1, 0x10, 0x20, 0x92, 0xE5, 0xA4, 0x80, 0x9F, 0xE5
- .byte 0x03, 0x10, 0xC1, 0xE3, 0x02, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC7, 0xE1, 0x00, 0x10, 0x90, 0xE5
- .byte 0x03, 0x70, 0x03, 0xE2, 0x04, 0x00, 0x91, 0xE5, 0xB0, 0x00, 0xC8, 0xE1, 0xB8, 0x10, 0xD1, 0xE1
- .byte 0xB0, 0x00, 0xD8, 0xE1, 0x15, 0x11, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x54, 0x81, 0xE2
- .byte 0x0C, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA9, 0xFD, 0xFF, 0xEB
- .byte 0x00, 0x60, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0xD8, 0xE1, 0x01, 0x40, 0x84, 0xE2
- .byte 0x01, 0x50, 0x85, 0xE2, 0x01, 0x00, 0x40, 0xE2, 0xB0, 0x00, 0xC8, 0xE1, 0xB0, 0x00, 0xD8, 0xE1
- .byte 0x00, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0x1A, 0x34, 0x20, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5
- .byte 0xB0, 0x10, 0xD2, 0xE1, 0x03, 0x10, 0xC1, 0xE3, 0x07, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC2, 0xE1
- .byte 0xB0, 0x00, 0xD0, 0xE1, 0x03, 0xB2, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x28, 0xD0, 0x8D, 0xE2
- .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x6B, 0x1D, 0x02, 0xFF, 0x80, 0x00, 0x00
- .byte 0x0C, 0x6B, 0x1D, 0x02, 0x04, 0x02, 0x00, 0x04, 0x08, 0x6B, 0x1D, 0x02
-
- arm_func_start CTRDGi_SetTask
-CTRDGi_SetTask: ; 0x020DD9FC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r3, _020DDAA8 ; =0x021D6B50
- mov r7, r0
- mov r4, r1
- mov r6, r2
- ldr r5, [r3, #0x0]
- bl CTRDGi_IsTaskAvailable
-_020DDA1C:
- .byte 0x00, 0x00, 0x50, 0xE3
- .byte 0x00, 0x00, 0x00, 0x1A, 0x89, 0xBF, 0xFF, 0xEB, 0x7C, 0x00, 0x9F, 0xE5, 0x22, 0x00, 0xD0, 0xE5
- .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x84, 0xBF, 0xFF, 0xEB, 0x33, 0xBE, 0xFF, 0xEB
- .byte 0x01, 0x10, 0xA0, 0xE3, 0x22, 0x10, 0xC7, 0xE5, 0x00, 0x40, 0x87, 0xE5, 0xC4, 0x10, 0x85, 0xE2
- .byte 0x01, 0x00, 0x57, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0x05, 0x04, 0x60, 0x87, 0xE5
- .byte 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0x80, 0x05, 0x3C, 0xC0, 0x9F, 0xE5, 0x0F, 0x00, 0xB7, 0xE8
- .byte 0x0C, 0x60, 0xA0, 0xE1, 0x0F, 0x00, 0xAC, 0xE8, 0x0F, 0x00, 0xB7, 0xE8, 0x0F, 0x00, 0xAC, 0xE8
- .byte 0x00, 0x10, 0x97, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0x8C, 0xE5, 0xC0, 0x60, 0x85, 0xE5
- .byte 0xE6, 0xB5, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x21, 0xBE, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2
- .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-_020DDAA8: .word 0x021D6B50
-_020DDAAC:
- .byte 0x54, 0x6B, 0x1D, 0x02
-
- arm_func_start CTRDGi_TaskThread
-CTRDGi_TaskThread: ; 0x020DDAB0
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x28
- ldr r6, _020DDB94 ; =0x021D6B54
- ldr r5, _020DDB98 ; =0x021D6B50
- mov r4, r0
- add r9, sp, #0x0
- mov r8, #0x0
- mov r7, #0x24
-_020DDAD0:
- mov r0, r9
- mov r1, r8
- mov r2, r7
- bl MI_CpuFill8
- bl OS_DisableInterrupts
- ldr r1, [r4, #0xc0]
- mov r10, r0
- cmp r1, #0x0
- bne _020DDB08
-_020DDAF4:
- mov r0, r8
- bl OS_SleepThread
- ldr r0, [r4, #0xc0]
- cmp r0, #0x0
- beq _020DDAF4
-_020DDB08:
- ldr lr, [r4, #0xc0]
- add r12, sp, #0x0
- ldmia lr!, {r0-r3}
- stmia r12!, {r0-r3}
- ldmia lr!, {r0-r3}
- stmia r12!, {r0-r3}
- ldr r1, [lr, #0x0]
- mov r0, r10
- str r1, [r12, #0x0]
- bl OS_RestoreInterrupts
- ldr r1, [sp, #0x0]
- cmp r1, #0x0
- beq _020DDB48
- mov r0, r9
- blx r1
- str r0, [sp, #0x8]
-_020DDB48:
- bl OS_DisableInterrupts
- ldr r1, [sp, #0x4]
- mov r10, r0
- strb r8, [r6, #0x22]
- cmp r1, #0x0
- beq _020DDB68
- mov r0, r9
- blx r1
-_020DDB68:
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- beq _020DDB84
- mov r0, r10
- str r8, [r4, #0xc0]
- bl OS_RestoreInterrupts
- b _020DDAD0
-_020DDB84:
- bl OS_ExitThread
- add sp, sp, #0x28
- ldmia sp!, {r4-r10,lr}
- bx lr
- .balign 4
-_020DDB94: .word 0x021D6B54
-_020DDB98: .word 0x021D6B50
-
- arm_func_start CTRDGi_InitTaskInfo
-CTRDGi_InitTaskInfo:
- ldr ip, _020DDBAC ; =MI_CpuFill8
- mov r1, #0x0
- mov r2, #0x24
- bx r12
- .balign 4
-_020DDBAC: .word MI_CpuFill8
-
- arm_func_start CTRDGi_IsTaskAvailable
-CTRDGi_IsTaskAvailable:
- ldr r0, _020DDBC8 ; =0x021D6B50
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
- .balign 4
-_020DDBC8: .word 0x021D6B50
-
- arm_func_start CTRDGi_InitTaskThread
-CTRDGi_InitTaskThread: ; 0x020DDBCC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020DDC4C ; =0x021D6B50
- mov r4, r0
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- bne _020DDC38
- add r0, r5, #0xc4
- str r5, [r1, #0x0]
- bl CTRDGi_InitTaskInfo
- ldr r0, _020DDC50 ; =0x021D6B54
- bl CTRDGi_InitTaskInfo
-_020DDC04:
- .byte 0x00, 0x00, 0xA0, 0xE3, 0xC0, 0x00, 0x85, 0xE5, 0x01, 0x2B, 0xA0, 0xE3
- .byte 0x3C, 0x10, 0x9F, 0xE5, 0x3C, 0x30, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0x8D, 0xE5
- .byte 0x14, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x52, 0xB6, 0xFF, 0xEB
- .byte 0x05, 0x00, 0xA0, 0xE1, 0x7D, 0xB5, 0xFF, 0xEB
-_020DDC38:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DDC4C: .word 0x021D6B50
-_020DDC50: .word 0x021D6B54
-_020DDC54:
- .byte 0xB0, 0xDA, 0x0D, 0x02, 0x78, 0x6F, 0x1D, 0x02
-
- arm_func_start MATH_CountPopulation
-MATH_CountPopulation: ; 0x020DDC5C
- ldr r1, _020DDC94 ; =0x55555555
- ldr r2, _020DDC98 ; =0x33333333
- and r1, r1, r0, lsr #0x1
- sub r0, r0, r1
- and r1, r0, r2
- and r0, r2, r0, lsr #0x2
- add r1, r1, r0
- ldr r0, _020DDC9C ; =0x0F0F0F0F
- add r1, r1, r1, lsr #0x4
- and r0, r1, r0
- add r0, r0, r0, lsr #0x8
- add r0, r0, r0, lsr #0x10
- and r0, r0, #0xff
- bx lr
- .balign 4
-_020DDC94: .word 0x55555555
-_020DDC98: .word 0x33333333
-_020DDC9C: .word 0x0F0F0F0F
-
- arm_func_start MATH_CalcSHA1
-MATH_CalcSHA1: ; 0x020DDCA0
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x68
- mov r6, r0
- add r0, sp, #0x0
- mov r5, r1
- mov r4, r2
- bl MATH_SHA1Init
-_020DDCBC:
- .byte 0x00, 0x00, 0x8D, 0xE2
- .byte 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCF, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2
- .byte 0x06, 0x10, 0xA0, 0xE1, 0x4D, 0xD4, 0xFF, 0xEB, 0x68, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8
- .byte 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start MATH_CalcMD5
-MATH_CalcMD5: ; 0x020DDCE4
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x58
- mov r6, r0
- add r0, sp, #0x0
- mov r5, r1
- mov r4, r2
- bl MATH_MD5Init
-_020DDD00:
- .byte 0x00, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0xCC, 0xD3, 0xFF, 0xEB
- .byte 0x00, 0x10, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x98, 0xD3, 0xFF, 0xEB, 0x58, 0xD0, 0x8D, 0xE2
- .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start MATH_CalcCRC32
-MATH_CalcCRC32: ; 0x020DDD28
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mvn r12, #0x0
- mov r3, r2
- add r1, sp, #0x0
- mov r2, lr
- str r12, [sp, #0x0]
- bl MATHi_CRC32UpdateRev
-_020DDD4C:
- .byte 0x00, 0x00, 0x9D, 0xE5
- .byte 0x00, 0x00, 0xE0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start MATH_CalcCRC16CCITT
-MATH_CalcCRC16CCITT: ; 0x020DDD60
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr ip, _020DDD94 ; =0x0000FFFF
- mov lr, r1
- mov r3, r2
- add r1, sp, #0x0
- mov r2, lr
- strh r12, [sp, #0x0]
- bl MATHi_CRC16Update
- ldrh r0, [sp, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DDD94: .word 0x0000FFFF
-
- arm_func_start MATH_CalcCRC16
-MATH_CalcCRC16: ; 0x020DDD98
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, #0x0
- mov r3, r2
- add r1, sp, #0x0
- mov r2, lr
- strh r12, [sp, #0x0]
- bl MATHi_CRC16UpdateRev
- ldrh r0, [sp, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start MATH_CalcCRC8
-MATH_CalcCRC8: ; 0x020DDDCC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, #0x0
- mov r3, r2
- add r1, sp, #0x0
- mov r2, lr
- strb r12, [sp, #0x0]
- bl MATHi_CRC8Update
-_020DDDF0:
- .byte 0x00, 0x00, 0xDD, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1
-
- arm_func_start MATHi_CRC32UpdateRev
-MATHi_CRC32UpdateRev:
- stmdb sp!, {r4,lr}
- cmp r3, #0x0
- ldr r4, [r1, #0x0]
- mov lr, #0x0
- bls _020DDE38
-_020DDE14:
- ldrb r12, [r2, #0x0]
- add lr, lr, #0x1
- cmp lr, r3
- eor r12, r4, r12
- and r12, r12, #0xff
- ldr r12, [r0, r12, lsl #0x2]
- add r2, r2, #0x1
- eor r4, r12, r4, lsr #0x8
- blo _020DDE14
-_020DDE38:
- str r4, [r1, #0x0]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC32InitTableRev
-MATHi_CRC32InitTableRev: ; 0x020DDE44
- stmdb sp!, {r4,lr}
- mov lr, #0x0
- mov r3, lr
-_020DDE50:
- mov r4, lr
- mov r12, r3
-_020DDE58:
- ands r2, r4, #0x1
- eorne r4, r1, r4, lsr #0x1
- add r12, r12, #0x1
- moveq r4, r4, lsr #0x1
- cmp r12, #0x8
- blo _020DDE58
- str r4, [r0, lr, lsl #0x2]
- add lr, lr, #0x1
- cmp lr, #0x100
- blo _020DDE50
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC16UpdateRev
-MATHi_CRC16UpdateRev: ; 0x020DDE88
- stmdb sp!, {r4,lr}
- cmp r3, #0x0
- ldrh r4, [r1, #0x0]
- mov lr, #0x0
- bls _020DDEC4
-_020DDE9C:
- ldrb r12, [r2, #0x0]
- add lr, lr, #0x1
- cmp lr, r3
- eor r12, r4, r12
- and r12, r12, #0xff
- mov r12, r12, lsl #0x1
- ldrh r12, [r0, r12]
- add r2, r2, #0x1
- eor r4, r12, r4, lsr #0x8
- blo _020DDE9C
-_020DDEC4:
- strh r4, [r1, #0x0]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC16Update
-MATHi_CRC16Update: ; 0x020DDED0
- stmdb sp!, {r4,lr}
- cmp r3, #0x0
- ldrh r4, [r1, #0x0]
- mov lr, #0x0
- bls _020DDF0C
-_020DDEE4:
- ldrb r12, [r2, #0x0]
- add lr, lr, #0x1
- cmp lr, r3
- eor r12, r12, r4, lsr #0x8
- and r12, r12, #0xff
- mov r12, r12, lsl #0x1
- ldrh r12, [r0, r12]
- add r2, r2, #0x1
- eor r4, r12, r4, lsl #0x8
- blo _020DDEE4
-_020DDF0C:
- strh r4, [r1, #0x0]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC16InitTableRev
-MATHi_CRC16InitTableRev: ; 0x020DDF18
- stmdb sp!, {r4,lr}
- mov lr, #0x0
- mov r3, lr
-_020DDF24:
- mov r4, lr
- mov r12, r3
-_020DDF2C:
- ands r2, r4, #0x1
- eorne r4, r1, r4, lsr #0x1
- add r12, r12, #0x1
- moveq r4, r4, lsr #0x1
- cmp r12, #0x8
- blo _020DDF2C
- mov r2, lr, lsl #0x1
- add lr, lr, #0x1
- strh r4, [r0, r2]
- cmp lr, #0x100
- blo _020DDF24
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC16InitTable
-MATHi_CRC16InitTable: ; 0x020DDF60
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, #0x0
- mov r12, r4
- mov r3, r4
-_020DDF74:
- mov r5, r12
- mov lr, r3
-_020DDF7C:
- ands r2, r5, #0x8000
- eorne r5, r1, r5, lsl #0x1
- add lr, lr, #0x1
- moveq r5, r5, lsl #0x1
- cmp lr, #0x8
- blo _020DDF7C
- mov r2, r4, lsl #0x1
- add r4, r4, #0x1
- strh r5, [r0, r2]
- cmp r4, #0x100
- add r12, r12, #0x100
- blo _020DDF74
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start MATHi_CRC8Update
-MATHi_CRC8Update:
- stmdb sp!, {r4,lr}
- cmp r3, #0x0
- ldrb r4, [r1, #0x0]
- mov lr, #0x0
- bls _020DDFEC
-_020DDFCC:
- ldrb r12, [r2, #0x0]
- add lr, lr, #0x1
- cmp lr, r3
- eor r12, r4, r12
- and r12, r12, #0xff
- add r2, r2, #0x1
- ldrb r4, [r0, r12]
- blo _020DDFCC
-_020DDFEC:
- strb r4, [r1, #0x0]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start MATHi_CRC8InitTable
-MATHi_CRC8InitTable: ; 0x020DDFF8
- stmdb sp!, {r4,lr}
- mov lr, #0x0
- mov r3, lr
-_020DE004:
- mov r4, lr
- mov r12, r3
-_020DE00C:
- ands r2, r4, #0x80
- eorne r4, r1, r4, lsl #0x1
- add r12, r12, #0x1
- moveq r4, r4, lsl #0x1
- cmp r12, #0x8
- blo _020DE00C
- strb r4, [r0, lr]
- add lr, lr, #0x1
- cmp lr, #0x100
- blo _020DE004
- ldmia sp!, {r4,lr}
- bx lr
-
arm_func_start STD_CompareNString
STD_CompareNString: ; 0x020DE03C
stmdb sp!, {lr}
diff --git a/global.inc b/global.inc
index d20893e3..7eb60996 100644
--- a/global.inc
+++ b/global.inc
@@ -1046,3 +1046,9 @@
.extern MI_DmaFill32
.extern OS_InitMessageQueue
.extern RTC_GetTime
+.extern OS_SetDPermissionsForProtectionRegion
+.extern MI_DmaCopy32
+.extern MATH_SHA1Update
+.extern MATH_SHA1GetHash
+.extern MATH_MD5Update
+.extern MATH_MD5GetHash
diff --git a/pokediamond.lcf b/pokediamond.lcf
index bfbb2669..840d581c 100644
--- a/pokediamond.lcf
+++ b/pokediamond.lcf
@@ -387,6 +387,8 @@ SECTIONS {
RTC_arm9.o (.text)
CARD_arm9.o (.text)
WM_arm9.o (.text)
+ CTRDG_arm9.o (.text)
+ MATH_arm9.o (.text)
rom2dism.o (.text)
rom2.o (.data)
string_util.o (.data)