1 package net.mograsim.logic.ui.am2900;
\r
3 import static org.junit.jupiter.api.Assertions.assertEquals;
\r
5 import java.util.Arrays;
\r
6 import java.util.stream.Stream;
\r
8 import org.junit.jupiter.api.extension.ExtensionContext;
\r
9 import org.junit.jupiter.params.provider.Arguments;
\r
10 import org.junit.jupiter.params.provider.ArgumentsProvider;
\r
12 public interface TestableAm2901
\r
18 void setDest(Am2901_Dest dest);
\r
20 void setFunc(Am2901_Func func);
\r
22 void setSrc(Am2901_Src src);
\r
24 void setReg_A(String val_4_bit);
\r
26 void setReg_B(String val_4_bit);
\r
28 void setCarryIn(String val_1_bit);
\r
30 void setNotOutEnable(String val_1_bit);
\r
32 void setD(String val_4_bit);
\r
34 void setQ_0(String val_1_bit);
\r
36 void setQ_3(String val_1_bit);
\r
38 void setRAM_0(String val_1_bit);
\r
40 void setRAM_3(String val_1_bit);
\r
42 void clockOn(boolean isClockOn);
\r
44 void setDirectly(Register r, String val_4_bit);
\r
58 String getCarryOut();
\r
64 String getOverflow();
\r
68 String getDirectly(Register r);
\r
70 default void assertRunSuccess()
\r
72 assertEquals(Result.SUCCESS, run());
\r
75 default void assertFullCycleSuccess()
\r
86 SUCCESS, OUT_OF_TIME, ERROR;
\r
89 public enum Am2901_Dest
\r
91 QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
\r
93 public boolean doesShift()
\r
95 return ordinal() >= 4;
\r
98 public int getShiftDir()
\r
100 return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
\r
105 return this.ordinal() >> 1 & 1;
\r
109 public enum Am2901_Func
\r
111 ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
\r
114 public enum Am2901_Src
\r
116 AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
\r
119 public enum Register
\r
121 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
\r
123 public String toBitString()
\r
125 if (this.ordinal() > 0xF)
\r
126 throw new UnsupportedOperationException();
\r
127 return TestUtil.to4bitBin(this.ordinal());
\r
130 public static Stream<Register> stream()
\r
132 return Arrays.stream(values());
\r
136 public static class RegisterProvider implements ArgumentsProvider
\r
140 public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception
\r
142 return Register.stream().map(Arguments::of);
\r