module Nes.CPU.Instructions.After (setZeroAndNegativeFlags) where
import Data.Bits
import Nes.CPU.Monad
import Nes.CPU.State
import Nes.FlagRegister
import Nes.Internal.MonadState
import Nes.Memory
{-# INLINE setZeroAndNegativeFlags #-}
setZeroAndNegativeFlags :: Byte -> CPU r ()
setZeroAndNegativeFlags :: forall r. Byte -> CPU r ()
setZeroAndNegativeFlags Byte
res =
(StatusRegister -> Identity StatusRegister)
-> CPUState -> Identity CPUState
Lens' CPUState StatusRegister
status
((StatusRegister -> Identity StatusRegister)
-> CPUState -> Identity CPUState)
-> (StatusRegister -> StatusRegister) -> CPU r ()
forall s (m :: * -> *) a.
MonadState s m =>
ASetter' s a -> (a -> a) -> m ()
%= ( Flag StatusRegister -> Bool -> StatusRegister -> StatusRegister
forall a. FlagRegister a => Flag a -> Bool -> a -> a
setFlag' Flag StatusRegister
StatusRegisterFlag
Zero (Byte
res Byte -> Byte -> Bool
forall a. Eq a => a -> a -> Bool
== Byte
0)
(StatusRegister -> StatusRegister)
-> (StatusRegister -> StatusRegister)
-> StatusRegister
-> StatusRegister
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flag StatusRegister -> Bool -> StatusRegister -> StatusRegister
forall a. FlagRegister a => Flag a -> Bool -> a -> a
setFlag' Flag StatusRegister
StatusRegisterFlag
Negative (Byte -> Int -> Bool
forall a. Bits a => a -> Int -> Bool
testBit Byte
res Int
7)
)