1 package net.mograsim.logic.model.am2900.am2904;
3 import net.mograsim.logic.core.components.BitDisplay;
4 import net.mograsim.logic.core.components.ManualSwitch;
5 import net.mograsim.logic.core.types.Bit;
6 import net.mograsim.logic.core.types.BitVector;
7 import net.mograsim.logic.model.am2900.util.SwitchWithDisplay;
8 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper;
9 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper.DebugState;
10 import net.mograsim.logic.model.model.components.GUIComponent;
12 public class TestableAm2904Impl implements TestableAm2904
15 private GUIComponent am2904;
16 private ManualSwitch I;
17 private ManualSwitch C;
18 private ManualSwitch Cx;
19 private ManualSwitch IC, IN, IOVR, IZ;
20 private ManualSwitch _CEM, _CEmu;
21 private ManualSwitch _EC, _EN, _EOVR, _EZ;
22 private ManualSwitch _OECT, _OEY;
23 private ManualSwitch _SE;
24 private BitDisplay C0;
25 private BitDisplay CT;
26 private SwitchWithDisplay SIO0, SIOn, QIO0, QIOn;
27 private SwitchWithDisplay YC, YN, YOVR, YZ;
29 private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "file:components/am2904/GUIAm2904.json");
34 testHelper.setup(DebugState.NO_DEBUG);
40 return testHelper.run();
44 public void clockOn(boolean isClockOn)
53 public void setInstruction(Am2904_Inst inst)
55 var old = I.getValues();
56 var newPart = BitVector.from(inst.ordinal(), 6);
57 I.setState(old.subVector(0, 7).concat(newPart));
61 public void setShiftCode(String val_4_bit)
63 var old = I.getValues();
64 var newPart = BitVector.parse(val_4_bit);
65 I.setState(old.subVector(0, 3).concat(newPart).concat(old.subVector(7)));
69 public void setI10(Am2904_ShiftDir dir)
71 var old = I.getValues();
72 var newPart = BitVector.from(dir.ordinal(), 1);
73 I.setState(old.subVector(0, 2).concat(newPart).concat(old.subVector(3)));
77 public void setCarry(Am2904_Carry carry)
79 var old = I.getValues();
80 var newPart = BitVector.from(carry.ordinal(), 2);
81 I.setState(newPart.concat(old.subVector(2)));
85 public void setCX(String val_1_bit)
87 Cx.setState(BitVector.parse(val_1_bit));
91 public void setY(String z_c_n_ovr)
93 var bv = BitVector.parse(z_c_n_ovr);
94 // correct order apparently unknown, most likely Z-C-N-OVR
95 YZ.setState(bv.getLSBit(3).toVector());
96 YC.setState(bv.getLSBit(2).toVector());
97 YN.setState(bv.getLSBit(1).toVector());
98 YOVR.setState(bv.getLSBit(0).toVector());
102 public void setIZ(String val_1_bit)
104 IZ.setState(BitVector.parse(val_1_bit));
108 public void setIC(String val_1_bit)
110 IC.setState(BitVector.parse(val_1_bit));
114 public void setIOVR(String val_1_bit)
116 IOVR.setState(BitVector.parse(val_1_bit));
120 public void setIN(String val_1_bit)
122 IN.setState(BitVector.parse(val_1_bit));
126 public void set_CEM(String val_1_bit)
128 _CEM.setState(BitVector.parse(val_1_bit));
132 public void set_CEĀµ(String val_1_bit)
134 _CEmu.setState(BitVector.parse(val_1_bit));
138 public void set_OEY(String val_1_bit)
140 _OEY.setState(BitVector.parse(val_1_bit));
144 public void set_OECT(String val_1_bit)
146 _OECT.setState(BitVector.parse(val_1_bit));
150 public void set_SE(String val_1_bit)
152 _SE.setState(BitVector.parse(val_1_bit));
156 public void set_EZ(String val_1_bit)
158 _EZ.setState(BitVector.parse(val_1_bit));
162 public void set_EC(String val_1_bit)
164 _EC.setState(BitVector.parse(val_1_bit));
168 public void set_EOVR(String val_1_bit)
170 _EOVR.setState(BitVector.parse(val_1_bit));
174 public void set_EN(String val_1_bit)
176 _EN.setState(BitVector.parse(val_1_bit));
180 public void setSIO0(String val_1_bit)
182 SIO0.setState(BitVector.parse(val_1_bit));
186 public void setSIO3(String val_1_bit)
188 SIOn.setState(BitVector.parse(val_1_bit));
192 public void setQIO0(String val_1_bit)
194 QIO0.setState(BitVector.parse(val_1_bit));
198 public void setQIO3(String val_1_bit)
200 QIOn.setState(BitVector.parse(val_1_bit));
204 public void setDirectly(Register r, String val_1_bit)
206 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
207 bv = bv.withBitChanged(r.ordinal() % 4, b -> Bit.parse(val_1_bit));
208 am2904.setHighLevelState(regToStateID(r), bv);
212 public void setDirectly(CompleteStatus r, String z_c_n_ovr)
214 am2904.setHighLevelState(regToStateID(r), BitVector.parse(z_c_n_ovr));
218 public String getC0()
220 return C0.getDisplayedValue().toString();
224 public String getCT()
226 return CT.getDisplayedValue().toString();
232 // correct order apparently unknown, most likely Z-C-N-OVR
233 var y3 = YZ.getDisplayedValue();
234 var y2 = YC.getDisplayedValue();
235 var y1 = YN.getDisplayedValue();
236 var y0 = YOVR.getDisplayedValue();
237 return y3.concat(y2).concat(y1).concat(y0).toString();
241 public String getSIO0()
243 return SIO0.getDisplayedValue().toString();
247 public String getSIO3()
249 return SIOn.getDisplayedValue().toString();
253 public String getQIO0()
255 return QIO0.getDisplayedValue().toString();
259 public String getQIO3()
261 return QIOn.getDisplayedValue().toString();
265 public String getDirectly(Register r)
267 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
268 return bv.getMSBit(r.ordinal() % 4).getSymbol();
272 public String getDirectly(CompleteStatus r)
274 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
275 return bv.toString();
278 private static String regToStateID(Register r)
285 private static String regToStateID(CompleteStatus r)
287 if (r == CompleteStatus.micro)
293 public TestEnvironmentHelper getTestEnvironmentHelper()