1 package net.mograsim.logic.model.am2900;
3 import static org.junit.jupiter.api.Assertions.assertEquals;
5 import java.util.Arrays;
6 import java.util.stream.Stream;
8 public interface TestableAm2901
14 void setDest(Am2901_Dest dest);
16 void setFunc(Am2901_Func func);
18 void setSrc(Am2901_Src src);
20 void setReg_A(String val_4_bit);
22 void setReg_B(String val_4_bit);
24 void setCarryIn(String val_1_bit);
26 void setNotOutEnable(String val_1_bit);
28 void setD(String val_4_bit);
30 void setQ_0(String val_1_bit);
32 void setQ_3(String val_1_bit);
34 void setRAM_0(String val_1_bit);
36 void setRAM_3(String val_1_bit);
38 void clockOn(boolean isClockOn);
40 void setDirectly(Register r, String val_4_bit);
64 String getDirectly(Register r);
66 default void assertRunSuccess()
68 assertEquals(Result.SUCCESS, run());
71 default void assertFullCycleSuccess()
82 SUCCESS, OUT_OF_TIME, ERROR;
85 public enum Am2901_Dest
87 QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
89 public boolean doesShift()
91 return ordinal() >= 4;
94 public int getShiftDir()
96 return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
101 return this.ordinal() >> 1 & 1;
105 public enum Am2901_Func
107 ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
110 public enum Am2901_Src
112 AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
117 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
119 public String toBitString()
121 if (this.ordinal() > 0xF)
122 throw new UnsupportedOperationException();
123 return TestUtil.to4bitBin(this.ordinal());
126 public static Stream<Register> stream()
128 return Arrays.stream(values());