Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / components / gates / CoreNotGate.java
1 package net.mograsim.logic.core.components.gates;
2
3 import java.util.List;
4
5 import net.mograsim.logic.core.components.BasicCoreComponent;
6 import net.mograsim.logic.core.timeline.Timeline;
7 import net.mograsim.logic.core.timeline.TimelineEventHandler;
8 import net.mograsim.logic.core.types.BitVector;
9 import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
10 import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
11
12 public class CoreNotGate extends BasicCoreComponent
13 {
14         private ReadEnd in;
15         private ReadWriteEnd out;
16
17         public CoreNotGate(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out)
18         {
19                 super(timeline, processTime);
20                 this.in = in;
21                 in.registerObserver(this);
22                 this.out = out;
23         }
24
25         @Override
26         protected TimelineEventHandler compute()
27         {
28                 BitVector values = in.getValues().not();
29                 return e -> out.feedSignals(values);
30         }
31
32         public ReadEnd getIn()
33         {
34                 return in;
35         }
36
37         public ReadEnd getOut()
38         {
39                 return out;
40         }
41
42         @Override
43         public List<ReadEnd> getAllInputs()
44         {
45                 return List.of(in);
46         }
47
48         @Override
49         public List<ReadWriteEnd> getAllOutputs()
50         {
51                 return List.of(out);
52         }
53 }