34c68c1e0d877ce2a4139a0b9c79c5a41139a963
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / model / am2900 / am2901 / TestableAm2901Impl.java
1 package net.mograsim.logic.model.am2900.am2901;
2
3 import net.mograsim.logic.core.components.BitDisplay;
4 import net.mograsim.logic.core.components.ManualSwitch;
5 import net.mograsim.logic.core.timeline.Timeline;
6 import net.mograsim.logic.core.types.Bit;
7 import net.mograsim.logic.core.types.BitVector;
8 import net.mograsim.logic.model.am2900.TestEnvironmentHelper;
9 import net.mograsim.logic.model.am2900.TestEnvironmentHelper.DebugState;
10 import net.mograsim.logic.model.am2900.TestUtil;
11 import net.mograsim.logic.model.model.components.GUIComponent;
12
13 public class TestableAm2901Impl implements TestableAm2901
14 {
15         private GUIComponent am2901;
16         private Timeline timeline;
17         private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
18         private ManualSwitch C;
19         private ManualSwitch Cn;
20         private ManualSwitch D1, D2, D3, D4;
21         private ManualSwitch A0, A1, A2, A3;
22         private ManualSwitch B0, B1, B2, B3;
23         private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
24         private BitDisplay Y1, Y2, Y3, Y4;
25         private BitDisplay F_0, Cn_4, OVR, F3;
26         private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
27
28         private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "GUIAm2901");
29
30         @Override
31         public Result run()
32         {
33                 return testHelper.run();
34         }
35
36         @Override
37         public void setup()
38         {
39                 testHelper.setup(DebugState.NO_DEBUG);
40         }
41
42         @Override
43         public void setDest(Am2901_Dest dest)
44         {
45                 var bits = TestUtil.of(dest.ordinal(), 3);
46                 I8.setState(bits.getLSBit(2));
47                 I7.setState(bits.getLSBit(1));
48                 I6.setState(bits.getLSBit(0));
49         }
50
51         @Override
52         public void setFunc(Am2901_Func func)
53         {
54                 var bits = TestUtil.of(func.ordinal(), 3);
55                 I5.setState(bits.getLSBit(2));
56                 I4.setState(bits.getLSBit(1));
57                 I3.setState(bits.getLSBit(0));
58         }
59
60         @Override
61         public void setSrc(Am2901_Src src)
62         {
63                 var bits = TestUtil.of(src.ordinal(), 3);
64                 I2.setState(bits.getLSBit(2));
65                 I1.setState(bits.getLSBit(1));
66                 I0.setState(bits.getLSBit(0));
67         }
68
69         @Override
70         public void setReg_A(String val_4_bit)
71         {
72                 var bits = BitVector.parse(val_4_bit);
73                 A3.setState(bits.getLSBit(3));
74                 A2.setState(bits.getLSBit(2));
75                 A1.setState(bits.getLSBit(1));
76                 A0.setState(bits.getLSBit(0));
77         }
78
79         @Override
80         public void setReg_B(String val_4_bit)
81         {
82                 var bits = BitVector.parse(val_4_bit);
83                 B3.setState(bits.getLSBit(3));
84                 B2.setState(bits.getLSBit(2));
85                 B1.setState(bits.getLSBit(1));
86                 B0.setState(bits.getLSBit(0));
87         }
88
89         @Override
90         public void setCarryIn(String val_1_bit)
91         {
92                 Cn.setState(Bit.parse(val_1_bit));
93         }
94
95         @Override
96         public void setNotOutEnable(String val_1_bit)
97         {
98                 throw new UnsupportedOperationException(); // TODO
99         }
100
101         @Override
102         public void setD(String val_4_bit)
103         {
104                 var bits = BitVector.parse(val_4_bit);
105                 D4.setState(bits.getLSBit(3));
106                 D3.setState(bits.getLSBit(2));
107                 D2.setState(bits.getLSBit(1));
108                 D1.setState(bits.getLSBit(0));
109         }
110
111         @Override
112         public void setQ_0(String val_1_bit)
113         {
114                 IQn.setState(Bit.parse(val_1_bit));
115         }
116
117         @Override
118         public void setQ_3(String val_1_bit)
119         {
120                 IQn_3.setState(Bit.parse(val_1_bit));
121         }
122
123         @Override
124         public void setRAM_0(String val_1_bit)
125         {
126                 IRAMn.setState(Bit.parse(val_1_bit));
127         }
128
129         @Override
130         public void setRAM_3(String val_1_bit)
131         {
132                 IRAMn_3.setState(Bit.parse(val_1_bit));
133         }
134
135         @Override
136         public void clockOn(boolean isClockOn)
137         {
138                 C.setState(isClockOn ? Bit.ONE : Bit.ZERO);
139         }
140
141         @Override
142         public String getQ_0()
143         {
144                 return OQn.getDisplayedValue().toString();
145         }
146
147         @Override
148         public String getQ_3()
149         {
150                 return OQn_3.getDisplayedValue().toString();
151         }
152
153         @Override
154         public String getRAM_0()
155         {
156                 return ORAMn.getDisplayedValue().toString();
157         }
158
159         @Override
160         public String getRAM_3()
161         {
162                 return ORAMn_3.getDisplayedValue().toString();
163         }
164
165         @Override
166         public String getNotP()
167         {
168                 throw new UnsupportedOperationException(); // TODO
169         }
170
171         @Override
172         public String getNotG()
173         {
174                 throw new UnsupportedOperationException(); // TODO
175         }
176
177         @Override
178         public String getCarryOut()
179         {
180                 return Cn_4.getDisplayedValue().toString();
181         }
182
183         @Override
184         public String getSign()
185         {
186                 return F3.getDisplayedValue().toString();
187         }
188
189         @Override
190         public String getZero()
191         {
192                 return F_0.getDisplayedValue().toString();
193         }
194
195         @Override
196         public String getOverflow()
197         {
198                 return OVR.getDisplayedValue().toString();
199         }
200
201         @Override
202         public String getY()
203         {
204                 var y3 = Y4.getDisplayedValue();
205                 var y2 = Y3.getDisplayedValue();
206                 var y1 = Y2.getDisplayedValue();
207                 var y0 = Y1.getDisplayedValue();
208                 return y3.concat(y2).concat(y1).concat(y0).toString();
209         }
210
211         @Override
212         public void setDirectly(Register r, String val_4_bit)
213         {
214                 am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_4_bit));
215         }
216
217         @Override
218         public String getDirectly(Register r)
219         {
220                 return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toString();
221         }
222
223         private static String regToStateID(Register r)
224         {
225                 if (r == Register.Q)
226                         return "qreg.q";
227                 return "regs.c" + r.toBitString() + ".q";
228         }
229 }