From 85b5ac312b8dfc2f0ecc35d1a64b501ef5bde6ea Mon Sep 17 00:00:00 2001 From: Lucian Mogosanu Date: Wed, 17 Dec 2014 17:24:38 +0200 Subject: [PATCH] ZXS: Machine, RAM: Add utility functions --- src/ZXS/Decode.hs | 1 + src/ZXS/Machine.hs | 9 +++++++++ src/ZXS/RAM.hs | 3 +++ 3 files changed, 13 insertions(+) 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 -- 1.7.10.4