1 package net.mograsim.logic.model.am2900.am2904;
3 import net.mograsim.logic.core.components.CoreBitDisplay;
4 import net.mograsim.logic.core.components.CoreManualSwitch;
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.ModelComponent;
12 public class TestableAm2904Impl implements TestableAm2904
15 private ModelComponent am2904;
16 private CoreManualSwitch I_5_0;
17 private CoreManualSwitch I_6_9;
18 private CoreManualSwitch I_10;
19 private CoreManualSwitch I_11_12;
20 private CoreManualSwitch C;
21 private CoreManualSwitch Cx;
22 private CoreManualSwitch IC, IN, IOVR, IZ;
23 private CoreManualSwitch _CEM, _CEmu;
24 private CoreManualSwitch _EC, _EN, _EOVR, _EZ;
25 private CoreManualSwitch _OECT, _OEY;
26 private CoreManualSwitch _SE;
27 private CoreBitDisplay C0;
28 private CoreBitDisplay CT;
29 private SwitchWithDisplay SIO0, SIOn, QIO0, QIOn;
30 private SwitchWithDisplay YC, YN, YOVR, YZ;
32 private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this,
33 "resloader:Am2900Loader:jsonres:net/mograsim/logic/model/am2900/am2904/TestableAm2904.json");
38 testHelper.setup(DebugState.NO_DEBUG);
44 return testHelper.run();
48 public void clockOn(boolean isClockOn)
57 public void setInstruction(Am2904_Inst inst)
59 I_5_0.setState(BitVector.from(inst.ordinal(), 6));
63 public void setShiftCode(String val_4_bit)
65 I_6_9.setState(BitVector.parseBitstring(val_4_bit));
69 public void setI10(Am2904_ShiftDir dir)
71 I_10.setState(BitVector.from(dir.ordinal(), 1));
75 public void setCarry(Am2904_Carry carry)
77 I_11_12.setState(BitVector.from(carry.ordinal(), 2));
81 public void setCX(String val_1_bit)
83 Cx.setState(BitVector.parseBitstring(val_1_bit));
87 public void setY(String z_c_n_ovr)
89 var bv = BitVector.parseBitstring(z_c_n_ovr);
90 // correct order apparently unknown, most likely Z-C-N-OVR
91 YZ.setState(bv.getLSBit(3).toVector());
92 YC.setState(bv.getLSBit(2).toVector());
93 YN.setState(bv.getLSBit(1).toVector());
94 YOVR.setState(bv.getLSBit(0).toVector());
98 public void setIZ(String val_1_bit)
100 IZ.setState(BitVector.parseBitstring(val_1_bit));
104 public void setIC(String val_1_bit)
106 IC.setState(BitVector.parseBitstring(val_1_bit));
110 public void setIOVR(String val_1_bit)
112 IOVR.setState(BitVector.parseBitstring(val_1_bit));
116 public void setIN(String val_1_bit)
118 IN.setState(BitVector.parseBitstring(val_1_bit));
122 public void set_CEM(String val_1_bit)
124 _CEM.setState(BitVector.parseBitstring(val_1_bit));
128 public void set_CEĀµ(String val_1_bit)
130 _CEmu.setState(BitVector.parseBitstring(val_1_bit));
134 public void set_OEY(String val_1_bit)
136 _OEY.setState(BitVector.parseBitstring(val_1_bit));
140 public void set_OECT(String val_1_bit)
142 _OECT.setState(BitVector.parseBitstring(val_1_bit));
146 public void set_SE(String val_1_bit)
148 _SE.setState(BitVector.parseBitstring(val_1_bit));
152 public void set_EZ(String val_1_bit)
154 _EZ.setState(BitVector.parseBitstring(val_1_bit));
158 public void set_EC(String val_1_bit)
160 _EC.setState(BitVector.parseBitstring(val_1_bit));
164 public void set_EOVR(String val_1_bit)
166 _EOVR.setState(BitVector.parseBitstring(val_1_bit));
170 public void set_EN(String val_1_bit)
172 _EN.setState(BitVector.parseBitstring(val_1_bit));
176 public void setSIO0(String val_1_bit)
178 SIO0.setState(BitVector.parseBitstring(val_1_bit));
182 public void setSIO3(String val_1_bit)
184 SIOn.setState(BitVector.parseBitstring(val_1_bit));
188 public void setQIO0(String val_1_bit)
190 QIO0.setState(BitVector.parseBitstring(val_1_bit));
194 public void setQIO3(String val_1_bit)
196 QIOn.setState(BitVector.parseBitstring(val_1_bit));
200 public void setDirectly(Register r, String val_1_bit)
202 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
203 bv = bv.withBitChanged(r.ordinal() % 4, b -> Bit.parse(val_1_bit));
204 am2904.setHighLevelState(regToStateID(r), bv);
208 public void setDirectly(CompleteStatus r, String z_c_n_ovr)
210 am2904.setHighLevelState(regToStateID(r), BitVector.parseBitstring(z_c_n_ovr));
214 public String getC0()
216 return C0.getDisplayedValue().toBitstring();
220 public String getCT()
222 return CT.getDisplayedValue().toBitstring();
228 // correct order apparently unknown, most likely Z-C-N-OVR
229 var y3 = YZ.getDisplayedValue();
230 var y2 = YC.getDisplayedValue();
231 var y1 = YN.getDisplayedValue();
232 var y0 = YOVR.getDisplayedValue();
233 return y3.concat(y2).concat(y1).concat(y0).toBitstring();
237 public String getSIO0()
239 return SIO0.getDisplayedValue().toBitstring();
243 public String getSIO3()
245 return SIOn.getDisplayedValue().toBitstring();
249 public String getQIO0()
251 return QIO0.getDisplayedValue().toBitstring();
255 public String getQIO3()
257 return QIOn.getDisplayedValue().toBitstring();
261 public String getDirectly(Register r)
263 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
264 return bv.getMSBit(r.ordinal() % 4).getSymbol();
268 public String getDirectly(CompleteStatus r)
270 var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
271 return bv.toBitstring();
274 private static String regToStateID(Register r)
281 private static String regToStateID(CompleteStatus r)
283 if (r == CompleteStatus.micro)
289 public TestEnvironmentHelper getTestEnvironmentHelper()