@@ -27,23 +27,19 @@
# include " m 5 4 8 4 l . h "
# endif / * M A C H I N E _ F I R E B E E * /
.extern __Bas_base
.extern __SUP_SP
.extern _rom_entry
.extern __RAMBAR0
.extern _rt_cacr
.extern _rt_mod
.extern _rt_ssp
.extern _rt_usp
.extern _rt_vbr
.extern _illegal_instruction
.extern _privileg_violation
.extern _mmutr_miss
.extern __MBAR
.extern __MMUBAR
.extern _video_tlb
.extern _video_sbt
.extern cpusha
.extern _flush_and_invalidate_caches
.extern _xhdi_sd_install /* trap #0 exception vector for installation of xhdi SD card driver */
/* PCI interrupt handlers */
@@ -181,11 +177,8 @@
# define M C F _ M M U _ M M U D R _ P A ( x ) ( ( ( x ) & 0 x3 F F F F F ) < < 0 x A )
# define s t d _ m m u t r ( M C F _ M M U _ M M U T R _ S G | M C F _ M M U _ M M U T R _ V )
# define m m u o r d _ d ( M C F _ M M U _ M M U O R _ A C C | M C F _ M M U _ M M U O R _ U A A )
# define m m u o r d _ i ( M C F _ M M U _ M M U O R _ I T L B | M C F _ M M U _ M M U O R _ A C C | M C F _ M M U _ M M U O R _ U A A )
# define w r i t e t h r o u g h _ m m u d r ( M C F _ M M U _ M M U D R _ S Z ( 0 0 ) | M C F _ M M U _ M M U D R _ C M ( 0 0 ) | M C F _ M M U _ M M U D R _ R | M C F _ M M U _ M M U D R _ W | M C F _ M M U _ M M U D R _ X )
# define c o p y b a c k _ m m u d r ( M C F _ M M U _ M M U D R _ S Z ( 0 0 ) | M C F _ M M U _ M M U D R _ C M ( 0 1 ) | M C F _ M M U _ M M U D R _ R | M C F _ M M U _ M M U D R _ W | M C F _ M M U _ M M U D R _ X )
# define n o c a c h e _ p r e c i s e _ m m u d r ( M C F _ M M U _ M M U D R _ S Z ( 0 0 ) | M C F _ M M U _ M M U D R _ C M ( 1 0 ) | M C F _ M M U _ M M U D R _ R | M C F _ M M U _ M M U D R _ W | M C F _ M M U _ M M U D R _ X )
/ / equates f o r ( e x p e r i m e n t a l ) v i d e o p a g e c o p y i n g v i a C o l d f i r e D M A
.equ MCD_ S I N G L E _ D M A , 0 x10 0
@@ -216,10 +209,6 @@
/**********************************************************/
.altmacro
.macro irq vector,i n t _ m a s k ,c l r _ i n t
local i r q _ p r o t e c t
local s e v _ s u p i n t
local i r q _ e n d
move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
subq. l #8 ,a7
movem. l d0 / a5 ,( a7 ) / / s a v e r e g i s t e r s
@@ -227,57 +216,11 @@
lea M C F _ E P O R T _ E P F R ,a5
move. b #\ c l r _ i n t , ( a 5 ) / / c l e a r i n t p e n d i n g
# if M A C H I N E _ F I R E B E E
/ / test f o r p r o t e c t m o d e . O n l y f o r F i r e B e e ( m 5 4 8 4 L I T E h a s n o d i p s w i t c h )
move. b D I P _ S W I T C H a ,d0
btst #7 ,d0
b n e i r q _ p r o t e c t / / y e s
# endif / * M A C H I N E _ F I R E B E E * /
movem. l ( a7 ) ,d0 / a5 / / r e s t o r e r e g i s t e r s
addq. l #8 ,a7
move. l \ v e c t o r ,- ( a7 )
move #0x2 \ i n t _ m a s k \ ( ) 0 0 ,s r
rts
# if M A C H I N E _ F I R E B E E
irq_protect :
move. l u s p ,a5 / / g e t u s p
tst. b _ r t _ m o d / / s u p e r v i s o r m o d e a c t i v e ?
bne s e v _ s u p i n t / / y e s - >
mov3 q . l #- 1 ,_ r t _ m o d / / e n a b l e s u p e r v i s o r m o d e
move. l a5 ,_ r t _ u s p / / s a v e r t _ u s p
move. l _ r t _ s s p ,a5 / / g e t r t _ s s p
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / t r a n s f e r p c
move. l 8 ( a7 ) ,- ( a5 ) / / s r ,v e c
# else
move. w 8 ( a7 ) ,- ( a5 ) / / v e c t o r n o
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c v e r s c h i e b e n
move. w 1 0 ( a7 ) ,- ( a5 ) / / s r v e r s c h i e b e n
# endif
bra i r q _ e n d
sev_supint :
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . l 8 ( a7 ) ,- ( a5 ) / / s r ,v e c
bset #5 ,2 ( a5 ) / / a u f s u p e r s e t z e n
# else
move. w 8 ( a7 ) ,- ( a5 ) / / v e c t o r n r .
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c v e r s c h i e b e n
move. w 1 0 ( a7 ) ,- ( a5 ) / / s r v e r s c h i e b e n
bset #5 ,( a5 ) / / a u f s u p e r
# endif / * c f _ s t a c k * /
irq_end :
move. l a5 ,u s p / / u s p s e t z e n
lea \ v e c t o r ,a5
adda. l _ r t _ v b r ,a5
move. l ( a5 ) ,1 2 ( a7 ) / / v e c t o r a d r e s s e e i n t r a g e n
move. b #\ i n t _ m a s k , 10 ( a7 ) / / i n t m a s k e s e t z e n
movem. l ( a7 ) ,d0 / a5 / / r e g i s t e r z u r <EFBFBD> c k
addq. l #8 ,a7
rte / / u n d w e g
#e n d i f / * M A C H I N E _ F I R E B E E * /
.endm
/ *
@@ -327,58 +270,12 @@ init_vec_loop:
lea a c c e s s ( p c ) ,a1 / / s e t i l l e g a l a c c e s s e x c e p t i o n h a n d l e r
move. l a1 ,0 x08 ( a0 )
# ifdef M A C H I N E _ F I R E B E E / * o n l y t h e F i r e B e e h a s a d i p s w i t c h * /
move. b D I P _ S W I T C H a ,d0 / / + + v r
btst #7 ,d0
b e q n o _ p r o t e c t _ v e c t o r s
# elif M A C H I N E _ M 5 4 8 4 L I T E
bra n o _ p r o t e c t _ v e c t o r s
# endif / * M A C H I N E _ F I R E B E E * /
# ifdef M A C H I N E _ F I R E B E E / * p r o t e c t m o d e o n l y e n a b l e d f o r F i r e B e e * /
lea _ i l l e g a l _ i n s t r u c t i o n ( p c ) ,a1
move. l a1 ,0 x0 c ( a0 )
lea _ i l l e g a l _ i n s t r u c t i o n ( p c ) ,a1
move. l a1 ,0 x10 ( a0 )
lea z e r o _ d i v i d e ( p c ) ,a1
move. l a1 ,0 x14 ( a0 )
lea _ p r i v i l e g _ v i o l a t i o n ( p c ) ,a1
move. l a1 ,0 x20 ( a0 )
lea l i n e a ( p c ) ,a1
move. l a1 ,0 x28 ( a0 )
lea l i n e f ( p c ) ,a1
move. l a1 ,0 x2 c ( a0 )
lea f o r m a t ( p c ) ,a1
move. l a1 ,0 x38 ( a0 )
/ / floating p o i n t o v e r f l o w
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x c0 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x c4 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x c8 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x c c ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x d0 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x d4 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x d8 ( a0 )
lea f l p o o w ( p c ) ,a1
move. l a1 ,0 x d c ( a0 )
# endif / * M A C H I N E _ F I R E B E E * /
no_protect_vectors :
/ / trap #0 ( w i t h o u t a n y p a r a m e t e r s f o r n o w ) i s u s e d t o p r o v i d e B a S ' X H D I
/ / routine a d d r e s s t o E m u T O S .
lea _ x h d i _ s d _ i n s t a l l ,a1
move. l a1 ,0 x80 ( a0 ) / / t r a p #0 e x c e p t i o n v e c t o r
# ifdef M A C H I N E _ F I R E B E E
/ / ACP i n t e r r u p t s 1 - 7 ( u s e r - d e f i n e d , g e n e r a t e d b y F P G A o n t h e F i r e B e e , M 5 4 8 4 L I T E h a s i r q7 a n d i r q5 f o r P C I )
lea i r q1 ( p c ) ,a1
move. l a1 ,0 x10 4 ( a0 )
@@ -395,11 +292,6 @@ no_protect_vectors:
lea i r q7 ( p c ) ,a1
move. l a1 ,0 x11 c ( a0 )
/ *
* m5 4 4 8 L I T E h a s n e i t h e r P I C n o r e m u l a t e d V I D E L , s o w e d o n o t h i n g s p e c i a l f o r i t h e r e w h i c h k e e p s t h e
* std_ e x c _ v e c i n p l a c e w e s e t e a r l i e r
* /
# ifdef M A C H I N E _ F I R E B E E
/ / install P S C v e c t o r s ( u s e d f o r P I C c o m m u n i c a t i o n o n t h e F i r e B e e )
lea h a n d l e r _ p s c3 ( p c ) ,a1
/ / PSC3 i n t e r r u p t s o u r c e = 3 2
@@ -420,13 +312,6 @@ std_exc_vec:
move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
subq. l #8 ,a7
movem. l d0 / a5 ,( s p ) / / s a v e r e g i s t e r s
# ifdef M A C H I N E _ F I R E B E E
move. b D I P _ S W I T C H a ,d0 / / " p r o t e c t m o d e " ?
btst #7 ,d0
b n e s t v _ p r o t e c t / / y e s
# endif / * M A C H I N E _ F I R E B E E * /
move. w 8 ( s p ) ,d0 / / f e t c h v e c t o r
and. l #0x3fc ,d0 / / m a s k o u t v e c t o r n u m b e r
@@ -469,60 +354,9 @@ noprint:
rts / / j u m p t o e x c e p t i o n r o u t i n e
exception_text :
.ascii " EXCEPTION %d caught at %p "
.ascii " DEBUG: EXCEPTION %d caught at %p"
.byte 1 3 , 1 0 , 0
# ifdef M A C H I N E _ F I R E B E E
stv_protect :
move. l u s p ,a5 / / u s p h o l e n
t s t . b _ r t _ m o d / / s u p e r v i s o r ?
b n e s e v _ s u p / / j a - >
m o v3 q . l #- 1 ,_ r t _ m o d / / a u f s u p e r v i s o r s e t z e n
move. l a5 ,_ r t _ u s p / / r t _ u s p s p e i c h e r n
m o v e . l _ r t _ s s p ,a5 / / r t _ s s p h o l e n
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . l 8 ( a7 ) ,d0 / / s r h o l e n
move. l d0 ,- ( a5 ) / / s r t r a n s f e r i e r e n
s w a p d0 / / v e c - > l w
# else
move. w 8 ( a7 ) ,d0 / / v e c t o r h o l e n
move. w d0 ,- ( a5 ) / / a b l e g e n
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . w 1 0 ( a7 ) ,- ( a5 ) / / s r t r a n s f e r i e r e n
# endif
move. l a5 ,u s p / / u s p s e t z e n
and. l #0x3fc ,d0 / / v e c t o r n u m m e r a u s m a s k i e r e n
add. l _ r t _ v b r ,d0 / / + b a s i s
move. l d0 ,a5
move. l ( a5 ) ,1 2 ( a7 ) / / h i e r g e h t ' s w e i t e r
movem. l ( a7 ) ,d0 / a5 / / r e g i s t e r z u r <EFBFBD> c k
addq. l #8 ,a7
rte / / u n d w e g
s e v _ s u p :
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . l 8 ( a7 ) ,d0 / / s r h o l e n
bset #13 ,d0 / / w a r a u s r t s u p e r
move. l d0 ,- ( a5 ) / / s r t r a n s f e r i e r e n
s w a p d0 / / v e c - > l w
# else
move. w 8 ( a7 ) ,d0 / / v e c t o r h o l e n
move. w d0 ,- ( a5 ) / / a b l e g e n
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . w 1 0 ( a7 ) ,- ( a5 ) / / s r t r a n s f e r i e r e n
bset #5 ,( a5 ) / / w a r a u s s u p e r
# endif
move. l a5 ,u s p / / u s p s e t z e n
and. l #0x3fc ,d0 / / v e c t o r n u m m e r a u s m a s k i e r e n
add. l _ r t _ v b r ,d0 / / + b a s i s
move. l d0 ,a5
move. l ( a5 ) ,1 2 ( a7 ) / / h i e r g e h t ' s w e i t e r
movem. l ( a7 ) ,d0 / a5 / / r e g i s t e r z u r ü c k
addq. l #8 ,a7
rte / / u n d w e g
#e n d i f / * M A C H I N E _ F I R E B E E * /
.align 4
reset_vector :
move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
@@ -557,13 +391,15 @@ access_mmu:
cmp. l #_ _ F A S T R A M _ E N D , d 0 / / a b o v e m a x U s e r R A M a r e a ?
bge b u s _ e r r o r / / - > b u s e r r o r
lea - 4 * 4 ( s p ) ,s p / / s a v e g c c s c r a t c h r e g i s t e r s
movem. l d0 - d1 / a0 - a1 ,( s p )
lea - 5 * 4 ( s p ) ,s p / / s a v e g c c s c r a t c h r e g i s t e r s
movem. l d0 - d1 / a0 - a2 ,( s p )
move. l d0 ,- ( s p ) / / f a u l t a d d r e s s
jsr _ m m u t r _ m i s s / / e l s e w e h a v e a n M M U T L B m i s s
addq. l #4 ,s p
movem. l ( s p ) ,d0 - d1 / a0 - a1 / / r e s t o r e g c c s c r a t c h r e g i s t e r s
lea 4 * 4 ( s p ) ,s p
movem. l ( s p ) ,d0 - d1 / a0 - a2 / / r e s t o r e g c c s c r a t c h r e g i s t e r s
lea 5 * 4 ( s p ) ,s p
move. l ( s p ) + ,d0 / / r e s t o r e r e g i s t e r
@@ -604,6 +440,7 @@ zd_end:
move. l ( a7 ) + ,a0
r t e
# ifdef _ N O T _ U S E D _
l i n e a :
m o v e . w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
halt
@@ -626,6 +463,9 @@ flpoow:
halt
nop
nop
# endif / * _ N O T _ U S E D * /
irq1 :
irq 0 x64 ,1 ,0 x02
@@ -640,7 +480,7 @@ irq3:
irq4 : / / vbl
irq 0 x70 ,4 ,0 x10
# if M A C H I N E _ M 5 4 8 4 L I T E / / h a n d l e r s f o r M 5 4 8 4 L I T E
# if M A C H I N E _ M 5 4 8 4 L I T E _ n o t y e t / / h a n d l e r s f o r M 5 4 8 4 L I T E
irq5 : / / irq5 i s t i e d t o P C I I N T C # a n d P C I I N T D # o n t h e M 5484 L I T E
move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t s
@@ -706,7 +546,7 @@ irq6: // MFP interrupt from FPGA
lea - 2 8 ( a7 ) ,a7 / / s a v e m o r e r e g i s t e r s
movem. l d0 - d4 / a0 - a1 ,( a7 ) / /
clr. l d3 / / b e g i n n m i t 0
b sr c p u s h a / / c l e a r c a c h e s
j sr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s
/ / eintrag s u c h e n
irq6_next_sca :
@@ -845,14 +685,8 @@ irq6_3:
m o v3 q . l #- 1 ,_ r t _ m o d / / a u f s u p e r v i s o r s e t z e n
move. l a5 ,_ r t _ u s p / / r t _ u s p s p e i c h e r n
m o v e . l _ r t _ s s p ,a5 / / r t _ s s p h o l e n
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . l 8 ( a7 ) ,- ( a5 ) / / s r t r a n s f e r i e r e n
#e l s e
move. w 8 ( a7 ) ,- ( a5 ) / / v e c t o r t r a n s f e r i e r e n
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . w 1 0 ( a7 ) ,- ( a5 ) / / s r t r a n s f e r i e r e n
# endif
m o v e . l a5 ,u s p / / u s p s e t z e n
move. l 0 x F 0 0 2 0 0 0 0 ,a5 / / v e c t o r h o l e n : i n t a c k r o u t i n e
add. l _ r t _ v b r ,a5 / / v i r t u e l l e V B R d e s S y s t e m s
@@ -862,16 +696,9 @@ irq6_3:
move. b #6 ,2 ( a7 ) / / i n t m a s k e s e t z e n
rte / / u n d w e g
s e v _ s u p6 :
# ifdef c f _ s t a c k
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c t r a n s f e r i e r e n
m o v e . l 8 ( a7 ) ,- ( a5 ) / / s r ,v e c
bset #5 ,2 ( a5 ) / / a u f s u p e r s e t z e n
# else
move. w 8 ( a7 ) ,- ( a5 ) / / v e c t o r n r .
move. l 1 2 ( a7 ) ,- ( a5 ) / / p c v e r s c h i e b e n
move. w 1 0 ( a7 ) ,- ( a5 ) / / s r v e r s c h i e b e n
bset #5 ,( a5 ) / / a u f s u p e r
# endif
move. l a5 ,u s p / / u s p s e t z e n
move. l 0 x F 0 0 2 0 0 0 0 ,a5 / / v e c t o r h o l e n : i n t a c k r o u t i n e
add. l _ r t _ v b r ,a5 / / v i r t u e l l e V B R d e s S y s t e m s
@@ -1051,7 +878,7 @@ video_chg_1page:
bset. l d2 ,d4 / / s e t a s c h a n g e d
bne v i d e o _ c h g _ 2 p a g e / / w a s i t s e t a l r e a d y ?
move. l d4 ,_ v i d e o _ t l b
b sr c p u s h a / / c l e a r c a c h e
j sr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s
video_copy_data :
move. l d4 ,_ v i d e o _ t l b