diff options
Diffstat (limited to 'fig-emulator-gb/src/Fig/Emulator/GB/Component')
| -rw-r--r-- | fig-emulator-gb/src/Fig/Emulator/GB/Component/RAM.hs | 4 | ||||
| -rw-r--r-- | fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/fig-emulator-gb/src/Fig/Emulator/GB/Component/RAM.hs b/fig-emulator-gb/src/Fig/Emulator/GB/Component/RAM.hs index f5c08b4..e20dd8d 100644 --- a/fig-emulator-gb/src/Fig/Emulator/GB/Component/RAM.hs +++ b/fig-emulator-gb/src/Fig/Emulator/GB/Component/RAM.hs @@ -24,7 +24,7 @@ compWRAM :: (MonadIO m, MonadThrow m) => Addr -> Int -> Component m compWRAM start size = Component { compState = V.replicate size 0 :: V.Vector Word8 , compMatches = \a -> - a >= start && a < end + a >= start && a <= end , compUpdate = \s _ -> pure s , compWrite = \s ad v -> do let offset = fromIntegral . unAddr $ ad - start @@ -38,4 +38,4 @@ compWRAM start size = Component Just v -> pure v } where - end = start + Addr (fromIntegral size) + end = start + Addr (fromIntegral (size - 1)) diff --git a/fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs b/fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs index 68bc477..59200f1 100644 --- a/fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs +++ b/fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs @@ -1,7 +1,8 @@ module Fig.Emulator.GB.Component.Serial where import Fig.Prelude -import Prelude (fromIntegral) + +import GHC.IO.Handle (hPutChar) import Data.Char (chr) @@ -17,8 +18,8 @@ instance Pretty SerialError where , b ] -compSerial :: (MonadIO m, MonadThrow m) => Component m -compSerial = Component +compSerial :: (MonadIO m, MonadThrow m) => Handle -> Component m +compSerial h = Component { compState = () , compMatches = (== 0xff01) , compUpdate = \s _ -> pure s @@ -26,6 +27,7 @@ compSerial = Component log $ mconcat [ "wrote serial byte: ", tshow $ chr $ fromIntegral v ] + liftIO . hPutChar h . chr $ fromIntegral v pure s , compRead = \_ _ -> pure 0x00 } |
