diff --git a/src/main/dig/combinatorial/FullAddSub_RC.dig b/src/main/dig/combinatorial/FullAddSub_RC.dig
index db82d9be9..9b88b7003 100644
--- a/src/main/dig/combinatorial/FullAddSub_RC.dig
+++ b/src/main/dig/combinatorial/FullAddSub_RC.dig
@@ -5,7 +5,7 @@
FullAdder.dig
-
+
0
@@ -16,7 +16,7 @@
S_0
-
+
0
@@ -48,7 +48,7 @@
FullAdder.dig
-
+
0
@@ -59,7 +59,7 @@
S_1
-
+
0
@@ -91,7 +91,7 @@
FullAdder.dig
-
+
0
@@ -102,7 +102,7 @@
S_2
-
+
0
@@ -130,7 +130,7 @@
FullAdder.dig
-
+
0
@@ -141,7 +141,7 @@
S_3
-
+
0
@@ -169,25 +169,25 @@
XOr
-
+
0
XOr
-
+
0
XOr
-
+
0
XOr
-
+
0
@@ -205,207 +205,207 @@
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/FullAdderNaive.dig b/src/main/dig/combinatorial/FullAdderNaive.dig
new file mode 100644
index 000000000..a94283871
--- /dev/null
+++ b/src/main/dig/combinatorial/FullAdderNaive.dig
@@ -0,0 +1,482 @@
+
+
+ 1
+
+
+ Width
+ 4
+
+
+
+
+ In
+
+
+ Label
+ C_i-1
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ A_i
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_i
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ S_i
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ C_i
+
+
+
+ 0
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ Or
+
+
+ Inputs
+ 4
+
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ Or
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/FullSub.dig b/src/main/dig/combinatorial/FullSub.dig
index e16f68dae..1f97c683a 100644
--- a/src/main/dig/combinatorial/FullSub.dig
+++ b/src/main/dig/combinatorial/FullSub.dig
@@ -1,266 +1,147 @@
- 1
-
-
- In
-
-
- Label
- A
-
-
-
- 0
-
-
- In
-
-
- Label
- B
-
-
-
- 0
-
-
- In
-
-
- Label
- BO0
-
-
-
- 0
-
-
- HalfSub.dig
-
-
- 0
-
-
- HalfAdder.dig
-
-
- 0
-
-
- Out
-
-
- Label
- S
-
-
-
- 0
-
-
- Or
-
-
- 0
-
-
- Out
-
-
- Label
- BO1
-
-
-
- 0
-
-
- In
-
-
- Label
- A
-
-
-
- 0
-
-
- In
-
-
- Label
- B
-
-
-
- 0
-
-
- In
-
-
- Label
- BO0
-
-
-
- 0
-
-
- Out
-
-
- Label
- S
-
-
-
- 0
-
-
- Out
-
-
- Label
- BO1
-
-
-
- 0
-
-
- HalfSub.dig
-
-
- 0
-
-
- HalfSub.dig
-
-
- 0
-
-
- Or
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 1
+
+
+ Description
+ FullSub
+
+
+ Width
+ 4
+
+
+
+
+ In
+
+
+ Label
+ A_i
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_i
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ BO_i-1
+
+
+
+ 0
+
+
+ HalfSub.dig
+
+
+ 0
+
+
+ HalfAdder.dig
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ BO_i
+
+
+
+ 0
+
+
+ Or
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ S_i
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/FullSub2.dig b/src/main/dig/combinatorial/FullSub2.dig
new file mode 100644
index 000000000..8faca3941
--- /dev/null
+++ b/src/main/dig/combinatorial/FullSub2.dig
@@ -0,0 +1,137 @@
+
+
+ 1
+
+
+ In
+
+
+ Label
+ $A$
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ $B$
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ BO_0
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ $S$
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ BO_1
+
+
+
+ 0
+
+
+ HalfSub.dig
+
+
+ 0
+
+
+ HalfSub.dig
+
+
+ 0
+
+
+ Or
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/FullSubNaive.dig b/src/main/dig/combinatorial/FullSubNaive.dig
new file mode 100644
index 000000000..c73132251
--- /dev/null
+++ b/src/main/dig/combinatorial/FullSubNaive.dig
@@ -0,0 +1,486 @@
+
+
+ 1
+
+
+ Width
+ 4
+
+
+
+
+ In
+
+
+ Label
+ $A$
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ $B$
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ BO_i-1
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ $S$
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ BO_i
+
+
+
+ 0
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ Not
+
+
+ rotation
+
+
+
+
+ 3
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ And
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+ Or
+
+
+ Inputs
+ 4
+
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ Or
+
+
+ Inputs
+ 3
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/FullSubRC.dig b/src/main/dig/combinatorial/FullSubRC.dig
new file mode 100644
index 000000000..f9acee8eb
--- /dev/null
+++ b/src/main/dig/combinatorial/FullSubRC.dig
@@ -0,0 +1,350 @@
+
+
+ 1
+
+
+ Out
+
+
+ Label
+ S_0
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ A_0
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_0
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ S_1
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ A_1
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_1
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ S_2
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ A_2
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_2
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ S_3
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ A_3
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ B_3
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ C_3
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ C_-1
+
+
+
+ 0
+
+
+ FullSub.dig
+
+
+ 0
+
+
+ FullSub.dig
+
+
+ 0
+
+
+ FullSub.dig
+
+
+ 0
+
+
+ FullSub.dig
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dig/combinatorial/HalfAdder.dig b/src/main/dig/combinatorial/HalfAdder.dig
index c44f3743b..a9e48725a 100644
--- a/src/main/dig/combinatorial/HalfAdder.dig
+++ b/src/main/dig/combinatorial/HalfAdder.dig
@@ -19,7 +19,7 @@
Label
- A
+ $A$
@@ -30,7 +30,7 @@
Label
- B
+ $B$
@@ -41,7 +41,7 @@
Label
- S
+ $S$
@@ -52,7 +52,7 @@
Label
- C
+ $C$
diff --git a/src/main/dig/combinatorial/HalfSub.dig b/src/main/dig/combinatorial/HalfSub.dig
index d7908ba64..ce1d30981 100644
--- a/src/main/dig/combinatorial/HalfSub.dig
+++ b/src/main/dig/combinatorial/HalfSub.dig
@@ -1,114 +1,114 @@
- 1
-
-
- XOr
-
-
- 0
-
-
- And
-
-
- 0
-
-
- In
-
-
- Label
- A
-
-
-
- 0
-
-
- In
-
-
- Label
- B
-
-
-
- 0
-
-
- Out
-
-
- Label
- S
-
-
-
- 0
-
-
- Out
-
-
- Label
- BO
-
-
-
- 0
-
-
- Not
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 1
+
+
+ XOr
+
+
+ 0
+
+
+ And
+
+
+ 0
+
+
+ In
+
+
+ Label
+ $A$
+
+
+
+ 0
+
+
+ In
+
+
+ Label
+ $B$
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ $S$
+
+
+
+ 0
+
+
+ Out
+
+
+ Label
+ $BO$
+
+
+
+ 0
+
+
+ Not
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties
index 26fe9b3b7..a9831739b 100644
--- a/src/main/resources/lang/lang_de.properties
+++ b/src/main/resources/lang/lang_de.properties
@@ -126,7 +126,7 @@ elem_RAMSinglePort_pin_d=Der bidirektionale Datenanschlu\u00DF.
elem_Counter=Z\u00E4hler
elem_Add=Addierer
-elem_Sub=Subtraktor
+elem_Sub=Subtrahierer
elem_Mul=Multiplikator
elem_Comparator=Komparator
diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java
index 20450998e..1a1b099b6 100644
--- a/src/test/java/de/neemann/digital/integration/TestExamples.java
+++ b/src/test/java/de/neemann/digital/integration/TestExamples.java
@@ -18,7 +18,7 @@ public class TestExamples extends TestCase {
private static final File examples=new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig");
public void testCombinatorial() throws Exception {
- assertEquals(19, scan(new File(examples, "combinatorial")));
+ assertEquals(23, scan(new File(examples, "combinatorial")));
}
public void testSequential() throws Exception {