import Control.Applicative (Applicative)
import Z80.CPU
-import ZXS.Memory
+import ZXS.RAM
data Spectrum = Spectrum
{ zxCPU :: CPU
- , zxMemory :: Memory
+ , zxMainMem :: RAM
-- TODO: there's other stuff to add, but this will be done after
-- the scaffolding is in place.
- } deriving (Show, Eq)
+ } deriving Eq
-- the ZXS transformer
newtype ZXST m a = ZXST { unZXST :: StateT Spectrum m a }
+++ /dev/null
-module ZXS.Memory where
-
-import Data.Array.MArray
-import Data.Array.IO
-import Data.Word
-import Data.Bits
-
-type Memory = IOArray Word16 Word8
-
-memGetByte :: Memory -> Word16 -> IO Word8
-memGetByte = readArray
-
-memGetWord :: Memory -> Word16 -> IO Word16
-memGetWord mem addr = do
- lb <- memGetByte mem addr
- hb <- memGetByte mem (addr + 1)
- let low = fromIntegral lb
- high = fromIntegral hb `shiftL` 8
- return $ high .|. low
-
-memSetByte :: Memory -> Word16 -> Word8 -> IO ()
-memSetByte = writeArray
-
-memSetWord :: Memory -> Word16 -> Word16 -> IO ()
-memSetWord mem addr w = memSetByte mem addr lb >> memSetByte mem (addr + 1) hb
- where
- lb = fromIntegral w
- hb = fromIntegral $ w `shiftR` 8
-
-memModifyByte :: Memory -> Word16 -> (Word8 -> Word8) -> IO ()
-memModifyByte mem addr f = do
- b <- memGetByte mem addr
- memSetByte mem addr $ f b
-
-memModifyWord :: Memory -> Word16 -> (Word16 -> Word16) -> IO ()
-memModifyWord mem addr f = do
- w <- memGetWord mem addr
- memSetWord mem addr $ f w
-
-romMem :: IO Memory
-romMem = newListArray (0x0000, 0x3fff) $ repeat 0
--- /dev/null
+module ZXS.RAM where
+
+import Data.Array.MArray
+import Data.Array.IO
+import Data.Word
+import Data.Bits
+
+type RAM = IOArray Word16 Word8
+
+ramGetByte :: RAM -> Word16 -> IO Word8
+ramGetByte = readArray
+
+ramGetWord :: RAM -> Word16 -> IO Word16
+ramGetWord ram addr = do
+ lb <- ramGetByte ram addr
+ hb <- ramGetByte ram (addr + 1)
+ let low = fromIntegral lb
+ high = fromIntegral hb `shiftL` 8
+ return $ high .|. low
+
+ramSetByte :: RAM -> Word16 -> Word8 -> IO ()
+ramSetByte = writeArray
+
+ramSetWord :: RAM -> Word16 -> Word16 -> IO ()
+ramSetWord ram addr w = ramSetByte ram addr lb >> ramSetByte ram (addr + 1) hb
+ where
+ lb = fromIntegral w
+ hb = fromIntegral $ w `shiftR` 8
+
+ramModifyByte :: RAM -> Word16 -> (Word8 -> Word8) -> IO ()
+ramModifyByte ram addr f = do
+ b <- ramGetByte ram addr
+ ramSetByte ram addr $ f b
+
+ramModifyWord :: RAM -> Word16 -> (Word16 -> Word16) -> IO ()
+ramModifyWord ram addr f = do
+ w <- ramGetWord ram addr
+ ramSetWord ram addr $ f w
+
+romMem :: IO RAM
+romMem = newListArray (0x0000, 0x3fff) $ repeat 0