d88990896413b8d031a88c5a744c45aa3acff60c
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / model / am2900 / am2901 / TestableAm2901.java
1 package net.mograsim.logic.model.am2900.am2901;
2
3 import java.util.Arrays;
4 import java.util.stream.Stream;
5
6 import net.mograsim.logic.model.am2900.TestableCircuit;
7 import net.mograsim.logic.model.am2900.util.TestUtil;
8
9 public interface TestableAm2901 extends TestableCircuit
10 {
11
12         void setDest(Am2901_Dest dest);
13
14         void setFunc(Am2901_Func func);
15
16         void setSrc(Am2901_Src src);
17
18         void setReg_A(String val_4_bit);
19
20         void setReg_B(String val_4_bit);
21
22         void setCarryIn(String val_1_bit);
23
24         void setNotOutEnable(String val_1_bit);
25
26         void setD(String val_4_bit);
27
28         void setQ_0(String val_1_bit);
29
30         void setQ_3(String val_1_bit);
31
32         void setRAM_0(String val_1_bit);
33
34         void setRAM_3(String val_1_bit);
35
36         void setDirectly(Register r, String val_4_bit);
37
38         String getQ_0();
39
40         String getQ_3();
41
42         String getRAM_0();
43
44         String getRAM_3();
45
46         String getNotP();
47
48         String getNotG();
49
50         String getCarryOut();
51
52         String getSign();
53
54         String getZero();
55
56         String getOverflow();
57
58         String getY();
59
60         String getDirectly(Register r);
61
62         enum Am2901_Dest
63         {
64                 QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
65
66                 public boolean doesShift()
67                 {
68                         return ordinal() >= 4;
69                 }
70
71                 public int getShiftDir()
72                 {
73                         return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
74                 }
75
76                 public int getI7()
77                 {
78                         return this.ordinal() >> 1 & 1;
79                 }
80         }
81
82         enum Am2901_Func
83         {
84                 ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
85         }
86
87         enum Am2901_Src
88         {
89                 AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
90         }
91
92         enum Register
93         {
94                 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
95
96                 public String toBitString()
97                 {
98                         if (this.ordinal() > 0xF)
99                                 throw new UnsupportedOperationException();
100                         return TestUtil.to4bitBin(this.ordinal());
101                 }
102
103                 public static Stream<Register> stream()
104                 {
105                         return Arrays.stream(values());
106                 }
107         }
108 }