Fixed test setup and added support for high level state access
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / model / am2900 / am2910 / TestableAm2910Impl.java
1 package net.mograsim.logic.model.am2900.am2910;
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.BitVector;
7 import net.mograsim.logic.model.am2900.TestEnvironmentHelper;
8 import net.mograsim.logic.model.am2900.TestEnvironmentHelper.DebugState;
9 import net.mograsim.logic.model.model.components.GUIComponent;
10
11 public class TestableAm2910Impl implements TestableAm2910
12 {
13
14         private GUIComponent am2901;
15         private Timeline timeline;
16         private ManualSwitch I;
17         private ManualSwitch C;
18         private ManualSwitch CI;
19         private ManualSwitch D;
20         private ManualSwitch _CC;
21         private ManualSwitch _CCEN;
22         private ManualSwitch _RLD;
23         private ManualSwitch _OE;
24         private BitDisplay _FULL;
25         private BitDisplay Y;
26         private BitDisplay _PL, _MAP, _VECT;
27
28         private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "file:components/am2910/GUIAm2910.json");
29
30         @Override
31         public void setup()
32         {
33                 testHelper.setup(DebugState.NO_DEBUG);
34         }
35
36         @Override
37         public Result run()
38         {
39                 return testHelper.run();
40         }
41
42         @Override
43         public void clockOn(boolean isClockOn)
44         {
45                 if (isClockOn)
46                         C.switchFullOn();
47                 else
48                         C.switchFullOff();
49         }
50
51         @Override
52         public void setInstruction(Am2910_Inst inst)
53         {
54                 I.setState(BitVector.from(inst.ordinal(), 4));
55         }
56
57         @Override
58         public void set_CCEN(String val_1_bit)
59         {
60                 _CCEN.setState(BitVector.parse(val_1_bit));
61         }
62
63         @Override
64         public void setD(String val_12_bit)
65         {
66                 D.setState(BitVector.parse(val_12_bit));
67         }
68
69         @Override
70         public void set_CC(String val_1_bit)
71         {
72                 _CC.setState(BitVector.parse(val_1_bit));
73         }
74
75         @Override
76         public void setCI(String val_1_bit)
77         {
78                 CI.setState(BitVector.parse(val_1_bit));
79         }
80
81         @Override
82         public void set_RLD(String val_1_bit)
83         {
84                 _RLD.setState(BitVector.parse(val_1_bit));
85         }
86
87         @Override
88         public void set_OE(String val_1_bit)
89         {
90                 _OE.setState(BitVector.parse(val_1_bit));
91         }
92
93         @Override
94         public void setDirectly(Register r, String val_X_bit)
95         {
96                 am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_X_bit));
97         }
98
99         @Override
100         public String getY()
101         {
102                 return Y.getDisplayedValue().toString();
103         }
104
105         @Override
106         public String get_FULL()
107         {
108                 return _FULL.getDisplayedValue().toString();
109         }
110
111         @Override
112         public String get_PL()
113         {
114                 return _PL.getDisplayedValue().toString();
115         }
116
117         @Override
118         public String get_MAP()
119         {
120                 return _MAP.getDisplayedValue().toString();
121         }
122
123         @Override
124         public String get_VECT()
125         {
126                 return _VECT.getDisplayedValue().toString();
127         }
128
129         @Override
130         public String getDirectly(Register r)
131         {
132                 return am2901.getHighLevelState(regToStateID(r)).toString();
133         }
134
135         private static String regToStateID(Register r)
136         {
137                 switch (r)
138                 {
139                 case S_0:
140                 case S_1:
141                 case S_2:
142                 case S_3:
143                 case S_4:
144                         return "stack.c" + BitVector.from(r.ordinal(), 3);
145                 case SP:
146                         return "sp.q";
147                 case PC:
148                         return "mupc.q";
149                 case REG_COUNT:
150                         return "r.q";
151                 default:
152                         throw new IllegalArgumentException("unknown: " + r);
153                 }
154         }
155 }