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

📄 vector.s

📁 基于三星公司的32处理器s3c4510的bootloader程序
💻 S
字号:
ModeMask 		EQU	0x1F
SVC32Mode		EQU	0x13
IRQ32Mode		EQU	0x12
FIQ32Mode		EQU	0x11
User32Mode		EQU	0x10
Abort32Mode		EQU	0x17
Undef32Mode		EQU	0x1B
IRQ_BIT			EQU	0x80
FIQ_BIT			EQU	0x40

;RomBaseAddr	EQU		0
RamBaseAddr	EQU		&100
;RamEndAddr	EQU		&200

	GBLS	MainEntry
MainEntry	SETS	"main"
	IMPORT	$MainEntry

;**********************************************************
;检查是否使用tasm.exe进行编译
	
 GBLL    THUMBCODE
    [ {CONFIG} = 16	
THUMBCODE SETL	{TRUE}
    CODE32
    |   
THUMBCODE SETL	{FALSE}
    ]

    [ THUMBCODE
    CODE32   ;for start-up code for Thumb mode
    ]    
 	    
;******************************************************
	AREA	SelfBoot,	CODE,	READONLY
	
	IMPORT	UDF_INS_VECTOR
	IMPORT	SWI_SVC_VECTOR
	IMPORT	INS_ABT_VECTOR
	IMPORT	DAT_ABT_VECTOR
	IMPORT	IRQ_SVC_VECTOR
	IMPORT	FIQ_SVC_VECTOR				
	
	ENTRY	
	IF :DEF: |ads$version|
	ELSE
	EXPORT	__main
__main
	ENDIF		
ResetEntry
	b	SYS_RST_HANDLER
	b	UDF_INS_HANDLER
	b	SWI_SVC_HANDLER
	b	INS_ABT_HANDLER
	b	DAT_ABT_HANDLER
	b	.
	b	IRQ_SVC_HANDLER
	b	FIQ_SVC_HANDLER

;******************************************************
	MACRO	
$Label	HANDLER	$Vector
$Label
	sub	lr, lr, #4			
	stmfd	sp!, {r0-r3, lr}	
	ldr	r0, =$Vector
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^		
	MEND
	
UDF_INS_HANDLER
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =UDF_INS_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^
SWI_SVC_HANDLER
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =SWI_SVC_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^
INS_ABT_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =INS_ABT_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^
DAT_ABT_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =DAT_ABT_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^
IRQ_SVC_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r12, lr}	
	mrs	r0, spsr
	stmfd	sp!, {r0}
	ldr	r0, =IRQ_SVC_VECTOR
	ldr	pc, [r0]	
FIQ_SVC_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r12, lr}	
	mrs	r0, spsr
	stmfd	sp!, {r0}
	ldr	r0, =IRQ_SVC_VECTOR
	ldr	pc, [r0]
				
;*******************************************************
SYS_RST_HANDLER
	mrs	r0, cpsr				;enter svc mode and disable irq,fiq
	bic	r0, r0, #ModeMask
	orr	r0, r0, #(SVC32Mode :OR: IRQ_BIT :OR: FIQ_BIT)
	msr	cpsr_c, r0
	
	IMPORT	InitSystem
	bl	InitSystem		
	
	adr	r0, ResetEntry
	mov	r3, #(RamBaseAddr<<16)
	ldr	r1, BaseOfROM	
	ldr	r2, TopOfROM	
	add	r1, r1, r3
	add	r2, r2, r3
0	
	ldmia	r0!, {r4-r11}
	stmia	r1!, {r4-r11}
	cmp	r1, r2
	bcc	%B0
	
	sub	r1, r1, r2
	sub	r0, r0, r1	
	ldr	r1, BaseOfBSS
	ldr	r2, BaseOfZero
	add	r1, r1, r3	
	add	r2, r2, r3	
1	
	cmp	r1,	r2	
	ldrcc	r4, [r0], #4
	strcc	r4, [r1], #4	
	bcc	%B1
	
	mov	r0,	#0
	ldr	r2,	EndOfBSS
	add	r2, r2, r3
3	
	cmp	r1,	r2
	strcc	r0, [r1], #4
	bcc	%B3						
	
	IMPORT	RemapMemory	
	
	adr	r0, ResetEntry
	ldr	r1, =RemapMemory	
	ldr	r2, BaseOfROM
	sub	r2, r1, r2
	add	r0, r0, r2
	add	r1, r2, r3
	mov	r2,	#32
0	
	ldr	r3, [r0], #4
	str	r3, [r1], #4
	subs	r2, r2,	#1
	bne	%B0
		
	ldr	lr,	GotoMain			 	
	b	RemapMemory		 		

GotoMain	DCD	$MainEntry

;***********************************************
	IMPORT	|Image$$RO$$Base|	; ROM code start	
	IMPORT	|Image$$RO$$Limit|	; RAM data starts after ROM program
	IMPORT	|Image$$RW$$Base|	; Pre-initialised variables
	IMPORT	|Image$$ZI$$Base|	; uninitialised variables
	IMPORT	|Image$$ZI$$Limit|	; End of variable RAM space

BaseOfROM	DCD	|Image$$RO$$Base|
TopOfROM	DCD	|Image$$RO$$Limit|
BaseOfBSS	DCD	|Image$$RW$$Base|
BaseOfZero	DCD	|Image$$ZI$$Base|
EndOfBSS	DCD	|Image$$ZI$$Limit|
	
;***********************************************
TIP_SIZE	EQU	256
	
	IMPORT	ResetMemSet
	EXPORT	trans_to_boot
trans_to_boot
	mov	lr, r1				; a2 = r1		
	ldr	r1, =ResetMemSet
	ldr	r2, BaseOfROM
	sub	r2, r1, r2
	add	r0, r0, r2			; a1 = r0
	mov	r2,	#TIP_SIZE
0	
	ldr	r3, [r1], #4
	str	r3, [r0], #4
	subs	r2, r2,	#1
	bne	%B0
						
	sub	r0, r0, #TIP_SIZE*4
	mov	pc,	r0	

;***********************************************
	
	END		
		

⌨️ 快捷键说明

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