From: Lucian Mogosanu Date: Wed, 17 Dec 2014 15:24:38 +0000 (+0200) Subject: ZXS: Machine, RAM: Add utility functions X-Git-Url: https://git.mogosanu.ro/?a=commitdiff_plain;h=85b5ac312b8dfc2f0ecc35d1a64b501ef5bde6ea;p=z80.git ZXS: Machine, RAM: Add utility functions --- diff --git a/src/ZXS/Decode.hs b/src/ZXS/Decode.hs index f73f31a..1b21657 100644 --- a/src/ZXS/Decode.hs +++ b/src/ZXS/Decode.hs @@ -15,6 +15,7 @@ import Z80.Microcode import ZXS.Machine import ZXS.Fetch +-- TODO: update this for prefixed opcodes decode :: ZXS Instruction decode = do b <- fetch diff --git a/src/ZXS/Machine.hs b/src/ZXS/Machine.hs index c098c64..3eaeff0 100644 --- a/src/ZXS/Machine.hs +++ b/src/ZXS/Machine.hs @@ -18,6 +18,15 @@ data Spectrum = Spectrum newtype ZXST m a = ZXST { unZXST :: StateT Spectrum m a } deriving (MonadState Spectrum, Monad, Functor, Applicative, MonadIO) +runZXST :: ZXST m a -> Spectrum -> m (a, Spectrum) +runZXST zxst state = runStateT (unZXST zxst) state + +evalZXST :: Monad m => ZXST m a -> Spectrum -> m a +evalZXST zxst state = runZXST zxst state >>= return . fst + +execZXST :: Monad m => ZXST m a -> Spectrum -> m Spectrum +execZXST zxst state = runZXST zxst state >>= return . snd + -- for now we "fall back" to IO as the default inner monad type ZXS a = ZXST IO a diff --git a/src/ZXS/RAM.hs b/src/ZXS/RAM.hs index aaf994c..dcfad76 100644 --- a/src/ZXS/RAM.hs +++ b/src/ZXS/RAM.hs @@ -45,3 +45,6 @@ romMem = newListArray (0x0000, 0x3fff) $ repeat 0 mainMem :: IO RAM mainMem = newListArray (0x5ccb, 0xff57) $ repeat 0 + +newRAM :: (Word16, Word16) -> IO RAM +newRAM (start, end) = newListArray (start, end) $ repeat 0