diff --git a/src/main/java/de/neemann/digital/core/basic/And.java b/src/main/java/de/neemann/digital/core/basic/And.java index de58ff690..51803140f 100644 --- a/src/main/java/de/neemann/digital/core/basic/And.java +++ b/src/main/java/de/neemann/digital/core/basic/And.java @@ -33,8 +33,8 @@ public class And extends Function { } @Override - protected int calculate(ArrayList inputs) throws NodeException { - int f = -1; + protected long calculate(ArrayList inputs) throws NodeException { + long f = -1; for (ObservableValue i : inputs) { f &= i.getValue(); } diff --git a/src/main/java/de/neemann/digital/core/basic/Function.java b/src/main/java/de/neemann/digital/core/basic/Function.java index 1634bc379..38f1a1d6b 100644 --- a/src/main/java/de/neemann/digital/core/basic/Function.java +++ b/src/main/java/de/neemann/digital/core/basic/Function.java @@ -30,6 +30,6 @@ abstract class Function extends FanIn { getOutput().setValue(value); } - protected abstract int calculate(ArrayList inputs) throws NodeException; + protected abstract long calculate(ArrayList inputs) throws NodeException; } diff --git a/src/main/java/de/neemann/digital/core/basic/NAnd.java b/src/main/java/de/neemann/digital/core/basic/NAnd.java index 840b09706..8ec69a369 100644 --- a/src/main/java/de/neemann/digital/core/basic/NAnd.java +++ b/src/main/java/de/neemann/digital/core/basic/NAnd.java @@ -33,7 +33,7 @@ public class NAnd extends And { } @Override - protected int calculate(ArrayList inputs) throws NodeException { + protected long calculate(ArrayList inputs) throws NodeException { return ~super.calculate(inputs); } } diff --git a/src/main/java/de/neemann/digital/core/basic/NOr.java b/src/main/java/de/neemann/digital/core/basic/NOr.java index 168e35c98..c697ed3e4 100644 --- a/src/main/java/de/neemann/digital/core/basic/NOr.java +++ b/src/main/java/de/neemann/digital/core/basic/NOr.java @@ -33,7 +33,7 @@ public class NOr extends Or { } @Override - protected int calculate(ArrayList inputs) throws NodeException { + protected long calculate(ArrayList inputs) throws NodeException { return ~super.calculate(inputs); } } diff --git a/src/main/java/de/neemann/digital/core/basic/Or.java b/src/main/java/de/neemann/digital/core/basic/Or.java index 88b04e430..3efd191cc 100644 --- a/src/main/java/de/neemann/digital/core/basic/Or.java +++ b/src/main/java/de/neemann/digital/core/basic/Or.java @@ -33,8 +33,8 @@ public class Or extends Function { } @Override - protected int calculate(ArrayList inputs) throws NodeException { - int f = 0; + protected long calculate(ArrayList inputs) throws NodeException { + long f = 0; for (ObservableValue i : inputs) { f |= i.getValue(); } diff --git a/src/main/java/de/neemann/digital/core/basic/XNOr.java b/src/main/java/de/neemann/digital/core/basic/XNOr.java index 1faeb0a97..fb5627028 100644 --- a/src/main/java/de/neemann/digital/core/basic/XNOr.java +++ b/src/main/java/de/neemann/digital/core/basic/XNOr.java @@ -33,7 +33,7 @@ public class XNOr extends XOr { } @Override - protected int calculate(ArrayList inputs) throws NodeException { + protected long calculate(ArrayList inputs) throws NodeException { return ~super.calculate(inputs); } } diff --git a/src/main/java/de/neemann/digital/core/basic/XOr.java b/src/main/java/de/neemann/digital/core/basic/XOr.java index fe069c59d..2b3761768 100644 --- a/src/main/java/de/neemann/digital/core/basic/XOr.java +++ b/src/main/java/de/neemann/digital/core/basic/XOr.java @@ -33,8 +33,8 @@ public class XOr extends Function { } @Override - protected int calculate(ArrayList inputs) throws NodeException { - int f = 0; + protected long calculate(ArrayList inputs) throws NodeException { + long f = 0; for (ObservableValue i : inputs) { f ^= i.getValue(); } diff --git a/src/test/java/de/neemann/digital/core/basic/AndTest.java b/src/test/java/de/neemann/digital/core/basic/AndTest.java index 7c5b88706..2376396cd 100644 --- a/src/test/java/de/neemann/digital/core/basic/AndTest.java +++ b/src/test/java/de/neemann/digital/core/basic/AndTest.java @@ -33,4 +33,16 @@ public class AndTest extends TestCase { sc.check(1, 0, 0); sc.check(0, 1, 0); } + + public void testAnd64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + Model model = new Model(); + FanIn out = model.add(new And(new ElementAttributes().setBits(64))); + out.setInputs(ovs(a, b)); + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(out.getOutputs()); + sc.check(0xff00000000000000L, 0x2200000000000000L, 0x2200000000000000L); + } } diff --git a/src/test/java/de/neemann/digital/core/basic/NAndTest.java b/src/test/java/de/neemann/digital/core/basic/NAndTest.java index 9d4c3b4d8..29efc541b 100644 --- a/src/test/java/de/neemann/digital/core/basic/NAndTest.java +++ b/src/test/java/de/neemann/digital/core/basic/NAndTest.java @@ -17,7 +17,7 @@ import static de.neemann.digital.core.ObservableValues.ovs; */ public class NAndTest extends TestCase { - public void testAnd() throws Exception { + public void testNAnd() throws Exception { ObservableValue a = new ObservableValue("a", 1); ObservableValue b = new ObservableValue("b", 1); @@ -34,4 +34,17 @@ public class NAndTest extends TestCase { sc.check(1, 0, 1); sc.check(0, 1, 1); } + + public void testNAnd64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + Model model = new Model(); + FanIn out = model.add(new NAnd(new ElementAttributes().setBits(64))); + out.setInputs(ovs(a, b)); + + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(out.getOutputs()); + sc.check(0xff00000000000000L, 0x2200000000000000L, 0xddffffffffffffffL); + } } diff --git a/src/test/java/de/neemann/digital/core/basic/NOrTest.java b/src/test/java/de/neemann/digital/core/basic/NOrTest.java index 33359feb4..371fb446c 100644 --- a/src/test/java/de/neemann/digital/core/basic/NOrTest.java +++ b/src/test/java/de/neemann/digital/core/basic/NOrTest.java @@ -34,4 +34,17 @@ public class NOrTest extends TestCase { sc.check(0, 1, 0); sc.check(0, 0, 1); } + + public void testNOr64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + Model model = new Model(); + FanIn and = model.add(new NOr(new ElementAttributes().setBits(64))); + and.setInputs(ovs(a, b)); + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(and.getOutput()); + sc.check(0xff00000000000000L, 0x2200000000000000L, 0x00ffffffffffffffL); + } + } diff --git a/src/test/java/de/neemann/digital/core/basic/NotTest.java b/src/test/java/de/neemann/digital/core/basic/NotTest.java index 9d224d269..b0e0ec0c2 100644 --- a/src/test/java/de/neemann/digital/core/basic/NotTest.java +++ b/src/test/java/de/neemann/digital/core/basic/NotTest.java @@ -28,4 +28,15 @@ public class NotTest extends TestCase { sc.check(2, 1); sc.check(3, 0); } + + public void testNot64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + + Model model = new Model(); + Not out = model.add(new Not(new ElementAttributes().setBits(64))); + out.setInputs(a.asList()); + + TestExecuter sc = new TestExecuter(model).setInputs(a).setOutputs(out.getOutputs()); + sc.check(0xff00000000000000L, 0x00ffffffffffffffL); + } } diff --git a/src/test/java/de/neemann/digital/core/basic/OrTest.java b/src/test/java/de/neemann/digital/core/basic/OrTest.java index c79ba0d00..d3b477da8 100644 --- a/src/test/java/de/neemann/digital/core/basic/OrTest.java +++ b/src/test/java/de/neemann/digital/core/basic/OrTest.java @@ -34,4 +34,17 @@ public class OrTest extends TestCase { sc.check(0, 1, 1); sc.check(0, 0, 0); } + + + public void testOr64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + Model model = new Model(); + FanIn and = model.add(new Or(new ElementAttributes().setBits(64))); + and.setInputs(ovs(a, b)); + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(and.getOutput()); + sc.check(0xff00000000000000L, 0x2200000000000000L, 0xff00000000000000L); + } } diff --git a/src/test/java/de/neemann/digital/core/basic/XNOrTest.java b/src/test/java/de/neemann/digital/core/basic/XNOrTest.java index 485526e65..23787d80b 100644 --- a/src/test/java/de/neemann/digital/core/basic/XNOrTest.java +++ b/src/test/java/de/neemann/digital/core/basic/XNOrTest.java @@ -17,7 +17,7 @@ import static de.neemann.digital.core.ObservableValues.ovs; */ public class XNOrTest extends TestCase { - public void testXor() throws Exception { + public void testXNor() throws Exception { ObservableValue a = new ObservableValue("a", 1); ObservableValue b = new ObservableValue("b", 1); @@ -32,4 +32,18 @@ public class XNOrTest extends TestCase { sc.check(0, 1, 0); sc.check(1, 1, 1); } + + public void testXNor64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + + Model model = new Model(); + XOr out = model.add(new XNOr(new ElementAttributes().setBits(64))); + out.setInputs(ovs(a, b)); + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(out.getOutputs()); + sc.check(0x7e00000000000000L, 0x2200000000000000L, ~0x5c00000000000000L); + } + } diff --git a/src/test/java/de/neemann/digital/core/basic/XOrTest.java b/src/test/java/de/neemann/digital/core/basic/XOrTest.java index 53aabe1e4..1416617a4 100644 --- a/src/test/java/de/neemann/digital/core/basic/XOrTest.java +++ b/src/test/java/de/neemann/digital/core/basic/XOrTest.java @@ -32,4 +32,17 @@ public class XOrTest extends TestCase { sc.check(0, 1, 1); sc.check(1, 1, 0); } + + public void testXor64() throws Exception { + ObservableValue a = new ObservableValue("a", 64); + ObservableValue b = new ObservableValue("b", 64); + + + Model model = new Model(); + XOr out = model.add(new XOr(new ElementAttributes().setBits(64))); + out.setInputs(ovs(a, b)); + + TestExecuter sc = new TestExecuter(model).setInputs(a, b).setOutputs(out.getOutputs()); + sc.check(0x7e00000000000000L, 0x2200000000000000L, 0x5c00000000000000L); + } }