summaryrefslogtreecommitdiff
path: root/fig-emulator-gb/src/Fig/Emulator/GB/Component/Serial.hs
blob: 59200f18a245191a641b9bc69c5763c0054a810d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
module Fig.Emulator.GB.Component.Serial where

import Fig.Prelude

import GHC.IO.Handle (hPutChar)

import Data.Char (chr)

import Fig.Emulator.GB.Utils
import Fig.Emulator.GB.Bus

newtype SerialError = SerialError Text
  deriving Show
instance Exception SerialError
instance Pretty SerialError where
  pretty (SerialError b) = mconcat
    [ "joystick error: "
    , b
    ]

compSerial :: (MonadIO m, MonadThrow m) => Handle -> Component m
compSerial h = Component
  { compState = ()
  , compMatches = (== 0xff01)
  , compUpdate = \s _ -> pure s
  , compWrite = \s _ v -> do
      log $ mconcat
        [ "wrote serial byte: ", tshow $ chr $ fromIntegral v
        ]
      liftIO . hPutChar h . chr $ fromIntegral v
      pure s
  , compRead = \_ _ -> pure 0x00
  }