ZXS: Machine, RAM: Add utility functions
authorLucian Mogosanu <lucian.mogosanu@gmail.com>
Wed, 17 Dec 2014 15:24:38 +0000 (17:24 +0200)
committerLucian Mogosanu <lucian.mogosanu@gmail.com>
Wed, 17 Dec 2014 15:24:38 +0000 (17:24 +0200)
src/ZXS/Decode.hs
src/ZXS/Machine.hs
src/ZXS/RAM.hs

index f73f31a..1b21657 100644 (file)
@@ -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
index c098c64..3eaeff0 100644 (file)
@@ -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
 
index aaf994c..dcfad76 100644 (file)
@@ -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