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