diff --git a/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java b/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java index ba0f1772d..ae313670a 100644 --- a/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java +++ b/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java @@ -11,6 +11,7 @@ import de.neemann.digital.analyse.expression.Operation; import java.util.ArrayList; /** + * uses only gates with three inputs */ public class ThreeInputs implements ExpressionModifier { @Override @@ -49,26 +50,16 @@ public class ThreeInputs implements ExpressionModifier { private Expression gen(int a, int b) { int num = b - a + 1; - System.out.println(num); if (num == 1) return expressions.get(a); else if (num == 2) return opGen.op(expressions.get(a), expressions.get(b)); else { - int d = 1; - while (d * 3 * 2 < num) - d *= 3; - - if (d * 3 * 2 == num) { - return opGen.op( - gen(a, a + d * 3 - 1), - gen(a + d * 3, b)); - } else { - return opGen.op( - gen(a, a + d - 1), - gen(a + d, a + d * 2 - 1), - gen(a + d * 2, b)); - } + int d = num / 3; + return opGen.op( + gen(a, a + d - 1), + gen(a + d, a + d * 2 - 1), + gen(a + d * 2, b)); } } } diff --git a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java index 984880804..34d10b368 100644 --- a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java @@ -14,10 +14,7 @@ import de.neemann.digital.analyse.expression.Variable; import de.neemann.digital.analyse.expression.format.FormatToExpression; import de.neemann.digital.analyse.expression.format.FormatToTableLatex; import de.neemann.digital.analyse.expression.format.FormatterException; -import de.neemann.digital.analyse.expression.modify.ExpressionModifier; -import de.neemann.digital.analyse.expression.modify.NAnd; -import de.neemann.digital.analyse.expression.modify.NOr; -import de.neemann.digital.analyse.expression.modify.TwoInputs; +import de.neemann.digital.analyse.expression.modify.*; import de.neemann.digital.analyse.format.TruthTableFormatterLaTeX; import de.neemann.digital.analyse.quinemc.BoolTableByteArray; import de.neemann.digital.builder.ATF150x.ATFDevice; @@ -405,6 +402,13 @@ public class TableDialog extends JDialog { } }.setToolTip(Lang.get("menu_table_createTwo_tt")).createJMenuItem()); + createMenu.add(new ToolTipAction(Lang.get("menu_table_createThree")) { + @Override + public void actionPerformed(ActionEvent actionEvent) { + createCircuit(new ThreeInputs()); + } + }.setToolTip(Lang.get("menu_table_createThree_tt")).createJMenuItem()); + createMenu.add(new ToolTipAction(Lang.get("menu_table_createNAnd")) { @Override public void actionPerformed(ActionEvent actionEvent) { diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 3fe081a82..a1b5b88d8 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1242,6 +1242,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht nur mit NOr-Gattern. Schaltung mit Gattern mit zwei Eingängen Erzeugt eine Schaltung und verwendet nur Gatter mit zwei Eingängen. + Schaltung mit Gattern mit drei Eingängen + Erzeugt eine Schaltung und verwendet nur Gatter mit maximal drei Eingängen. Bausteine Erzeugt eine JEDEC Datei für den Baustein Export LaTeX diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 34c41b8d5..abd41c3ea 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -1238,6 +1238,8 @@ Creates a circuit which reproduces the truth table only with NOr gates. Circuit with two input gates create circuit, use only gates with two inputs + Circuit with three input gates + create circuit, use only gates with a maximum of three inputs Device Creates a JEDEC file for the device Export LaTeX