From: Lucian Mogosanu Date: Sat, 13 Dec 2014 16:50:19 +0000 (+0200) Subject: ZXS: Rename Memory to RAM X-Git-Url: https://git.mogosanu.ro/?a=commitdiff_plain;h=4af86364dba64ca52314732d926633fab8edb3ea;p=z80.git ZXS: Rename Memory to RAM because "Memory" is too generic, as we will also have I/O memory for example. This commit also drops the Show instance from ZXST, I wish I could solve this somehow in the future. --- diff --git a/src/ZXS/Machine.hs b/src/ZXS/Machine.hs index 7237ebf..f43cd26 100644 --- a/src/ZXS/Machine.hs +++ b/src/ZXS/Machine.hs @@ -5,14 +5,14 @@ import Control.Monad.State 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 } diff --git a/src/ZXS/Memory.hs b/src/ZXS/Memory.hs deleted file mode 100644 index f64ecd1..0000000 --- a/src/ZXS/Memory.hs +++ /dev/null @@ -1,41 +0,0 @@ -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 diff --git a/src/ZXS/RAM.hs b/src/ZXS/RAM.hs new file mode 100644 index 0000000..9a755d5 --- /dev/null +++ b/src/ZXS/RAM.hs @@ -0,0 +1,41 @@ +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