@ -30,6 +30,13 @@
.text
.global _start
_start :
/ *
* reserve r e g i s t e r s :
* r10 : Stores l i t t l e / b i g e n d i a n o f f s e t f o r v e c t o r s
* r2 : Stores i m m o p c o d e
* r3 : Stores b r a i o p c o d e
* /
mts r m s r , r0 / * d i s a b l e c a c h e * /
addi r1 , r0 , C O N F I G _ S Y S _ I N I T _ S P _ O F F S E T
addi r1 , r1 , - 4 / * D e c r e m e n t S P t o t o p o f m e m o r y * /
@ -44,52 +51,34 @@ _start:
* 4 b) B I G e n d i a n - r10 c o n t a i n s 0 x0 b e c a u s e 0 x2 o f f s e t i s o n a d d r 0 x3
* /
addik r6 , r0 , 0 x2 / * B I G / L I T T L E e n d i a n o f f s e t * /
swi r6 , r0 , 0
lbui r10 , r0 , 0
swi r6 , r0 , 0 x40
swi r10 , r0 , 0 x50
/* add opcode instruction for 32bit jump - 2 instruction imm & brai*/
addi r6 , r0 , 0 x b00 0 0 0 0 0 / * h e x b00 0 o p c o d e i m m * /
swi r6 , r0 , 0 x0 / * r e s e t a d d r e s s * /
swi r6 , r0 , 0 x8 / * u s e r v e c t o r e x c e p t i o n * /
swi r6 , r0 , 0 x10 / * i n t e r r u p t * /
swi r6 , r0 , 0 x20 / * h a r d w a r e e x c e p t i o n * /
addi r6 , r0 , 0 x b80 8 0 0 0 0 / * h e w b80 8 o p c o d e b r a i * /
swi r6 , r0 , 0 x4 / * r e s e t a d d r e s s * /
swi r6 , r0 , 0 x C / * u s e r v e c t o r e x c e p t i o n * /
swi r6 , r0 , 0 x14 / * i n t e r r u p t * /
swi r6 , r0 , 0 x24 / * h a r d w a r e e x c e p t i o n * /
lwi r7 , r0 , 0 x28
swi r6 , r0 , 0 x28 / * u s e d f i r s t u n u s e d M B v e c t o r * /
lbui r10 , r0 , 0 x28 / * u s e d f i r s t u n u s e d M B v e c t o r * /
swi r7 , r0 , 0 x28
/* add opcode instruction for 32bit jump - 2 instruction imm & brai */
addi r2 , r0 , 0 x b00 0 0 0 0 0 / * h e x b00 0 o p c o d e i m m * /
addi r3 , r0 , 0 x b80 8 0 0 0 0 / * h e w b80 8 o p c o d e b r a i * /
# ifdef C O N F I G _ S Y S _ R E S E T _ A D D R E S S
/* reset address */
swi r2 , r0 , 0 x0 / * r e s e t a d d r e s s - i m m o p c o d e * /
swi r3 , r0 , 0 x4 / * r e s e t a d d r e s s - b r a i o p c o d e * /
addik r6 , r0 , C O N F I G _ S Y S _ R E S E T _ A D D R E S S
sw r6 , r1 , r0
lhu r7 , r1 , r0
shi r7 , r0 , 0 x2
shi r6 , r0 , 0 x6
/ *
* Copy U - B o o t c o d e t o C O N F I G _ S Y S _ T E X T _ B A S E
* solve p r o b l e m w i t h s b r k _ b a s e
* /
# if ( C O N F I G _ S Y S _ R E S E T _ A D D R E S S ! = C O N F I G _ S Y S _ T E X T _ B A S E )
addi r4 , r0 , _ _ e n d
addi r5 , r0 , _ _ t e x t _ s t a r t
rsub r4 , r5 , r4 / * s i z e = _ _ e n d - _ _ t e x t _ s t a r t * /
addi r6 , r0 , C O N F I G _ S Y S _ R E S E T _ A D D R E S S / * s o u r c e a d d r e s s * /
addi r7 , r0 , 0 / * c o u n t e r * /
4 :
lw r8 , r6 , r7
sw r8 , r5 , r7
addi r7 , r7 , 0 x4
cmp r8 , r4 , r7
blti r8 , 4 b
# endif
lhu r7 , r1 , r10
rsubi r8 , r10 , 0 x2
sh r7 , r0 , r8
rsubi r8 , r10 , 0 x6
sh r6 , r0 , r8
# endif
# ifdef C O N F I G _ S Y S _ U S R _ E X C E P
/* user_vector_exception */
swi r2 , r0 , 0 x8 / * u s e r v e c t o r e x c e p t i o n - i m m o p c o d e * /
swi r3 , r0 , 0 x C / * u s e r v e c t o r e x c e p t i o n - b r a i o p c o d e * /
addik r6 , r0 , _ e x c e p t i o n _ h a n d l e r
sw r6 , r1 , r0
/ *
@ -121,6 +110,9 @@ _start:
# ifdef C O N F I G _ S Y S _ I N T C _ 0
/* interrupt_handler */
swi r2 , r0 , 0 x10 / * i n t e r r u p t - i m m o p c o d e * /
swi r3 , r0 , 0 x14 / * i n t e r r u p t - b r a i o p c o d e * /
addik r6 , r0 , _ i n t e r r u p t _ h a n d l e r
sw r6 , r1 , r0
lhu r7 , r1 , r10
@ -131,6 +123,9 @@ _start:
# endif
/* hardware exception */
swi r2 , r0 , 0 x20 / * h a r d w a r e e x c e p t i o n - i m m o p c o d e * /
swi r3 , r0 , 0 x24 / * h a r d w a r e e x c e p t i o n - b r a i o p c o d e * /
addik r6 , r0 , _ h w _ e x c e p t i o n _ h a n d l e r
sw r6 , r1 , r0
lhu r7 , r1 , r10