📄 nand_s.s
字号:
;
; Copyright (c) Microsoft Corporation. All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
; If you did not accept the terms of the EULA, you are not authorized to use
; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
; install media.
;
;*************************************************************
; NAME : NAND FLASH Subroutine for a410 bootstrap
; DATE : 18.FEB.2002
; DESC :
; 02.18.2002:purnnamu: modified for A410
; 04.24.2002:purnnamu: optimized for NAND flash bootstrap
;*************************************************************
A410_BASE_ADDR EQU 0x2000000
MACRO
LDR4STR1 $src,$tmp1,$tmp2
ldrb $tmp1,[$src]
ldrb $tmp2,[$src]
orr $tmp1,$tmp1,$tmp2,LSL #8
ldrb $tmp2,[$src]
orr $tmp1,$tmp1,$tmp2,LSL #16
ldrb $tmp2,[$src]
orr $tmp1,$tmp1,$tmp2,LSL #24
MEND
AREA |C$$code|, CODE, READONLY
EXPORT __RdPage512
__RdPage512
;input:a1(r0)=pPage
stmfd sp!,{r1-r11}
ldr r1,=0x4e00000c ;NFDATA
mov r2,#0x200
0
LDR4STR1 r1,r4,r3
LDR4STR1 r1,r5,r3
LDR4STR1 r1,r6,r3
LDR4STR1 r1,r7,r3
LDR4STR1 r1,r8,r3
LDR4STR1 r1,r9,r3
LDR4STR1 r1,r10,r3
LDR4STR1 r1,r11,r3
stmia r0!,{r4-r11}
subs r2,r2,#32
bne %B0
ldmfd sp!,{r1-r11}
mov pc,lr
EXPORT __RdPage512Unalign
__RdPage512Unalign
stmfd sp!,{r1 - r12}
ldr r1, =0x4e00000c ;NFDATA
mov r2, #480
; Calculate number of unaligned bytes to read (r12 = 4 - (r0 & 3))
and r12, r0, #3
rsb r12, r12, #4
mov r3, r12
rd_unalign1
; Read unaligned bytes
ldrb r4, [r1]
strb r4, [r0]
add r0, r0, #1
subs r3, r3, #1
bne rd_unalign1
rd_main
; Read 480 bytes (32 x 15)
LDR4STR1 r1, r4, r3
LDR4STR1 r1, r5, r3
LDR4STR1 r1, r6, r3
LDR4STR1 r1, r7, r3
LDR4STR1 r1, r8, r3
LDR4STR1 r1, r9, r3
LDR4STR1 r1, r10, r3
LDR4STR1 r1, r11, r3
stmia r0!, {r4 - r11}
subs r2, r2, #32
bne rd_main
; Read 28 bytes
LDR4STR1 r1, r4, r3
LDR4STR1 r1, r5, r3
LDR4STR1 r1, r6, r3
LDR4STR1 r1, r7, r3
LDR4STR1 r1, r8, r3
LDR4STR1 r1, r9, r3
LDR4STR1 r1, r10, r3
stmia r0!, {r4 - r10}
; Read trailing unaligned bytes
rsbs r12, r12, #4
beq rd_exit
rd_unalign2
ldrb r4, [r1]
strb r4, [r0]
add r0, r0, #1
subs r12, r12, #1
bne rd_unalign2
rd_exit
ldmfd sp!, {r1 - r12}
mov pc, lr ; return
EXPORT __RdPage256
__RdPage256
;input:a1(r0)=pPage
stmfd sp!,{r1-r11}
ldr r1,=0x4e00000c ;NFDATA
mov r2,#0x100
0
LDR4STR1 r1,r4,r3
LDR4STR1 r1,r5,r3
LDR4STR1 r1,r6,r3
LDR4STR1 r1,r7,r3
LDR4STR1 r1,r8,r3
LDR4STR1 r1,r9,r3
LDR4STR1 r1,r10,r3
LDR4STR1 r1,r11,r3
stmia r0!,{r4-r11}
subs r2,r2,#32
bne %B0
ldmfd sp!,{r1-r11}
mov pc,lr
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -