@@ -64,9 +64,6 @@
# define M C F _ P S C 0 _ P S C T B _ 8 B I T _ _ M B A R + 0 x86 0 C
# define M C F _ P S C 0 _ P S C T B _ 8 B I T _ _ M B A R + 0 x86 0 C
# define M C F _ P S C 3 _ P S C R B _ 8 B I T _ _ M B A R + 0 x89 0 C
# define M C F _ P S C 3 _ P S C T B _ 8 B I T _ _ M B A R + 0 x89 0 C
.global _vec_init
.global _vec_init
/ / interrupt s o u r c e s
/ / interrupt s o u r c e s
@@ -203,9 +200,9 @@
# define M C F _ S L T 0 _ S C N T _ _ M B A R + 0 x90 8
# define M C F _ S L T 0 _ S C N T _ _ M B A R + 0 x90 8
/ *
/**********************************************************/
* macros
/ / macros
* /
/********************************************************** /
.altmacro
.altmacro
.macro irq vector,i n t _ m a s k ,c l r _ i n t
.macro irq vector,i n t _ m a s k ,c l r _ i n t
/ / move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
/ / move. w #0x2700 ,s r / / d i s a b l e i n t e r r u p t
@@ -291,10 +288,6 @@ init_vec_loop:
lea i r q7 ( p c ) ,a1
lea i r q7 ( p c ) ,a1
move. l a1 ,0 x11 c ( a0 )
move. l a1 ,0 x11 c ( a0 )
/ / 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 _ l o w l e v e l _ i s r _ h a n d l e r ( p c ) ,a1
/ / PSC3 i n t e r r u p t s o u r c e = 3 2
move. l a1 ,( I N T _ S O U R C E _ P S C 3 + 6 4 ) * 4 ( a0 )
/ / timer v e c t o r s ( t r i g g e r s w h e n v b a s h i g e t s c h a n g e d , u s e d f o r v i d e o p a g e c o p y )
/ / timer v e c t o r s ( t r i g g e r s w h e n v b a s h i g e t s c h a n g e d , u s e d f o r v i d e o p a g e c o p y )
lea h a n d l e r _ g p t 0 ( p c ) ,a1
lea h a n d l e r _ g p t 0 ( p c ) ,a1
@@ -311,6 +304,9 @@ init_vec_loop:
/ / install l o w l e v e l _ i s r _ h a n d l e r f o r t h e F E C 0 i n t e r r u p t
/ / install l o w l e v e l _ i s r _ h a n d l e r f o r t h e F E C 0 i n t e r r u p t
move. l a1 ,( I N T _ S O U R C E _ F E C 0 + 6 4 ) * 4 ( a0 )
move. l a1 ,( I N T _ S O U R C E _ F E C 0 + 6 4 ) * 4 ( a0 )
/ / install l o w l e v e l _ i s r _ h a n d l e r f o r t h e P S C 3 i n t e r r u p t
move. l a1 ,( I N T _ S O U R C E _ P S C 3 + 6 4 ) * 4 ( a0 )
# ifndef M A C H I N E _ F I R E B E E
# ifndef M A C H I N E _ F I R E B E E
/ / FEC1 n o t w i r e d o n t h e F i r e B e e
/ / FEC1 n o t w i r e d o n t h e F i r e B e e
move. l a1 ,( I N T _ S O U R C E _ F E C 1 + 6 4 ) * 4 ( a0 )
move. l a1 ,( I N T _ S O U R C E _ F E C 1 + 6 4 ) * 4 ( a0 )
@@ -412,9 +408,11 @@ access_mmu:
lea - 3 * 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
lea - 3 * 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 d1 / a0 - a1 ,( s p )
movem. l d1 / a0 - a1 ,( s p )
move. l 3 * 4 + 4 ( s p ) ,- ( s p ) / / p u s h e x c e p t i o n s t a c k f r a m e
move. l 5 * 4 + 4 ( s p ) ,- ( s p ) / / p u s h p r o g r a m c o u n t e r a t e x c e p t i o n
move. l d0 ,- ( s p ) / / f a u l t a d d r e s s
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
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
add. l #3 * 4 ,s p / / a d j u s t s t a c k
movem. l ( s p ) ,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
movem. l ( s p ) ,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 3 * 4 ( s p ) ,s p
lea 3 * 4 ( s p ) ,s p
@@ -563,7 +561,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
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 ) / /
movem. l d0 - d4 / a0 - a1 ,( a7 ) / /
clr. l d3 / / b e g i n n m i t 0
clr. l d3 / / b e g i n n m i t 0
jsr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s
/ / jsr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s F I X M E : w h y s h o u l d w e n e e d t h a t ?
/ / eintrag s u c h e n
/ / eintrag s u c h e n
irq6_next_sca :
irq6_next_sca :
@@ -603,37 +601,7 @@ irq6_sca_pn1c:
move. l d3 ,a1
move. l d3 ,a1
move. l #0x10000 ,d4 / / o n e w h o l e p a g e ( 1 M B )
move. l #0x10000 ,d4 / / o n e w h o l e p a g e ( 1 M B )
# define _ D O _ C P U _ C O P Y
# ifndef _ D O _ C P U _ C O P Y
/ / experiment : do v i d e o p a g e c o p y u s i n g C o l d f i r e D M A
lea - 1 5 * 4 ( s p ) ,s p
movem. l d0 - d1 / a0 - a1 ,( 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
clr. l - ( s p ) / / n o s p e c i a l f u n c t i o n s
move. l #M C D _ S I N G L E _ D M A | M C D _ T T _ F L A G S _ C W | M C D _ T T _ F L A G S _ R L | M C D _ T T _ F L A G S _ S P , - ( s p )
mov3 q #7 ,- ( s p ) / / h i g h e s t D M A p r i o r i t y
move. l #D M A _ A L W A Y S , - ( s p ) / / d o m e m o r y t o m e m o r y D M A
move. l #1 ,- ( s p ) / / c o p y 4 b y t e s a t a t i m e
move. l #0x100000 ,- ( s p ) / / c o p y 1 M e g a b y t e
move. l #4 ,- ( s p ) / / d e s t i n a t i o n i n c r e m e n t
move. l a1 ,- ( s p ) / / d e s t i n a t i o n a d r e s s
move. l #4 ,- ( s p ) / / s o u r c e i n c r e m e n t
move. l a0 ,- ( s p ) / / s o u r c e a d r e s s
move. l #1 ,- ( s p ) / / c h a n n e l 1
jsr _ M C D _ s t a r t D m a
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 1 5 * 4 ( s p ) ,s p / / a d j u s t s t a c k
wait_dma_finished :
clr. l - ( s p )
jsr _ M C D _ d m a S t a t u s
addq. l #4 ,s p
tst. l d0
cmp. l #6 ,d0
bne w a i t _ d m a _ f i n i s h e d
# else
irq6_vcd0_loop :
irq6_vcd0_loop :
move. l ( a0 ) + ,( a1 ) + / / p a g e c o p y
move. l ( a0 ) + ,( a1 ) + / / p a g e c o p y
move. l ( a0 ) + ,( a1 ) +
move. l ( a0 ) + ,( a1 ) +
@@ -641,7 +609,6 @@ irq6_vcd0_loop:
move. l ( a0 ) + ,( a1 ) +
move. l ( a0 ) + ,( a1 ) +
subq. l #1 ,d4
subq. l #1 ,d4
bne i r q6 _ v c d0 _ l o o p
bne i r q6 _ v c d0 _ l o o p
# endif / * _ D O _ C P U _ C O P Y * /
irq6_sca_pn :
irq6_sca_pn :
add. l #0x00100000 ,d3 / / n e x t
add. l #0x00100000 ,d3 / / n e x t
@@ -817,6 +784,7 @@ irq7:
move. l ( s p ) + ,a0
move. l ( s p ) + ,a0
rts / / F o r w a r d t o t h e A c c e s s E r r o r h a n d l e r
rts / / F o r w a r d t o t h e A c c e s s E r r o r h a n d l e r
/ *
/ *
* general p u r p o s e t i m e r 0 ( G P T 0 ) : v i d e o c h a n g e , l a t e r a l s o o t h e r s . G P T 0 i s u s e d a s
* general p u r p o s e t i m e r 0 ( G P T 0 ) : v i d e o c h a n g e , l a t e r a l s o o t h e r s . G P T 0 i s u s e d a s
* input t r i g g e r . I t i s c o n n e c t e d t o t h e T I N 0 s i g n a l o f t h e F P G A a n d t r i g g e r s e v e r y t i m e
* input t r i g g e r . I t i s c o n n e c t e d t o t h e T I N 0 s i g n a l o f t h e F P G A a n d t r i g g e r s e v e r y t i m e
@@ -839,6 +807,7 @@ handler_gpt0:
move. l ( a0 ) ,_ v i d e o _ s b t / / s a v e t i m e
move. l ( a0 ) ,_ v i d e o _ s b t / / s a v e t i m e
/ / FIXME : don' t w e n e e d t o g e t o u t h e r e ?
/ / FIXME : don' t w e n e e d t o g e t o u t h e r e ?
bra v i d e o _ c h g _ e n d
sca_other :
sca_other :
lsl. l #8 ,d0 / / b u i l d n e w s c r e e n s t a r t a d d r e s s f r o m A t a r i r e g i s t e r c o n t e n t s
lsl. l #8 ,d0 / / b u i l d n e w s c r e e n s t a r t a d d r e s s f r o m A t a r i r e g i s t e r c o n t e n t s
@@ -856,7 +825,7 @@ video_chg_1page:
bset. l d2 ,d4 / / s e t a s c h a n g e d
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 ?
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
move. l d4 ,_ v i d e o _ t l b
jsr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s
/ / jsr _ f l u s h _ a n d _ i n v a l i d a t e _ c a c h e s F I X M E : w h y s h o u l d w e n e e d t h a t ?
video_copy_data :
video_copy_data :
move. l d4 ,_ v i d e o _ t l b
move. l d4 ,_ v i d e o _ t l b
@@ -866,38 +835,6 @@ video_copy_data:
add. l #0x60000000 ,a1
add. l #0x60000000 ,a1
move. l #0x10000 ,d4 / / w h o l e p a g e
move. l #0x10000 ,d4 / / w h o l e p a g e
# ifndef _ D O _ C P U _ C O P Y
/ / experiment : do v i d e o p a g e c o p y u s i n g C o l d f i r e D M A
lea - 1 5 * 4 ( s p ) ,s p
movem. l d0 - d1 / a0 - a1 ,( 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
clr. l - ( s p ) / / n o s p e c i a l f u n c t i o n s
move. l #M C D _ S I N G L E _ D M A | M C D _ T T _ F L A G S _ C W | M C D _ T T _ F L A G S _ R L | M C D _ T T _ F L A G S _ S P , - ( s p )
mov3 q #7 ,- ( s p ) / / h i g h e s t D M A p r i o r i t y
move. l #D M A _ A L W A Y S , - ( s p ) / / d o m e m o r y t o m e m o r y D M A
move. l #1 ,- ( s p ) / / c o p y 4 b y t e s a t a t i m e
move. l #0x100000 ,- ( s p ) / / c o p y 1 M e g a b y t e
move. l #4 ,- ( s p ) / / d e s t i n a t i o n i n c r e m e n t
move. l a1 ,- ( s p ) / / d e s t i n a t i o n a d r e s s
move. l #4 ,- ( s p ) / / s o u r c e i n c r e m e n t
move. l a0 ,- ( s p ) / / s o u r c e a d r e s s
move. l #1 ,- ( s p ) / / c h a n n e l 1
jsr _ M C D _ s t a r t D m a
.wait_dma_finished :
clr. l - ( s p )
jsr _ M C D _ d m a S t a t u s
addq. l #4 ,s p
tst. l d0
cmp. l #6 ,d0
bne . w a i t _ d m a _ f i n i s h e d
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 1 5 * 4 ( s p ) ,s p / / a d j u s t s t a c k
# else
video_copy_data_loop :
video_copy_data_loop :
move. l ( a0 ) + ,( a1 ) + / / c o p y v i d e o p a g e c o n t e n t s t o r e a l s c r e e n
move. l ( a0 ) + ,( a1 ) + / / c o p y v i d e o p a g e c o n t e n t s t o r e a l s c r e e n
move. l ( a0 ) + ,( a1 ) +
move. l ( a0 ) + ,( a1 ) +
@@ -905,7 +842,6 @@ video_copy_data_loop:
move. l ( a0 ) + ,( a1 ) +
move. l ( a0 ) + ,( a1 ) +
subq. l #1 ,d4
subq. l #1 ,d4
bne v i d e o _ c o p y _ d a t a _ l o o p
bne v i d e o _ c o p y _ d a t a _ l o o p
# endif
/ / eintrag s u c h e n
/ / eintrag s u c h e n
move. l d0 ,M C F _ M M U _ M M U A R / / a d r e s s
move. l d0 ,M C F _ M M U _ M M U A R / / a d r e s s
@@ -927,20 +863,23 @@ video_copy_data_loop:
video_chg_2page :
video_chg_2page :
/ / test o f a d j a c e n t p a g e i s n e e d e d a l s o
/ / test o f a d j a c e n t p a g e i s n e e d e d a l s o
move. l d3 ,d0
move. l d3 ,d0
mvz. w 0 x f f f f82 1 0 ,d4 / / b y t s p r o z e i l e
mvz. w 0 x f f f f82 1 0 ,d4 / / V W R A P : w o r d s p e r s c a n l i n e
mvz. w 0 x f f f f82 a a ,d2 / / z e i l e n e n d e
mvz. w 0 x f f f f82 a a ,d2 / / V D E : v e r t i c a l d i s p l a y e n d
mvz. w 0 x f f f f82 a8 ,d1 / / z e i l e n s t a r t
mvz. w 0 x f f f f82 a8 ,d1 / / V D B : v e r t i c a l d i s p l a y b e g i n
sub. l d1 ,d2 / / d i f f e r e n z = a n z a h l z e i l e n
sub. l d1 ,d2 / / n u m b e r o f l i n e s
mulu d2 ,d4 / / m a x i m a l 4 8 0 z e i l e n
mulu d2 ,d4 / / t i me s n u m b e r o f w o r d s p e r l i n e
add. l d4 ,d0 / / v i d e o g r <EFBFBD> s s e
add. l d4 ,d0 / / v i d e o g r <EFBFBD> s s e
cmp. l #_ _ S T R A M _ E N D , d 0 / / m a x i m a l e a d d r e s s e
cmp. l #_ _ S T R A M _ E N D , d 0 / / s t a r t a d d r e s s > e n d o f S T R A M ?
bge v i d e o _ c h g _ e n d / / w e n n g l e i c h o d e r g r <EFBFBD> s s e r - > f e r t i g
bge v i d e o _ c h g _ e n d / / y e s - w e ' r e f i n i s h e d
moveq #20 ,d4
moveq #20 ,d4
move. l d0 ,d2
move. l d0 ,d2
lsr. l d4 ,d2 / / n e u e p a g e
lsr. l d4 ,d2 / / n e u e p a g e
move. l _ v i d e o _ t l b ,d4
move. l _ v i d e o _ t l b ,d4
bset. l d2 ,d4 / / s e t z e n a l s g e <EFBFBD> n d e r t
bset. l d2 ,d4 / / s e t z e n a l s g e <EFBFBD> n d e r t
beq v i d e o _ c o p y _ d a t a / / n e i n n o c h m a l
beq v i d e o _ c o p y _ d a t a / / n e i n n o c h m a l
jsr _ 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_chg_end :
video_chg_end :
lea M C F _ G P T 0 _ G M S ,a0 / / c l e a r i n t e r r u p t
lea M C F _ G P T 0 _ G M S ,a0 / / c l e a r i n t e r r u p t
bclr. b #0 ,3 ( a0 )
bclr. b #0 ,3 ( a0 )
@@ -960,7 +899,7 @@ video_chg_end:
.extern _isr_execute_handler
.extern _isr_execute_handler
_lowlevel_isr_handler :
_lowlevel_isr_handler :
move. w #0x2700 ,s r
move. w #0x2700 ,s r / / d o n o t d i s t u r b
link a6 ,#- 4 * 4 / / m a k e r o o m f o r
link a6 ,#- 4 * 4 / / m a k e r o o m f o r
movem. l d0 - d1 / a0 - a1 ,( s p ) / / g c c s c r a t c h r e g i s t e r s a n d s a v e t h e m ,
movem. l d0 - d1 / a0 - a1 ,( s p ) / / g c c s c r a t c h r e g i s t e r s a n d s a v e t h e m ,
/ / other r e g i s t e r s w i l l b e h a n d l e d b y g c c i t s e l f
/ / other r e g i s t e r s w i l l b e h a n d l e d b y g c c i t s e l f