From a81c92dc2cdff02c55fdc197d943bc7a35c64be5 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 7 May 2024 14:21:13 -0400 Subject: fig-emulator-gb: Fix space leak --- .../src/Fig/Emulator/GB/Component/Interrupt.hs | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 fig-emulator-gb/src/Fig/Emulator/GB/Component/Interrupt.hs (limited to 'fig-emulator-gb/src/Fig/Emulator/GB/Component/Interrupt.hs') diff --git a/fig-emulator-gb/src/Fig/Emulator/GB/Component/Interrupt.hs b/fig-emulator-gb/src/Fig/Emulator/GB/Component/Interrupt.hs new file mode 100644 index 0000000..ec5540c --- /dev/null +++ b/fig-emulator-gb/src/Fig/Emulator/GB/Component/Interrupt.hs @@ -0,0 +1,33 @@ +module Fig.Emulator.GB.Component.Interrupt where + +import Fig.Prelude + +import Fig.Emulator.GB.Utils +import Fig.Emulator.GB.Bus + +newtype InterruptError = InterruptError Text + deriving Show +instance Exception InterruptError +instance Pretty InterruptError where + pretty (InterruptError b) = mconcat + [ "interrupt error: " + , b + ] + +compInterrupt :: (MonadIO m, MonadThrow m) => Component m +compInterrupt = Component + { compState = () + , compMatches = \a -> a == 0xff0f || a == 0xffff + , compUpdate = \s _ -> pure s + , compWrite = \s (Addr a) v -> do + case a of + 0xff0f -> do + -- log $ "set IF:" <> show8 v + pure () + 0xffff -> do + -- log $ "set IE:" <> show8 v + pure () + _ -> throwM . InterruptError $ "write to invalid address: " <> pretty (Addr a) + pure s + , compRead = \_ _ -> pure 0x00 + } -- cgit v1.2.3