⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v6boot.asm

📁 J-link v6版反汇编的启动代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  001002D8  4708      BX           R1
  001002DA  46C0      ; fill blank         
  001002DC  FFF00000  DW           0xFFF00000
;==================================================================================================
; software reset check
  001002E0  B570      PUSH         {R4,R5,R6, LR}
  001002E2  B0FF      SUB          SP, SP, #508
  001002E4  B081      SUB          SP, SP, #4               ; byte temp[512];
  001002E6  2280      MOV          R2, #128                 ; R2 = 0x80
  001002E8  4910      LDR          R1, [PC,#0x040]          ; R1 = [0x10032C] =0x108E00
  001002EA  2081      MOV          R0, #129
  001002EC  0340      LSL          R0, R0, #13              ; R0 = 0x102000
  001002EE  F000      ; pre BL/BLX 
  001002F0  F839      BL           0x100364                 ; call 0x100364 memcmp
  001002F2  2800      CMP          R0, #0
  001002F4  D015      BEQ          0x100322                 ; if(0x102000 to 0x10207F == 0x108E00 to 0x108E7F) then goto 0x100322
;-----------------------------------------------------------
; (0x102000 to 0x10207F != 0x108E00 to 0x108E7F)
  001002F6  F7FF      ; pre BL/BLX 
  001002F8  FF7D      BL           0x1001F4                 ; call 0x1001F4 ?main
  001002FA  2400      MOV          R4, #0                   ; R4 = 0
  001002FC  2580      MOV          R5, #128
  001002FE  00AD      LSL          R5, R5, #2               ; R5 = 0x00000200
;-----------------------------------------------------------
  00100300  0266      LSL          R6, R4, #9               ; R6 = R4 << 9
  00100302  002A      LSL          R2, R5, #0               ; R2 = 0x00000200 = 512 bytes
  00100304  4809      LDR          R0, [PC,#0x024]          ; R0 = [0x10032C] =0x108E00
  00100306  1831      ADD          R1, R6, R0               ; R1 = 0x108E00 + R6    source
  00100308  4668      MOV          R0, SP                   ; R0 = SP               dest
  0010030A  F000      ; pre BL/BLX 
  0010030C  F841      BL           0x100390                 ; call 0x100390 memread
  0010030E  466A      MOV          R2, SP                   ; R2 = SP               source
  00100310  0029      LSL          R1, R5, #0               ; R1 = 0x00000200 = 512 bytes
  00100312  2081      MOV          R0, #129
  00100314  0340      LSL          R0, R0, #13
  00100316  1830      ADD          R0, R6, R0               ; R0 = 0x102000 + R6    dest
  00100318  F7FF      ; pre BL/BLX 
  0010031A  FFBE      BL           0x100298                 ; call 0x100298 flashwrite
  0010031C  1C64      ADD          R4, R4, #1               ; R4 ++
  0010031E  2C37      CMP          R4, #55
  00100320  DBEE      BLT          0x100300
;-----------------------------------------------------------
; (0x102000 to 0x10207F == 0x108E00 to 0x108E7F)
  00100322  B07F      ADD          SP, SP, #508
  00100324  B001      ADD          SP, SP, #4
  00100326  BC70      POP          {R4,R5,R6}
  00100328  BC01      POP          {R0}
  0010032A  4700      BX           R0
  0010032C  00108E00  DW           0x00108E00
;==================================================================================================
main:
  00100330  B500      PUSH         {LR}
  00100332  20C0      MOV          R0, #192
  00100334  0080      LSL          R0, R0, #2               ; R0 = 0x00000300
  00100336  4906      LDR          R1, [PC,#0x018]          ; R1 = [0x100350] =RSTC_RSR (0xFFFFFD04)
  00100338  6809      LDR          R1, [R1, #0]             ; read R1 = RSTC_RSR (0xFFFFFD04)
  0010033A  4001      AND          R1, R0                   ; R1 = RSTC_RSR (0xFFFFFD04) & 0x00000300   RSTTYP
  0010033C  4281      CMP          R1, R0
  0010033E  D101      BNE          0x100344                 ; if(reset type not processor reset) then goto 0x100344
;-----------------------------------------------------------
;processor reset by software
  00100340  F7FF      ; pre BL/BLX 
  00100342  FFCE      BL           0x1002E0                 ; call 0x1002E0     software reset check
;-----------------------------------------------------------
  00100344  F000      ; pre BL/BLX 
  00100346  F80A      BL           0x10035C                 ; call 0x10035C     call APP
;-----------------------------------------------------------
  00100348  4802      LDR          R0, [PC,#0x008]          ; [0x100354] =RSTC_RCR (0xFFFFFD00)
  0010034A  4903      LDR          R1, [PC,#0x00C]          ; [0x100358] =0xA5000001
  0010034C  6001      STR          R1, [R0, #0]             ; RSTC_RCR (0xFFFFFD00) = 0xA5000001
                                                            ; processor reset
  0010034E  E7FD      B            0x10034C
  00100350  FFFFFD04  DW           0xFFFFFD04
  00100354  FFFFFD00  DW           0xFFFFFD00
  00100358  A5000001  DW           0xA5000001
;==================================================================================================
  0010035C  4B00      LDR          R3, [PC,#0x000]          ; [0x100360] =0x102000
  0010035E  4718      BX           R3                       ; call 0x102000     APP
  00100360  00102000  DW           0x00102000
;==================================================================================================
; R0 s1
; R1 s2
; R2 size
; return 0 equ
; return 1 diff
memcmp:
  00100364  B410      PUSH         {R4}
  00100366  2A00      CMP          R2, #0
  00100368  D00D      BEQ          0x100386
  0010036A  7803      LDRB         R3, [R0, #0]
  0010036C  780C      LDRB         R4, [R1, #0]
  0010036E  42A3      CMP          R3, R4
  00100370  D005      BEQ          0x10037E
  00100372  D202      BCS          0x10037A
  00100374  2000      MOV          R0, #0
  00100376  43C0      MVN          R0, R0
  00100378  E006      B            0x100388
  0010037A  2001      MOV          R0, #1
  0010037C  E004      B            0x100388
  0010037E  1C40      ADD          R0, R0, #1
  00100380  1C49      ADD          R1, R1, #1
  00100382  1E52      SUB          R2, R2, #1
  00100384  D1F1      BNE          0x10036A
  00100386  2000      MOV          R0, #0
  00100388  BC10      POP          {R4}
  0010038A  B000      ADD          SP, SP, #0
  0010038C  4770      BX           LR
  0010038E  0000      ; fill blank
;==================================================================================================
; R0 dest
; R1 source
; R2 byte numbers
memread:
  00100390  B410      PUSH         {R4}
  00100392  0003      LSL          R3, R0, #0               ; R3 = R0
  00100394  2A00      CMP          R2, #0
  00100396  D005      BEQ          0x1003A4                 ; if (numbers == 0) then return
  00100398  780C      LDRB         R4, [R1, #0]             ; R4 byte = [R1]
  0010039A  1C49      ADD          R1, R1, #1               ; R1 ++
  0010039C  701C      STRB         R4, [R3, #0]             ; [R3] = R4
  0010039E  1C5B      ADD          R3, R3, #1               ; R3 ++
  001003A0  1E52      SUB          R2, R2, #1               ; R2 --
  001003A2  D1F9      BNE          0x100398
  001003A4  BC10      POP          {R4}
  001003A6  B000      ADD          SP, SP, #0
  001003A8  4770      BX           LR
;==================================================================================================
无效代码
  001003AA  0000      LSL          R0, R0, #0
  001003AC  0609      LSL          R1, R1, #24
  001003AE  0E09      LSR          R1, R1, #24
  001003B0  0003      LSL          R3, R0, #0
  001003B2  2A00      CMP          R2, #0
  001003B4  D003      BEQ          0x1003BE
  001003B6  7019      STRB         R1, [R3, #0]
  001003B8  1C5B      ADD          R3, R3, #1
  001003BA  1E52      SUB          R2, R2, #1
  001003BC  D1FB      BNE          0x1003B6
  001003BE  B000      ADD          SP, SP, #0
  001003C0  4770      BX           LR
  001003C2  FFFF      BL           0x1013C2
;==================================================================================================
INITTAB:
  001003C4  000000A8  DW           0x000000A8
  001003C8  00200000  DW           0x00200000
  001003CC  001003D0  DW           0x001003D0
;==================================================================================================
;==================================================================================================
RAM Functions
;==================================================================================================
check FRDY bit
return AT91C_MC_FSR (0xFFFFFF68)
  00200000  2097      MOV          R0, #151
  00200002  43C0      MVN          R0, R0                   ; R0 = AT91C_MC_FSR (0xFFFFFF68)
  00200004  6800      LDR          R0, [R0, #0]
  00200006  07C1      LSL          R1, R0, #31              ; R1 = AT91C_MC_FSR 的 FRDY bit
  00200008  D5FA      BPL          0x200000                 ; while(! FRDY);
  0020000A  B000      ADD          SP, SP, #0
  0020000C  4770      BX           LR
  0020000E  0000      ; fill blank
;==================================================================================================
unlock flash
; R0 page number
; return lock status
  00200010  B500      PUSH         {LR}
  00200012  219F      MOV          R1, #159
  00200014  43C9      MVN          R1, R1                   ; R1 = AT91C_MC_FMR(0xFFFFFF60)
  00200016  4A23      LDR          R2, [PC,#0x08C]          ; R2 = [0x2000A4] =0x00300100
  00200018  600A      STR          R2, [R1, #0]             ; AT91C_MC_FMR(0xFFFFFF60) = 0x00300100
  0020001A  219B      MOV          R1, #155
  0020001C  43C9      MVN          R1, R1                   ; R1 = AT91C_MC_FCR (0xFFFFFF64)
  0020001E  0200      LSL          R0, R0, #8               ; R0 = R0 >> 8
  00200020  4A1F      LDR          R2, [PC,#0x07C]          ; R2 = [0x2000A0] =0x0003FF00
  00200022  4002      AND          R2, R0                   ; R2 = R0 & 0x0003FF00
  00200024  4806      LDR          R0, [PC,#0x018]          ; R0 = [0x200040] =0x5A000004
  00200026  46C0      NOP          
  00200028  4310      ORR          R0, R2                   ; R0 = R2 | 0x5A000004
  0020002A  6008      STR          R0, [R1, #0]             ; AT91C_MC_FCR (0xFFFFFF64) = R0  clear lock bit
  0020002C  F7FF      ; pre BL/BLX 
  0020002E  FFE8      BL           0x200000                 ; check FRDY bit
  00200030  2097      MOV          R0, #151
  00200032  43C0      MVN          R0, R0                   ; R0 = AT91C_MC_FSR (0xFFFFFF68)
  00200034  6800      LDR          R0, [R0, #0]
  00200036  0C00      LSR          R0, R0, #16
  00200038  0400      LSL          R0, R0, #16              ; R0 = R0 & 0xFFFF0000  lock status
  0020003A  BC02      POP          {R1}
  0020003C  4708      BX           R1
  0020003E  46C0      NOP          
  00200040  5A000004  DW           0x5A000004
;==================================================================================================
; R0 dest
; R1 bytes
; R2 source
  00200044  B530      PUSH         {R4,R5, LR}
  00200046  239F      MOV          R3, #159
  00200048  43DB      MVN          R3, R3                   ; R3 = AT91C_MC_FMR(0xFFFFFF60)
  0020004A  4C14      LDR          R4, [PC,#0x050]          ; R4 = [0x20009C] =0x00480100
  0020004C  601C      STR          R4, [R3, #0]             ; AT91C_MC_FMR(0xFFFFFF60) = 0x00480100
  0020004E  4B11      LDR          R3, [PC,#0x044]          ; R3 = [0x200094] =0xFFF00000
  00200050  18C3      ADD          R3, R0, R3               ; R3 = 0xFFF00000 + R0 dest
  00200052  09DB      LSR          R3, R3, #7               ; R3 = R3 >> 7      
                                                            ; e.g. R0 = (0x102000 + 0xFFF00000) >> 7 = 0x40
  00200054  2400      MOV          R4, #0                   ; R4 = 0
;-----------------------------------------------------------
  00200056  2901      CMP          R1, #1
  00200058  DB07      BLT          0x20006A                 ; if(R1 bytes < 1) then goto 0x20006A
  0020005A  6815      LDR          R5, [R2, #0]             ; read source
  0020005C  6005      STR          R5, [R0, #0]             ; write dest
  0020005E  1C64      ADD          R4, R4, #1               ; R4 ++
  00200060  1D00      ADD          R0, R0, #4               ; R0 += 4
  00200062  1D12      ADD          R2, R2, #4               ; R2 += 4
  00200064  1F09      SUB          R1, R1, #4               ; R1 -= 4
  00200066  2C80      CMP          R4, #128
  00200068  D3F5      BCC          0x200056                 ; if(R4 < 128) then goto 0x200056
;-----------------------------------------------------------
  0020006A  209B      MOV          R0, #155
  0020006C  43C0      MVN          R0, R0                   ; R0 = AT91C_MC_FCR (0xFFFFFF64)
  0020006E  0219      LSL          R1, R3, #8               ; R1 = R3 << 8
  00200070  4A0B      LDR          R2, [PC,#0x02C]          ; R2 = [0x2000A0] =0x0003FF00
  00200072  400A      AND          R2, R1                   ; R2 = R1 & 0x0003FF00
  00200074  4908      LDR          R1, [PC,#0x020]          ; R1 = [0x200098] =0x5A000001
  00200076  4311      ORR          R1, R2                   ; R1 = 0x5A000001 | R2
  00200078  6001      STR          R1, [R0, #0]             ; AT91C_MC_FCR (0xFFFFFF64) = R1  write page
  0020007A  F7FF      ; pre BL/BLX 
  0020007C  FFC1      BL           0x200000                 ; check FRDY bit
  0020007E  210C      MOV          R1, #12                  ; R1 = 0x0C
  00200080  4208      TST          R0, R1
  00200082  D001      BEQ          0x200088
  00200084  2000      MOV          R0, #0                   ; R0 = 0    write flash ok
  00200086  E001      B            0x20008C                 ; return
;-----------------------------------------------------------
  00200088  2000      MOV          R0, #0
  0020008A  43C0      MVN          R0, R0                   ; R0 = 0xFFFFFFFF = -1  write flash err
;-----------------------------------------------------------
  0020008C  BC30      POP          {R4,R5}
  0020008E  BC02      POP          {R1}
  00200090  4708      BX           R1
  00200092  46C0      ; fill blank
  00200094  FFF00000  DW           0xFFF00000
  00200098  5A000001  DW           0x5A000001
  0020009C  00480100  DW           0x00480100
  002000A0  0003FF00  DW           0x0003FF00
  002000A4  00300100  DW           0x00300100
;==================================================================================================
;==================================================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -