2005-04-16 15:20:36 -07:00
/ *
* arch/ a l p h a / b o o t / h e a d . S
*
* initial b o o t l o a d e r s t u f f . .
* /
2013-03-08 12:43:37 -08:00
# include < a s m / p a l . h >
2005-04-16 15:20:36 -07:00
.set noreorder
.globl __start
.ent __start
__start :
br $ 2 9 ,2 f
2 : ldgp $ 2 9 ,0 ( $ 2 9 )
jsr $ 2 6 ,s t a r t _ k e r n e l
call_ p a l P A L _ h a l t
.end __start
.align 5
.globl wrent
.ent wrent
wrent :
.prologue 0
call_ p a l P A L _ w r e n t
ret ( $ 2 6 )
.end wrent
.align 5
.globl wrkgp
.ent wrkgp
wrkgp :
.prologue 0
call_ p a l P A L _ w r k g p
ret ( $ 2 6 )
.end wrkgp
.align 5
.globl switch_to_osf_pal
.ent switch_to_osf_pal
switch_to_osf_pal :
subq $ 3 0 ,1 2 8 ,$ 3 0
.frame $ 3 0 , 1 2 8 , $ 2 6
stq $ 2 6 ,0 ( $ 3 0 )
stq $ 1 ,8 ( $ 3 0 )
stq $ 2 ,1 6 ( $ 3 0 )
stq $ 3 ,2 4 ( $ 3 0 )
stq $ 4 ,3 2 ( $ 3 0 )
stq $ 5 ,4 0 ( $ 3 0 )
stq $ 6 ,4 8 ( $ 3 0 )
stq $ 7 ,5 6 ( $ 3 0 )
stq $ 8 ,6 4 ( $ 3 0 )
stq $ 9 ,7 2 ( $ 3 0 )
stq $ 1 0 ,8 0 ( $ 3 0 )
stq $ 1 1 ,8 8 ( $ 3 0 )
stq $ 1 2 ,9 6 ( $ 3 0 )
stq $ 1 3 ,1 0 4 ( $ 3 0 )
stq $ 1 4 ,1 1 2 ( $ 3 0 )
stq $ 1 5 ,1 2 0 ( $ 3 0 )
.prologue 0
stq $ 3 0 ,0 ( $ 1 7 ) / * s a v e K S P i n P C B * /
bis $ 3 0 ,$ 3 0 ,$ 2 0 / * a4 = K S P * /
br $ 1 7 ,1 f
ldq $ 2 6 ,0 ( $ 3 0 )
ldq $ 1 ,8 ( $ 3 0 )
ldq $ 2 ,1 6 ( $ 3 0 )
ldq $ 3 ,2 4 ( $ 3 0 )
ldq $ 4 ,3 2 ( $ 3 0 )
ldq $ 5 ,4 0 ( $ 3 0 )
ldq $ 6 ,4 8 ( $ 3 0 )
ldq $ 7 ,5 6 ( $ 3 0 )
ldq $ 8 ,6 4 ( $ 3 0 )
ldq $ 9 ,7 2 ( $ 3 0 )
ldq $ 1 0 ,8 0 ( $ 3 0 )
ldq $ 1 1 ,8 8 ( $ 3 0 )
ldq $ 1 2 ,9 6 ( $ 3 0 )
ldq $ 1 3 ,1 0 4 ( $ 3 0 )
ldq $ 1 4 ,1 1 2 ( $ 3 0 )
ldq $ 1 5 ,1 2 0 ( $ 3 0 )
addq $ 3 0 ,1 2 8 ,$ 3 0
ret ( $ 2 6 )
1 : call_ p a l P A L _ s w p p a l
.end switch_to_osf_pal
.align 3
.globl tbi
.ent tbi
tbi :
.prologue 0
call_ p a l P A L _ t b i
ret ( $ 2 6 )
.end tbi
.align 3
.globl halt
.ent halt
halt :
.prologue 0
call_ p a l P A L _ h a l t
.end halt
/* $16 - new stack page */
.align 3
.globl move_stack
.ent move_stack
move_stack :
.prologue 0
lda $ 0 , 0 x1 f f f ( $ 3 1 )
and $ 0 , $ 3 0 , $ 1 / * S t a c k o f f s e t * /
or $ 1 , $ 1 6 , $ 1 6 / * N e w s t a c k p o i n t e r * /
mov $ 3 0 , $ 1
mov $ 1 6 , $ 2
1 : ldq $ 3 , 0 ( $ 1 ) / * M o v e t h e s t a c k * /
addq $ 1 , 8 , $ 1
stq $ 3 , 0 ( $ 2 )
and $ 0 , $ 1 , $ 4
addq $ 2 , 8 , $ 2
bne $ 4 , 1 b
mov $ 1 6 , $ 3 0
ret ( $ 2 6 )
.end move_stack