retroclash-lib-0.1.2.1: Code shared across the code samples in the book "Retrocomputing with Clash"
Safe HaskellNone
LanguageHaskell2010

RetroClash.Memory

Documentation

type RAM dom addr dat = Signal dom addr -> Signal dom (Maybe (addr, dat)) -> Signal dom dat Source #

type ROM dom addr dat = Signal dom addr -> Signal dom dat Source #

type Port dom addr dat a = Signal dom (Maybe (PortCommand addr dat)) -> (Signal dom dat, a) Source #

type Port_ dom addr dat = Signal dom (Maybe (PortCommand addr dat)) -> Signal dom dat Source #

packRam :: BitPack dat => RAM dom addr (BitVector (BitSize dat)) -> RAM dom addr dat Source #

data Handle addr Source #

mapH :: ExpQ -> Handle addr' -> Addressing addr (Handle addr') Source #

data Addressing addr a Source #

Instances

Instances details
Monad (Addressing addr) Source # 
Instance details

Defined in RetroClash.Memory

Methods

(>>=) :: Addressing addr a -> (a -> Addressing addr b) -> Addressing addr b #

(>>) :: Addressing addr a -> Addressing addr b -> Addressing addr b #

return :: a -> Addressing addr a #

Functor (Addressing addr) Source # 
Instance details

Defined in RetroClash.Memory

Methods

fmap :: (a -> b) -> Addressing addr a -> Addressing addr b #

(<$) :: a -> Addressing addr b -> Addressing addr a #

Applicative (Addressing addr) Source # 
Instance details

Defined in RetroClash.Memory

Methods

pure :: a -> Addressing addr a #

(<*>) :: Addressing addr (a -> b) -> Addressing addr a -> Addressing addr b #

liftA2 :: (a -> b -> c) -> Addressing addr a -> Addressing addr b -> Addressing addr c #

(*>) :: Addressing addr a -> Addressing addr b -> Addressing addr b #

(<*) :: Addressing addr a -> Addressing addr b -> Addressing addr a #

memoryMap :: forall addr a. Backpane a => Addr -> Dat -> Addressing addr a -> Component Source #

memoryMap_ :: forall addr dat. Addr -> Dat -> Addressing addr () -> Dat Source #

conduit :: forall addr' addr. ExpQ -> Addressing addr (Handle addr', Result, Result) Source #

readWrite :: forall addr' addr. (Addr -> Dat -> Component) -> Addressing addr (Handle addr', Result) Source #

readWrite_ :: forall addr' addr. (Addr -> Dat -> Dat) -> Addressing addr (Handle addr') Source #

romFromVec :: 1 <= n => SNat n -> ExpQ -> Addressing addr (Handle (Index n)) Source #

romFromFile :: 1 <= n => SNat n -> ExpQ -> Addressing addr (Handle (Index n)) Source #

ram0 :: 1 <= n => SNat n -> Addressing addr (Handle (Index n)) Source #

port :: forall addr' a addr. ExpQ -> Addressing addr (Handle addr', Result) Source #

port_ :: forall addr' addr. ExpQ -> Addressing addr (Handle addr') Source #

connect :: Handle addr -> Addressing addr () Source #

from :: forall addr' addr a. (Typeable addr', Lift addr) => (Integral addr, Ord addr, Integral addr', Bounded addr') => addr -> Addressing addr' a -> Addressing addr a Source #

matchLeft :: Addressing addr1 a -> Addressing (Either addr1 addr2) a Source #

matchRight :: Addressing addr2 a -> Addressing (Either addr1 addr2) a Source #

tag :: Lift addr' => addr' -> Addressing (addr', addr) a -> Addressing addr a Source #