📄 init.s
字号:
;;**************************************************************
;;BootLoader for MSimulator,you can only free use it for personal study purpose!
;;www.MShowTec.com for more information.
;;lmjx,Email:limiao@mshowtec.com,All Right Reserved.
;;**************************************************************
IMPORT undef
IMPORT swi
IMPORT prefetch
IMPORT data
IMPORT irq
IMPORT fiq
AREA Init, CODE, READONLY
CODE32
GET snds.s
ENTRY
start
B reset ; Reset
B undef ; Undef
B swi ; Software interrupt
B prefetch ; Prefetch Abort
B data ; Data Abort
NOP ; Reserved
B irq ; Irq
B fiq ; Fiq
reset
;Part 1
;***************************************************************
;disable interrupts in CPU and switch to SVC32 mode
MRS r0, cpsr
BIC r0, r0, #MASK_MODE
ORR r0, r0, #MODE_SVC32
ORR r0, r0, #I_BIT
ORR r0, r0, #F_BIT
MSR cpsr_c, r0
LDR r2, =ARM7_INTMASK ;R2->interrupt controller
MVN r1, #0 ;&FFFFFFFF
STR r1, [r2] ;disable all interrupt soucres
LDR r2, =ARM7_INTPEND ;R2->interrupt pend register.
MOV r1, #0 ;&FFFFFFFF
STR r1, [r2] ;clear all interrupt flags.
;Part 2
;****************************************************************
;Initalize the memory as followa:
; FLASH @ 0 ~ 8 M
; SDRAM @ 8 ~ 16M
LDR r2, =ARM7_MEMMAP
LDR r1, =0x08080800 ;8M flash form address 0x00000000,8M sdram form 0x08000000
STR r1, [r2]
;Part 3
;***********************************************************************
;Set stack pointer & jump to c function
; Put the stack base address into R0
LDR r0, =(0x1000000-0x10000)
; Add the stack size to get the top of the stack in R0
ADD r0,r0,#0x6000
SUB r0,r0,#4
; stack IRQ
MOV r3,#2_11010010
MSR CPSR_c,r3
MOV r13,r0
; stack ABORT
SUB r0,r0,#0x1000
MOV r3,#2_11010111
MSR CPSR_c,r3
MOV r13,r0
; stack UNDEF
SUB r0,r0,#0x1000
MOV r3,#2_11011011
MSR CPSR_c,r3
MOV r13,r0
; stack FIQ
SUB r0,r0,#0x1000
MOV r3,#2_11010001
MSR CPSR_c,r3
MOV r13,r0
; stack SYSTEM(USER)
SUB r0,r0,#0x1000
MOV r3,#2_11011111
MSR CPSR_c,r3
MOV r13,r0
; stack SVC
SUB r0,r0,#0x1000
MOV r3,#2_11010011
MSR CPSR_c,r3
MOV r13,r0
IMPORT loadkernel
LDR pc, =loadkernel
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR r0,=bottom_of_heap
MOV pc,lr
AREA |C$$data|
bottom_of_heap
% 4
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -