never executed always true always false
1 module HelVM.HelMA.Automata.Piet.Combiner.CPU
2 ( pietPointer
3 , pietSwitch
4 ) where
5
6 import HelVM.HelMA.Automata.Piet.Types.Memory
7
8 import HelVM.HelMA.Automata.Piet.Types.InstructionMemory
9
10 import HelVM.HelMA.Automaton.Combiner.ALU
11
12 import qualified Data.Sequence as Seq
13
14 pietPointer ∷ (ALU m (Seq.Seq Int) Int) ⇒ Memory → m Memory
15 pietPointer = modifyIM "pointer" directionPointerIM rotateDirectionPointerIM
16
17 pietSwitch ∷ (ALU m (Seq.Seq Int) Int) ⇒ Memory → m Memory
18 pietSwitch = modifyIM "switch" codelChooserIM toggleCodelChooserIM
19
20 modifyIM ∷ (ALU m (Seq.Seq Int) Int, Show a) ⇒ Text → (InstructionMemory → a) → (Int → InstructionMemory → InstructionMemory) → Memory → m Memory
21 modifyIM name getValue f (Memory im s) = logWithPosition (name <> " " <> show (getValue im)) im *> (updateMemory <$> pop1 s) where
22 updateMemory (n, s') = Memory (f n im) s'