00010000 ; 00010000 ; +-------------------------------------------------------------------------+ 00010000 ; | This file is generated by The Interactive Disassembler (IDA) | 00010000 ; | Copyright (c) 2007 by DataRescue sa/nv, | 00010000 ; +-------------------------------------------------------------------------+ 00010000 ; 00010000 ; Input MD5 : 3F398BF57069686DB08DB49477612CA7 00010000 ; Processor : ARMB 00010000 ; Target assembler: Generic assembler for ARM 00010000 ; Byte sex : Big endian 00010000 ; =========================================================================== 00010000 ; Segment type: Regular 00010000 AREA ram, DATA, ALIGN=0 00010000 ?? ?? ?? ??+ % 0x18000 00028000 ?? ?? ?? ??+nand_page_buf % 0x800 ; DATA XREF: boot1_main+96o 00028000 ?? ?? ?? ??+ ; boot1_main+A6o 00028000 ?? ?? ?? ??+ ; boot1_main:first_and_third_matcho ... 00028800 ?? ?? ?? ??+nand_spare_buf % 0x40 ; DATA XREF: boot1_main+1EAo 00028840 ?? ?? ?? ??+ % 0x3C 0002887C ?? ?? ?? % 3 0002887F ?? ?? ?? ?? dword_2887F % 4 ; DATA XREF: boot1_main:off_D400A58o 00028883 ?? ALIGN 4 00028884 ?? ?? ?? ?? dword_28884 % 4 ; DATA XREF: boot1_main:off_D400A4Co 00028888 ?? ?? ?? ??+ % 0x40 000288C8 ?? ?? ?? ??+dword_288C8 % 0x100 ; DATA XREF: boot1_main:off_D400DA8o 000289C8 ?? ?? ?? ??+dword_289C8 % 0x17638 ; DATA XREF: boot1_main:off_D400DA4o 000289C8 ?? ?? ?? ??+; ram ends 0D010000 ; =========================================================================== 0D010000 ; Segment type: Regular 0D010000 AREA NAND, DATA, ALIGN=0 0D010000 ?? ?? ?? ?? nand_flash_command % 4 ; DATA XREF: read_nand_page:off_D400378o 0D010000 ; boot1_main:off_D40074Co 0D010000 ; boot1_main:off_D400A14o ... 0D010004 ?? ?? ?? ?? nand_flash_config % 4 0D010008 ?? ?? ?? ?? nand_flash_address_pageoffset % 4 ; DATA XREF: read_nand_page:off_D400374o 0D01000C ?? ?? ?? ?? nand_flash_address_pageno % 4 0D010010 ?? ?? ?? ?? nand_flash_dma_addr_data % 4 ; DATA XREF: read_nand_page:off_D40037Co 0D010014 ?? ?? ?? ??+nand_flash_dma_addr_spare % 0xEC 0D010014 ?? ?? ?? ??+; NAND ends 0D020000 ; =========================================================================== 0D020000 ; Segment type: Regular 0D020000 AREA AES, DATA, ALIGN=0 0D020000 ?? ?? ?? ??+aes_io % 0x100 ; DATA XREF: aes_init:off_D4000CCo 0D020000 ?? ?? ?? ??+ ; boot1_main:off_D40075Co 0D020000 ?? ?? ?? ??+ ; boot1_main:off_D400D98o ... 0D020000 ?? ?? ?? ??+; AES ends 0D030000 ; =========================================================================== 0D030000 ; Segment type: Regular 0D030000 AREA SHA, DATA, ALIGN=0 0D030000 ?? ?? ?? ??+sha_io % 0x100 ; DATA XREF: sha1:off_D400230o 0D030000 ?? ?? ?? ??+ ; boot1_main:off_D400760o 0D030000 ?? ?? ?? ??+ ; boot1_main:off_D400D9Co ... 0D030000 ?? ?? ?? ??+; SHA ends 0D400000 ; =========================================================================== 0D400000 ; Segment type: Pure code 0D400000 AREA boot1, CODE, READWRITE, ALIGN=0 0D400000 ; =============== S U B R O U T I N E ======================================= 0D400000 boot1_start 0D400000 E3 A0 00 00 MOV R0, #0 0D400004 EE 07 0F 15 MCR p15, 0, R0,c7,c5 0D400008 EE 07 0F 16 MCR p15, 0, R0,c7,c6 0D40000C EE 11 0F 10 MRC p15, 0, R0,c1,c0 0D400010 E3 80 0A 01 ORR R0, R0, #0x1000 0D400014 EE 01 0F 10 MCR p15, 0, R0,c1,c0 0D400018 E5 9F 00 50 LDR R0, =dword_D404320 ; start 0D40001C E5 9F 10 50 LDR R1, =dword_D404320 ; end 0D400020 E3 A0 20 00 MOV R2, #0 ; val 0D400024 E3 A0 30 04 MOV R3, #4 ; stride 0D400028 EB 00 00 0B BL memfill 0D40002C E3 A0 10 00 MOV R1, #0 0D400030 E3 A0 40 00 MOV R4, #0 0D400034 E3 A0 B0 00 MOV R11, #0 0D400038 E3 A0 B0 00 MOV R11, #0 0D40003C E3 A0 E0 00 MOV LR, #0 0D400040 E5 9F D0 30 LDR SP, =boot1_stack 0D400044 EB 00 0F D9 BL jump_to_main 0D400048 E1 A0 10 00 MOV R1, R0 0D40004C EE 11 0F 10 MRC p15, 0, R0,c1,c0 0D400050 E3 C0 0A 01 BIC R0, R0, #0x1000 0D400054 EE 01 0F 10 MCR p15, 0, R0,c1,c0 0D400058 E1 A0 F0 01 MOV PC, R1 0D400058 ; End of function boot1_start 0D40005C ; =============== S U B R O U T I N E ======================================= 0D40005C ; int __stdcall memfill(void *start, void *end, unsigned int val, unsigned int stride) 0D40005C memfill ; CODE XREF: boot1_start+28p 0D40005C ; memfill+Cj 0D40005C E1 50 00 01 CMP R0, R1 0D400060 2A 00 00 01 BCS locret_D40006C 0D400064 E6 80 20 03 STR R2, [R0],R3 0D400068 EA FF FF FB B memfill 0D40006C ; --------------------------------------------------------------------------- 0D40006C locret_D40006C ; CODE XREF: memfill+4j 0D40006C E1 2F FF 1E BX LR 0D40006C ; --------------------------------------------------------------------------- 0D400070 ; void *start 0D400070 0D 40 43 20 start DCD dword_D404320 ; DATA XREF: boot1_start+18r 0D400074 ; void *end 0D400074 0D 40 43 20 end DCD dword_D404320 ; DATA XREF: boot1_start+1Cr 0D400078 0D 40 EF FC off_D400078 DCD boot1_stack ; DATA XREF: boot1_start+40r 0D400078 ; End of function memfill 0D40007C ; =============== S U B R O U T I N E ======================================= 0D40007C boot1_debug_output ; CODE XREF: boot1_main+16p 0D40007C ; boot1_main+138p 0D40007C ; boot1_main+144p ... 0D40007C 49 04 LDR R1, =starlet_gpio2_data 0D40007E 4B 05 LDR R3, =0xFF00FFFF 0D400080 68 0A LDR R2, [R1] 0D400082 06 00 LSLS R0, R0, #0x18 0D400084 40 13 ANDS R3, R2 0D400086 0A 00 LSRS R0, R0, #8 0D400088 43 03 ORRS R3, R0 0D40008A 60 0B STR R3, [R1] 0D40008C 47 70 BX LR 0D40008C ; --------------------------------------------------------------------------- 0D40008E 00 00 ALIGN 0x10 0D400090 0D 80 00 E0 off_D400090 DCD starlet_gpio2_data ; DATA XREF: boot1_debug_outputr 0D400094 FF 00 FF FF dword_D400094 DCD 0xFF00FFFF ; DATA XREF: boot1_debug_output+2r 0D400094 ; End of function boot1_debug_output 0D400098 ; =============== S U B R O U T I N E ======================================= 0D400098 aes_init ; CODE XREF: boot1_main+49Ap 0D400098 ; boot1_main+82Ap 0D400098 B5 30 PUSH {R4,R5,LR} 0D40009A 4B 0C LDR R3, =aes_io 0D40009C 1C 0C ADDS R4, R1, #0 0D40009E 1C 15 ADDS R5, R2, #0 0D4000A0 49 0B LDR R1, =(aes_io+0xC) 0D4000A2 22 00 MOVS R2, #0 0D4000A4 60 1A STR R2, [R3] 0D4000A6 22 03 MOVS R2, #3 0D4000A8 loc_D4000A8 ; CODE XREF: aes_init+16j 0D4000A8 C8 08 LDMIA R0!, {R3} 0D4000AA 60 0B STR R3, [R1] 0D4000AC 3A 01 SUBS R2, #1 0D4000AE D5 FB BPL loc_D4000A8 0D4000B0 49 08 LDR R1, =(aes_io+0x10) 0D4000B2 1C 20 ADDS R0, R4, #0 0D4000B4 22 03 MOVS R2, #3 0D4000B6 loc_D4000B6 ; CODE XREF: aes_init+24j 0D4000B6 C8 08 LDMIA R0!, {R3} 0D4000B8 60 0B STR R3, [R1] 0D4000BA 3A 01 SUBS R2, #1 0D4000BC D5 FB BPL loc_D4000B6 0D4000BE 4B 06 LDR R3, =(aes_io+4) 0D4000C0 60 1D STR R5, [R3] 0D4000C2 33 04 ADDS R3, #4 0D4000C4 60 1D STR R5, [R3] 0D4000C6 BC 30 POP {R4,R5} 0D4000C8 BC 01 POP {R0} 0D4000CA 47 00 BX R0 0D4000CA ; --------------------------------------------------------------------------- 0D4000CC 0D 02 00 00 off_D4000CC DCD aes_io ; DATA XREF: aes_init+2r 0D4000D0 0D 02 00 0C off_D4000D0 DCD aes_io+0xC ; DATA XREF: aes_init+8r 0D4000D4 0D 02 00 10 off_D4000D4 DCD aes_io+0x10 ; DATA XREF: aes_init+18r 0D4000D8 0D 02 00 04 off_D4000D8 DCD aes_io+4 ; DATA XREF: aes_init+26r 0D4000D8 ; End of function aes_init 0D4000DC ; =============== S U B R O U T I N E ======================================= 0D4000DC sha1 ; CODE XREF: verify_certificate+74p 0D4000DC ; verify_certificate+8Ap 0D4000DC ; boot1_main+6E8p 0D4000DC arg_0 = 0 0D4000DC B5 F0 PUSH {R4-R7,LR} 0D4000DE 46 57 MOV R7, R10 0D4000E0 46 4E MOV R6, R9 0D4000E2 46 45 MOV R5, R8 0D4000E4 B4 E0 PUSH {R5-R7} 0D4000E6 46 91 MOV R9, R2 0D4000E8 22 A8 MOVS R2, #0xA8 0D4000EA 1C 07 ADDS R7, R0, #0 0D4000EC 1C 1C ADDS R4, R3, #0 0D4000EE 20 00 MOVS R0, #0 0D4000F0 03 13 LSLS R3, R2, #0xC 0D4000F2 B0 81 SUB SP, SP, #4 0D4000F4 1C 0D ADDS R5, R1, #0 0D4000F6 46 82 MOV R10, R0 0D4000F8 26 00 MOVS R6, #0 0D4000FA 46 98 MOV R8, R3 0D4000FC 29 02 CMP R1, #2 0D4000FE D0 3C BEQ loc_D40017A 0D400100 29 02 CMP R1, #2 0D400102 D9 23 BLS loc_D40014C 0D400104 29 03 CMP R1, #3 0D400106 D1 00 BNE loc_D40010A 0D400108 E0 7E B loc_D400208 0D40010A ; --------------------------------------------------------------------------- 0D40010A loc_D40010A ; CODE XREF: sha1+2Aj 0D40010A ; sha1+72j 0D40010A 22 07 MOVS R2, #7 0D40010C 42 53 NEGS R3, R2 0D40010E 46 9A MOV R10, R3 0D400110 loc_D400110 ; CODE XREF: sha1+9Aj 0D400110 ; sha1+A4j sha1+136j 0D400110 42 B4 CMP R4, R6 0D400112 D0 10 BEQ loc_D400136 0D400114 20 01 MOVS R0, #1 0D400116 F0 01 FB 15 BL call_ahbMemFlush 0D40011A 20 05 MOVS R0, #5 0D40011C F0 01 FB 70 BL call_ahbMemFlush2 0D400120 4B 42 LDR R3, =(sha_io+4) 0D400122 46 48 MOV R0, R9 0D400124 1B A2 SUBS R2, R4, R6 0D400126 60 18 STR R0, [R3] 0D400128 3A 40 SUBS R2, #0x40 0D40012A 23 80 06 1B MOVLS R3, 0x80000000 0D40012E 09 92 LSRS R2, R2, #6 0D400130 43 1A ORRS R2, R3 0D400132 4B 3F LDR R3, =sha_io 0D400134 60 1A STR R2, [R3] 0D400136 loc_D400136 ; CODE XREF: sha1+36j 0D400136 2D 03 CMP R5, #3 0D400138 D0 23 BEQ loc_D400182 0D40013A loc_D40013A ; CODE XREF: sha1+9Cj 0D40013A ; sha1+12Aj 0D40013A 46 50 MOV R0, R10 0D40013C B0 01 ADD SP, SP, #4 0D40013E BC 38 POP {R3-R5} 0D400140 46 98 MOV R8, R3 0D400142 46 A1 MOV R9, R4 0D400144 46 AA MOV R10, R5 0D400146 BC F0 POP {R4-R7} 0D400148 BC 02 POP {R1} 0D40014A 47 08 BX R1 0D40014C ; --------------------------------------------------------------------------- 0D40014C loc_D40014C ; CODE XREF: sha1+26j 0D40014C 29 01 CMP R1, #1 0D40014E D1 DC BNE loc_D40010A 0D400150 4B 37 LDR R3, =sha_io 0D400152 4A 38 LDR R2, =0x67452301 0D400154 60 18 STR R0, [R3] 0D400156 33 08 ADDS R3, #8 0D400158 60 1A STR R2, [R3] 0D40015A 4A 37 LDR R2, =0xEFCDAB89 0D40015C 33 04 ADDS R3, #4 0D40015E 60 1A STR R2, [R3] 0D400160 4A 36 LDR R2, =0x98BADCFE 0D400162 33 04 ADDS R3, #4 0D400164 60 1A STR R2, [R3] 0D400166 4A 36 LDR R2, =0x10325476 0D400168 33 04 ADDS R3, #4 0D40016A 60 1A STR R2, [R3] 0D40016C 4A 35 LDR R2, =0xC3D2E1F0 0D40016E 33 04 ADDS R3, #4 0D400170 60 1A STR R2, [R3] 0D400172 60 3C STR R4, [R7] 0D400174 2C 00 CMP R4, #0 0D400176 D1 CB BNE loc_D400110 0D400178 E7 DF B loc_D40013A 0D40017A ; --------------------------------------------------------------------------- 0D40017A loc_D40017A ; CODE XREF: sha1+22j 0D40017A 68 3B LDR R3, [R7] 0D40017C 19 1B ADDS R3, R3, R4 0D40017E 60 3B STR R3, [R7] 0D400180 E7 C6 B loc_D400110 0D400182 ; --------------------------------------------------------------------------- 0D400182 loc_D400182 ; CODE XREF: sha1+5Cj 0D400182 20 A8 03 00 MOVLS R0, 0xA8000 0D400186 21 00 MOVS R1, #0 0D400188 22 80 MOVS R2, #0x80 0D40018A F0 03 FC DD BL memcmp_0 0D40018E 2E 00 CMP R6, #0 0D400190 D1 43 BNE loc_D40021A 0D400192 loc_D400192 ; CODE XREF: sha1+14Ej 0D400192 46 69 MOV R1, SP 0D400194 23 80 MOVS R3, #0x80 0D400196 31 03 ADDS R1, #3 0D400198 42 5B NEGS R3, R3 0D40019A 70 0B STRB R3, [R1] 0D40019C 23 A8 03 1B MOVLS R3, 0xA8000 0D4001A0 18 F0 ADDS R0, R6, R3 0D4001A2 22 01 MOVS R2, #1 0D4001A4 F0 03 FC 8A BL memcpy 0D4001A8 23 40 MOVS R3, #0x40 0D4001AA 1B 9B SUBS R3, R3, R6 0D4001AC 2B 08 CMP R3, #8 0D4001AE D8 01 BHI loc_D4001B4 0D4001B0 2E 00 CMP R6, #0 0D4001B2 D1 2F BNE loc_D400214 0D4001B4 loc_D4001B4 ; CODE XREF: sha1+D2j 0D4001B4 4A 24 LDR R2, =0xA803C 0D4001B6 25 40 MOVS R5, #0x40 0D4001B8 loc_D4001B8 ; CODE XREF: sha1+13Cj 0D4001B8 68 3B LDR R3, [R7] 0D4001BA 00 DB LSLS R3, R3, #3 0D4001BC 60 13 STR R3, [R2] 0D4001BE 4C 1C LDR R4, =sha_io 0D4001C0 loc_D4001C0 ; CODE XREF: sha1+E8j 0D4001C0 68 23 LDR R3, [R4] 0D4001C2 2B 00 CMP R3, #0 0D4001C4 DB FC BLT loc_D4001C0 0D4001C6 20 01 MOVS R0, #1 0D4001C8 F0 01 FA BC BL call_ahbMemFlush 0D4001CC 20 05 MOVS R0, #5 0D4001CE F0 01 FB 17 BL call_ahbMemFlush2 0D4001D2 4B 16 LDR R3, =(sha_io+4) 0D4001D4 46 40 MOV R0, R8 0D4001D6 1C 2A ADDS R2, R5, #0 0D4001D8 60 18 STR R0, [R3] 0D4001DA 3A 40 SUBS R2, #0x40 0D4001DC 23 80 MOVS R3, #0x80 0D4001DE 09 92 LSRS R2, R2, #6 0D4001E0 06 1B LSLS R3, R3, #0x18 0D4001E2 43 1A ORRS R2, R3 0D4001E4 60 22 STR R2, [R4] 0D4001E6 4A 12 LDR R2, =sha_io 0D4001E8 loc_D4001E8 ; CODE XREF: sha1+110j 0D4001E8 68 13 LDR R3, [R2] 0D4001EA 2B 00 CMP R3, #0 0D4001EC DB FC BLT loc_D4001E8 0D4001EE 22 00 MOVS R2, #0 0D4001F0 21 04 MOVS R1, #4 0D4001F2 loc_D4001F2 ; CODE XREF: sha1+124j 0D4001F2 48 16 LDR R0, =(sha_io+8) 0D4001F4 18 13 ADDS R3, R2, R0 0D4001F6 68 1B LDR R3, [R3] 0D4001F8 98 09 LDR R0, [SP,#0x24+arg_0] 0D4001FA 50 13 STR R3, [R2,R0] 0D4001FC 32 04 ADDS R2, #4 0D4001FE 39 01 SUBS R1, #1 0D400200 D5 F7 BPL loc_D4001F2 0D400202 23 00 MOVS R3, #0 0D400204 60 3B STR R3, [R7] 0D400206 E7 98 B loc_D40013A 0D400208 ; --------------------------------------------------------------------------- 0D400208 loc_D400208 ; CODE XREF: sha1+2Cj 0D400208 68 3B LDR R3, [R7] 0D40020A 26 3F MOVS R6, #0x3F 0D40020C 19 1B ADDS R3, R3, R4 0D40020E 40 26 ANDS R6, R4 0D400210 60 3B STR R3, [R7] 0D400212 E7 7D B loc_D400110 0D400214 ; --------------------------------------------------------------------------- 0D400214 loc_D400214 ; CODE XREF: sha1+D6j 0D400214 4A 0E LDR R2, =0xA807C 0D400216 25 80 MOVS R5, #0x80 0D400218 E7 CE B loc_D4001B8 0D40021A ; --------------------------------------------------------------------------- 0D40021A loc_D40021A ; CODE XREF: sha1+B4j 0D40021A 46 4A MOV R2, R9 0D40021C 19 11 ADDS R1, R2, R4 0D40021E 20 A8 MOVS R0, #0xA8 0D400220 1B 89 SUBS R1, R1, R6 0D400222 1C 32 ADDS R2, R6, #0 0D400224 03 00 LSLS R0, R0, #0xC 0D400226 F0 03 FC 49 BL memcpy 0D40022A E7 B2 B loc_D400192 0D40022A ; --------------------------------------------------------------------------- 0D40022C 0D 03 00 04 off_D40022C DCD sha_io+4 ; DATA XREF: sha1+44r 0D40022C ; sha1+F6r 0D400230 0D 03 00 00 off_D400230 DCD sha_io ; DATA XREF: sha1+56r 0D400230 ; sha1+74r sha1+E2r ... 0D400234 67 45 23 01 dword_D400234 DCD 0x67452301 ; DATA XREF: sha1+76r 0D400238 EF CD AB 89 dword_D400238 DCD 0xEFCDAB89 ; DATA XREF: sha1+7Er 0D40023C 98 BA DC FE dword_D40023C DCD 0x98BADCFE ; DATA XREF: sha1+84r 0D400240 10 32 54 76 dword_D400240 DCD 0x10325476 ; DATA XREF: sha1+8Ar 0D400244 C3 D2 E1 F0 dword_D400244 DCD 0xC3D2E1F0 ; DATA XREF: sha1+90r 0D400248 00 0A 80 3C dword_D400248 DCD 0xA803C ; DATA XREF: sha1:loc_D4001B4r 0D40024C 0D 03 00 08 off_D40024C DCD sha_io+8 ; DATA XREF: sha1:loc_D4001F2r 0D400250 00 0A 80 7C dword_D400250 DCD 0xA807C ; DATA XREF: sha1:loc_D400214r 0D400250 ; End of function sha1 0D400254 ; =============== S U B R O U T I N E ======================================= 0D400254 calc_ecc ; CODE XREF: boot1_main+218p 0D400254 ; boot1_main+476p 0D400254 ; boot1_main+738p 0D400254 var_34 = -0x34 0D400254 retval = -0x30 0D400254 var_2C = -0x2C 0D400254 var_25 = -0x25 0D400254 B5 F0 PUSH {R4-R7,LR} 0D400256 46 5F MOV R7, R11 0D400258 46 56 MOV R6, R10 0D40025A 46 4D MOV R5, R9 0D40025C 46 44 MOV R4, R8 0D40025E B4 F0 PUSH {R4-R7} 0D400260 B0 84 SUB SP, SP, #0x10 0D400262 09 53 LSRS R3, R2, #5 0D400264 46 88 MOV R8, R1 0D400266 0A 52 LSRS R2, R2, #9 0D400268 21 00 MOVS R1, #0 0D40026A 90 02 STR R0, [SP,#0x34+var_2C] 0D40026C 91 01 STR R1, [SP,#0x34+retval] 0D40026E 46 9B MOV R11, R3 0D400270 25 00 MOVS R5, #0 0D400272 46 91 MOV R9, R2 0D400274 2A 00 CMP R2, #0 0D400276 D9 43 BLS loc_D400300 0D400278 10 9B ASRS R3, R3, #2 0D40027A 24 FF MOVS R4, #0xFF 0D40027C 06 21 LSLS R1, R4, #0x18 0D40027E 27 FF MOVS R7, #0xFF 0D400280 26 FF MOVS R6, #0xFF 0D400282 93 00 STR R3, [SP,#0x34+var_34] 0D400284 46 8A MOV R10, R1 0D400286 04 3F LSLS R7, R7, #0x10 0D400288 02 36 LSLS R6, R6, #8 0D40028A loc_D40028A ; CODE XREF: calc_ecc+94j 0D40028A 00 AA LSLS R2, R5, #2 0D40028C 46 44 MOV R4, R8 0D40028E 18 A3 ADDS R3, R4, R2 0D400290 9C 00 LDR R4, [SP,#0x34+var_34] 0D400292 46 59 MOV R1, R11 0D400294 6C 18 LDR R0, [R3,#0x40] 0D400296 1B 0B SUBS R3, R1, R4 0D400298 44 43 ADD R3, R8 0D40029A 58 9A LDR R2, [R3,R2] 0D40029C 42 82 CMP R2, R0 0D40029E D0 21 BEQ loc_D4002E4 0D4002A0 46 53 MOV R3, R10 0D4002A2 40 13 ANDS R3, R2 0D4002A4 0E 19 LSRS R1, R3, #0x18 0D4002A6 1C 13 ADDS R3, R2, #0 0D4002A8 40 3B ANDS R3, R7 0D4002AA 0A 1B LSRS R3, R3, #8 0D4002AC 43 19 ORRS R1, R3 0D4002AE 1C 13 ADDS R3, R2, #0 0D4002B0 40 33 ANDS R3, R6 0D4002B2 02 1B LSLS R3, R3, #8 0D4002B4 43 19 ORRS R1, R3 0D4002B6 23 FF MOVS R3, #0xFF 0D4002B8 40 1A ANDS R2, R3 0D4002BA 06 13 LSLS R3, R2, #0x18 0D4002BC 43 19 ORRS R1, R3 0D4002BE 46 52 MOV R2, R10 0D4002C0 1C 03 ADDS R3, R0, #0 0D4002C2 40 02 ANDS R2, R0 0D4002C4 40 3B ANDS R3, R7 0D4002C6 0A 1B LSRS R3, R3, #8 0D4002C8 0E 12 LSRS R2, R2, #0x18 0D4002CA 43 1A ORRS R2, R3 0D4002CC 1C 03 ADDS R3, R0, #0 0D4002CE 40 33 ANDS R3, R6 0D4002D0 24 FF MOVS R4, #0xFF 0D4002D2 02 1B LSLS R3, R3, #8 0D4002D4 40 20 ANDS R0, R4 0D4002D6 43 1A ORRS R2, R3 0D4002D8 06 03 LSLS R3, R0, #0x18 0D4002DA 43 1A ORRS R2, R3 0D4002DC 40 51 EORS R1, R2 0D4002DE 1E 4B SUBS R3, R1, #1 0D4002E0 42 0B TST R3, R1 0D4002E2 D1 03 BNE loc_D4002EC 0D4002E4 loc_D4002E4 ; CODE XREF: calc_ecc+4Aj 0D4002E4 ; calc_ecc+E6j 0D4002E4 35 01 ADDS R5, #1 0D4002E6 45 4D CMP R5, R9 0D4002E8 D3 CF BCC loc_D40028A 0D4002EA E0 09 B loc_D400300 0D4002EC ; --------------------------------------------------------------------------- 0D4002EC loc_D4002EC ; CODE XREF: calc_ecc+8Ej 0D4002EC 4A 13 LDR R2, =0xFFF 0D4002EE 1C 0B ADDS R3, R1, #0 0D4002F0 0C 0C LSRS R4, R1, #0x10 0D4002F2 40 13 ANDS R3, R2 0D4002F4 40 63 EORS R3, R4 0D4002F6 42 93 CMP R3, R2 0D4002F8 D0 0C BEQ ecc_ok 0D4002FA 21 01 MOVS R1, #1 ; ECC fail 0D4002FC 42 49 NEGS R1, R1 0D4002FE 91 01 STR R1, [SP,#0x34+retval] 0D400300 loc_D400300 ; CODE XREF: calc_ecc+22j 0D400300 ; calc_ecc+96j 0D400300 98 01 LDR R0, [SP,#0x34+retval] 0D400302 B0 04 ADD SP, SP, #0x10 0D400304 BC 78 POP {R3-R6} 0D400306 46 98 MOV R8, R3 0D400308 46 A1 MOV R9, R4 0D40030A 46 AA MOV R10, R5 0D40030C 46 B3 MOV R11, R6 0D40030E BC F0 POP {R4-R7} 0D400310 BC 02 POP {R1} 0D400312 47 08 BX R1 0D400314 ; --------------------------------------------------------------------------- 0D400314 ecc_ok ; CODE XREF: calc_ecc+A4j 0D400314 99 02 LDR R1, [SP,#0x34+var_2C] 0D400316 02 6A LSLS R2, R5, #9 0D400318 05 20 LSLS R0, R4, #0x14 0D40031A 18 52 ADDS R2, R2, R1 0D40031C 0D C0 LSRS R0, R0, #0x17 0D40031E 23 07 MOVS R3, #7 0D400320 5C 81 LDRB R1, [R0,R2] 0D400322 40 1C ANDS R4, R3 0D400324 23 01 MOVS R3, #1 0D400326 40 A3 LSLS R3, R4 0D400328 40 4B EORS R3, R1 0D40032A 46 6C MOV R4, SP 0D40032C 21 0F MOVS R1, #0xF 0D40032E 73 E3 STRB R3, [R4,#0x34+var_25] 0D400330 18 80 ADDS R0, R0, R2 0D400332 44 69 ADD R1, SP 0D400334 22 01 MOVS R2, #1 0D400336 F0 03 FB C1 BL memcpy 0D40033A E7 D3 B loc_D4002E4 0D40033A ; --------------------------------------------------------------------------- 0D40033C 00 00 0F FF off_D40033C DCD 0xFFF ; DATA XREF: calc_ecc:loc_D4002ECr 0D40033C ; End of function calc_ecc 0D400340 ; =============== S U B R O U T I N E ======================================= 0D400340 ; int __stdcall read_nand_page(int pageno, void *data_addr, void *ecc_addr) 0D400340 read_nand_page ; CODE XREF: boot1_main+80p 0D400340 ; boot1_main+1F2p 0D400340 ; boot1_main+260p ... 0D400340 B5 30 PUSH {R4,R5,LR} 0D400342 4B 0C LDR R3, =nand_flash_address_pageoffset 0D400344 1C 0C ADDS R4, R1, #0 0D400346 49 0C LDR R1, =nand_flash_command 0D400348 1C 15 ADDS R5, R2, #0 0D40034A 22 00 MOVS R2, #0 0D40034C 60 0A STR R2, [R1] 0D40034E 60 1A STR R2, [R3] 0D400350 33 04 ADDS R3, #4 0D400352 60 18 STR R0, [R3] 0D400354 23 9F 06 1B MOVLS R3, 0x9F000000 0D400358 60 0B STR R3, [R1] 0D40035A loc_D40035A ; CODE XREF: read_nand_page+1Ej 0D40035A 68 0B LDR R3, [R1] 0D40035C 2B 00 CMP R3, #0 0D40035E DB FC BLT loc_D40035A 0D400360 4B 06 LDR R3, =nand_flash_dma_addr_data 0D400362 60 1C STR R4, [R3] 0D400364 33 04 ADDS R3, #4 0D400366 60 1D STR R5, [R3] 0D400368 4B 05 LDR R3, =0x8030B840 0D40036A 60 0B STR R3, [R1] 0D40036C BC 30 POP {R4,R5} 0D40036E BC 01 POP {R0} 0D400370 47 00 BX R0 0D400370 ; --------------------------------------------------------------------------- 0D400372 00 00 ALIGN 4 0D400374 0D 01 00 08 off_D400374 DCD nand_flash_address_pageoffset ; DATA XREF: read_nand_page+2r 0D400378 0D 01 00 00 off_D400378 DCD nand_flash_command ; DATA XREF: read_nand_page+6r 0D40037C 0D 01 00 10 off_D40037C DCD nand_flash_dma_addr_data ; DATA XREF: read_nand_page+20r 0D400380 80 30 B8 40 dword_D400380 DCD 0x8030B840 ; DATA XREF: read_nand_page+28r 0D400380 ; End of function read_nand_page 0D400384 ; =============== S U B R O U T I N E ======================================= 0D400384 strlen_maybe ; CODE XREF: verify_certificate+A2p 0D400384 ; verify_certificate+C2p 0D400384 B5 10 PUSH {R4,LR} 0D400386 1C 04 ADDS R4, R0, #0 0D400388 1C 08 ADDS R0, R1, #0 0D40038A 21 00 MOVS R1, #0 0D40038C 1E 42 SUBS R2, R0, #1 0D40038E D4 05 BMI loc_D40039C 0D400390 loc_D400390 ; CODE XREF: strlen_maybe+16j 0D400390 5C A3 LDRB R3, [R4,R2] 0D400392 2B 00 CMP R3, #0 0D400394 D1 02 BNE loc_D40039C 0D400396 31 01 ADDS R1, #1 0D400398 3A 01 SUBS R2, #1 0D40039A D5 F9 BPL loc_D400390 0D40039C loc_D40039C ; CODE XREF: strlen_maybe+Aj 0D40039C ; strlen_maybe+10j 0D40039C 1A 40 SUBS R0, R0, R1 0D40039E BC 10 POP {R4} 0D4003A0 BC 02 POP {R1} 0D4003A2 47 08 BX R1 0D4003A2 ; End of function strlen_maybe 0D4003A4 ; =============== S U B R O U T I N E ======================================= 0D4003A4 verify_certificate ; CODE XREF: boot1_main+336p 0D4003A4 ; boot1_main+392p 0D4003A4 ; boot1_main+3EEp ... 0D4003A4 var_3C = -0x3C 0D4003A4 var_38 = -0x38 0D4003A4 var_34 = -0x34 0D4003A4 arg_0 = 0 0D4003A4 arg_4 = 4 0D4003A4 B5 F0 PUSH {R4-R7,LR} 0D4003A6 46 57 MOV R7, R10 0D4003A8 46 4E MOV R6, R9 0D4003AA 46 45 MOV R5, R8 0D4003AC B4 E0 PUSH {R5-R7} 0D4003AE B0 87 SUB SP, SP, #0x1C 0D4003B0 9E 10 LDR R6, [SP,#0x3C+arg_4] 0D4003B2 1C 04 ADDS R4, R0, #0 0D4003B4 9D 0F LDR R5, [SP,#0x3C+arg_0] 0D4003B6 20 AC MOVS R0, #0xAC 0D4003B8 1C 0F ADDS R7, R1, #0 0D4003BA 46 92 MOV R10, R2 0D4003BC 03 00 LSLS R0, R0, #0xC 0D4003BE 1C 21 ADDS R1, R4, #0 0D4003C0 1C 32 ADDS R2, R6, #0 0D4003C2 46 98 MOV R8, R3 0D4003C4 F0 03 FB 7A BL memcpy 0D4003C8 2D 02 CMP R5, #2 0D4003CA D0 15 BEQ loc_D4003F8 0D4003CC 2D 02 CMP R5, #2 0D4003CE D9 0D BLS loc_D4003EC 0D4003D0 2D 03 CMP R5, #3 0D4003D2 D0 11 BEQ loc_D4003F8 0D4003D4 2D 04 CMP R5, #4 0D4003D6 D0 0F BEQ loc_D4003F8 0D4003D8 rsa_sig_fail ; CODE XREF: verify_certificate+4Aj 0D4003D8 ; verify_certificate+66j 0D4003D8 ; verify_certificate+9Cj ... 0D4003D8 20 08 MOVS R0, #8 0D4003DA 42 40 NEGS R0, R0 0D4003DC rsa_sig_ok ; CODE XREF: verify_certificate+7Aj 0D4003DC ; verify_certificate+90j 0D4003DC ; verify_certificate+D6j 0D4003DC B0 07 ADD SP, SP, #0x1C 0D4003DE BC 38 POP {R3-R5} 0D4003E0 46 98 MOV R8, R3 0D4003E2 46 A1 MOV R9, R4 0D4003E4 46 AA MOV R10, R5 0D4003E6 BC F0 POP {R4-R7} 0D4003E8 BC 02 POP {R1} 0D4003EA 47 08 BX R1 0D4003EC ; --------------------------------------------------------------------------- 0D4003EC loc_D4003EC ; CODE XREF: verify_certificate+2Aj 0D4003EC 2D 01 CMP R5, #1 0D4003EE D1 F3 BNE rsa_sig_fail 0D4003F0 4C 23 LDR R4, =0xAC240 0D4003F2 4B 24 LDR R3, =0xFFFFFDC0 0D4003F4 1C 20 ADDS R0, R4, #0 0D4003F6 E0 02 B loc_D4003FE 0D4003F8 ; --------------------------------------------------------------------------- 0D4003F8 loc_D4003F8 ; CODE XREF: verify_certificate+26j 0D4003F8 ; verify_certificate+2Ej 0D4003F8 ; verify_certificate+32j 0D4003F8 4C 23 LDR R4, =0xAC140 0D4003FA 4B 24 LDR R3, =0xFFFFFEC0 0D4003FC 1C 20 ADDS R0, R4, #0 ; haystack 0D4003FE loc_D4003FE ; CODE XREF: verify_certificate+52j 0D4003FE 1C 39 ADDS R1, R7, #0 ; needle 0D400400 22 40 MOVS R2, #0x40 ; len 0D400402 18 F6 ADDS R6, R6, R3 0D400404 F0 03 FA E6 BL memcmp 0D400408 28 00 CMP R0, #0 0D40040A D1 E5 BNE rsa_sig_fail 0D40040C AF 01 ADD R7, SP, #0x3C+var_38 0D40040E 90 00 STR R0, [SP,#0x3C+var_3C] 0D400410 21 01 MOVS R1, #1 0D400412 1C 38 ADDS R0, R7, #0 0D400414 1C 22 ADDS R2, R4, #0 0D400416 23 00 MOVS R3, #0 0D400418 F7 FF FE 60 BL sha1 0D40041C 28 00 CMP R0, #0 0D40041E DB DD BLT rsa_sig_ok 0D400420 AB 02 ADD R3, SP, #0x3C+var_34 0D400422 46 99 MOV R9, R3 0D400424 93 00 STR R3, [SP,#0x3C+var_3C] 0D400426 1C 38 ADDS R0, R7, #0 0D400428 21 03 MOVS R1, #3 0D40042A 1C 22 ADDS R2, R4, #0 0D40042C 1C 33 ADDS R3, R6, #0 0D40042E F7 FF FE 55 BL sha1 0D400432 28 00 CMP R0, #0 0D400434 DB D2 BLT rsa_sig_ok 0D400436 2D 02 CMP R5, #2 0D400438 D0 13 BEQ loc_D400462 0D40043A 2D 02 CMP R5, #2 0D40043C D8 0D BHI loc_D40045A 0D40043E 2D 01 CMP R5, #1 0D400440 D1 CA BNE rsa_sig_fail 0D400442 46 40 MOV R0, R8 0D400444 21 04 MOVS R1, #4 0D400446 F7 FF FF 9D BL strlen_maybe 0D40044A 46 51 MOV R1, R10 0D40044C 90 00 STR R0, [SP,#0x3C+var_3C] 0D40044E 4A 10 LDR R2, =0xAC004 0D400450 46 48 MOV R0, R9 0D400452 46 43 MOV R3, R8 0D400454 F0 02 F9 20 BL verify_sig_RSA4096 0D400458 E0 0E B loc_D400478 0D40045A ; --------------------------------------------------------------------------- 0D40045A loc_D40045A ; CODE XREF: verify_certificate+98j 0D40045A 2D 03 CMP R5, #3 0D40045C D0 01 BEQ loc_D400462 0D40045E 2D 04 CMP R5, #4 0D400460 D1 BA BNE rsa_sig_fail 0D400462 loc_D400462 ; CODE XREF: verify_certificate+94j 0D400462 ; verify_certificate+B8j 0D400462 21 04 MOVS R1, #4 0D400464 46 40 MOV R0, R8 0D400466 F7 FF FF 8D BL strlen_maybe 0D40046A 46 51 MOV R1, R10 0D40046C 90 00 STR R0, [SP,#0x3C+var_3C] 0D40046E 4A 08 LDR R2, =0xAC004 0D400470 46 48 MOV R0, R9 0D400472 46 43 MOV R3, R8 0D400474 F0 02 F9 02 BL verify_sig_RSA2048 0D400478 loc_D400478 ; CODE XREF: verify_certificate+B4j 0D400478 28 00 CMP R0, #0 0D40047A D0 AF BEQ rsa_sig_ok 0D40047C E7 AC B rsa_sig_fail 0D40047C ; --------------------------------------------------------------------------- 0D40047E 00 00 ALIGN 0x10 0D400480 00 0A C2 40 off_D400480 DCD 0xAC240 ; DATA XREF: verify_certificate+4Cr 0D400484 FF FF FD C0 dword_D400484 DCD 0xFFFFFDC0 ; DATA XREF: verify_certificate+4Er 0D400488 00 0A C1 40 off_D400488 DCD 0xAC140 ; DATA XREF: verify_certificate:loc_D4003F8r 0D40048C FF FF FE C0 dword_D40048C DCD 0xFFFFFEC0 ; DATA XREF: verify_certificate+56r 0D400490 00 0A C0 04 off_D400490 DCD 0xAC004 ; DATA XREF: verify_certificate+AAr 0D400490 ; verify_certificate+CAr 0D400490 ; End of function verify_certificate 0D400494 ; =============== S U B R O U T I N E ======================================= 0D400494 boot1_main ; CODE XREF: jump_to_main+8j 0D400494 ; DATA XREF: jump_to_main+4o 0D400494 ; jump_to_main:off_D403FBCo 0D400494 var_2C8 = -0x2C8 0D400494 var_2C4 = -0x2C4 0D400494 var_2C0 = -0x2C0 0D400494 var_2BC = -0x2BC 0D400494 var_2B8 = -0x2B8 0D400494 var_2B4 = -0x2B4 0D400494 var_2B0 = -0x2B0 0D400494 var_2AC = -0x2AC 0D400494 var_2A8 = -0x2A8 0D400494 var_2A4 = -0x2A4 0D400494 var_2A0 = -0x2A0 0D400494 var_29C = -0x29C 0D400494 var_298 = -0x298 0D400494 var_294 = -0x294 0D400494 var_290 = -0x290 0D400494 var_28C = -0x28C 0D400494 var_288 = -0x288 0D400494 var_284 = -0x284 0D400494 var_280 = -0x280 0D400494 var_27C = -0x27C 0D400494 var_278 = -0x278 0D400494 var_274 = -0x274 0D400494 var_270 = -0x270 0D400494 var_26C = -0x26C 0D400494 var_268 = -0x268 0D400494 var_264 = -0x264 0D400494 var_260 = -0x260 0D400494 var_24C = -0x24C 0D400494 var_1BC = -0x1BC 0D400494 var_17C = -0x17C 0D400494 boot2_magic = -0x13C 0D400494 var_134 = -0x134 0D400494 var_A0 = -0xA0 0D400494 var_90 = -0x90 0D400494 var_8C = -0x8C 0D400494 var_88 = -0x88 0D400494 var_84 = -0x84 0D400494 var_80 = -0x80 0D400494 bad_block_map = -0x70 0D400494 B5 F0 PUSH {R4-R7,LR} 0D400496 46 5F MOV R7, R11 0D400498 46 56 MOV R6, R10 0D40049A 46 4D MOV R5, R9 0D40049C 46 44 MOV R4, R8 0D40049E B4 F0 PUSH {R4-R7} 0D4004A0 4C A5 LDR R4, =-0x2A4 0D4004A2 20 00 MOVS R0, #0 0D4004A4 44 A5 ADD SP, R4 0D4004A6 46 81 MOV R9, R0 0D4004A8 20 11 MOVS R0, #0x11 0D4004AA F7 FF FD E7 BL boot1_debug_output ; output 11h 0D4004AE A8 19 ADD R0, SP, #0x2C8+var_264 0D4004B0 A9 18 ADD R1, SP, #0x2C8+var_268 0D4004B2 F0 00 FF E9 BL read_214 0D4004B6 9B 19 LDR R3, [SP,#0x2C8+var_264] 0D4004B8 24 07 MOVS R4, #7 0D4004BA 2B 00 CMP R3, #0 0D4004BC D1 00 BNE loc_D4004C0 0D4004BE 24 47 MOVS R4, #0x47 0D4004C0 loc_D4004C0 ; CODE XREF: boot1_main+28j 0D4004C0 4B 9E LDR R3, =mem_mirror_config_reg 0D4004C2 60 1C STR R4, [R3] 0D4004C4 4B 9E LDR R3, =0xD8B0010 0D4004C6 46 49 MOV R1, R9 0D4004C8 60 19 STR R1, [R3] 0D4004CA 20 00 MOVS R0, #0 0D4004CC 21 00 MOVS R1, #0 0D4004CE F0 01 FF 41 BL call_init_dram 0D4004D2 F0 00 FC 6F BL init_gpios 0D4004D6 4B 9B LDR R3, =0x1E7 0D4004D8 46 6D MOV R5, SP 0D4004DA 24 3F MOVS R4, #0b111111 0D4004DC 44 6B ADD R3, SP 0D4004DE 35 CB ADDS R5, #0b11001011 0D4004E0 43 A3 BICS R3, R4 0D4004E2 43 A5 BICS R5, R4 0D4004E4 22 01 MOVS R2, #1 0D4004E6 93 03 STR R3, [SP,#0x2C8+var_2BC] 0D4004E8 95 02 STR R5, [SP,#0x2C8+var_2C0] 0D4004EA 46 93 MOV R11, R2 ; R11 = blockmap_found_flag = 1 0D4004EC boot2_blockmap_search ; CODE XREF: boot1_main+12Cj 0D4004EC 46 58 MOV R0, R11 0D4004EE 28 02 CMP R0, #2 0D4004F0 D1 00 BNE loc_D4004F4 0D4004F2 E0 8F B blockmap_found2 0D4004F4 ; --------------------------------------------------------------------------- 0D4004F4 loc_D4004F4 ; CODE XREF: boot1_main+5Cj 0D4004F4 ; boot1_main+1C8j 0D4004F4 24 00 MOVS R4, #0 0D4004F6 A8 63 ADD R0, SP, #0x2C8+boot2_magic 0D4004F8 49 93 LDR R1, =boot2_magic 0D4004FA 22 08 MOVS R2, #8 0D4004FC F0 03 FA DE BL memcpy 0D400500 94 98 STR R4, [SP,#0x2C8+bad_block_map+8] 0D400502 4C 92 LDR R4, =nand_flash_command 0D400504 23 01 MOVS R3, #1 0D400506 keep_looking ; CODE XREF: boot1_main+D4j 0D400506 1C 5D ADDS R5, R3, #1 ; R5 = blockno 0D400508 01 A8 LSLS R0, R5, #6 0D40050A 21 A0 MOVS R1, #0xA0 0D40050C 22 A2 MOVS R2, #0xA2 0D40050E 38 01 SUBS R0, #1 ; pageno = R3 * 0x40 - 1 0D400510 02 89 LSLS R1, R1, #0xA ; 0x28000 0D400512 02 92 LSLS R2, R2, #0xA ; 0x28800 0D400514 F7 FF FF 14 BL read_nand_page 0D400518 read_NAND_status ; CODE XREF: boot1_main+88j 0D400518 68 23 LDR R3, [R4] ; read NAND status 0D40051A 2B 00 CMP R3, #0 0D40051C DB FC BLT read_NAND_status 0D40051E 20 03 MOVS R0, #3 0D400520 F0 01 F9 10 BL call_ahbMemFlush 0D400524 20 00 MOVS R0, #0 0D400526 F0 01 F9 6B BL call_ahbMemFlush2 0D40052A 20 A0 02 80 MOVLS R0, nand_page_buf ; haystack 0D40052E A9 63 ADD R1, SP, #0x2C8+boot2_magic ; needle 0D400530 22 08 MOVS R2, #8 ; len 0D400532 F0 03 FA 4F BL memcmp ; does page begin with boot2 magic? 0D400536 28 00 CMP R0, #0 0D400538 D1 5C BNE no_boot2_magic 0D40053A 20 A0 02 80 MOVLS R0, nand_page_buf ; haystack 0D40053E 49 84 LDR R1, =(nand_page_buf+0x4C) ; needle 0D400540 22 4C MOVS R2, #0x4C ; len 0D400542 F0 03 FA 47 BL memcmp ; are the first two blockmaps identical? 0D400546 28 00 CMP R0, #0 0D400548 D1 4C BNE not_a_blockmap 0D40054A first_and_third_match ; CODE XREF: boot1_main+15Ej 0D40054A 21 A0 02 89 MOVLS R1, nand_page_buf 0D40054E blockmap_found ; CODE XREF: boot1_main+17Ej 0D40054E 68 8A LDR R2, [R1,#blockmap.id] 0D400550 9B 98 LDR R3, [SP,#0x2C8+bad_block_map+8] 0D400552 42 9A CMP R2, R3 0D400554 D9 06 BLS invalid_blockmap 0D400556 A8 96 ADD R0, SP, #0x2C8+bad_block_map 0D400558 92 98 STR R2, [SP,#0x2C8+bad_block_map+8] 0D40055A 30 0C ADDS R0, #0xC 0D40055C 31 0C ADDS R1, #0xC 0D40055E 22 40 MOVS R2, #0x40 0D400560 F0 03 FA AC BL memcpy ; copy blockmap to stack 0D400564 invalid_blockmap ; CODE XREF: boot1_main+C0j 0D400564 ; boot1_main+16Cj 0D400564 ; boot1_main+17Aj 0D400564 1C 2B ADDS R3, R5, #0 0D400566 2D 08 CMP R5, #8 0D400568 D3 CD BCC keep_looking 0D40056A 46 59 MOV R1, R11 0D40056C 29 01 CMP R1, #1 0D40056E D1 00 BNE loc_D400572 0D400570 E0 DD B set_r2_to_1 0D400572 ; --------------------------------------------------------------------------- 0D400572 loc_D400572 ; CODE XREF: boot1_main+DAj 0D400572 22 07 MOVS R2, #7 0D400574 loc_D400574 ; CODE XREF: boot1_main+29Cj 0D400574 27 A2 MOVS R7, #0xA2 0D400576 46 5B MOV R3, R11 0D400578 1C 14 ADDS R4, R2, #0 0D40057A 02 BF LSLS R7, R7, #0xA ; r7 = 0x28800 0D40057C 2B 01 CMP R3, #1 0D40057E D1 00 BNE loc_D400582 0D400580 E0 D2 B loc_D400728 0D400582 ; --------------------------------------------------------------------------- 0D400582 loc_D400582 ; CODE XREF: boot1_main+EAj 0D400582 20 01 MOVS R0, #1 0D400584 42 41 NEGS R1, R0 0D400586 46 8A MOV R10, R1 0D400588 loc_D400588 ; CODE XREF: boot1_main+298j 0D400588 9B 98 LDR R3, [SP,#0x2C8+bad_block_map+8] 0D40058A 2B 01 CMP R3, #1 0D40058C D8 00 BHI loc_D400590 0D40058E E0 A5 B loc_D4006DC 0D400590 ; --------------------------------------------------------------------------- 0D400590 loc_D400590 ; CODE XREF: boot1_main+F8j 0D400590 1E 51 SUBS R1, R2, #1 0D400592 29 06 CMP R1, #6 0D400594 D9 00 BLS loc_D400598 0D400596 E0 CC B dec_r2 0D400598 ; --------------------------------------------------------------------------- 0D400598 loc_D400598 ; CODE XREF: boot1_main+100j 0D400598 AD 96 ADD R5, SP, #0x2C8+bad_block_map 0D40059A 19 53 ADDS R3, R2, R5 0D40059C 7B 1B LDRB R3, [R3,#0xC] 0D40059E 2B 01 CMP R3, #1 ; is bad_block_map[R2] == 1? 0D4005A0 D0 62 BEQ loc_D400668 0D4005A2 1C 0A ADDS R2, R1, #0 0D4005A4 loc_D4005A4 ; CODE XREF: boot1_main+1D2j 0D4005A4 ; boot1_main+2A0j 0D4005A4 ; boot1_main+57Aj 0D4005A4 2A 06 CMP R2, #6 0D4005A6 D9 64 BLS loc_D400672 0D4005A8 error_4 ; CODE XREF: boot1_main+1DCj 0D4005A8 ; boot1_main+292j 0D4005A8 23 04 MOVS R3, #4 0D4005AA 42 5C NEGS R4, R3 0D4005AC 46 A0 MOV R8, R4 0D4005AE loc_D4005AE ; CODE XREF: boot1_main+1E2j 0D4005AE 46 44 MOV R4, R8 0D4005B0 check_for_error ; CODE XREF: boot1_main+246j 0D4005B0 ; boot1_main+6FCj 0D4005B0 2C 00 CMP R4, #0 0D4005B2 DB 00 BLT error 0D4005B4 E2 0F B ok 0D4005B6 ; --------------------------------------------------------------------------- 0D4005B6 error ; CODE XREF: boot1_main+11Ej 0D4005B6 ; boot1_main+2D4j 0D4005B6 ; boot1_main+484j ... 0D4005B6 46 A1 MOV R9, R4 ; r9 = error code 0D4005B8 24 01 MOVS R4, #1 0D4005BA 44 A3 ADD R11, R4 ; increment blockmap flag 0D4005BC 46 5D MOV R5, R11 0D4005BE 2D 02 CMP R5, #2 0D4005C0 D9 94 BLS boot2_blockmap_search 0D4005C2 blockmap_search_failed ; CODE XREF: boot1_main+548j 0D4005C2 46 49 MOV R1, R9 0D4005C4 43 CB MVNS R3, R1 0D4005C6 06 0D LSLS R5, R1, #0x18 0D4005C8 06 1C LSLS R4, R3, #0x18 0D4005CA boot1_main_panic ; CODE XREF: boot1_main+14Ej 0D4005CA 0E 28 LSRS R0, R5, #0x18 0D4005CC F7 FF FD 56 BL boot1_debug_output ; panic1 0D4005D0 48 60 LDR R0, =1000000 0D4005D2 F0 03 FB 7F BL delay_1 0D4005D6 0E 20 LSRS R0, R4, #0x18 0D4005D8 F7 FF FD 50 BL boot1_debug_output ; panic2 0D4005DC 48 5D LDR R0, =1000000 0D4005DE F0 03 FB 79 BL delay_1 0D4005E2 E7 F2 B boot1_main_panic 0D4005E4 ; --------------------------------------------------------------------------- 0D4005E4 not_a_blockmap ; CODE XREF: boot1_main+B4j 0D4005E4 20 A0 02 80 MOVLS R0, nand_page_buf ; haystack 0D4005E8 49 5B LDR R1, =(nand_page_buf+0x98) ; needle 0D4005EA 22 4C MOVS R2, #0x4C ; len 0D4005EC F0 03 F9 F2 BL memcmp ; are the first and third copies identical? 0D4005F0 28 00 CMP R0, #0 0D4005F2 D0 AA BEQ first_and_third_match 0D4005F4 no_boot2_magic ; CODE XREF: boot1_main+A4j 0D4005F4 48 56 LDR R0, =(nand_page_buf+0x4C) ; haystack 0D4005F6 A9 63 ADD R1, SP, #0x2C8+boot2_magic ; needle 0D4005F8 22 08 MOVS R2, #8 ; len 0D4005FA F0 03 F9 EB BL memcmp ; does the blockmap begin with correct magic? 0D4005FE 28 00 CMP R0, #0 0D400600 D1 B0 BNE invalid_blockmap 0D400602 48 53 LDR R0, =(nand_page_buf+0x4C) ; haystack 0D400604 49 54 LDR R1, =(nand_page_buf+0x98) ; needle 0D400606 22 4C MOVS R2, #0x4C ; len 0D400608 F0 03 F9 E4 BL memcmp ; are both copies of the blockmap identical? 0D40060C 28 00 CMP R0, #0 0D40060E D1 A9 BNE invalid_blockmap 0D400610 49 4F LDR R1, =(nand_page_buf+0x4C) 0D400612 E7 9C B blockmap_found 0D400614 ; --------------------------------------------------------------------------- 0D400614 blockmap_found2 ; CODE XREF: boot1_main+5Ej 0D400614 4A 4D LDR R2, =nand_flash_command 0D400616 loc_D400616 ; CODE XREF: boot1_main+186j 0D400616 68 13 LDR R3, [R2] 0D400618 2B 00 CMP R3, #0 0D40061A DB FC BLT loc_D400616 0D40061C 4A 4F LDR R2, =aes_io 0D40061E check_AES_status ; CODE XREF: boot1_main+18Ej 0D40061E 68 13 LDR R3, [R2] 0D400620 2B 00 CMP R3, #0 0D400622 DB FC BLT check_AES_status 0D400624 4A 4E LDR R2, =sha_io 0D400626 check_SHA_status ; CODE XREF: boot1_main+196j 0D400626 68 13 LDR R3, [R2] 0D400628 2B 00 CMP R3, #0 0D40062A DB FC BLT check_SHA_status 0D40062C 20 01 MOVS R0, #1 0D40062E F0 01 F8 89 BL call_ahbMemFlush 0D400632 20 03 MOVS R0, #3 0D400634 F0 01 F8 86 BL call_ahbMemFlush 0D400638 20 04 MOVS R0, #4 0D40063A F0 01 F8 83 BL call_ahbMemFlush 0D40063E 20 05 MOVS R0, #5 0D400640 F0 01 F8 80 BL call_ahbMemFlush 0D400644 20 00 MOVS R0, #0 0D400646 F0 01 F8 DB BL call_ahbMemFlush2 0D40064A 20 03 MOVS R0, #3 0D40064C F0 01 F8 D8 BL call_ahbMemFlush2 0D400650 20 04 MOVS R0, #4 0D400652 F0 01 F8 D5 BL call_ahbMemFlush2 0D400656 20 05 MOVS R0, #5 0D400658 F0 01 F8 D2 BL call_ahbMemFlush2 0D40065C E7 4A B loc_D4004F4 0D40065E ; --------------------------------------------------------------------------- 0D40065E loc_D40065E ; CODE XREF: boot1_main+1DAj 0D40065E A8 96 ADD R0, SP, #0x2C8+bad_block_map 0D400660 18 23 ADDS R3, R4, R0 0D400662 7B 1B LDRB R3, [R3,#0xC] 0D400664 2B 01 CMP R3, #1 0D400666 D1 9D BNE loc_D4005A4 0D400668 loc_D400668 ; CODE XREF: boot1_main+10Cj 0D400668 44 54 ADD R4, R10 0D40066A 1E 62 SUBS R2, R4, #1 0D40066C 2A 06 CMP R2, #6 0D40066E D9 F6 BLS loc_D40065E 0D400670 E7 9A B error_4 0D400672 ; --------------------------------------------------------------------------- 0D400672 loc_D400672 ; CODE XREF: boot1_main+112j 0D400672 2C 00 CMP R4, #0 0D400674 46 A0 MOV R8, R4 0D400676 DB 9A BLT loc_D4005AE 0D400678 46 45 MOV R5, R8 0D40067A 01 AD LSLS R5, R5, #6 0D40067C 21 A0 MOVS R1, #0xA0 0D40067E 22 A2 02 92 MOVLS R2, nand_spare_buf ; ecc_addr 0D400682 1C 28 ADDS R0, R5, #0 ; pageno 0D400684 02 89 LSLS R1, R1, #0xA 0D400686 F7 FF FE 5B BL read_nand_page 0D40068A 4A 30 LDR R2, =nand_flash_command 0D40068C 46 AA MOV R10, R5 0D40068E wait_for_nand2 ; CODE XREF: boot1_main+1FEj 0D40068E 68 13 LDR R3, [R2] 0D400690 2B 00 CMP R3, #0 0D400692 DB FC BLT wait_for_nand2 0D400694 20 03 MOVS R0, #3 0D400696 F0 01 F8 55 BL call_ahbMemFlush 0D40069A 20 00 MOVS R0, #0 0D40069C F0 01 F8 B0 BL call_ahbMemFlush2 0D4006A0 20 A0 MOVS R0, #0xA0 0D4006A2 21 A2 MOVS R1, #0xA2 0D4006A4 22 80 MOVS R2, #0x80 0D4006A6 02 80 LSLS R0, R0, #0xA 0D4006A8 02 89 LSLS R1, R1, #0xA 0D4006AA 01 12 LSLS R2, R2, #4 0D4006AC F7 FF FD D2 BL calc_ecc 0D4006B0 28 00 CMP R0, #0 0D4006B2 D1 57 BNE loc_D400764 0D4006B4 21 A0 MOVS R1, #0xA0 0D4006B6 A8 8E ADD R0, SP, #0x2C8+var_90 0D4006B8 02 89 LSLS R1, R1, #0xA 0D4006BA 22 20 MOVS R2, #0x20 0D4006BC F0 03 F9 FE BL memcpy 0D4006C0 9B 8E LDR R3, [SP,#0x2C8+var_90] 0D4006C2 2B 20 CMP R3, #0x20 0D4006C4 D1 07 BNE error_5 0D4006C6 23 80 MOVS R3, #0x80 0D4006C8 9A 8F LDR R2, [SP,#0x2C8+var_8C] 0D4006CA 02 9B LSLS R3, R3, #0xA 0D4006CC 42 9A CMP R2, R3 0D4006CE D8 02 BHI error_5 0D4006D0 20 3F MOVS R0, #0x3F 0D4006D2 42 02 TST R2, R0 0D4006D4 D0 49 BEQ loc_D40076A 0D4006D6 error_5 ; CODE XREF: boot1_main+230j 0D4006D6 ; boot1_main+23Aj 0D4006D6 24 05 MOVS R4, #5 0D4006D8 return_error ; CODE XREF: boot1_main+43Ej 0D4006D8 ; boot1_main+576j 0D4006D8 ; boot1_main+71Ej ... 0D4006D8 42 64 NEGS R4, R4 0D4006DA E7 69 B check_for_error 0D4006DC ; --------------------------------------------------------------------------- 0D4006DC loc_D4006DC ; CODE XREF: boot1_main+FAj 0D4006DC 1E 53 SUBS R3, R2, #1 0D4006DE 2B 06 CMP R3, #6 0D4006E0 D8 27 BHI dec_r2 0D4006E2 49 1A LDR R1, =nand_flash_command 0D4006E4 46 88 MOV R8, R1 0D4006E6 loc_D4006E6 ; CODE XREF: boot1_main+290j 0D4006E6 01 A6 LSLS R6, R4, #6 0D4006E8 25 00 MOVS R5, #0 0D4006EA loc_D4006EA ; CODE XREF: boot1_main+284j 0D4006EA 21 A0 MOVS R1, #0xA0 0D4006EC 22 A2 MOVS R2, #0xA2 0D4006EE 19 70 ADDS R0, R6, R5 ; pageno 0D4006F0 02 89 LSLS R1, R1, #0xA 0D4006F2 02 92 LSLS R2, R2, #0xA 0D4006F4 F7 FF FE 24 BL read_nand_page 0D4006F8 loc_D4006F8 ; CODE XREF: boot1_main+26Aj 0D4006F8 46 42 MOV R2, R8 0D4006FA 68 13 LDR R3, [R2] 0D4006FC 2B 00 CMP R3, #0 0D4006FE DB FB BLT loc_D4006F8 0D400700 20 03 MOVS R0, #3 0D400702 F0 01 F8 1F BL call_ahbMemFlush 0D400706 20 00 MOVS R0, #0 0D400708 F0 01 F8 7A BL call_ahbMemFlush2 0D40070C 78 3B LDRB R3, [R7] 0D40070E 2B FF CMP R3, #0xFF 0D400710 D0 00 BEQ loc_D400714 0D400712 E1 7D B loc_D400A10 0D400714 ; --------------------------------------------------------------------------- 0D400714 loc_D400714 ; CODE XREF: boot1_main+27Cj 0D400714 35 01 ADDS R5, #1 0D400716 2D 01 CMP R5, #1 0D400718 D9 E7 BLS loc_D4006EA 0D40071A loc_D40071A ; CODE XREF: boot1_main+57Ej 0D40071A 2D 02 CMP R5, #2 0D40071C D1 00 BNE loc_D400720 0D40071E E1 75 B loc_D400A0C 0D400720 ; --------------------------------------------------------------------------- 0D400720 loc_D400720 ; CODE XREF: boot1_main+288j 0D400720 1E 62 SUBS R2, R4, #1 0D400722 2A 06 CMP R2, #6 0D400724 D9 DF BLS loc_D4006E6 0D400726 E7 3F B error_4 0D400728 ; --------------------------------------------------------------------------- 0D400728 loc_D400728 ; CODE XREF: boot1_main+ECj 0D400728 25 01 MOVS R5, #1 0D40072A 46 AA MOV R10, R5 0D40072C E7 2C B loc_D400588 0D40072E ; --------------------------------------------------------------------------- 0D40072E set_r2_to_1 ; CODE XREF: boot1_main+DCj 0D40072E 22 01 MOVS R2, #1 0D400730 E7 20 B loc_D400574 0D400732 ; --------------------------------------------------------------------------- 0D400732 dec_r2 ; CODE XREF: boot1_main+102j 0D400732 ; boot1_main+24Cj 0D400732 3A 01 SUBS R2, #1 0D400734 E7 36 B loc_D4005A4 0D400734 ; --------------------------------------------------------------------------- 0D400736 00 00 ALIGN 4 0D400738 FF FF FD 5C dword_D400738 DCD -0x2A4 ; DATA XREF: boot1_main+Cr 0D40073C 0D 80 00 60 off_D40073C DCD mem_mirror_config_reg ; DATA XREF: boot1_main:loc_D4004C0r 0D400740 0D 8B 00 10 dword_D400740 DCD 0xD8B0010 ; DATA XREF: boot1_main+30r 0D400744 00 00 01 E7 off_D400744 DCD 0x1E7 ; DATA XREF: boot1_main+42r 0D400748 0D 40 3F C0 off_D400748 DCD boot2_magic ; DATA XREF: boot1_main+64r 0D40074C 0D 01 00 00 off_D40074C DCD nand_flash_command ; DATA XREF: boot1_main+6Er 0D40074C ; boot1_main:blockmap_found2r 0D40074C ; boot1_main+1F6r ... 0D400750 ; void *needle 0D400750 00 02 80 4C needle DCD nand_page_buf+0x4C ; DATA XREF: boot1_main+AAr 0D400750 ; boot1_main:no_boot2_magicr 0D400750 ; boot1_main+16Er ... 0D400754 00 0F 42 40 dword_D400754 DCD 1000000 ; DATA XREF: boot1_main+13Cr 0D400754 ; boot1_main+148r 0D400758 ; void *off_D400758 0D400758 00 02 80 98 off_D400758 DCD nand_page_buf+0x98 ; DATA XREF: boot1_main+154r 0D400758 ; boot1_main+170r 0D40075C 0D 02 00 00 off_D40075C DCD aes_io ; DATA XREF: boot1_main+188r 0D400760 0D 03 00 00 off_D400760 DCD sha_io ; DATA XREF: boot1_main+190r 0D400764 ; --------------------------------------------------------------------------- 0D400764 loc_D400764 ; CODE XREF: boot1_main+21Ej 0D400764 1E 04 SUBS R4, R0, #0 0D400766 DA 00 BGE loc_D40076A 0D400768 E7 25 B error 0D40076A ; --------------------------------------------------------------------------- 0D40076A loc_D40076A ; CODE XREF: boot1_main+240j 0D40076A ; boot1_main+2D2j 0D40076A 9B 8F LDR R3, [SP,#0x2C8+var_8C] 0D40076C 4E A9 LDR R6, =nand_flash_command 0D40076E 0A DD LSRS R5, R3, #0xB 0D400770 24 00 MOVS R4, #0 0D400772 27 01 MOVS R7, #1 0D400774 loc_D400774 ; CODE XREF: boot1_main+2E4j 0D400774 ; boot1_main+304j 0D400774 68 33 LDR R3, [R6] 0D400776 2B 00 CMP R3, #0 0D400778 DB FC BLT loc_D400774 0D40077A 20 03 MOVS R0, #3 0D40077C F0 00 FF E2 BL call_ahbMemFlush 0D400780 20 00 MOVS R0, #0 0D400782 F0 01 F8 3D BL call_ahbMemFlush2 0D400786 42 AC CMP R4, R5 0D400788 D8 00 BHI loc_D40078C 0D40078A E0 A3 B loc_D4008D4 0D40078C ; --------------------------------------------------------------------------- 0D40078C loc_D40078C ; CODE XREF: boot1_main+2F4j 0D40078C ; boot1_main+45Cj 0D40078C 2C 00 CMP R4, #0 0D40078E D0 00 BEQ ecc_ok 0D400790 E0 AF B loc_D4008F2 0D400792 ; --------------------------------------------------------------------------- 0D400792 ecc_ok ; CODE XREF: boot1_main+2FAj 0D400792 ; boot1_main+47Ej 0D400792 34 01 ADDS R4, #1 0D400794 1C 6B ADDS R3, R5, #1 0D400796 42 A3 CMP R3, R4 0D400798 D2 EC BCS loc_D400774 0D40079A 21 00 MOVS R1, #0 0D40079C 22 40 MOVS R2, #0x40 0D40079E A8 53 ADD R0, SP, #0x2C8+var_17C 0D4007A0 9E 8E LDR R6, [SP,#0x2C8+var_90] 0D4007A2 25 A0 MOVS R5, #0xA0 0D4007A4 F0 03 F9 D0 BL memcmp_0 0D4007A8 49 9B LDR R1, =a_Root 0D4007AA 22 40 MOVS R2, #0x40 0D4007AC A8 53 ADD R0, SP, #0x2C8+var_17C 0D4007AE F0 03 F9 2D BL memmove_maybe 0D4007B2 02 AD LSLS R5, R5, #0xA 0D4007B4 23 01 MOVS R3, #1 0D4007B6 19 74 ADDS R4, R6, R5 0D4007B8 93 00 STR R3, [SP,#0x2C8+var_2C8] 0D4007BA 4D 98 LDR R5, =root_exponent 0D4007BC 23 80 00 DB MOVLS R3, 0x400 0D4007C0 93 01 STR R3, [SP,#0x2C8+var_2C4] 0D4007C2 1C 20 ADDS R0, R4, #0 0D4007C4 A9 53 ADD R1, SP, #0x2C8+var_17C 0D4007C6 4A 96 LDR R2, =root_key 0D4007C8 1C 2B ADDS R3, R5, #0 0D4007CA F7 FF FD EB BL verify_certificate 0D4007CE 28 00 CMP R0, #0 0D4007D0 D0 00 BEQ loc_D4007D4 0D4007D2 E0 9F B ecc_fail 0D4007D4 ; --------------------------------------------------------------------------- 0D4007D4 loc_D4007D4 ; CODE XREF: boot1_main+33Cj 0D4007D4 48 93 LDR R0, =(nand_page_buf+0x284) 0D4007D6 18 35 ADDS R5, R6, R0 0D4007D8 1C 28 ADDS R0, R5, #0 ; haystack 0D4007DA 49 93 LDR R1, =a_CA ; needle 0D4007DC 22 02 MOVS R2, #2 ; len 0D4007DE F0 03 F8 F9 BL memcmp 0D4007E2 28 00 CMP R0, #0 0D4007E4 D1 74 BNE error_9 0D4007E6 4A 91 LDR R2, =dash 0D4007E8 9F 8E LDR R7, [SP,#0x2C8+var_90] 0D4007EA 21 A1 02 89 MOVLS R1, (nand_page_buf+0x400) 0D4007EE 18 7C ADDS R4, R7, R1 0D4007F0 46 92 MOV R10, R2 0D4007F2 1C 11 ADDS R1, R2, #0 0D4007F4 A8 53 ADD R0, SP, #0x2C8+var_17C 0D4007F6 22 40 MOVS R2, #0x40 0D4007F8 F0 03 F9 EE BL memcpy_maybe 0D4007FC 1C 29 ADDS R1, R5, #0 0D4007FE 22 40 MOVS R2, #0x40 0D400800 A8 53 ADD R0, SP, #0x2C8+var_17C 0D400802 F0 03 F9 E9 BL memcpy_maybe 0D400806 4D 8A LDR R5, =(nand_page_buf+0x2C8) 0D400808 48 8A LDR R0, =(nand_page_buf+0x3C8) 0D40080A 22 C0 MOVS R2, #0xC0 0D40080C 19 73 ADDS R3, R6, R5 0D40080E 00 92 LSLS R2, R2, #2 0D400810 18 35 ADDS R5, R6, R0 0D400812 21 02 MOVS R1, #2 0D400814 93 07 STR R3, [SP,#0x2C8+var_2AC] 0D400816 91 00 STR R1, [SP,#0x2C8+var_2C8] 0D400818 92 15 STR R2, [SP,#0x2C8+var_274] 0D40081A 92 01 STR R2, [SP,#0x2C8+var_2C4] 0D40081C 1C 20 ADDS R0, R4, #0 0D40081E 1C 1A ADDS R2, R3, #0 0D400820 A9 53 ADD R1, SP, #0x2C8+var_17C 0D400822 1C 2B ADDS R3, R5, #0 0D400824 95 06 STR R5, [SP,#0x2C8+var_2B0] 0D400826 F7 FF FD BD BL verify_certificate 0D40082A 28 00 CMP R0, #0 0D40082C D1 72 BNE ecc_fail 0D40082E 4B 82 LDR R3, =(nand_page_buf+0x584) 0D400830 18 FC ADDS R4, R7, R3 0D400832 1C 20 ADDS R0, R4, #0 ; haystack 0D400834 49 81 LDR R1, =a_CP ; needle 0D400836 22 02 MOVS R2, #2 ; len 0D400838 F0 03 F8 CC BL memcmp 0D40083C 28 00 CMP R0, #0 0D40083E D1 47 BNE error_9 0D400840 A9 53 ADD R1, SP, #0x2C8+var_17C 0D400842 22 40 MOVS R2, #0x40 0D400844 A8 43 ADD R0, SP, #0x2C8+var_1BC 0D400846 F0 03 F9 39 BL memcpy 0D40084A 25 A0 MOVS R5, #0xA0 0D40084C 9B 8E LDR R3, [SP,#0x2C8+var_90] 0D40084E 9A 90 LDR R2, [SP,#0x2C8+var_88] 0D400850 02 AD LSLS R5, R5, #0xA 0D400852 19 5B ADDS R3, R3, R5 0D400854 18 9B ADDS R3, R3, R2 0D400856 9A 91 LDR R2, [SP,#0x2C8+var_84] 0D400858 46 51 MOV R1, R10 0D40085A 18 9E ADDS R6, R3, R2 0D40085C A8 53 ADD R0, SP, #0x2C8+var_17C 0D40085E 22 40 MOVS R2, #0x40 0D400860 F0 03 F9 BA BL memcpy_maybe 0D400864 1C 21 ADDS R1, R4, #0 0D400866 22 40 MOVS R2, #0x40 0D400868 A8 53 ADD R0, SP, #0x2C8+var_17C 0D40086A F0 03 F9 B5 BL memcpy_maybe 0D40086E 23 03 MOVS R3, #3 0D400870 93 00 STR R3, [SP,#0x2C8+var_2C8] 0D400872 9B 92 LDR R3, [SP,#0x2C8+var_80] 0D400874 4C 72 LDR R4, =(nand_page_buf+0x6C8) 0D400876 93 01 STR R3, [SP,#0x2C8+var_2C4] 0D400878 4B 72 LDR R3, =(nand_page_buf+0x5C8) 0D40087A 1C 30 ADDS R0, R6, #0 0D40087C 18 FA ADDS R2, R7, R3 0D40087E A9 53 ADD R1, SP, #0x2C8+var_17C 0D400880 19 3B ADDS R3, R7, R4 0D400882 F7 FF FD 8F BL verify_certificate 0D400886 28 00 CMP R0, #0 0D400888 D1 44 BNE ecc_fail 0D40088A 9D 8E LDR R5, [SP,#0x2C8+var_90] 0D40088C 48 6E LDR R0, =(nand_page_buf+0x700) 0D40088E 21 00 MOVS R1, #0 0D400890 18 2C ADDS R4, R5, R0 0D400892 22 40 MOVS R2, #0x40 0D400894 A8 53 ADD R0, SP, #0x2C8+var_17C 0D400896 F0 03 F9 57 BL memcmp_0 0D40089A A9 43 ADD R1, SP, #0x2C8+var_1BC 0D40089C 22 40 MOVS R2, #0x40 0D40089E A8 53 ADD R0, SP, #0x2C8+var_17C 0D4008A0 F0 03 F8 B4 BL memmove_maybe 0D4008A4 9A 15 LDR R2, [SP,#0x2C8+var_274] 0D4008A6 21 02 MOVS R1, #2 0D4008A8 91 00 STR R1, [SP,#0x2C8+var_2C8] 0D4008AA 92 01 STR R2, [SP,#0x2C8+var_2C4] 0D4008AC 1C 20 ADDS R0, R4, #0 0D4008AE A9 53 ADD R1, SP, #0x2C8+var_17C 0D4008B0 9A 07 LDR R2, [SP,#0x2C8+var_2AC] 0D4008B2 9B 06 LDR R3, [SP,#0x2C8+var_2B0] 0D4008B4 F7 FF FD 76 BL verify_certificate 0D4008B8 28 00 CMP R0, #0 0D4008BA D1 2B BNE ecc_fail 0D4008BC 4B 63 LDR R3, =dword_28884 0D4008BE 18 EC ADDS R4, R5, R3 0D4008C0 1C 20 ADDS R0, R4, #0 ; haystack 0D4008C2 49 63 LDR R1, =a_XS ; needle 0D4008C4 22 02 MOVS R2, #2 ; len 0D4008C6 F0 03 F8 85 BL memcmp 0D4008CA 28 00 CMP R0, #0 0D4008CC D1 00 BNE error_9 0D4008CE E1 B8 B found_XS 0D4008D0 ; --------------------------------------------------------------------------- 0D4008D0 error_9 ; CODE XREF: boot1_main+350j 0D4008D0 ; boot1_main+3AAj 0D4008D0 ; boot1_main+438j 0D4008D0 24 09 MOVS R4, #9 0D4008D2 E7 01 B return_error 0D4008D4 ; --------------------------------------------------------------------------- 0D4008D4 loc_D4008D4 ; CODE XREF: boot1_main+2F6j 0D4008D4 46 53 MOV R3, R10 0D4008D6 18 E0 ADDS R0, R4, R3 ; pageno 0D4008D8 23 A0 MOVS R3, #0xA0 0D4008DA 02 E1 LSLS R1, R4, #0xB 0D4008DC 1C 22 ADDS R2, R4, #0 0D4008DE 02 9B LSLS R3, R3, #0xA 0D4008E0 40 3A ANDS R2, R7 0D4008E2 18 C9 ADDS R1, R1, R3 ; data_addr 0D4008E4 23 90 02 DB MOVLS R3, 0x48000 0D4008E8 01 D2 LSLS R2, R2, #7 0D4008EA 18 D2 ADDS R2, R2, R3 ; ecc_addr 0D4008EC F7 FF FD 28 BL read_nand_page 0D4008F0 E7 4C B loc_D40078C 0D4008F2 ; --------------------------------------------------------------------------- 0D4008F2 loc_D4008F2 ; CODE XREF: boot1_main+2FCj 0D4008F2 1E 61 SUBS R1, R4, #1 0D4008F4 22 A0 MOVS R2, #0xA0 0D4008F6 02 C8 LSLS R0, R1, #0xB 0D4008F8 02 92 LSLS R2, R2, #0xA 0D4008FA 40 39 ANDS R1, R7 0D4008FC 23 90 MOVS R3, #0x90 0D4008FE 01 C9 LSLS R1, R1, #7 0D400900 18 80 ADDS R0, R0, R2 0D400902 02 DB LSLS R3, R3, #0xB 0D400904 22 80 MOVS R2, #0x80 0D400906 18 C9 ADDS R1, R1, R3 0D400908 01 12 LSLS R2, R2, #4 0D40090A F7 FF FC A3 BL calc_ecc 0D40090E 28 00 CMP R0, #0 0D400910 D1 00 BNE ecc_fail 0D400912 E7 3E B ecc_ok 0D400914 ; --------------------------------------------------------------------------- 0D400914 ecc_fail ; CODE XREF: boot1_main+33Ej 0D400914 ; boot1_main+398j 0D400914 ; boot1_main+3F4j ... 0D400914 1E 04 SUBS R4, R0, #0 0D400916 DA 00 BGE loc_D40091A 0D400918 E6 4D B error 0D40091A ; --------------------------------------------------------------------------- 0D40091A loc_D40091A ; CODE XREF: boot1_main+482j 0D40091A ; boot1_main+8CAj 0D40091A 9B 8F LDR R3, [SP,#0x2C8+var_8C] 0D40091C 4C 4D LDR R4, =0x7FF 0D40091E 20 A0 MOVS R0, #0xA0 0D400920 40 23 ANDS R3, R4 0D400922 02 80 LSLS R0, R0, #0xA 0D400924 18 18 ADDS R0, R3, R0 0D400926 90 08 STR R0, [SP,#0x2C8+var_2A8] 0D400928 99 03 LDR R1, [SP,#0x2C8+var_2BC] 0D40092A A8 8A ADD R0, SP, #0x2C8+var_A0 0D40092C 9A 08 LDR R2, [SP,#0x2C8+var_2A8] 0D40092E F7 FF FB B3 BL aes_init 0D400932 9A 17 LDR R2, [SP,#0x2C8+var_26C] 0D400934 23 00 MOVS R3, #0 0D400936 99 8F LDR R1, [SP,#0x2C8+var_8C] 0D400938 92 14 STR R2, [SP,#0x2C8+var_278] 0D40093A 93 13 STR R3, [SP,#0x2C8+var_27C] 0D40093C 32 0F ADDS R2, #0xF 0D40093E 23 0F MOVS R3, #0xF 0D400940 43 9A BICS R2, R3 0D400942 18 53 ADDS R3, R2, R1 0D400944 19 1B ADDS R3, R3, R4 0D400946 0A DB LSRS R3, R3, #0xB 0D400948 92 09 STR R2, [SP,#0x2C8+var_2A4] 0D40094A 1C 1A ADDS R2, R3, #0 0D40094C 32 3F ADDS R2, #0x3F 0D40094E 09 92 LSRS R2, R2, #6 0D400950 20 80 MOVS R0, #0x80 0D400952 92 12 STR R2, [SP,#0x2C8+var_280] 0D400954 0A CD LSRS R5, R1, #0xB 0D400956 22 3F MOVS R2, #0x3F 0D400958 46 46 MOV R6, R8 0D40095A 01 00 LSLS R0, R0, #4 0D40095C 95 0E STR R5, [SP,#0x2C8+var_290] 0D40095E 40 1A ANDS R2, R3 0D400960 92 0C STR R2, [SP,#0x2C8+var_298] 0D400962 D1 01 BNE loc_D400968 0D400964 23 40 MOVS R3, #0x40 0D400966 93 0C STR R3, [SP,#0x2C8+var_298] 0D400968 loc_D400968 ; CODE XREF: boot1_main+4CEj 0D400968 9A 09 LDR R2, [SP,#0x2C8+var_2A4] 0D40096A 40 21 ANDS R1, R4 0D40096C 1A 45 SUBS R5, R0, R1 0D40096E 18 53 ADDS R3, R2, R1 0D400970 95 0B STR R5, [SP,#0x2C8+var_29C] 0D400972 1C 1D ADDS R5, R3, #0 0D400974 91 10 STR R1, [SP,#0x2C8+var_288] 0D400976 40 25 ANDS R5, R4 0D400978 95 0A STR R5, [SP,#0x2C8+var_2A0] 0D40097A D1 00 BNE loc_D40097E 0D40097C 90 0A STR R0, [SP,#0x2C8+var_2A0] 0D40097E loc_D40097E ; CODE XREF: boot1_main+4E6j 0D40097E 98 09 LDR R0, [SP,#0x2C8+var_2A4] 0D400980 99 10 LDR R1, [SP,#0x2C8+var_288] 0D400982 4A 35 LDR R2, =dword_2887F 0D400984 18 43 ADDS R3, R0, R1 0D400986 18 9A ADDS R2, R3, R2 0D400988 23 7F MOVS R3, #0x7F 0D40098A 43 9A BICS R2, R3 0D40098C 33 81 ADDS R3, #0x81 0D40098E 92 0F STR R2, [SP,#0x2C8+var_28C] 0D400990 18 D2 ADDS R2, R2, R3 0D400992 4B 32 LDR R3, =0x7FFFF 0D400994 42 9A CMP R2, R3 0D400996 D8 37 BHI error_6 0D400998 46 5C MOV R4, R11 0D40099A 2C 01 CMP R4, #1 0D40099C D0 31 BEQ loc_D400A02 0D40099E 20 01 MOVS R0, #1 0D4009A0 42 40 NEGS R0, R0 0D4009A2 90 11 STR R0, [SP,#0x2C8+var_284] 0D4009A4 loc_D4009A4 ; CODE XREF: boot1_main+572j 0D4009A4 9A 12 LDR R2, [SP,#0x2C8+var_280] 0D4009A6 21 00 MOVS R1, #0 0D4009A8 46 88 MOV R8, R1 0D4009AA 2A 00 CMP R2, #0 0D4009AC D8 00 BHI loc_D4009B0 0D4009AE E0 A7 B loc_D400B00 0D4009B0 ; --------------------------------------------------------------------------- 0D4009B0 loc_D4009B0 ; CODE XREF: boot1_main+518j 0D4009B0 ; boot1_main+66Aj 0D4009B0 9B 98 LDR R3, [SP,#0x2C8+bad_block_map+8] 0D4009B2 2B 01 CMP R3, #1 0D4009B4 D9 54 BLS loc_D400A60 0D4009B6 1E 72 SUBS R2, R6, #1 0D4009B8 2A 06 CMP R2, #6 0D4009BA D8 25 BHI error_6 0D4009BC AC 96 ADD R4, SP, #0x2C8+bad_block_map 0D4009BE 19 33 ADDS R3, R6, R4 0D4009C0 loc_D4009C0 ; CODE XREF: boot1_main+540j 0D4009C0 7B 1B LDRB R3, [R3,#0xC] 0D4009C2 2B 01 CMP R3, #1 0D4009C4 D1 4D BNE loc_D400A62 0D4009C6 9D 11 LDR R5, [SP,#0x2C8+var_284] 0D4009C8 19 76 ADDS R6, R6, R5 0D4009CA 1E 72 SUBS R2, R6, #1 0D4009CC 2A 06 CMP R2, #6 0D4009CE D8 1B BHI error_6 0D4009D0 A8 96 ADD R0, SP, #0x2C8+bad_block_map 0D4009D2 18 33 ADDS R3, R6, R0 0D4009D4 E7 F4 B loc_D4009C0 0D4009D6 ; --------------------------------------------------------------------------- 0D4009D6 ok ; CODE XREF: boot1_main+120j 0D4009D6 46 58 MOV R0, R11 0D4009D8 28 02 CMP R0, #2 0D4009DA D9 00 BLS chainload_boot2 0D4009DC E5 F1 B blockmap_search_failed 0D4009DE ; --------------------------------------------------------------------------- 0D4009DE chainload_boot2 ; CODE XREF: boot1_main+546j 0D4009DE 23 01 MOVS R3, #1 0D4009E0 60 E3 STR R3, [R4,#0xC] 0D4009E2 20 22 MOVS R0, #0x22 0D4009E4 F7 FF FB 4A BL boot1_debug_output ; output 22h 0D4009E8 68 20 LDR R0, [R4] 0D4009EA 23 A9 00 9B MOVLS R3, 0x2A4 0D4009EE 19 00 ADDS R0, R0, R4 0D4009F0 44 9D ADD SP, R3 0D4009F2 BC 78 POP {R3-R6} 0D4009F4 46 98 MOV R8, R3 0D4009F6 46 A1 MOV R9, R4 0D4009F8 46 AA MOV R10, R5 0D4009FA 46 B3 MOV R11, R6 0D4009FC BC F0 POP {R4-R7} 0D4009FE BC 02 POP {R1} 0D400A00 47 08 BX R1 0D400A02 ; --------------------------------------------------------------------------- 0D400A02 loc_D400A02 ; CODE XREF: boot1_main+508j 0D400A02 25 01 MOVS R5, #1 0D400A04 95 11 STR R5, [SP,#0x2C8+var_284] 0D400A06 E7 CD B loc_D4009A4 0D400A08 ; --------------------------------------------------------------------------- 0D400A08 error_6 ; CODE XREF: boot1_main+502j 0D400A08 ; boot1_main+526j 0D400A08 ; boot1_main+53Aj ... 0D400A08 24 06 MOVS R4, #6 0D400A0A E6 65 B return_error 0D400A0C ; --------------------------------------------------------------------------- 0D400A0C loc_D400A0C ; CODE XREF: boot1_main+28Aj 0D400A0C 1E 62 SUBS R2, R4, #1 0D400A0E E5 C9 B loc_D4005A4 0D400A10 ; --------------------------------------------------------------------------- 0D400A10 loc_D400A10 ; CODE XREF: boot1_main+27Ej 0D400A10 44 54 ADD R4, R10 0D400A12 E6 82 B loc_D40071A 0D400A12 ; --------------------------------------------------------------------------- 0D400A14 0D 01 00 00 off_D400A14 DCD nand_flash_command ; DATA XREF: boot1_main+2D8r 0D400A18 0D 40 40 94 off_D400A18 DCD a_Root ; DATA XREF: boot1_main+314r 0D400A18 ; "Root" 0D400A1C 0D 40 41 10 off_D400A1C DCD root_exponent ; DATA XREF: boot1_main+326r 0D400A20 0D 40 41 14 off_D400A20 DCD root_key ; DATA XREF: boot1_main+332r 0D400A24 00 02 82 84 off_D400A24 DCD nand_page_buf+0x284 ; DATA XREF: boot1_main:loc_D4007D4r 0D400A28 ; void *off_D400A28 0D400A28 0D 40 40 9C off_D400A28 DCD a_CA ; DATA XREF: boot1_main+346r 0D400A28 ; "CA" 0D400A2C 0D 40 40 A0 off_D400A2C DCD dash ; DATA XREF: boot1_main+352r 0D400A2C ; "-" 0D400A30 00 02 82 C8 off_D400A30 DCD nand_page_buf+0x2C8 ; DATA XREF: boot1_main+372r 0D400A34 00 02 83 C8 off_D400A34 DCD nand_page_buf+0x3C8 ; DATA XREF: boot1_main+374r 0D400A38 00 02 85 84 off_D400A38 DCD nand_page_buf+0x584 ; DATA XREF: boot1_main+39Ar 0D400A3C ; void *off_D400A3C 0D400A3C 0D 40 40 A4 off_D400A3C DCD a_CP ; DATA XREF: boot1_main+3A0r 0D400A3C ; "CP" 0D400A40 00 02 86 C8 off_D400A40 DCD nand_page_buf+0x6C8 ; DATA XREF: boot1_main+3E0r 0D400A44 00 02 85 C8 off_D400A44 DCD nand_page_buf+0x5C8 ; DATA XREF: boot1_main+3E4r 0D400A48 00 02 87 00 off_D400A48 DCD nand_page_buf+0x700 ; DATA XREF: boot1_main+3F8r 0D400A4C 00 02 88 84 off_D400A4C DCD dword_28884 ; DATA XREF: boot1_main+428r 0D400A50 ; void *off_D400A50 0D400A50 0D 40 40 A8 off_D400A50 DCD a_XS ; DATA XREF: boot1_main+42Er 0D400A50 ; "XS" 0D400A54 00 00 07 FF off_D400A54 DCD 0x7FF ; DATA XREF: boot1_main+488r 0D400A58 00 02 88 7F off_D400A58 DCD dword_2887F ; DATA XREF: boot1_main+4EEr 0D400A5C 00 07 FF FF off_D400A5C DCD 0x7FFFF ; DATA XREF: boot1_main+4FEr 0D400A60 ; --------------------------------------------------------------------------- 0D400A60 loc_D400A60 ; CODE XREF: boot1_main+520j 0D400A60 1E 72 SUBS R2, R6, #1 0D400A62 loc_D400A62 ; CODE XREF: boot1_main+530j 0D400A62 2A 06 CMP R2, #6 0D400A64 D8 D0 BHI error_6 0D400A66 46 41 MOV R1, R8 0D400A68 29 00 CMP R1, #0 0D400A6A D0 00 BEQ loc_D400A6E 0D400A6C E1 8F B loc_D400D8E 0D400A6E ; --------------------------------------------------------------------------- 0D400A6E loc_D400A6E ; CODE XREF: boot1_main+5D6j 0D400A6E 9A 0E LDR R2, [SP,#0x2C8+var_290] 0D400A70 46 92 MOV R10, R2 0D400A72 loc_D400A72 ; CODE XREF: boot1_main+8FEj 0D400A72 24 40 MOVS R4, #0x40 0D400A74 46 55 MOV R5, R10 0D400A76 94 0D STR R4, [SP,#0x2C8+var_294] 0D400A78 2D 42 CMP R5, #0x42 0D400A7A D3 00 BCC loc_D400A7E 0D400A7C E1 85 B loc_D400D8A 0D400A7E ; --------------------------------------------------------------------------- 0D400A7E loc_D400A7E ; CODE XREF: boot1_main+5E6j 0D400A7E 46 41 MOV R1, R8 0D400A80 01 B0 LSLS R0, R6, #6 0D400A82 01 89 LSLS R1, R1, #6 0D400A84 90 05 STR R0, [SP,#0x2C8+var_2B4] 0D400A86 91 04 STR R1, [SP,#0x2C8+var_2B8] 0D400A88 loc_D400A88 ; CODE XREF: boot1_main+656j 0D400A88 2D 02 CMP R5, #2 0D400A8A D1 00 BNE loc_D400A8E 0D400A8C E1 75 B loc_D400D7A 0D400A8E ; --------------------------------------------------------------------------- 0D400A8E loc_D400A8E ; CODE XREF: boot1_main+5F6j 0D400A8E ; boot1_main+8EEj 0D400A8E ; boot1_main+8F4j 0D400A8E 9B 05 LDR R3, [SP,#0x2C8+var_2B4] 0D400A90 98 04 LDR R0, [SP,#0x2C8+var_2B8] 0D400A92 99 0E LDR R1, [SP,#0x2C8+var_290] 0D400A94 19 5C ADDS R4, R3, R5 0D400A96 4A BF LDR R2, =nand_flash_command 0D400A98 19 43 ADDS R3, R0, R5 0D400A9A 1A 5F SUBS R7, R3, R1 0D400A9C loc_D400A9C ; CODE XREF: boot1_main+60Cj 0D400A9C 68 13 LDR R3, [R2] 0D400A9E 2B 00 CMP R3, #0 0D400AA0 DB FC BLT loc_D400A9C 0D400AA2 20 03 MOVS R0, #3 0D400AA4 F0 00 FE 4E BL call_ahbMemFlush 0D400AA8 20 00 MOVS R0, #0 0D400AAA F0 00 FE A9 BL call_ahbMemFlush2 0D400AAE 9A 0D LDR R2, [SP,#0x2C8+var_294] 0D400AB0 42 95 CMP R5, R2 0D400AB2 D2 00 BCS loc_D400AB6 0D400AB4 E1 54 B loc_D400D60 0D400AB6 ; --------------------------------------------------------------------------- 0D400AB6 loc_D400AB6 ; CODE XREF: boot1_main+61Ej 0D400AB6 ; boot1_main+8E4j 0D400AB6 2D 01 CMP R5, #1 0D400AB8 D8 32 BHI loc_D400B20 0D400ABA 4A B6 LDR R2, =nand_flash_command 0D400ABC loc_D400ABC ; CODE XREF: boot1_main+62Cj 0D400ABC 68 13 LDR R3, [R2] 0D400ABE 2B 00 CMP R3, #0 0D400AC0 DB FC BLT loc_D400ABC 0D400AC2 20 03 MOVS R0, #3 0D400AC4 F0 00 FE 3E BL call_ahbMemFlush 0D400AC8 20 00 MOVS R0, #0 0D400ACA F0 00 FE 99 BL call_ahbMemFlush2 0D400ACE 23 01 MOVS R3, #1 0D400AD0 40 2B ANDS R3, R5 0D400AD2 98 0F LDR R0, [SP,#0x2C8+var_28C] 0D400AD4 01 DB LSLS R3, R3, #7 0D400AD6 5C 1B LDRB R3, [R3,R0] 0D400AD8 2B FF CMP R3, #0xFF 0D400ADA D0 00 BEQ loc_D400ADE 0D400ADC E1 18 B loc_D400D10 0D400ADE ; --------------------------------------------------------------------------- 0D400ADE loc_D400ADE ; CODE XREF: boot1_main+646j 0D400ADE 2D 00 CMP R5, #0 0D400AE0 D1 1E BNE loc_D400B20 0D400AE2 loc_D400AE2 ; CODE XREF: boot1_main+6BAj 0D400AE2 ; boot1_main+6F0j 0D400AE2 9B 0D LDR R3, [SP,#0x2C8+var_294] 0D400AE4 35 01 ADDS R5, #1 0D400AE6 33 02 ADDS R3, #2 0D400AE8 42 AB CMP R3, R5 0D400AEA D8 CD BHI loc_D400A88 0D400AEC loc_D400AEC ; CODE XREF: boot1_main+880j 0D400AEC ; boot1_main+8F8j 0D400AEC 42 AB CMP R3, R5 0D400AEE D1 01 BNE loc_D400AF4 0D400AF0 22 01 MOVS R2, #1 0D400AF2 44 90 ADD R8, R2 0D400AF4 loc_D400AF4 ; CODE XREF: boot1_main+65Aj 0D400AF4 9B 11 LDR R3, [SP,#0x2C8+var_284] 0D400AF6 9C 12 LDR R4, [SP,#0x2C8+var_280] 0D400AF8 18 F6 ADDS R6, R6, R3 0D400AFA 45 A0 CMP R8, R4 0D400AFC D2 00 BCS loc_D400B00 0D400AFE E7 57 B loc_D4009B0 0D400B00 ; --------------------------------------------------------------------------- 0D400B00 loc_D400B00 ; CODE XREF: boot1_main+51Aj 0D400B00 ; boot1_main+668j 0D400B00 AC 1A ADD R4, SP, #0x2C8+var_260 0D400B02 20 00 MOVS R0, #0 0D400B04 21 00 MOVS R1, #0 0D400B06 loc_D400B06 ; CODE XREF: boot1_main+688j 0D400B06 23 CA 00 5B MOVLS R3, 0x194 0D400B0A 18 5B ADDS R3, R3, R1 0D400B0C 46 6D MOV R5, SP 0D400B0E 59 5A LDR R2, [R3,R5] 0D400B10 59 0B LDR R3, [R1,R4] 0D400B12 42 9A CMP R2, R3 0D400B14 D1 4C BNE error_7 0D400B16 30 01 ADDS R0, #1 0D400B18 31 04 ADDS R1, #4 0D400B1A 28 04 CMP R0, #4 0D400B1C D9 F3 BLS loc_D400B06 0D400B1E E0 32 B loc_D400B86 0D400B20 ; --------------------------------------------------------------------------- 0D400B20 loc_D400B20 ; CODE XREF: boot1_main+624j 0D400B20 ; boot1_main+64Cj 0D400B20 4A 9D LDR R2, =aes_io 0D400B22 loc_D400B22 ; CODE XREF: boot1_main+692j 0D400B22 68 13 LDR R3, [R2] 0D400B24 2B 00 CMP R3, #0 0D400B26 DB FC BLT loc_D400B22 0D400B28 20 04 MOVS R0, #4 0D400B2A F0 00 FE 0B BL call_ahbMemFlush 0D400B2E 20 00 MOVS R0, #0 0D400B30 F0 00 FE 66 BL call_ahbMemFlush2 0D400B34 45 55 CMP R5, R10 0D400B36 D9 03 BLS loc_D400B40 0D400B38 9B 0D LDR R3, [SP,#0x2C8+var_294] 0D400B3A 33 01 ADDS R3, #1 0D400B3C 42 AB CMP R3, R5 0D400B3E D8 39 BHI loc_D400BB4 0D400B40 loc_D400B40 ; CODE XREF: boot1_main+6A2j 0D400B40 46 51 MOV R1, R10 0D400B42 31 01 ADDS R1, #1 0D400B44 loc_D400B44 ; CODE XREF: boot1_main+784j 0D400B44 4A 95 LDR R2, =sha_io 0D400B46 loc_D400B46 ; CODE XREF: boot1_main+6B6j 0D400B46 68 13 LDR R3, [R2] 0D400B48 2B 00 CMP R3, #0 0D400B4A DB FC BLT loc_D400B46 0D400B4C 42 A9 CMP R1, R5 0D400B4E D2 C8 BCS loc_D400AE2 0D400B50 46 42 MOV R2, R8 0D400B52 2A 00 CMP R2, #0 0D400B54 D1 03 BNE loc_D400B5E 0D400B56 9B 0E LDR R3, [SP,#0x2C8+var_290] 0D400B58 33 02 ADDS R3, #2 0D400B5A 42 AB CMP R3, R5 0D400B5C D0 5D BEQ loc_D400C1A 0D400B5E loc_D400B5E ; CODE XREF: boot1_main+6C0j 0D400B5E 9B 12 LDR R3, [SP,#0x2C8+var_280] 0D400B60 3B 01 SUBS R3, #1 0D400B62 45 43 CMP R3, R8 0D400B64 D0 15 BEQ loc_D400B92 0D400B66 loc_D400B66 ; CODE XREF: boot1_main+704j 0D400B66 21 9C 02 89 MOVLS R1, 0x27000 0D400B6A 02 FB LSLS R3, R7, #0xB 0D400B6C 24 80 MOVS R4, #0x80 0D400B6E 18 5A ADDS R2, R3, R1 0D400B70 01 24 LSLS R4, R4, #4 0D400B72 21 02 MOVS R1, #2 0D400B74 loc_D400B74 ; CODE XREF: boot1_main+71Aj 0D400B74 ; boot1_main+792j 0D400B74 AB 1A ADD R3, SP, #0x2C8+var_260 0D400B76 93 00 STR R3, [SP,#0x2C8+var_2C8] 0D400B78 A8 16 ADD R0, SP, #0x2C8+var_270 0D400B7A 1C 23 ADDS R3, R4, #0 0D400B7C F7 FF FA AE BL sha1 0D400B80 28 00 CMP R0, #0 0D400B82 90 13 STR R0, [SP,#0x2C8+var_27C] 0D400B84 DA AD BGE loc_D400AE2 0D400B86 loc_D400B86 ; CODE XREF: boot1_main+68Aj 0D400B86 ; boot1_main+740j 0D400B86 9C 13 LDR R4, [SP,#0x2C8+var_27C] 0D400B88 2C 00 CMP R4, #0 0D400B8A DA 00 BGE loc_D400B8E 0D400B8C E5 13 B error 0D400B8E ; --------------------------------------------------------------------------- 0D400B8E loc_D400B8E ; CODE XREF: boot1_main+6F6j 0D400B8E 9C 08 LDR R4, [SP,#0x2C8+var_2A8] 0D400B90 E5 0E B check_for_error 0D400B92 ; --------------------------------------------------------------------------- 0D400B92 loc_D400B92 ; CODE XREF: boot1_main+6D0j 0D400B92 9B 0D LDR R3, [SP,#0x2C8+var_294] 0D400B94 33 01 ADDS R3, #1 0D400B96 42 AB CMP R3, R5 0D400B98 D1 E5 BNE loc_D400B66 0D400B9A 20 9C MOVS R0, #0x9C 0D400B9C 02 FB LSLS R3, R7, #0xB 0D400B9E 02 80 LSLS R0, R0, #0xA 0D400BA0 99 0A LDR R1, [SP,#0x2C8+var_2A0] 0D400BA2 9C 14 LDR R4, [SP,#0x2C8+var_278] 0D400BA4 18 1A ADDS R2, R3, R0 0D400BA6 98 09 LDR R0, [SP,#0x2C8+var_2A4] 0D400BA8 19 0B ADDS R3, R1, R4 0D400BAA 1A 1C SUBS R4, R3, R0 0D400BAC 21 03 MOVS R1, #3 0D400BAE E7 E1 B loc_D400B74 0D400BB0 ; --------------------------------------------------------------------------- 0D400BB0 error_7 ; CODE XREF: boot1_main+680j 0D400BB0 24 07 MOVS R4, #7 0D400BB2 E5 91 B return_error 0D400BB4 ; --------------------------------------------------------------------------- 0D400BB4 loc_D400BB4 ; CODE XREF: boot1_main+6AAj 0D400BB4 23 01 MOVS R3, #1 0D400BB6 1E 69 SUBS R1, R5, #1 0D400BB8 22 9E MOVS R2, #0x9E 0D400BBA 40 19 ANDS R1, R3 0D400BBC 02 92 LSLS R2, R2, #0xA 0D400BBE 02 F8 LSLS R0, R7, #0xB 0D400BC0 9B 0F LDR R3, [SP,#0x2C8+var_28C] 0D400BC2 01 C9 LSLS R1, R1, #7 0D400BC4 18 80 ADDS R0, R0, R2 0D400BC6 22 80 MOVS R2, #0x80 0D400BC8 18 C9 ADDS R1, R1, R3 0D400BCA 01 12 LSLS R2, R2, #4 0D400BCC F7 FF FB 42 BL calc_ecc 0D400BD0 28 00 CMP R0, #0 0D400BD2 90 13 STR R0, [SP,#0x2C8+var_27C] 0D400BD4 DB D7 BLT loc_D400B86 0D400BD6 46 44 MOV R4, R8 0D400BD8 2C 00 CMP R4, #0 0D400BDA D1 03 BNE loc_D400BE4 0D400BDC 9B 0E LDR R3, [SP,#0x2C8+var_290] 0D400BDE 33 01 ADDS R3, #1 0D400BE0 42 AB CMP R3, R5 0D400BE2 D0 21 BEQ loc_D400C28 0D400BE4 loc_D400BE4 ; CODE XREF: boot1_main+746j 0D400BE4 9B 12 LDR R3, [SP,#0x2C8+var_280] 0D400BE6 3B 01 SUBS R3, #1 0D400BE8 45 43 CMP R3, R8 0D400BEA D0 25 BEQ loc_D400C38 0D400BEC loc_D400BEC ; CODE XREF: boot1_main+7A8j 0D400BEC 24 80 01 24 MOVLS R4, 0x800 0D400BF0 loc_D400BF0 ; CODE XREF: boot1_main+796j 0D400BF0 ; boot1_main+7ACj 0D400BF0 20 01 MOVS R0, #1 0D400BF2 F0 00 FD A7 BL call_ahbMemFlush 0D400BF6 20 04 MOVS R0, #4 0D400BF8 F0 00 FE 02 BL call_ahbMemFlush2 0D400BFC 1C 23 ADDS R3, R4, #0 0D400BFE 3B 10 SUBS R3, #0x10 0D400C00 46 41 MOV R1, R8 0D400C02 09 1B LSRS R3, R3, #4 0D400C04 29 00 CMP R1, #0 0D400C06 D1 14 BNE loc_D400C32 0D400C08 46 51 MOV R1, R10 0D400C0A 31 01 ADDS R1, #1 0D400C0C 42 A9 CMP R1, R5 0D400C0E D0 0D BEQ loc_D400C2C 0D400C10 loc_D400C10 ; CODE XREF: boot1_main+7A2j 0D400C10 4A 63 LDR R2, =0x98001000 0D400C12 loc_D400C12 ; CODE XREF: boot1_main+79Cj 0D400C12 43 1A ORRS R2, R3 0D400C14 4B 60 LDR R3, =aes_io 0D400C16 60 1A STR R2, [R3] 0D400C18 E7 94 B loc_D400B44 0D400C1A ; --------------------------------------------------------------------------- 0D400C1A loc_D400C1A ; CODE XREF: boot1_main+6C8j 0D400C1A 9B 10 LDR R3, [SP,#0x2C8+var_288] 0D400C1C 24 A0 02 A4 MOVLS R4, 0x28000 0D400C20 19 1A ADDS R2, R3, R4 0D400C22 9C 0B LDR R4, [SP,#0x2C8+var_29C] 0D400C24 21 01 MOVS R1, #1 0D400C26 E7 A5 B loc_D400B74 0D400C28 ; --------------------------------------------------------------------------- 0D400C28 loc_D400C28 ; CODE XREF: boot1_main+74Ej 0D400C28 9C 0B LDR R4, [SP,#0x2C8+var_29C] 0D400C2A E7 E1 B loc_D400BF0 0D400C2C ; --------------------------------------------------------------------------- 0D400C2C loc_D400C2C ; CODE XREF: boot1_main+77Aj 0D400C2C 22 98 06 12 MOVLS R2, 0x98000000 0D400C30 E7 EF B loc_D400C12 0D400C32 ; --------------------------------------------------------------------------- 0D400C32 loc_D400C32 ; CODE XREF: boot1_main+772j 0D400C32 46 51 MOV R1, R10 0D400C34 31 01 ADDS R1, #1 0D400C36 E7 EB B loc_D400C10 0D400C38 ; --------------------------------------------------------------------------- 0D400C38 loc_D400C38 ; CODE XREF: boot1_main+756j 0D400C38 98 0D LDR R0, [SP,#0x2C8+var_294] 0D400C3A 42 85 CMP R5, R0 0D400C3C D1 D6 BNE loc_D400BEC 0D400C3E 9C 0A LDR R4, [SP,#0x2C8+var_2A0] 0D400C40 E7 D6 B loc_D400BF0 0D400C42 ; --------------------------------------------------------------------------- 0D400C42 found_XS ; CODE XREF: boot1_main+43Aj 0D400C42 9B 8E LDR R3, [SP,#0x2C8+var_90] 0D400C44 20 A0 MOVS R0, #0xA0 0D400C46 9A 90 LDR R2, [SP,#0x2C8+var_88] 0D400C48 02 80 LSLS R0, R0, #0xA 0D400C4A 18 1B ADDS R3, R3, R0 0D400C4C 18 9F ADDS R7, R3, R2 0D400C4E 46 51 MOV R1, R10 0D400C50 22 40 MOVS R2, #0x40 0D400C52 A8 53 ADD R0, SP, #0x2C8+var_17C 0D400C54 F0 02 FF C0 BL memcpy_maybe 0D400C58 1C 21 ADDS R1, R4, #0 0D400C5A 22 40 MOVS R2, #0x40 0D400C5C A8 53 ADD R0, SP, #0x2C8+var_17C 0D400C5E F0 02 FF BB BL memcpy_maybe 0D400C62 23 04 MOVS R3, #4 0D400C64 93 00 STR R3, [SP,#0x2C8+var_2C8] 0D400C66 23 A9 00 9B MOVLS R3, 0x2A4 0D400C6A 93 01 STR R3, [SP,#0x2C8+var_2C4] 0D400C6C 4C 4D LDR R4, =dword_289C8 0D400C6E 4B 4E LDR R3, =dword_288C8 0D400C70 1C 38 ADDS R0, R7, #0 0D400C72 18 EA ADDS R2, R5, R3 0D400C74 A9 53 ADD R1, SP, #0x2C8+var_17C 0D400C76 19 2B ADDS R3, R5, R4 0D400C78 F7 FF FB 94 BL verify_certificate 0D400C7C 28 00 CMP R0, #0 0D400C7E D0 00 BEQ loc_D400C82 0D400C80 E6 48 B ecc_fail 0D400C82 ; --------------------------------------------------------------------------- 0D400C82 loc_D400C82 ; CODE XREF: boot1_main+7EAj 0D400C82 AC 1F ADD R4, SP, #0x2C8+var_24C 0D400C84 49 49 LDR R1, =common_key 0D400C86 22 10 MOVS R2, #0x10 0D400C88 4D 49 LDR R5, =0x1BF 0D400C8A 1C 20 ADDS R0, R4, #0 0D400C8C F0 02 FF 16 BL memcpy 0D400C90 20 B0 MOVS R0, #0xB0 0D400C92 19 79 ADDS R1, R7, R5 0D400C94 22 10 MOVS R2, #0x10 0D400C96 03 00 LSLS R0, R0, #0xC 0D400C98 F0 02 FF 10 BL memcpy 0D400C9C 21 00 MOVS R1, #0 0D400C9E 22 10 MOVS R2, #0x10 0D400CA0 98 02 LDR R0, [SP,#0x2C8+var_2C0] 0D400CA2 F0 02 FF 51 BL memcmp_0 0D400CA6 20 C6 00 40 MOVLS R0, 0x18C 0D400CAA 18 35 ADDS R5, R6, R0 0D400CAC 1C 29 ADDS R1, R5, #0 0D400CAE 22 08 MOVS R2, #8 0D400CB0 98 02 LDR R0, [SP,#0x2C8+var_2C0] 0D400CB2 F0 02 FF 03 BL memcpy 0D400CB6 22 B0 03 12 MOVLS R2, 0xB0000 0D400CBA 99 02 LDR R1, [SP,#0x2C8+var_2C0] 0D400CBC 1C 20 ADDS R0, R4, #0 0D400CBE F7 FF F9 EB BL aes_init 0D400CC2 20 01 MOVS R0, #1 0D400CC4 F0 00 FD 3E BL call_ahbMemFlush 0D400CC8 20 04 MOVS R0, #4 0D400CCA F0 00 FD 99 BL call_ahbMemFlush2 0D400CCE 4A 32 LDR R2, =aes_io 0D400CD0 23 98 06 1B MOVLS R3, 0x98000000 0D400CD4 60 13 STR R3, [R2] 0D400CD6 loc_D400CD6 ; CODE XREF: boot1_main+846j 0D400CD6 68 13 LDR R3, [R2] 0D400CD8 2B 00 CMP R3, #0 0D400CDA DB FC BLT loc_D400CD6 0D400CDC 20 04 MOVS R0, #4 0D400CDE F0 00 FD 31 BL call_ahbMemFlush 0D400CE2 20 00 MOVS R0, #0 0D400CE4 F0 00 FD 8C BL call_ahbMemFlush2 0D400CE8 21 B0 03 09 MOVLS R1, 0xB0000 0D400CEC 22 10 MOVS R2, #0x10 0D400CEE A8 8A ADD R0, SP, #0x2C8+var_A0 0D400CF0 F0 02 FE E4 BL memcpy 0D400CF4 20 B0 MOVS R0, #0xB0 0D400CF6 21 00 MOVS R1, #0 0D400CF8 22 10 MOVS R2, #0x10 0D400CFA 03 00 LSLS R0, R0, #0xC 0D400CFC F0 02 FF 24 BL memcmp_0 0D400D00 68 29 LDR R1, [R5] 0D400D02 68 6A LDR R2, [R5,#4] 0D400D04 29 01 CMP R1, #1 0D400D06 D1 01 BNE error_11 0D400D08 2A 01 CMP R2, #1 0D400D0A D0 04 BEQ loc_D400D16 0D400D0C error_11 ; CODE XREF: boot1_main+872j 0D400D0C 24 0B MOVS R4, #11 0D400D0E E4 E3 B return_error 0D400D10 ; --------------------------------------------------------------------------- 0D400D10 loc_D400D10 ; CODE XREF: boot1_main+648j 0D400D10 9B 0D LDR R3, [SP,#0x2C8+var_294] 0D400D12 33 02 ADDS R3, #2 0D400D14 E6 EA B loc_D400AEC 0D400D16 ; --------------------------------------------------------------------------- 0D400D16 loc_D400D16 ; CODE XREF: boot1_main+876j 0D400D16 F0 00 FA F9 BL sub_D40130C 0D400D1A 28 00 CMP R0, #0 0D400D1C DB 05 BLT error_10 0D400D1E 21 C2 00 49 MOVLS R1, 0x184 0D400D22 18 73 ADDS R3, R6, R1 0D400D24 79 DB LDRB R3, [R3,#7] 0D400D26 42 83 CMP R3, R0 0D400D28 DA 01 BGE loc_D400D2E 0D400D2A error_10 ; CODE XREF: boot1_main+888j 0D400D2A 24 0A MOVS R4, #10 0D400D2C E4 D4 B return_error 0D400D2E ; --------------------------------------------------------------------------- 0D400D2E loc_D400D2E ; CODE XREF: boot1_main+894j 0D400D2E 98 03 LDR R0, [SP,#0x2C8+var_2BC] 0D400D30 21 00 MOVS R1, #0 0D400D32 22 10 MOVS R2, #0x10 0D400D34 F0 02 FF 08 BL memcmp_0 0D400D38 22 F4 00 52 MOVLS R2, 0x1E8 0D400D3C 24 F6 MOVS R4, #0xF6 0D400D3E 18 B1 ADDS R1, R6, R2 0D400D40 98 03 LDR R0, [SP,#0x2C8+var_2BC] 0D400D42 22 02 MOVS R2, #2 0D400D44 00 64 LSLS R4, R4, #1 0D400D46 F0 02 FE B9 BL memcpy 0D400D4A 25 FA MOVS R5, #0xFA 0D400D4C 19 33 ADDS R3, R6, R4 0D400D4E 68 5B LDR R3, [R3,#4] 0D400D50 00 6D LSLS R5, R5, #1 0D400D52 A8 65 ADD R0, SP, #0x2C8+var_134 0D400D54 19 71 ADDS R1, R6, R5 0D400D56 22 14 MOVS R2, #0x14 0D400D58 93 17 STR R3, [SP,#0x2C8+var_26C] 0D400D5A F0 02 FE AF BL memcpy 0D400D5E E5 DC B loc_D40091A 0D400D60 ; --------------------------------------------------------------------------- 0D400D60 loc_D400D60 ; CODE XREF: boot1_main+620j 0D400D60 22 01 MOVS R2, #1 0D400D62 40 2A ANDS R2, R5 0D400D64 1C 20 ADDS R0, R4, #0 ; pageno 0D400D66 23 A0 MOVS R3, #0xA0 0D400D68 9C 0F LDR R4, [SP,#0x2C8+var_28C] 0D400D6A 02 F9 LSLS R1, R7, #0xB 0D400D6C 02 9B LSLS R3, R3, #0xA 0D400D6E 01 D2 LSLS R2, R2, #7 0D400D70 18 C9 ADDS R1, R1, R3 ; data_addr 0D400D72 19 12 ADDS R2, R2, R4 ; ecc_addr 0D400D74 F7 FF FA E4 BL read_nand_page 0D400D78 E6 9D B loc_D400AB6 0D400D7A ; --------------------------------------------------------------------------- 0D400D7A loc_D400D7A ; CODE XREF: boot1_main+5F8j 0D400D7A 9B 12 LDR R3, [SP,#0x2C8+var_280] 0D400D7C 3B 01 SUBS R3, #1 0D400D7E 45 43 CMP R3, R8 0D400D80 D0 00 BEQ loc_D400D84 0D400D82 E6 84 B loc_D400A8E 0D400D84 ; --------------------------------------------------------------------------- 0D400D84 loc_D400D84 ; CODE XREF: boot1_main+8ECj 0D400D84 9A 0C LDR R2, [SP,#0x2C8+var_298] 0D400D86 92 0D STR R2, [SP,#0x2C8+var_294] 0D400D88 E6 81 B loc_D400A8E 0D400D8A ; --------------------------------------------------------------------------- 0D400D8A loc_D400D8A ; CODE XREF: boot1_main+5E8j 0D400D8A 23 42 MOVS R3, #0x42 0D400D8C E6 AE B loc_D400AEC 0D400D8E ; --------------------------------------------------------------------------- 0D400D8E loc_D400D8E ; CODE XREF: boot1_main+5D8j 0D400D8E 23 00 MOVS R3, #0 0D400D90 46 9A MOV R10, R3 0D400D92 E6 6E B loc_D400A72 0D400D92 ; --------------------------------------------------------------------------- 0D400D94 0D 01 00 00 off_D400D94 DCD nand_flash_command ; DATA XREF: boot1_main+602r 0D400D94 ; boot1_main+626r 0D400D98 0D 02 00 00 off_D400D98 DCD aes_io ; DATA XREF: boot1_main:loc_D400B20r 0D400D98 ; boot1_main+780r 0D400D98 ; boot1_main+83Ar 0D400D9C 0D 03 00 00 off_D400D9C DCD sha_io ; DATA XREF: boot1_main:loc_D400B44r 0D400DA0 98 00 10 00 dword_D400DA0 DCD 0x98001000 ; DATA XREF: boot1_main:loc_D400C10r 0D400DA4 00 02 89 C8 off_D400DA4 DCD dword_289C8 ; DATA XREF: boot1_main+7D8r 0D400DA8 00 02 88 C8 off_D400DA8 DCD dword_288C8 ; DATA XREF: boot1_main+7DAr 0D400DAC 0D 40 41 00 off_D400DAC DCD common_key ; DATA XREF: boot1_main+7F0r 0D400DB0 00 00 01 BF off_D400DB0 DCD 0x1BF ; DATA XREF: boot1_main+7F4r 0D400DB0 ; End of function boot1_main 0D400DB4 ; =============== S U B R O U T I N E ======================================= 0D400DB4 init_gpios ; CODE XREF: boot1_main+3Ep 0D400DB4 B5 00 PUSH {LR} 0D400DB6 F0 00 FD 69 BL gpio_stuff 0D400DBA 4A 0B LDR R2, =dword_D8000F4 0D400DBC 49 0B LDR R1, =0xFFFFC3FF 0D400DBE 68 13 LDR R3, [R2] 0D400DC0 40 0B ANDS R3, R1 0D400DC2 60 13 STR R3, [R2] 0D400DC4 3A 14 SUBS R2, #0x14 0D400DC6 68 13 LDR R3, [R2] 0D400DC8 40 0B ANDS R3, R1 0D400DCA 60 13 STR R3, [R2] 0D400DCC 49 08 LDR R1, =starlet_gpio2_dir 0D400DCE 23 E0 MOVS R3, #0xE0 0D400DD0 68 0A LDR R2, [R1] 0D400DD2 01 5B LSLS R3, R3, #5 0D400DD4 43 1A ORRS R2, R3 0D400DD6 60 0A STR R2, [R1] 0D400DD8 39 08 SUBS R1, #8 0D400DDA 68 0A LDR R2, [R1] 0D400DDC 23 F0 01 9B MOVLS R3, 0x3C00 0D400DE0 43 1A ORRS R2, R3 0D400DE2 60 0A STR R2, [R1] 0D400DE4 BC 01 POP {R0} 0D400DE6 47 00 BX R0 0D400DE6 ; --------------------------------------------------------------------------- 0D400DE8 0D 80 00 F4 off_D400DE8 DCD dword_D8000F4 ; DATA XREF: init_gpios+6r 0D400DEC FF FF C3 FF dword_D400DEC DCD 0xFFFFC3FF ; DATA XREF: init_gpios+8r 0D400DF0 0D 80 00 E4 off_D400DF0 DCD starlet_gpio2_dir ; DATA XREF: init_gpios+18r 0D400DF0 ; End of function init_gpios 0D400DF4 ; =============== S U B R O U T I N E ======================================= 0D400DF4 set_C ; CODE XREF: clear_S+24p 0D400DF4 ; seeprom1+34p 0D400DF4 ; read_SEEPROM+22p 0D400DF4 49 03 LDR R1, =starlet_gpio2_data 0D400DF6 23 80 MOVS R3, #0x80 0D400DF8 68 0A LDR R2, [R1] 0D400DFA 01 1B LSLS R3, R3, #4 0D400DFC 43 1A ORRS R2, R3 0D400DFE 60 0A STR R2, [R1] 0D400E00 47 70 BX LR 0D400E00 ; --------------------------------------------------------------------------- 0D400E02 00 00 ALIGN 4 0D400E04 0D 80 00 E0 off_D400E04 DCD starlet_gpio2_data ; DATA XREF: set_Cr 0D400E04 ; End of function set_C 0D400E08 ; =============== S U B R O U T I N E ======================================= 0D400E08 clear_C ; CODE XREF: clear_S:loc_D400E58p 0D400E08 ; clear_S:loc_D400E7Ep 0D400E08 ; seeprom1+20p ... 0D400E08 4B 02 LDR R3, =starlet_gpio2_data 0D400E0A 49 03 LDR R1, =0xFFFFF7FF 0D400E0C 68 1A LDR R2, [R3] 0D400E0E 40 0A ANDS R2, R1 0D400E10 60 1A STR R2, [R3] 0D400E12 47 70 BX LR 0D400E12 ; --------------------------------------------------------------------------- 0D400E14 0D 80 00 E0 off_D400E14 DCD starlet_gpio2_data ; DATA XREF: clear_Cr 0D400E18 FF FF F7 FF dword_D400E18 DCD 0xFFFFF7FF ; DATA XREF: clear_C+2r 0D400E18 ; End of function clear_C 0D400E1C ; =============== S U B R O U T I N E ======================================= 0D400E1C set_S ; CODE XREF: seeprom1+24p 0D400E1C ; read_SEEPROM+18p 0D400E1C 49 03 LDR R1, =starlet_gpio2_data 0D400E1E 23 80 MOVS R3, #0x80 0D400E20 68 0A LDR R2, [R1] 0D400E22 00 DB LSLS R3, R3, #3 0D400E24 43 1A ORRS R2, R3 0D400E26 60 0A STR R2, [R1] 0D400E28 47 70 BX LR 0D400E28 ; --------------------------------------------------------------------------- 0D400E2A 00 00 ALIGN 4 0D400E2C 0D 80 00 E0 off_D400E2C DCD starlet_gpio2_data ; DATA XREF: set_Sr 0D400E2C ; End of function set_S 0D400E30 ; =============== S U B R O U T I N E ======================================= 0D400E30 clear_D ; CODE XREF: clear_S+18p 0D400E30 ; seeprom1+2Ap 0D400E30 49 04 LDR R1, =starlet_gpio2_data 0D400E32 4A 05 LDR R2, =0xFFFFEFFF 0D400E34 68 0B LDR R3, [R1] 0D400E36 40 1A ANDS R2, R3 0D400E38 23 01 MOVS R3, #1 0D400E3A 40 03 ANDS R3, R0 0D400E3C 03 1B LSLS R3, R3, #0xC 0D400E3E 43 1A ORRS R2, R3 0D400E40 60 0A STR R2, [R1] 0D400E42 47 70 BX LR 0D400E42 ; --------------------------------------------------------------------------- 0D400E44 0D 80 00 E0 off_D400E44 DCD starlet_gpio2_data ; DATA XREF: clear_Dr 0D400E48 FF FF EF FF dword_D400E48 DCD 0xFFFFEFFF ; DATA XREF: clear_D+2r 0D400E48 ; End of function clear_D 0D400E4C ; =============== S U B R O U T I N E ======================================= 0D400E4C clear_S ; CODE XREF: seeprom2+2Ap 0D400E4C ; seeprom_read+26p 0D400E4C ; seeprom4+22p ... 0D400E4C B5 70 PUSH {R4-R6,LR} 0D400E4E 28 00 CMP R0, #0 0D400E50 D0 15 BEQ loc_D400E7E 0D400E52 4D 0D LDR R5, =starlet_gpio2_data 0D400E54 4E 0D LDR R6, =0xFFFFFBFF 0D400E56 1C 04 ADDS R4, R0, #0 0D400E58 loc_D400E58 ; CODE XREF: clear_S+30j 0D400E58 F7 FF FF D6 BL clear_C 0D400E5C 68 2B LDR R3, [R5] 0D400E5E 40 33 ANDS R3, R6 0D400E60 60 2B STR R3, [R5] 0D400E62 20 00 MOVS R0, #0 0D400E64 F7 FF FF E4 BL clear_D 0D400E68 20 7D MOVS R0, #125 0D400E6A F0 02 FF 33 BL delay_1 0D400E6E 3C 01 SUBS R4, #1 0D400E70 F7 FF FF C0 BL set_C 0D400E74 20 7D MOVS R0, #125 0D400E76 F0 02 FF 2D BL delay_1 0D400E7A 2C 00 CMP R4, #0 0D400E7C D1 EC BNE loc_D400E58 0D400E7E loc_D400E7E ; CODE XREF: clear_S+4j 0D400E7E F7 FF FF C3 BL clear_C 0D400E82 BC 70 POP {R4-R6} 0D400E84 BC 01 POP {R0} 0D400E86 47 00 BX R0 0D400E86 ; --------------------------------------------------------------------------- 0D400E88 0D 80 00 E0 off_D400E88 DCD starlet_gpio2_data ; DATA XREF: clear_S+6r 0D400E8C FF FF FB FF dword_D400E8C DCD 0xFFFFFBFF ; DATA XREF: clear_S+8r 0D400E8C ; End of function clear_S 0D400E90 ; =============== S U B R O U T I N E ======================================= 0D400E90 seeprom1 ; CODE XREF: seeprom_read+10p 0D400E90 ; seeprom4+18p seeprom5+Ep ... 0D400E90 B5 F0 PUSH {R4-R7,LR} 0D400E92 46 47 MOV R7, R8 0D400E94 B4 80 PUSH {R7} 0D400E96 23 00 MOVS R3, #0 0D400E98 38 01 SUBS R0, #1 0D400E9A 1C 0E ADDS R6, R1, #0 0D400E9C 46 98 MOV R8, R3 0D400E9E 28 1F CMP R0, #0x1F 0D400EA0 D8 1D BHI loc_D400EDE 0D400EA2 1C 05 ADDS R5, R0, #0 0D400EA4 1C 43 ADDS R3, R0, #1 0D400EA6 D0 14 BEQ loc_D400ED2 0D400EA8 27 01 MOVS R7, #1 0D400EAA loc_D400EAA ; CODE XREF: seeprom1+40j 0D400EAA 1C 34 ADDS R4, R6, #0 0D400EAC 40 EC LSRS R4, R5 0D400EAE 40 3C ANDS R4, R7 0D400EB0 F7 FF FF AA BL clear_C 0D400EB4 F7 FF FF B2 BL set_S 0D400EB8 1C 20 ADDS R0, R4, #0 0D400EBA F7 FF FF B9 BL clear_D 0D400EBE 20 7D MOVS R0, #0x7D 0D400EC0 F0 02 FF 08 BL delay_1 0D400EC4 F7 FF FF 96 BL set_C 0D400EC8 20 7D MOVS R0, #0x7D 0D400ECA F0 02 FF 03 BL delay_1 0D400ECE 3D 01 SUBS R5, #1 0D400ED0 D2 EB BCS loc_D400EAA 0D400ED2 loc_D400ED2 ; CODE XREF: seeprom1+16j 0D400ED2 ; seeprom1+54j 0D400ED2 46 40 MOV R0, R8 0D400ED4 BC 08 POP {R3} 0D400ED6 46 98 MOV R8, R3 0D400ED8 BC F0 POP {R4-R7} 0D400EDA BC 02 POP {R1} 0D400EDC 47 08 BX R1 0D400EDE ; --------------------------------------------------------------------------- 0D400EDE loc_D400EDE ; CODE XREF: seeprom1+10j 0D400EDE 23 04 MOVS R3, #4 0D400EE0 42 5B NEGS R3, R3 0D400EE2 46 98 MOV R8, R3 0D400EE4 E7 F5 B loc_D400ED2 0D400EE4 ; End of function seeprom1 0D400EE4 ; --------------------------------------------------------------------------- 0D400EE6 00 00 ALIGN 4 0D400EE8 ; =============== S U B R O U T I N E ======================================= 0D400EE8 read_SEEPROM ; CODE XREF: seeprom2+18p 0D400EE8 ; seeprom_read+1Cp 0D400EE8 B5 F0 PUSH {R4-R7,LR} 0D400EEA 38 01 SUBS R0, #1 0D400EEC 1C 0F ADDS R7, R1, #0 0D400EEE 26 00 MOVS R6, #0 0D400EF0 28 1F CMP R0, #0x1F 0D400EF2 D8 1C BHI loc_D400F2E 0D400EF4 25 00 MOVS R5, #0 0D400EF6 1C 04 ADDS R4, R0, #0 0D400EF8 1C 43 ADDS R3, R0, #1 0D400EFA D0 13 BEQ loc_D400F24 0D400EFC loc_D400EFC ; CODE XREF: read_SEEPROM+3Aj 0D400EFC F7 FF FF 84 BL clear_C 0D400F00 F7 FF FF 8C BL set_S 0D400F04 20 7D MOVS R0, #0x7D 0D400F06 F0 02 FE E5 BL delay_1 0D400F0A F7 FF FF 73 BL set_C 0D400F0E 20 7D MOVS R0, #0x7D 0D400F10 F0 02 FE E0 BL delay_1 0D400F14 4B 07 LDR R3, =dword_D8000E8 0D400F16 68 1B LDR R3, [R3] 0D400F18 04 9B LSLS R3, R3, #0x12 0D400F1A 0F DB LSRS R3, R3, #0x1F 0D400F1C 40 A3 LSLS R3, R4 0D400F1E 43 1D ORRS R5, R3 0D400F20 3C 01 SUBS R4, #1 0D400F22 D2 EB BCS loc_D400EFC 0D400F24 loc_D400F24 ; CODE XREF: read_SEEPROM+12j 0D400F24 60 3D STR R5, [R7] 0D400F26 loc_D400F26 ; CODE XREF: read_SEEPROM+4Aj 0D400F26 1C 30 ADDS R0, R6, #0 0D400F28 BC F0 POP {R4-R7} 0D400F2A BC 02 POP {R1} 0D400F2C 47 08 BX R1 0D400F2E ; --------------------------------------------------------------------------- 0D400F2E loc_D400F2E ; CODE XREF: read_SEEPROM+Aj 0D400F2E 26 04 MOVS R6, #4 0D400F30 42 76 NEGS R6, R6 0D400F32 E7 F8 B loc_D400F26 0D400F32 ; --------------------------------------------------------------------------- 0D400F34 0D 80 00 E8 off_D400F34 DCD dword_D8000E8 ; DATA XREF: read_SEEPROM+2Cr 0D400F34 ; End of function read_SEEPROM 0D400F38 ; =============== S U B R O U T I N E ======================================= 0D400F38 seeprom2 ; CODE XREF: seeprom4+26p 0D400F38 ; seeprom5+1Cp seeprom6+1Cp ... 0D400F38 var_18 = -0x18 0D400F38 B5 F0 PUSH {R4-R7,LR} 0D400F3A B0 81 SUB SP, SP, #4 0D400F3C 25 00 MOVS R5, #0 0D400F3E 24 00 MOVS R4, #0 0D400F40 46 6F MOV R7, SP 0D400F42 26 01 MOVS R6, #1 0D400F44 95 00 STR R5, [SP,#0x18+var_18] 0D400F46 E0 01 B loc_D400F4C 0D400F48 ; --------------------------------------------------------------------------- 0D400F48 loc_D400F48 ; CODE XREF: seeprom2+26j 0D400F48 2C 63 CMP R4, #0x63 0D400F4A D8 09 BHI loc_D400F60 0D400F4C loc_D400F4C ; CODE XREF: seeprom2+Ej 0D400F4C 20 0A MOVS R0, #0xA 0D400F4E 1C 39 ADDS R1, R7, #0 0D400F50 F7 FF FF CA BL read_SEEPROM 0D400F54 9B 00 LDR R3, [SP,#0x18+var_18] 0D400F56 1C 32 ADDS R2, R6, #0 0D400F58 1C 05 ADDS R5, R0, #0 0D400F5A 34 01 ADDS R4, #1 0D400F5C 43 9A BICS R2, R3 0D400F5E D1 F3 BNE loc_D400F48 0D400F60 loc_D400F60 ; CODE XREF: seeprom2+12j 0D400F60 20 02 MOVS R0, #2 0D400F62 F7 FF FF 73 BL clear_S 0D400F66 2C 63 CMP R4, #0x63 0D400F68 D9 01 BLS loc_D400F6E 0D400F6A 25 09 MOVS R5, #9 0D400F6C 42 6D NEGS R5, R5 0D400F6E loc_D400F6E ; CODE XREF: seeprom2+30j 0D400F6E 1C 28 ADDS R0, R5, #0 0D400F70 B0 01 ADD SP, SP, #4 0D400F72 BC F0 POP {R4-R7} 0D400F74 BC 02 POP {R1} 0D400F76 47 08 BX R1 0D400F76 ; End of function seeprom2 0D400F78 ; =============== S U B R O U T I N E ======================================= 0D400F78 seeprom_read ; CODE XREF: sub_D40110C+40p 0D400F78 ; sub_D40120C+40p 0D400F78 B5 30 PUSH {R4,R5,LR} 0D400F7A 1C 0D ADDS R5, R1, #0 0D400F7C 23 C0 MOVS R3, #0xC0 0D400F7E 21 FF MOVS R1, #0xFF 0D400F80 40 01 ANDS R1, R0 0D400F82 00 DB LSLS R3, R3, #3 0D400F84 20 0B MOVS R0, #0xB 0D400F86 43 19 ORRS R1, R3 0D400F88 F7 FF FF 82 BL seeprom1 0D400F8C 1E 04 SUBS R4, R0, #0 0D400F8E D1 08 BNE loc_D400FA2 0D400F90 20 10 MOVS R0, #0x10 0D400F92 1C 29 ADDS R1, R5, #0 0D400F94 F7 FF FF A8 BL read_SEEPROM 0D400F98 1E 04 SUBS R4, R0, #0 0D400F9A D1 02 BNE loc_D400FA2 0D400F9C 20 02 MOVS R0, #2 0D400F9E F7 FF FF 55 BL clear_S 0D400FA2 loc_D400FA2 ; CODE XREF: seeprom_read+16j 0D400FA2 ; seeprom_read+22j 0D400FA2 1C 20 ADDS R0, R4, #0 0D400FA4 BC 30 POP {R4,R5} 0D400FA6 BC 02 POP {R1} 0D400FA8 47 08 BX R1 0D400FA8 ; End of function seeprom_read 0D400FA8 ; --------------------------------------------------------------------------- 0D400FAA 00 00 ALIGN 4 0D400FAC ; =============== S U B R O U T I N E ======================================= 0D400FAC seeprom4 ; CODE XREF: seeprom10+32p 0D400FAC ; sub_D401420+52p 0D400FAC B5 00 PUSH {LR} 0D400FAE 23 FF MOVS R3, #0xFF 0D400FB0 22 A0 MOVS R2, #0xA0 0D400FB2 40 03 ANDS R3, R0 0D400FB4 00 D2 LSLS R2, R2, #3 0D400FB6 43 13 ORRS R3, R2 0D400FB8 4A 08 LDR R2, =0xFFFF 0D400FBA 04 1B LSLS R3, R3, #0x10 0D400FBC 40 0A ANDS R2, R1 0D400FBE 1C 19 ADDS R1, R3, #0 0D400FC0 20 1B MOVS R0, #0x1B 0D400FC2 43 11 ORRS R1, R2 0D400FC4 F7 FF FF 64 BL seeprom1 0D400FC8 28 00 CMP R0, #0 0D400FCA D1 04 BNE loc_D400FD6 0D400FCC 20 02 MOVS R0, #2 0D400FCE F7 FF FF 3D BL clear_S 0D400FD2 F7 FF FF B1 BL seeprom2 0D400FD6 loc_D400FD6 ; CODE XREF: seeprom4+1Ej 0D400FD6 BC 02 POP {R1} 0D400FD8 47 08 BX R1 0D400FD8 ; --------------------------------------------------------------------------- 0D400FDA 00 00 ALIGN 4 0D400FDC 00 00 FF FF off_D400FDC DCD 0xFFFF ; DATA XREF: seeprom4+Cr 0D400FDC ; End of function seeprom4 0D400FE0 ; =============== S U B R O U T I N E ======================================= 0D400FE0 seeprom5 0D400FE0 B5 00 PUSH {LR} 0D400FE2 21 FF MOVS R1, #0xFF 0D400FE4 23 E0 MOVS R3, #0xE0 0D400FE6 40 01 ANDS R1, R0 0D400FE8 00 DB LSLS R3, R3, #3 0D400FEA 20 0B MOVS R0, #0xB 0D400FEC 43 19 ORRS R1, R3 0D400FEE F7 FF FF 4F BL seeprom1 0D400FF2 28 00 CMP R0, #0 0D400FF4 D1 04 BNE loc_D401000 0D400FF6 20 02 MOVS R0, #2 0D400FF8 F7 FF FF 28 BL clear_S 0D400FFC F7 FF FF 9C BL seeprom2 0D401000 loc_D401000 ; CODE XREF: seeprom5+14j 0D401000 BC 02 POP {R1} 0D401002 47 08 BX R1 0D401002 ; End of function seeprom5 0D401004 ; =============== S U B R O U T I N E ======================================= 0D401004 seeprom6 0D401004 B5 00 PUSH {LR} 0D401006 49 08 LDR R1, =0xFFFF 0D401008 23 88 MOVS R3, #0x88 0D40100A 40 01 ANDS R1, R0 0D40100C 04 DB LSLS R3, R3, #0x13 0D40100E 20 1B MOVS R0, #0x1B 0D401010 43 19 ORRS R1, R3 0D401012 F7 FF FF 3D BL seeprom1 0D401016 28 00 CMP R0, #0 0D401018 D1 04 BNE loc_D401024 0D40101A 20 02 MOVS R0, #2 0D40101C F7 FF FF 16 BL clear_S 0D401020 F7 FF FF 8A BL seeprom2 0D401024 loc_D401024 ; CODE XREF: seeprom6+14j 0D401024 BC 02 POP {R1} 0D401026 47 08 BX R1 0D401026 ; --------------------------------------------------------------------------- 0D401028 00 00 FF FF off_D401028 DCD 0xFFFF ; DATA XREF: seeprom6+2r 0D401028 ; End of function seeprom6 0D40102C ; =============== S U B R O U T I N E ======================================= 0D40102C seeprom7 0D40102C B5 00 PUSH {LR} 0D40102E 21 90 MOVS R1, #0x90 0D401030 20 0B MOVS R0, #0xB 0D401032 00 C9 LSLS R1, R1, #3 0D401034 F7 FF FF 2C BL seeprom1 0D401038 28 00 CMP R0, #0 0D40103A D1 04 BNE loc_D401046 0D40103C 20 02 MOVS R0, #2 0D40103E F7 FF FF 05 BL clear_S 0D401042 F7 FF FF 79 BL seeprom2 0D401046 loc_D401046 ; CODE XREF: seeprom7+Ej 0D401046 BC 02 POP {R1} 0D401048 47 08 BX R1 0D401048 ; End of function seeprom7 0D401048 ; --------------------------------------------------------------------------- 0D40104A 00 00 ALIGN 4 0D40104C ; =============== S U B R O U T I N E ======================================= 0D40104C seeprom8 ; CODE XREF: seeprom10+1Ep 0D40104C ; sub_D401420+3Ep 0D40104C B5 10 PUSH {R4,LR} 0D40104E 21 98 MOVS R1, #0x98 0D401050 20 0B MOVS R0, #0xB 0D401052 00 C9 LSLS R1, R1, #3 0D401054 F7 FF FF 1C BL seeprom1 0D401058 1E 04 SUBS R4, R0, #0 0D40105A D1 02 BNE loc_D401062 0D40105C 20 02 MOVS R0, #2 0D40105E F7 FF FE F5 BL clear_S 0D401062 loc_D401062 ; CODE XREF: seeprom8+Ej 0D401062 1C 20 ADDS R0, R4, #0 0D401064 BC 10 POP {R4} 0D401066 BC 02 POP {R1} 0D401068 47 08 BX R1 0D401068 ; End of function seeprom8 0D401068 ; --------------------------------------------------------------------------- 0D40106A 00 00 ALIGN 4 0D40106C ; =============== S U B R O U T I N E ======================================= 0D40106C seeprom9 ; CODE XREF: seeprom10:loc_D4010CCp 0D40106C ; sub_D401420:loc_D401480p 0D40106C B5 10 PUSH {R4,LR} 0D40106E 21 80 MOVS R1, #0x80 0D401070 20 0B MOVS R0, #0xB 0D401072 00 C9 LSLS R1, R1, #3 0D401074 F7 FF FF 0C BL seeprom1 0D401078 1E 04 SUBS R4, R0, #0 0D40107A D1 02 BNE loc_D401082 0D40107C 20 02 MOVS R0, #2 0D40107E F7 FF FE E5 BL clear_S 0D401082 loc_D401082 ; CODE XREF: seeprom9+Ej 0D401082 1C 20 ADDS R0, R4, #0 0D401084 BC 10 POP {R4} 0D401086 BC 02 POP {R1} 0D401088 47 08 BX R1 0D401088 ; End of function seeprom9 0D401088 ; --------------------------------------------------------------------------- 0D40108A 46 C0 ALIGN 4 0D40108C ; =============== S U B R O U T I N E ======================================= 0D40108C seeprom10 ; CODE XREF: sub_D401378+2Ap 0D40108C ; sub_D4013B0+2Ap 0D40108C ; sub_D4013E8+2Ap 0D40108C B5 F0 PUSH {R4-R7,LR} 0D40108E 1C 04 ADDS R4, R0, #0 0D401090 29 01 CMP R1, #1 0D401092 D9 05 BLS loc_D4010A0 0D401094 26 04 MOVS R6, #4 0D401096 42 76 NEGS R6, R6 0D401098 loc_D401098 ; CODE XREF: seeprom10+24j 0D401098 ; seeprom10+44j 0D401098 1C 30 ADDS R0, R6, #0 0D40109A BC F0 POP {R4-R7} 0D40109C BC 02 POP {R1} 0D40109E 47 08 BX R1 0D4010A0 ; --------------------------------------------------------------------------- 0D4010A0 loc_D4010A0 ; CODE XREF: seeprom10+6j 0D4010A0 23 0A MOVS R3, #0xA 0D4010A2 43 4B MULS R3, R1 0D4010A4 1C 1F ADDS R7, R3, #0 0D4010A6 37 48 ADDS R7, #0x48 0D4010A8 08 7F LSRS R7, R7, #1 0D4010AA F7 FF FF CF BL seeprom8 0D4010AE 1E 06 SUBS R6, R0, #0 0D4010B0 D1 F2 BNE loc_D401098 0D4010B2 25 00 MOVS R5, #0 0D4010B4 loc_D4010B4 ; CODE XREF: seeprom10+3Ej 0D4010B4 88 21 LDRH R1, [R4] 0D4010B6 04 09 LSLS R1, R1, #0x10 0D4010B8 19 78 ADDS R0, R7, R5 0D4010BA 0C 09 LSRS R1, R1, #0x10 0D4010BC 34 02 ADDS R4, #2 0D4010BE F7 FF FF 75 BL seeprom4 0D4010C2 1E 06 SUBS R6, R0, #0 0D4010C4 D1 02 BNE loc_D4010CC 0D4010C6 35 01 ADDS R5, #1 0D4010C8 2D 04 CMP R5, #4 0D4010CA D9 F3 BLS loc_D4010B4 0D4010CC loc_D4010CC ; CODE XREF: seeprom10+38j 0D4010CC F7 FF FF CE BL seeprom9 0D4010D0 E7 E2 B loc_D401098 0D4010D0 ; End of function seeprom10 0D4010D0 ; --------------------------------------------------------------------------- 0D4010D2 00 00 ALIGN 4 0D4010D4 ; =============== S U B R O U T I N E ======================================= 0D4010D4 sub_D4010D4 ; CODE XREF: sub_D40110C+6Ep 0D4010D4 ; sub_D401378+20p 0D4010D4 ; sub_D4013B0+20p ... 0D4010D4 B5 00 PUSH {LR} 0D4010D6 21 00 MOVS R1, #0 0D4010D8 22 03 MOVS R2, #3 0D4010DA loc_D4010DA ; CODE XREF: sub_D4010D4+12j 0D4010DA 88 03 LDRH R3, [R0] 0D4010DC 18 CB ADDS R3, R1, R3 0D4010DE 04 1B LSLS R3, R3, #0x10 0D4010E0 30 02 ADDS R0, #2 0D4010E2 0C 19 LSRS R1, R3, #0x10 0D4010E4 3A 01 SUBS R2, #1 0D4010E6 D5 F8 BPL loc_D4010DA 0D4010E8 1C 08 ADDS R0, R1, #0 0D4010EA BC 02 POP {R1} 0D4010EC 47 08 BX R1 0D4010EC ; End of function sub_D4010D4 0D4010EC ; --------------------------------------------------------------------------- 0D4010EE 00 00 ALIGN 4 0D4010F0 ; =============== S U B R O U T I N E ======================================= 0D4010F0 sub_D4010F0 ; CODE XREF: sub_D40120C+6Ep 0D4010F0 ; sub_D401420+1Ap 0D4010F0 B5 00 PUSH {LR} 0D4010F2 21 00 MOVS R1, #0 0D4010F4 22 01 MOVS R2, #1 0D4010F6 loc_D4010F6 ; CODE XREF: sub_D4010F0+12j 0D4010F6 88 03 LDRH R3, [R0] 0D4010F8 18 CB ADDS R3, R1, R3 0D4010FA 04 1B LSLS R3, R3, #0x10 0D4010FC 30 02 ADDS R0, #2 0D4010FE 0C 19 LSRS R1, R3, #0x10 0D401100 3A 01 SUBS R2, #1 0D401102 D5 F8 BPL loc_D4010F6 0D401104 1C 08 ADDS R0, R1, #0 0D401106 BC 02 POP {R1} 0D401108 47 08 BX R1 0D401108 ; End of function sub_D4010F0 0D401108 ; --------------------------------------------------------------------------- 0D40110A 00 00 ALIGN 4 0D40110C ; =============== S U B R O U T I N E ======================================= 0D40110C sub_D40110C ; CODE XREF: sub_D40130C+Ap 0D40110C ; sub_D401328+Ap 0D40110C ; sub_D401344+Ap ... 0D40110C var_50 = -0x50 0D40110C var_4C = -0x4C 0D40110C var_48 = -0x48 0D40110C var_44 = -0x44 0D40110C var_40 = -0x40 0D40110C var_3C = -0x3C 0D40110C var_38 = -0x38 0D40110C B5 F0 PUSH {R4-R7,LR} 0D40110E 46 5F MOV R7, R11 0D401110 46 56 MOV R6, R10 0D401112 46 4D MOV R5, R9 0D401114 46 44 MOV R4, R8 0D401116 B4 F0 PUSH {R4-R7} 0D401118 B0 8B SUB SP, SP, #0x2C 0D40111A 22 01 MOVS R2, #1 0D40111C 91 03 STR R1, [SP,#0x50+var_44] 0D40111E 21 00 MOVS R1, #0 0D401120 42 53 NEGS R3, R2 0D401122 91 02 STR R1, [SP,#0x50+var_48] 0D401124 91 01 STR R1, [SP,#0x50+var_4C] 0D401126 90 04 STR R0, [SP,#0x50+var_40] 0D401128 A9 05 ADD R1, SP, #0x50+var_3C 0D40112A 46 9A MOV R10, R3 0D40112C 46 9B MOV R11, R3 0D40112E 27 00 MOVS R7, #0 0D401130 46 88 MOV R8, R1 0D401132 22 00 MOVS R2, #0 0D401134 loc_D401134 ; CODE XREF: sub_D40110C+60j 0D401134 A9 06 ADD R1, SP, #0x50+var_38 0D401136 18 8B ADDS R3, R1, R2 0D401138 2F 01 CMP R7, #1 0D40113A D8 62 BHI loc_D401202 0D40113C 1C 16 ADDS R6, R2, #0 0D40113E 36 48 ADDS R6, #0x48 0D401140 08 76 LSRS R6, R6, #1 0D401142 25 00 MOVS R5, #0 0D401144 1C 1C ADDS R4, R3, #0 0D401146 loc_D401146 ; CODE XREF: sub_D40110C+54j 0D401146 19 70 ADDS R0, R6, R5 0D401148 46 41 MOV R1, R8 0D40114A 92 00 STR R2, [SP,#0x50+var_50] 0D40114C F7 FF FF 14 BL seeprom_read 0D401150 9B 05 LDR R3, [SP,#0x50+var_3C] 0D401152 9A 00 LDR R2, [SP,#0x50+var_50] 0D401154 80 23 STRH R3, [R4] 0D401156 34 02 ADDS R4, #2 0D401158 28 00 CMP R0, #0 0D40115A D1 4A BNE loc_D4011F2 0D40115C 35 01 ADDS R5, #1 0D40115E 2D 04 CMP R5, #4 0D401160 D9 F1 BLS loc_D401146 0D401162 21 00 MOVS R1, #0 0D401164 46 89 MOV R9, R1 0D401166 loc_D401166 ; CODE XREF: sub_D40110C+EAj 0D401166 37 01 ADDS R7, #1 0D401168 32 0A ADDS R2, #0xA 0D40116A 2F 01 CMP R7, #1 0D40116C D9 E2 BLS loc_D401134 0D40116E 27 00 MOVS R7, #0 0D401170 AC 06 ADD R4, SP, #0x50+var_38 0D401172 26 00 MOVS R6, #0 0D401174 loc_D401174 ; CODE XREF: sub_D40110C+8Cj 0D401174 AA 06 ADD R2, SP, #0x50+var_38 0D401176 19 95 ADDS R5, R2, R6 0D401178 1C 28 ADDS R0, R5, #0 0D40117A F7 FF FF AB BL sub_D4010D4 0D40117E 7A 22 LDRB R2, [R4,#8] 0D401180 7A 63 LDRB R3, [R4,#9] 0D401182 02 12 LSLS R2, R2, #8 0D401184 43 13 ORRS R3, R2 0D401186 42 83 CMP R3, R0 0D401188 D0 1F BEQ loc_D4011CA 0D40118A 23 00 MOVS R3, #0 0D40118C 46 9B MOV R11, R3 0D40118E 46 BA MOV R10, R7 0D401190 loc_D401190 ; CODE XREF: sub_D40110C+DEj 0D401190 ; sub_D40110C+E4j 0D401190 37 01 ADDS R7, #1 0D401192 36 0A ADDS R6, #0xA 0D401194 34 0A ADDS R4, #0xA 0D401196 2F 01 CMP R7, #1 0D401198 D9 EC BLS loc_D401174 0D40119A 9A 01 LDR R2, [SP,#0x50+var_4C] 0D40119C 2A 00 CMP R2, #0 0D40119E D0 2C BEQ loc_D4011FA 0D4011A0 46 53 MOV R3, R10 0D4011A2 2B 00 CMP R3, #0 0D4011A4 DB 29 BLT loc_D4011FA 0D4011A6 99 01 LDR R1, [SP,#0x50+var_4C] 0D4011A8 98 04 LDR R0, [SP,#0x50+var_40] 0D4011AA 22 0A MOVS R2, #0xA 0D4011AC F0 02 FC 86 BL memcpy 0D4011B0 99 03 LDR R1, [SP,#0x50+var_44] 0D4011B2 46 53 MOV R3, R10 0D4011B4 60 0B STR R3, [R1] 0D4011B6 loc_D4011B6 ; CODE XREF: sub_D40110C+ECj 0D4011B6 ; sub_D40110C+F4j 0D4011B6 ; sub_D40110C+FCj 0D4011B6 46 48 MOV R0, R9 0D4011B8 B0 0B ADD SP, SP, #0x2C 0D4011BA BC 78 POP {R3-R6} 0D4011BC 46 98 MOV R8, R3 0D4011BE 46 A1 MOV R9, R4 0D4011C0 46 AA MOV R10, R5 0D4011C2 46 B3 MOV R11, R6 0D4011C4 BC F0 POP {R4-R7} 0D4011C6 BC 02 POP {R1} 0D4011C8 47 08 BX R1 0D4011CA ; --------------------------------------------------------------------------- 0D4011CA loc_D4011CA ; CODE XREF: sub_D40110C+7Cj 0D4011CA 79 23 LDRB R3, [R4,#4] 0D4011CC 79 62 LDRB R2, [R4,#5] 0D4011CE 06 1B LSLS R3, R3, #0x18 0D4011D0 04 12 LSLS R2, R2, #0x10 0D4011D2 43 1A ORRS R2, R3 0D4011D4 79 A3 LDRB R3, [R4,#6] 0D4011D6 02 1B LSLS R3, R3, #8 0D4011D8 43 13 ORRS R3, R2 0D4011DA 79 E2 LDRB R2, [R4,#7] 0D4011DC 99 02 LDR R1, [SP,#0x50+var_48] 0D4011DE 43 1A ORRS R2, R3 0D4011E0 42 8A CMP R2, R1 0D4011E2 D3 01 BCC loc_D4011E8 0D4011E4 95 01 STR R5, [SP,#0x50+var_4C] 0D4011E6 92 02 STR R2, [SP,#0x50+var_48] 0D4011E8 loc_D4011E8 ; CODE XREF: sub_D40110C+D6j 0D4011E8 45 5A CMP R2, R11 0D4011EA D2 D1 BCS loc_D401190 0D4011EC 46 BA MOV R10, R7 0D4011EE 46 93 MOV R11, R2 0D4011F0 E7 CE B loc_D401190 0D4011F2 ; --------------------------------------------------------------------------- 0D4011F2 loc_D4011F2 ; CODE XREF: sub_D40110C+4Ej 0D4011F2 28 00 CMP R0, #0 0D4011F4 46 81 MOV R9, R0 0D4011F6 D0 B6 BEQ loc_D401166 0D4011F8 E7 DD B loc_D4011B6 0D4011FA ; --------------------------------------------------------------------------- 0D4011FA loc_D4011FA ; CODE XREF: sub_D40110C+92j 0D4011FA ; sub_D40110C+98j 0D4011FA 21 05 MOVS R1, #5 0D4011FC 42 4A NEGS R2, R1 0D4011FE 46 91 MOV R9, R2 0D401200 E7 D9 B loc_D4011B6 0D401202 ; --------------------------------------------------------------------------- 0D401202 loc_D401202 ; CODE XREF: sub_D40110C+2Ej 0D401202 22 04 MOVS R2, #4 0D401204 42 53 NEGS R3, R2 0D401206 46 99 MOV R9, R3 0D401208 E7 D5 B loc_D4011B6 0D401208 ; End of function sub_D40110C 0D401208 ; --------------------------------------------------------------------------- 0D40120A 00 00 ALIGN 4 0D40120C ; =============== S U B R O U T I N E ======================================= 0D40120C sub_D40120C ; CODE XREF: sub_D401360+8p 0D40120C ; sub_D401420+Ap 0D40120C var_50 = -0x50 0D40120C var_4C = -0x4C 0D40120C var_48 = -0x48 0D40120C var_44 = -0x44 0D40120C var_40 = -0x40 0D40120C var_3C = -0x3C 0D40120C var_38 = -0x38 0D40120C B5 F0 PUSH {R4-R7,LR} 0D40120E 46 5F MOV R7, R11 0D401210 46 56 MOV R6, R10 0D401212 46 4D MOV R5, R9 0D401214 46 44 MOV R4, R8 0D401216 B4 F0 PUSH {R4-R7} 0D401218 B0 8B SUB SP, SP, #0x2C 0D40121A 22 01 MOVS R2, #1 0D40121C 91 03 STR R1, [SP,#0x50+var_44] 0D40121E 21 00 MOVS R1, #0 0D401220 42 53 NEGS R3, R2 0D401222 91 02 STR R1, [SP,#0x50+var_48] 0D401224 91 01 STR R1, [SP,#0x50+var_4C] 0D401226 90 04 STR R0, [SP,#0x50+var_40] 0D401228 A9 05 ADD R1, SP, #0x50+var_3C 0D40122A 46 9A MOV R10, R3 0D40122C 46 9B MOV R11, R3 0D40122E 27 00 MOVS R7, #0 0D401230 46 88 MOV R8, R1 0D401232 22 00 MOVS R2, #0 0D401234 loc_D401234 ; CODE XREF: sub_D40120C+60j 0D401234 A9 06 ADD R1, SP, #0x50+var_38 0D401236 18 8B ADDS R3, R1, R2 0D401238 2F 02 CMP R7, #2 0D40123A D8 62 BHI loc_D401302 0D40123C 1C 16 ADDS R6, R2, #0 0D40123E 36 5C ADDS R6, #0x5C 0D401240 08