module Hardware.KansasLava.VGA
( VGA(..), RawVGA(..)
, encodeVGA
) where
import Language.KansasLava
import Language.KansasLava.Signal.Utils
import Data.Sized.Matrix as Matrix
import Data.Sized.Unsigned as Unsigned
data VGA clk r g b =
VGA{ vgaR :: Signal clk (Enabled r)
, vgaG :: Signal clk (Enabled g)
, vgaB :: Signal clk (Enabled b)
, vgaVSync, vgaHSync :: Signal clk Bool
}
data RawVGA clk r g b =
RawVGA{ vgaRawR :: Matrix r (Signal clk Bool)
, vgaRawG :: Matrix g (Signal clk Bool)
, vgaRawB :: Matrix b (Signal clk Bool)
, vgaRawVSync, vgaRawHSync :: Signal clk Bool
}
encodeVGA :: (Size r, Size g, Size b)
=> VGA clk (Unsigned r) (Unsigned g) (Unsigned b)
-> RawVGA clk r g b
encodeVGA VGA{..} = RawVGA{..}
where
vgaRawR = toColors vgaR
vgaRawG = toColors vgaG
vgaRawB = toColors vgaB
vgaRawVSync = vgaVSync
vgaRawHSync = vgaHSync
toColors c = fmap (isEnabled c .&&.) $ fromUnsigned (enabledVal c)