?? v6boot.asm
字號:
00000000 EA00002E B 0x000000C0 ; RESET
00000004 E59FF014 LDR PC, [PC, #+20] ; UND [0x20] =0x100004
00000008 E59FF014 LDR PC, [PC, #+20] ; SWI [0x24] =0x100008
0000000C E59FF014 LDR PC, [PC, #+20] ; P ABT [0x28] =0x10000C
00000010 E59FF014 LDR PC, [PC, #+20] ; D ABT [0x2C] =0x100010
00000014 FFFFFFFF DW 0xFFFFFFFF
00000018 E59FF014 LDR PC, [PC, #+20] ; IRQ [0x34] =0x10010C
0000001C E59FF014 LDR PC, [PC, #+20] ; FIQ [0x38] =0x10001C
;==================================================================================================
00000020 00100004 DW 0x00100004
00000024 00100008 DW 0x00100008
00000028 0010000C DW 0x0010000C
0000002C 00100010 DW 0x00100010
00000030 FFFFFFFF DW 0xFFFFFFFF
00000034 0010010C DW 0x0010010C
00000038 0010001C DW 0x0010001C
0000003C FFFFFFFF DW 0xFFFFFFFF
00000040 FFFFFFFF DW 0xFFFFFFFF
;==================================================================================================
?cstartup:
000000C0 E10F0000 MRS R0, CPSR
000000C4 E3C0001F BIC R0, R0, #0x1F
000000C8 E3800012 ORR R0, R0, #0x12
000000CC E121F000 MSR CPSR_c, R0
000000D0 E59FD090 LDR SP, [PC, #+144] ; [0x168] =0x203F10 = SFE(IRQ_STACK)
000000D4 E3C0001F BIC R0, R0, #0x1F
000000D8 E380001F ORR R0, R0, #0x1F
000000DC E121F000 MSR CPSR_c, R0
000000E0 E59FD084 LDR SP, [PC, #+132] ; [0x16C] =0x203ED0 = SFE(CSTACK)
000000E4 E59F0084 LDR R0, [PC, #+132] ; [0x170] =0x1001F5 = ?main ;thumb mode!!!
000000E8 E1A0E00F MOV LR, PC
000000EC E12FFF10 BX R0 ; call ?main
;-----------------------------------------------------------
000000F0 E59F007C LDR R0, [PC, #+124] ; [0x174] =0x1001B1
000000F4 E1A0E00F MOV LR, PC
;-----------------------------------------------------------
000000F8 E12FFF10 BX R0 ; call 0x001001B0 thumb __segment_init
000000FC E59FE074 LDR LR, [PC, #+116] ; [0x178] =0x100108
00000100 E59F0074 LDR R0, [PC, #+116] ; [0x17C] =0x100331
00000104 E12FFF10 BX R0 ; call 0x00100330 thumb
00000108 EAFFFFFE B 0x000108 ; while(1)
;==================================================================================================
IRQ_handler:
0000010C E24EE004 SUB LR, LR, #0x4
00000110 E92D4000 STMDB SP!, {LR}
00000114 E14FE000 MRS LR, SPSR
00000118 E92D4000 STMDB SP!, {LR}
0000011C E92D0001 STMDB SP!, {R0}
00000120 E59FE058 LDR LR, [PC, #+88] ; [0x180] =AIC_SMR (0xFFFFF000)
00000124 E59E0100 LDR R0, [LR, #+256]
00000128 E58EE100 STR LR, [LR, #+256]
0000012C E321F013 MSR CPSR_c, #0x13
00000130 E92D500E STMDB SP!, {R1,R2,R3,R12,LR}
00000134 E1A0E00F MOV LR, PC
00000138 E12FFF10 BX R0
;==================================================================================================
0000013C E8BD500E LDMIA SP!, {R1,R2,R3,R12,LR}
00000140 E321F092 MSR CPSR_c, #0x92
00000144 E59FE034 LDR LR, [PC, #+52] ; [0x180] =AIC_SMR (0xFFFFF000)
00000148 E58EE130 STR LR, [LR, #+304]
0000014C E8BD0001 LDMIA SP!, {R0}
00000150 E8BD4000 LDMIA SP!, {LR}
00000154 E16FF00E MSR SPSR_cxsf, LR
00000158 E8FD8000 LDMIA SP!, {PC}^
0000015C EAFFFFFE B 0x00015C
00000160 EAFFFFFE B 0x000160
00000164 EAFFFFFE B 0x000164
;==================================================================================================
00000168 00203F10 DW 0x00203F10
0000016C 00203ED0 DW 0x00203ED0
00000170 001001F5 DW 0x001001F5
00000174 001001B1 DW 0x001001B1
00000178 00100108 DW 0x00100108
0000017C 00100331 DW 0x00100331
00000180 FFFFF000 DW 0xFFFFF000
;==================================================================================================
; not use
00000184 E10F0000 MRS R0, CPSR
00000188 E3C000C0 BIC R0, R0, #0xC0
0000018C E121F000 MSR CPSR_c, R0
00000190 E12FFF1E BX LR
;==================================================================================================
; not use
00000194 E10F0000 MRS R0, CPSR
00000198 E38000C0 ORR R0, R0, #0xC0
0000019C E121F000 MSR CPSR_c, R0
000001A0 E10F0000 MRS R0, CPSR
000001A4 E21000C0 ANDS R0, R0, #0xC0
;==================================================================================================
001001A8 FFF9 BL 0x10119C
001001AA 0AFF LSR R7, R7, #11
001001AC FF1E BL 0x100FEA
001001AE E12F B 0x100410
;==================================================================================================
;==================================================================================================
__segment_init:
001001B0 B570 PUSH {R4,R5,R6, LR}
001001B2 4E0E LDR R6, [PC,#0x038] ; [0x1001EC] =0x1003C4 =__sfb( "INITTAB" ) =0x001003C4
001001B4 4C0E LDR R4, [PC,#0x038] ; [0x1001F0] =0x1003D0 =__sfe( "INITTAB" ) =0x001003D0
001001B6 B082 SUB SP, SP, #8
001001B8 0035 LSL R5, R6, #0
001001BA 1D36 ADD R6, R6, #4
001001BC E005 B 0x1001CA ; call memcpy
;-----------------------------------------------------------
001001BE 0001 LSL R1, R0, #0 ; R1 = R0
001001C0 6830 LDR R0, [R6, #0] ; R0 = __sfb( "INITTAB" )
001001C2 F000 ; pre BL/BLX
001001C4 F8E5 BL 0x100390 ; call memread
;-----------------------------------------------------------
001001C6 350C ADD R5, #12
001001C8 360C ADD R6, #12
memcpy:
001001CA 42A5 CMP R5, R4
001001CC D209 BCS 0x1001E2 ; return
001001CE 6870 LDR R0, [R6, #4]
001001D0 6831 LDR R1, [R6, #0]
001001D2 682A LDR R2, [R5, #0]
001001D4 4288 CMP R0, R1
001001D6 D1F2 BNE 0x1001BE
001001D8 6830 LDR R0, [R6, #0]
001001DA 2100 MOV R1, #0
001001DC F000 ; pre BL/BLX
001001DE F8E6 BL 0x1003AC
001001E0 E7F1 B 0x1001C6
001001E2 B002 ADD SP, SP, #8
001001E4 BC70 POP {R4,R5,R6}
001001E6 BC01 POP {R0}
001001E8 4700 BX R0
001001EA 46C0 ; fill blank
001001EC 001003C4 DW 0x001003C4
001001F0 001003D0 DW 0x001003D0
;==================================================================================================
?main
001001F4 B510 PUSH {R4, LR}
001001F6 209F MOV R0, #159 ; R0 = 0x9F
001001F8 43C0 MVN R0, R0 ; R0 = AT91C_MC_FMR(0xFFFFFF60)
001001FA 2180 MOV R1, #128 ; R1 = 0x80
001001FC 0049 LSL R1, R1, #1 ; R1 = 0x00000100
001001FE 6001 STR R1, [R0, #0] ; AT91C_MC_FMR(0xFFFFFF60) = 0x00000100
00100200 4819 LDR R0, [PC,#0x064] ; R0 = [0x100268] =AT91C_WDTC_WDMR (0xFFFFFD44)
00100202 01C9 LSL R1, R1, #7 ; R1 = 0x00008000
00100204 6001 STR R1, [R0, #0] ; AT91C_WDTC_WDMR (0xFFFFFD44) = 0x00008000
00100206 4819 LDR R0, [PC,#0x064] ; R0 = [0x10026C] =AT91C_CKGR_MOR (0xFFFFFC20)
00100208 4919 LDR R1, [PC,#0x064] ; [0x100270] =0x4001
0010020A 6001 STR R1, [R0, #0] ; AT91C_CKGR_MOR (0xFFFFFC20) = 0x00004001
0010020C 4819 LDR R0, [PC,#0x064] ; R0 = [0x100274] =AT91C_PMC_SR (0xFFFFFC68)
0010020E 6801 LDR R1, [R0, #0] ; R1 = AT91C_PMC_SR (0xFFFFFC68)
00100210 07C9 LSL R1, R1, #31
00100212 D5FC BPL 0x10020E ; while(!MOSCS);
;-----------------------------------------------------------
00100214 4918 LDR R1, [PC,#0x060] ; [0x100278] =AT91C_CKGR_PLLR (0xFFFFFC2C)
00100216 4A19 LDR R2, [PC,#0x064] ; [0x10027C] =0x1048100E
00100218 600A STR R2, [R1, #0] ; AT91C_CKGR_PLLR (0xFFFFFC2C) = 0x1048100E
0010021A 2204 MOV R2, #4 ; R2 = 4
0010021C 2304 MOV R3, #4 ; R3 = 4
0010021E 6801 LDR R1, [R0, #0] ; R1 = AT91C_PMC_SR (0xFFFFFC68)
00100220 4219 TST R1, R3
00100222 D0FC BEQ 0x10021E ; while(!PLLLOCK);
00100224 2108 MOV R1, #8 ; R1 = 8
00100226 6803 LDR R3, [R0, #0] ; R3 = AT91C_PMC_SR (0xFFFFFC68)
00100228 420B TST R3, R1
0010022A D0FB BEQ 0x100224 ; while(!MCKRDY);
0010022C 4B14 LDR R3, [PC,#0x050] ; R3 = [0x100280] =AT91C_PMC_MCKR (0xFFFFFC30)
0010022E 601A STR R2, [R3, #0] ; AT91C_PMC_MCKR (0xFFFFFC30) = 4
00100230 6802 LDR R2, [R0, #0] ; R2 = AT91C_PMC_SR (0xFFFFFC68)
00100232 420A TST R2, R1
00100234 D0FC BEQ 0x100230 ; while(!MCKRDY);
00100236 681A LDR R2, [R3, #0] ; R2 = AT91C_PMC_MCKR (0xFFFFFC30)
00100238 2403 MOV R4, #3 ; R4 = 3
0010023A 4314 ORR R4, R2 ; R4 = AT91C_PMC_MCKR (0xFFFFFC30) | 0x03
0010023C 601C STR R4, [R3, #0] ; AT91C_PMC_MCKR (0xFFFFFC30) = R4
0010023E 6802 LDR R2, [R0, #0] ; R2 = AT91C_PMC_SR (0xFFFFFC68)
00100240 420A TST R2, R1
00100242 D0FC BEQ 0x10023E ; while(!MCKRDY);
00100244 480F LDR R0, [PC,#0x03C] ; [0x100284] =AIC_SVR (0xFFFFF080)
00100246 4910 LDR R1, [PC,#0x040] ; [0x100288] =0x10015C
00100248 6001 STR R1, [R0, #0]
0010024A 2001 MOV R0, #1
0010024C 4A0D LDR R2, [PC,#0x034] ; [0x100284] =AIC_SVR (0xFFFFF080)
0010024E 4B0F LDR R3, [PC,#0x03C] ; [0x10028C] =0x100160
00100250 0081 LSL R1, R0, #2
00100252 5053 STR R3, [R2, R1]
00100254 1C40 ADD R0, R0, #1
00100256 281F CMP R0, #31
00100258 DBFA BLT 0x100250
0010025A 480D LDR R0, [PC,#0x034] ; R0 = [0x100290] =AIC_SPU (0xFFFFF134)
0010025C 490D LDR R1, [PC,#0x034] ; R1 = [0x100294] =0x100164
0010025E 6001 STR R1, [R0, #0] ; AIC_SPU (0xFFFFF134) = 0x00100164
00100260 BC10 POP {R4}
00100262 BC01 POP {R0}
00100264 4700 BX R0
00100266 46C0 ; fill blank
00100268 FFFFFD44 DW 0xFFFFFD44
0010026C FFFFFC20 DW 0xFFFFFC20
00100270 00004001 DW 0x00004001
00100274 FFFFFC68 DW 0xFFFFFC68
00100278 FFFFFC2C DW 0xFFFFFC2C
0010027C 1048100E DW 0x1048100E
00100280 FFFFFC30 DW 0xFFFFFC30
00100284 FFFFF080 DW 0xFFFFF080
00100288 0010015C DW 0x0010015C
0010028C 00100160 DW 0x00100160
00100290 FFFFF134 DW 0xFFFFF134
00100294 00100164 DW 0x00100164
;==================================================================================================
; R0 dest
; R1 bytes
; R2 source
flashwrite:
00100298 B5F0 PUSH {R4,R5,R6,R7, LR}
0010029A 0007 LSL R7, R0, #0 ; R7 = R0 dest
0010029C 000D LSL R5, R1, #0 ; R5 = R1 bytes
0010029E 0014 LSL R4, R2, #0 ; R4 = R2 source
001002A0 2000 MOV R0, #0
001002A2 43C0 MVN R0, R0 ; R0 = 0xFFFFFFFF
;-----------------------------------------------------------
001002A4 2D01 CMP R5, #1
001002A6 DB15 BLT 0x1002D4 ; if(R5 bytes < 1) then return
001002A8 2D81 CMP R5, #129
001002AA DA01 BGE 0x1002B0 ; if(R5 bytes >= 129) R6 = 128;
001002AC 002E LSL R6, R5, #0 ; else R6 = R5;
001002AE E000 B 0x1002B2
;-----------------------------------------------------------
001002B0 2680 MOV R6, #128 ; R6 = 128
;-----------------------------------------------------------
001002B2 480A LDR R0, [PC,#0x028] ; R0 = [0x1002DC] =0xFFF00000
001002B4 1838 ADD R0, R7, R0 ; R0 = 0xFFF00000 + R7 dest
001002B6 09C0 LSR R0, R0, #7 ; R0 = R0 << 7
; e.g. R0 = (0x102000 + 0xFFF00000) >> 7 = 0x40
001002B8 F0FF ; pre BL/BLX
001002BA FEAA BL 0x200010 ; call 0x200010 unlock flash
001002BC 0022 LSL R2, R4, #0 ; R2 = R4 source
001002BE 0031 LSL R1, R6, #0 ; R1 = R6 bytes
001002C0 0038 LSL R0, R7, #0 ; R0 = R7 dest
001002C2 F0FF ; pre BL/BLX
001002C4 FEBF BL 0x200044 ; call 0x200044
001002C6 1BAD SUB R5, R5, R6 ; R5 = R5 - R6
001002C8 3480 ADD R4, #128 ; R4 = R4 + 128
001002CA 3780 ADD R7, #128 ; R7 = R7 + 128
001002CC 2100 MOV R1, #0
001002CE 43C9 MVN R1, R1 ; R1 = 0xFFFFFFFF( -1 )
001002D0 4288 CMP R0, R1
001002D2 D0E7 BEQ 0x1002A4 ; if(return == -1) goto 0x1002A4
001002D4 BCF0 POP {R4,R5,R6,R7}
001002D6 BC02 POP {R1}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -