0213C63C _0x01FF84DC << START HERE In Culdcept DS this code is copied to ITCM and is run from there... Break at 0x01FF84DC to trace 0213C63C MOV R2, #0x10 0213C640 B loc_213C648 0213C640 ; End of function _Decrypt_0C_0x01FF84DC 0213C640 0213C644 0213C644 ; =============== S U B R O U T I N E ======================================= 0213C644 0213C644 0213C644 sub_213C644 ; CODE XREF: RAM:0213C618p 0213C644 0213C644 var_44 = -0x44 0213C644 var_40 = -0x40 0213C644 var_3C = -0x3C 0213C644 var_30 = -0x30 r0 - input addr r1 - output addr 0213C644 0213C644 MOV R2, #0xD 0213C648 0213C648 loc_213C648 ; CODE XREF: _Decrypt_0C_0x01FF84DC+4j 0213C648 STMFD SP!, {R4-R12,LR} 0213C64C SUB SP, SP, #0x30 0213C650 MOV R10, R1 0213C654 ADD R4, R2, #1 0213C658 STR R4, [SP,#0x58+var_3C] 0213C65C BL unk_21D7ED4 0213C660 MOV R7, R0 0213C664 ADD R0, R10, R4 0213C668 STR R4, [SP,#0x58+var_44] 0213C66C STR R0, [SP,#0x58+var_40] 0213C670 LDR R3, loc_213CAFC 0213C674 ADD R9, R3, #0x200 0213C678 ADD R6, R3, #0x2200 0213C67C ADD R12, R3, #0x2400 0213C680 ANDS R5, R7, #1 0213C684 MOV R4, R5,LSL#3 0213C688 LDRNEB R5, [R7],#1 0213C68C MOVNE R5, R5,LSL#8 0213C690 MOV R1, #0x10 0213C694 BL loc_213CAD4 0213C698 0213C698 loc_213C698 ; CODE XREF: sub_213C644+164j 0213C698 STRD R10, [SP,#0x58+var_30] 0213C69C MOV R1, #0x10 0213C6A0 BL sub_213CACC 0213C6A4 MOV R8, R0 0213C6A8 MOV R0, #0x13 0213C6AC MOV R1, #5 0213C6B0 MOV R2, #3 0213C6B4 BL sub_213C8B0 0213C6B8 BL sub_213C7B8 0213C6BC LDR R0, [SP,#0x58+var_3C] 0213C6C0 SUB R1, R0, #0xA 0213C6C4 AND R1, R1, #5 0213C6C8 MOVL R2, 0xFFFFFFFF 0213C6CC BL sub_213C8B0 0213C6D0 LDRD R10, [SP,#0x58+var_30] 0213C6D4 LDR R11, [SP,#0x58+var_3C] 0213C6D8 0213C6D8 loc_213C6D8 ; CODE XREF: sub_213C644+158j 0213C6D8 MOV R2, R5,LSR#20 0213C6DC MOV R0, R2,LSL#1 0213C6E0 LDRH R2, [R9,R0] 0213C6E4 RSBS R0, R2, #0x1FC 0213C6E8 BCS loc_213C710 0213C6EC MOV R1, #0xC 0213C6F0 0213C6F0 loc_213C6F0 ; CODE XREF: RAM:loc_213CBAEj 0213C6F0 BL loc_213CAD4 0213C6F4 MOV R1, R5 0213C6F8 0213C6F8 loc_213C6F8 ; CODE XREF: sub_213C644+C8j 0213C6F8 MOVS R1, R1,LSL#1 0213C6FC 0213C6FC loc_213C6FC ; CODE XREF: RAM:0213CBBAj 0213C6FC ADC R2, R2, R2 0213C700 ADDS R2, R2, R2 0213C704 LDRH R2, [R12,R2] 0213C708 SBCS R0, R2, #0x1FC 0213C710 0213C710 loc_213C710 ; CODE XREF: sub_213C644+A4j 0213C710 LDRB R1, [R3,R2] 0213C714 SUBCC R1, R1, #0xC 0213C718 BL loc_213CAD4 0213C71C CMP R2, #0x100 0213C720 BCC loc_213C790 0213C724 MOV R9, R5,LSR#24 0213C728 MOVS R0, R9,LSL#1 0213C72C LDRH R9, [R6,R0] 0213C730 SBCS R0, R11, R9 0213C734 BCS loc_213C75C 0213C738 MOV R1, #8 0213C73C BL loc_213CAD4 0213C740 MOV R1, R5 0213C744 0213C744 loc_213C744 ; CODE XREF: sub_213C644+114j 0213C744 MOVS R1, R1,LSL#1 0213C748 ADC R9, R9, R9 0213C74C ADD R9, R9, R9 0213C750 LDRH R9, [R12,R9] 0213C754 CMP R9, R11 0213C758 BCS loc_213C744 0213C75C 0213C75C loc_213C75C ; CODE XREF: sub_213C644+F0j 0213C75C LDRB R1, [SP,R9] 0213C760 SUBCC R1, R1, #8 0213C764 BL loc_213CAD4 0213C768 SUBS R1, R9, #1 0213C76C MOV R0, #1 0213C770 BCC loc_213C780 0213C774 ADD R9, R0, R0,LSL R1 0213C778 BL sub_213CACC 0213C77C ADD R0, R0, R9 0213C780 0213C780 loc_213C780 ; CODE XREF: sub_213C644+12Cj 0213C780 SUB R1, R2, #0xFE 0213C784 ADD R9, R3, #0x200 0213C788 0213C788 loc_213C788 ; CODE XREF: sub_213C644+150j 0213C788 LDRB R2, [R10,-R0] 0213C78C SUBS R1, R1, #1 0213C790 0213C790 loc_213C790 ; CODE XREF: sub_213C644+DCj 0213C790 STRB R2, [R10],#1 0213C794 BCS loc_213C788 0213C798 SUBS R8, R8, #1 0213C79C BNE loc_213C6D8 0213C7A0 LDR R0, [SP,#0x58+var_40] 0213C7A4 CMP R10, R0 0213C7A8 BCC loc_213C698 0213C7AC LDR R0, [SP,#0x58+var_44] 0213C7B0 ADD SP, SP, #0x30 0213C7B4 LDMFD SP!, {R4-R12,PC} 0213C7B4 ; End of function sub_213C644 0213C7B8 ; =============== S U B R O U T I N E ======================================= 0213C7B8 0213C7B8 0213C7B8 sub_213C7B8 ; CODE XREF: sub_213C644+74p 0213C7B8 0213C7B8 arg_20 = 0x20 0213C7B8 0213C7B8 STR LR, [SP,#arg_20] 0213C7BC 0213C7BC loc_213C7BC ; CODE XREF: RAM:0213C182j 0213C7BC ; RAM:0213C4BAj 0213C7BC MOV R1, #9 0213C7C0 BL sub_213CACC 0213C7C4 MOVS R10, R0 0213C7C8 BNE loc_213C800 0213C7CC MOV R1, #9 0213C7D0 BL sub_213CACC 0213C7D4 MOV R1, R9 0213C7D8 ADD R2, R9, #0x2000 0213C7DC 0213C7DC loc_213C7DC ; CODE XREF: sub_213C7B8+2Cj 0213C7DC STRH R0, [R1],#2 0213C7E0 SUBS R10, R1, R2 0213C7E4 BNE loc_213C7DC 0213C7E8 MOV R1, R3 0213C7EC ADC R2, R3, #0x1FC ; CODE XREF: RAM:0213C4AAj 0213C7F0 0213C7F0 loc_213C7F0 ; CODE XREF: sub_213C7B8+40j 0213C7F0 STRB R10, [R1],#1 0213C7F4 CMP R1, R2 0213C7F8 BNE loc_213C7F0 0213C7FC LDR PC, [SP,#arg_20] 0213C800 ; --------------------------------------------------------------------------- 0213C800 0213C800 loc_213C800 ; CODE XREF: sub_213C7B8+10j 0213C800 MOV R2, R3 0213C804 ADD R10, R3, R10 0213C808 0213C808 loc_213C808 ; CODE XREF: sub_213C7B8:loc_213C87Cj 0213C808 MOV R1, R5,LSR#24 0213C80C MOV R0, R1,LSL#1 0213C810 LDRH R11, [R6,R0] 0213C814 MOV R1, R5,LSL#8 0213C818 B loc_213C82C 0213C81C ; --------------------------------------------------------------------------- 0213C81C 0213C81C loc_213C81C ; CODE XREF: sub_213C7B8+78j 0213C81C MOVS R1, R1,LSL#1 0213C820 ADC R0, R11, R11 0213C824 ADD R0, R0, R0 0213C828 LDRH R11, [R12,R0] 0213C82C 0213C82C loc_213C82C ; CODE XREF: sub_213C7B8+60j 0213C82C CMP R11, #0x13 0213C830 BCS loc_213C81C ; CODE XREF: RAM:loc_213C4A6j 0213C834 LDRB R1, [SP,R11] 0213C838 BL loc_213CAD4 0213C83C 0213C83C loc_213C83C ; CODE XREF: RAM:0213CCFAj 0213C83C SUBS R0, R11, #2 0213C840 STRHIB R0, [R2],#1 0213C844 BHI loc_213C878 0213C848 CMP R11, #1 ; CODE XREF: RAM:0213C4BEj 0213C84C MOVCC R0, #1 0213C850 MOVEQ R1, #4 0213C854 MOVEQ R11, #3 0213C858 MOVHI R1, #9 0213C85C MOVHI R11, #0x14 ; CODE XREF: RAM:0213C4B2j 0213C860 BLCS sub_213CACC 0213C864 ADD R11, R0, R11 0213C868 MOV R1, #0 0213C86C 0213C86C loc_213C86C ; CODE XREF: sub_213C7B8+BCj 0213C86C STRB R1, [R2],#1 0213C870 0213C870 loc_213C870 ; CODE XREF: RAM:0213C166j 0213C870 SUBS R11, R11, #1 0213C874 BNE loc_213C86C 0213C878 0213C878 loc_213C878 ; CODE XREF: sub_213C7B8+8Cj 0213C878 CMP R2, R10 0213C87C 0213C87C loc_213C87C ; CODE XREF: RAM:0213C172j 0213C87C ; RAM:0213C17Aj 0213C87C BCC loc_213C808 0213C880 ADC R11, R3, #0x1FC 0213C884 CMP R2, R11 0213C888 BCS loc_213C89C 0213C88C MOV R1, #0 0213C890 0213C890 loc_213C890 ; CODE XREF: sub_213C7B8+E0j 0213C890 STRB R1, [R2],#1 0213C894 CMP R2, R11 0213C898 BNE loc_213C890 0213C89C 0213C89C loc_213C89C ; CODE XREF: sub_213C7B8+D0j 0213C89C SUB R0, R11, R3 0213C8A0 MOV R1, R3 0213C8A4 MOV R10, #0xC 0213C8A8 MOV R11, R9 0213C8AC B loc_213C994 0213C8AC ; End of function sub_213C7B8 0213C8AC 0213C8B0 0213C8B0 ; =============== S U B R O U T I N E ======================================= 0213C8B0 0213C8B0 0213C8B0 sub_213C8B0 ; CODE XREF: sub_213C644+70p 0213C8B0 ; sub_213C644+88p 0213C8B0 0213C8B0 arg_20 = 0x20 0213C8B0 arg_24 = 0x24 0213C8B0 0213C8B0 STR R0, [SP,#arg_24] 0213C8B4 STR LR, [SP,#arg_20] 0213C8B8 MOV R11, R1 0213C8BC BL sub_213CACC 0213C8C0 MOVS R10, R0 0213C8C4 BNE loc_213C900 0213C8C8 MOV R1, R11 0213C8CC BL sub_213CACC 0213C8D0 MOV R1, R6 0213C8D4 ADD R2, R6, #0x200 0213C8D8 0213C8D8 loc_213C8D8 ; CODE XREF: sub_213C8B0+30j 0213C8D8 STRH R0, [R1],#2 0213C8DC SUBS R10, R1, R2 0213C8E0 BNE loc_213C8D8 0213C8E4 MOV R1, SP 0213C8E8 LDR R0, [SP,#arg_24] 0213C8EC ADD R2, SP, R0 0213C8F0 0213C8F0 loc_213C8F0 ; CODE XREF: sub_213C8B0+48j 0213C8F0 STRB R10, [R1],#1 0213C8F4 CMP R1, R2 0213C8F8 BNE loc_213C8F0 0213C8FC LDR PC, [SP,#arg_20] 0213C900 ; --------------------------------------------------------------------------- 0213C900 0213C900 loc_213C900 ; CODE XREF: sub_213C8B0+14j 0213C900 MOV R11, #0 0213C904 0213C904 loc_213C904 ; CODE XREF: sub_213C8B0+B4j 0213C904 MOV R0, R5,LSR#29 0213C908 CMP R0, #7 0213C90C MOV R1, #3 0213C910 BNE loc_213C924 0213C914 MVN R1, R5,LSL#3 0213C918 CLZ R1, R1 0213C91C ADD R0, R0, R1 0213C920 SUB R1, R0, #3 0213C924 0213C924 loc_213C924 ; CODE XREF: sub_213C8B0+60j 0213C924 STRB R0, [SP,R11] 0213C928 BL loc_213CAD4 0213C92C ADD R11, R11, #1 0213C930 0213C930 loc_213C930 ; CODE XREF: RAM:0213CE0Aj 0213C930 CMP R11, R2 0213C934 BNE loc_213C960 0213C938 MOV R1, #2 0213C93C BL sub_213CACC 0213C940 CMP R0, #0 0213C944 BEQ loc_213C960 0213C948 0213C948 loc_213C948 ; CODE XREF: RAM:0213CE06j 0213C948 ADD R0, R0, R11 0213C94C MOV R1, #0 0213C950 0213C950 loc_213C950 ; CODE XREF: sub_213C8B0+ACj 0213C950 STRB R1, [SP,R11] 0213C954 ADD R11, R11, #1 0213C958 CMP R11, R0 0213C95C BNE loc_213C950 0213C960 0213C960 loc_213C960 ; CODE XREF: sub_213C8B0+84j 0213C960 ; sub_213C8B0+94j 0213C960 CMP R11, R10 0213C964 BCC loc_213C904 0213C968 0213C968 loc_213C968 0213C968 LDR R0, [SP,#arg_24] 0213C96C CMP R11, R0 0213C970 BCS loc_213C988 0213C974 MOV R1, #0 0213C978 0213C978 loc_213C978 ; CODE XREF: sub_213C8B0+D4j 0213C978 STRB R1, [SP,R11] 0213C97C ADD R11, R11, #1 0213C980 CMP R11, R0 0213C984 BNE loc_213C978 0213C988 0213C988 loc_213C988 ; CODE XREF: sub_213C8B0+C0j 0213C988 MOV R1, SP 0213C98C MOV R10, #8 0213C990 MOV R11, R6 0213C994 0213C994 loc_213C994 ; CODE XREF: sub_213C7B8+F4j 0213C994 STMFD SP!, {R4-R9} 0213C998 SUB SP, SP, #0x48 0213C99C MOV R4, #1 0213C9A0 MOV R5, #0 0213C9A4 MOV R9, #0x44 0213C9A8 0213C9A8 loc_213C9A8 ; CODE XREF: sub_213C8B0+100j 0213C9A8 SUBS R9, R9, #4 0213C9AC STR R5, [SP,R9] 0213C9B0 BNE loc_213C9A8 0213C9B4 SUB R2, R0, #1 0213C9B8 0213C9B8 loc_213C9B8 ; CODE XREF: sub_213C8B0+11Cj 0213C9B8 LDRB R9, [R1,R2] 0213C9BC LDR R7, [SP,R9,LSL#2] 0213C9C0 SUBS R2, R2, #1 0213C9C4 ADD R7, R7, #0x10000 0213C9C8 STR R7, [SP,R9,LSL#2] 0213C9CC BPL loc_213C9B8 0213C9D0 MOV LR, #0 0213C9D4 MOV R9, #1 0213C9D8 RSB R8, R10, #0x10 0213C9DC 0213C9DC loc_213C9DC ; CODE XREF: sub_213C8B0+14Cj 0213C9DC LDR R7, [SP,R9,LSL#2] 0213C9E0 CMP R9, R10 0213C9E4 MOV R2, LR,LSR#16 0213C9E8 MOVLS R2, R2,LSR R8 0213C9EC STR R2, [SP,R9,LSL#2] 0213C9F0 RSBS R2, R9, #0x10 0213C9F4 ADD LR, LR, R7,LSL R2 0213C9F8 ADD R9, R9, #1 0213C9FC BNE loc_213C9DC 0213CA00 ADD R9, R10, #1 0213CA04 LDR R7, [SP,R9,LSL#2] 0213CA08 MOVS R7, R7,LSR R8 0213CA0C BEQ loc_213CA28 0213CA10 ADD R7, R11, R7,LSL#1 0213CA14 ADD R9, R11, R4,LSL R9 0213CA18 B loc_213CA20 0213CA1C ; --------------------------------------------------------------------------- 0213CA1C 0213CA1C loc_213CA1C ; CODE XREF: sub_213C8B0+174j 0213CA1C STRH R5, [R7],#2 0213CA20 0213CA20 loc_213CA20 ; CODE XREF: sub_213C8B0+168j 0213CA20 CMP R7, R9 0213CA24 BNE loc_213CA1C 0213CA28 0213CA28 loc_213CA28 ; CODE XREF: sub_213C8B0+15Cj 0213CA28 MOV LR, R0 0213CA2C 0213CA2C loc_213CA2C ; CODE XREF: sub_213C8B0:loc_213CABCj 0213CA2C LDRB R6, [R1],#1 0213CA30 CMP R6, #0 0213CA34 0213CA34 loc_213CA34 ; CODE XREF: RAM:0213CEF2j 0213CA34 BEQ loc_213CAB4 0213CA38 LDR R2, [SP,R6,LSL#2] 0213CA3C 0213CA3C loc_213CA3C ; CODE XREF: RAM:0213CF2Aj 0213CA3C SUBS R7, R10, R6 0213CA40 RSBCC R7, R6, #0x10 0213CA44 ADD R9, R2, R4,LSL R7 0213CA48 STR R9, [SP,R6,LSL#2] 0213CA4C CMP R6, R10 0213CA50 BHI loc_213CA6C 0213CA54 ADD R7, R11, R2,LSL#1 0213CA58 ADD R9, R11, R9,LSL#1 0213CA5C 0213CA5C loc_213CA5C ; CODE XREF: sub_213C8B0+1B4j 0213CA5C STRH R5, [R7],#2 0213CA60 0213CA60 loc_213CA60 ; CODE XREF: RAM:0213CF2Ej 0213CA60 CMP R7, R9 0213CA64 BNE loc_213CA5C 0213CA68 B loc_213CAB4 0213CA6C ; --------------------------------------------------------------------------- 0213CA6C 0213CA6C loc_213CA6C ; CODE XREF: sub_213C8B0+1A0j 0213CA6C MOV R9, R2,LSR R8 0213CA70 ADD R9, R11, R9,LSL#1 0213CA74 MOV R2, R2,LSL R10 0213CA78 MOV R2, R2,LSL#16 0213CA7C SUB R6, R6, R10 0213CA80 0213CA80 loc_213CA80 ; CODE XREF: sub_213C8B0+1FCj 0213CA80 LDRH R7, [R9] 0213CA84 CMP R7, #0 0213CA88 BNE loc_213CA9C 0213CA8C STR R7, [R12,LR,LSL#2] 0213CA90 STRH LR, [R9] 0213CA94 0213CA94 loc_213CA94 ; CODE XREF: RAM:0213CF02j 0213CA94 MOV R7, LR 0213CA98 ADD LR, LR, #1 0213CA9C 0213CA9C loc_213CA9C ; CODE XREF: sub_213C8B0+1D8j 0213CA9C ; RAM:0213CF0Aj 0213CA9C MOVS R2, R2,LSL#1 0213CAA0 ADC R7, R7, R7 0213CAA4 ADD R9, R12, R7,LSL#1 0213CAA8 SUBS R6, R6, #1 0213CAAC BNE loc_213CA80 0213CAB0 0213CAB0 loc_213CAB0 ; CODE XREF: RAM:0213CF1Ej 0213CAB0 ; RAM:0213CFAAj 0213CAB0 STRH R5, [R9] 0213CAB4 0213CAB4 loc_213CAB4 ; CODE XREF: sub_213C8B0:loc_213CA34j 0213CAB4 ; sub_213C8B0+1B8j ... 0213CAB4 ADD R5, R5, #1 0213CAB8 0213CAB8 loc_213CAB8 ; CODE XREF: RAM:0213CF26j 0213CAB8 ; RAM:0213CFB2j 0213CAB8 CMP R5, R0 0213CABC 0213CABC loc_213CABC ; CODE XREF: RAM:0213CFB6j 0213CABC BNE loc_213CA2C 0213CAC0 ADD SP, SP, #0x48 0213CAC4 LDMFD SP!, {R4-R9} 0213CAC8 LDR PC, [SP,#arg_20] 0213CAC8 ; End of function sub_213C8B0 0213CAC8 0213CACC 0213CACC ; =============== S U B R O U T I N E ======================================= 0213CACC 0213CACC 0213CACC sub_213CACC ; CODE XREF: sub_213C644+5Cp 0213CACC ; sub_213C644+134p ... 0213CACC RSB R0, R1, #0x20 0213CAD0 MOV R0, R5,LSR R0 0213CAD4 0213CAD4 loc_213CAD4 ; CODE XREF: sub_213C644+50p 0213CAD4 ; sub_213C644:loc_213C6F0p ... 0213CAD4 SUBS R4, R4, R1 0213CAD8 MOV R5, R5,LSL R1 0213CADC BXCS LR 0213CAE0 LDRH R1, [R7],#2 0213CAE4 ORR R1, R1, R1,LSL#16 0213CAE8 MOV R1, R1,LSR#8 0213CAEC MOV R1, R1,LSL#16 0213CAF0 0213CAF0 loc_213CAF0 ; CODE XREF: RAM:0213CFEAj 0213CAF0 ADD R4, R4, #0x10 0213CAF4 ORR R5, R5, R1,LSR R4 0213CAF8 BX LR 0213CAF8 ; End of function sub_213CACC unk_21D7ED4 ldrsb r5,[r0],0x1 ldrb r4,[r0],0x1 orrs r4,[r0],0x1 bxpl lr mov r4, r4 lsl 0x11 mov r4, r4 lsr 0x11 ldrsb r5,[r0],0x1 orrs r4,r4,r5 lsl 0xF bxpl lr mov r4,r4 lsl 0xA mov r4,r4 lsr 0xA ldrb r5,[r0],0x1 orr r4,r4,r5 lsl 0x16 bx lr