aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--digital/atk16.dig1024
-rw-r--r--digital/atk16_alu.dig2100
-rw-r--r--digital/atk16_alu_fo.dig494
-rw-r--r--digital/atk16_alu_fz.dig192
-rw-r--r--digital/atk16_alu_inputs.dig237
-rw-r--r--digital/atk16_decoder.dig306
-rw-r--r--digital/atk16_jump_unit.dig216
-rw-r--r--digital/atk16_mem.dig17
-rw-r--r--digital/atk16_regbank.dig262
-rw-r--r--digital/tests_alu.dig26
-rwxr-xr-xsrc/assembler.py339
-rw-r--r--src/test.atk162
-rw-r--r--src/test_fibo.atk1647
-rwxr-xr-xsrc/ucode.py41
14 files changed, 2891 insertions, 2412 deletions
diff --git a/digital/atk16.dig b/digital/atk16.dig
index 15912d7..2716409 100644
--- a/digital/atk16.dig
+++ b/digital/atk16.dig
@@ -3,6 +3,12 @@
<version>2</version>
<attributes>
<entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
<string>view1</string>
<transform>
<matrix>
@@ -41,6 +47,10 @@
</matrix>
</transform>
</entry>
+ <entry>
+ <string>showDataTable</string>
+ <boolean>true</boolean>
+ </entry>
</attributes>
<visualElements>
<visualElement>
@@ -146,36 +156,6 @@
<pos x="-40" y="-200"/>
</visualElement>
<visualElement>
- <elementName>EEPROM</elementName>
- <elementAttributes>
- <entry>
- <string>AddrBits</string>
- <int>8</int>
- </entry>
- <entry>
- <string>Label</string>
- <string>UCODE</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- <entry>
- <string>Data</string>
- <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3040,8000,4*0,c
-,221,3040,8000,4*0,c,221,88,60,8000,0,0,0,c,221,88,60,8000,0,0,0
-,c,221,88,110,8000,0,0,0,c,221,88,110,8000,0,0,0,c,221,440,8000
-,4*0,c,221,440,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c
-,221,8000,5*0,c,221,102,8000,4*0,c,221,8000,5*0,c,221,8000,5*0
-,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c
-,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221
-,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000
-,5*0,c,221,8000,5*0,c,221,4000,5*0,c,221,4000</data>
- </entry>
- </elementAttributes>
- <pos x="620" y="280"/>
- </visualElement>
- <visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
@@ -186,16 +166,6 @@
<pos x="540" y="280"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- </elementAttributes>
- <pos x="600" y="300"/>
- </visualElement>
- <visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
@@ -210,16 +180,6 @@
<pos x="540" y="320"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- </elementAttributes>
- <pos x="600" y="340"/>
- </visualElement>
- <visualElement>
<elementName>BitSelector</elementName>
<elementAttributes>
<entry>
@@ -262,34 +222,6 @@
<pos x="420" y="360"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- </elementAttributes>
- <pos x="580" y="360"/>
- </visualElement>
- <visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>mirror</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>16</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>1*16</string>
- </entry>
- </elementAttributes>
- <pos x="700" y="320"/>
- </visualElement>
- <visualElement>
<elementName>CounterPreset</elementName>
<elementAttributes>
<entry>
@@ -326,7 +258,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[19]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[14]/elementAttributes/entry/rotation"/>
</entry>
</elementAttributes>
<pos x="0" y="-180"/>
@@ -346,162 +278,183 @@
<pos x="-40" y="-280"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Clock</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>PC_CO</string>
+ <string>small</string>
+ <boolean>true</boolean>
</entry>
- </elementAttributes>
- <pos x="740" y="320"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>PC_IE</string>
+ <string>runRealTime</string>
+ <boolean>true</boolean>
</entry>
- </elementAttributes>
- <pos x="740" y="300"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>PC_OE</string>
+ <string>Frequency</string>
+ <int>10</int>
</entry>
</elementAttributes>
- <pos x="740" y="280"/>
+ <pos x="-320" y="-360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>MAR_IE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="740" y="260"/>
+ <pos x="-300" y="-360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>MEM_IE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="740" y="240"/>
+ <pos x="400" y="-220"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>MEM_OE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="740" y="220"/>
+ <pos x="0" y="-260"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>R1_OE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="740" y="180"/>
+ <pos x="280" y="300"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Probe</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>R2_OE</string>
+ <string>Label</string>
+ <string>Bus</string>
</entry>
</elementAttributes>
- <pos x="740" y="160"/>
+ <pos x="200" y="-280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>atk16_mem.dig</elementName>
+ <elementAttributes/>
+ <pos x="580" y="-220"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>IR_IE</string>
+ <string>MEM_IE</string>
</entry>
</elementAttributes>
- <pos x="740" y="140"/>
+ <pos x="580" y="-180"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>JA_OE</string>
+ <string>MEM_OE</string>
</entry>
</elementAttributes>
- <pos x="740" y="120"/>
+ <pos x="580" y="-160"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Break</elementName>
+ <elementAttributes/>
+ <pos x="-300" y="-400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>atk16_decoder.dig</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>ALU_OE</string>
+ <string>shapeType</string>
+ <shapeType>CUSTOM</shapeType>
</entry>
</elementAttributes>
- <pos x="740" y="80"/>
+ <pos x="-40" y="-80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>US_RS</string>
+ <string>RW_IE</string>
</entry>
</elementAttributes>
- <pos x="740" y="20"/>
+ <pos x="280" y="-60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>FR_IE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="740" y="60"/>
+ <pos x="260" y="-20"/>
</visualElement>
<visualElement>
- <elementName>Clock</elementName>
+ <elementName>atk16_regbank.dig</elementName>
+ <elementAttributes/>
+ <pos x="280" y="-80"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Counter</elementName>
<elementAttributes>
<entry>
- <string>small</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>runRealTime</string>
+ <string>valueIsProbe</string>
<boolean>true</boolean>
</entry>
<entry>
- <string>Frequency</string>
- <int>10</int>
+ <string>Label</string>
+ <string>Microsequencer</string>
</entry>
- </elementAttributes>
- <pos x="-320" y="-360"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>CLK</string>
+ <string>Bits</string>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="-300" y="-360"/>
+ <pos x="60" y="240"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -512,24 +465,25 @@
</entry>
<entry>
<string>NetName</string>
- <string>CLK</string>
+ <string>US_RS</string>
</entry>
</elementAttributes>
- <pos x="400" y="-220"/>
+ <pos x="-80" y="280"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>CLK</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="0" y="-260"/>
+ <pos x="40" y="240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes/>
+ <pos x="0" y="260"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -543,89 +497,76 @@
<string>CLK</string>
</entry>
</elementAttributes>
- <pos x="280" y="300"/>
+ <pos x="-40" y="260"/>
</visualElement>
<visualElement>
- <elementName>Probe</elementName>
+ <elementName>Reset</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>Bus</string>
+ <string>invertOutput</string>
+ <boolean>false</boolean>
</entry>
</elementAttributes>
- <pos x="200" y="-280"/>
+ <pos x="-60" y="320"/>
</visualElement>
<visualElement>
- <elementName>atk16_mem.dig</elementName>
+ <elementName>Or</elementName>
<elementAttributes/>
- <pos x="580" y="-220"/>
+ <pos x="-20" y="280"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>MEM_IE</string>
+ <string>FLAG_EQ</string>
</entry>
</elementAttributes>
- <pos x="580" y="-180"/>
+ <pos x="100" y="-100"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Description</string>
+ <string>Dummy output</string>
</entry>
<entry>
- <string>NetName</string>
- <string>MEM_OE</string>
+ <string>Label</string>
+ <string>OUT</string>
</entry>
</elementAttributes>
- <pos x="580" y="-160"/>
- </visualElement>
- <visualElement>
- <elementName>Break</elementName>
- <elementAttributes/>
- <pos x="-300" y="-400"/>
+ <pos x="960" y="-140"/>
</visualElement>
<visualElement>
- <elementName>atk16_decoder.dig</elementName>
+ <elementName>Ground</elementName>
<elementAttributes>
<entry>
- <string>shapeType</string>
- <shapeType>SIMPLE</shapeType>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="0" y="-80"/>
+ <pos x="940" y="-140"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>In</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>OPCODE</string>
+ <string>Label</string>
+ <string>IN</string>
</entry>
</elementAttributes>
- <pos x="80" y="60"/>
+ <pos x="960" y="-200"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Ground</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>JA_OE</string>
+ <rotation reference="../../../../visualElement[40]/elementAttributes/entry/rotation"/>
</entry>
</elementAttributes>
- <pos x="-20" y="-20"/>
+ <pos x="980" y="-200"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -639,7 +580,7 @@
<string>IR_IE</string>
</entry>
</elementAttributes>
- <pos x="-20" y="-60"/>
+ <pos x="-60" y="-60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -653,178 +594,230 @@
<string>CLK</string>
</entry>
</elementAttributes>
- <pos x="0" y="-40"/>
+ <pos x="-40" y="-40"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>RW_IE</string>
+ <string>OPCODE</string>
</entry>
</elementAttributes>
- <pos x="740" y="200"/>
+ <pos x="100" y="-80"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>mirror</string>
+ <boolean>true</boolean>
</entry>
<entry>
- <string>NetName</string>
- <string>RW_IE</string>
+ <string>Input Splitting</string>
+ <string>16</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>1*16</string>
</entry>
</elementAttributes>
- <pos x="280" y="-60"/>
+ <pos x="880" y="320"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>CLK</string>
+ <string>PC_CO</string>
</entry>
</elementAttributes>
- <pos x="260" y="-20"/>
+ <pos x="920" y="320"/>
</visualElement>
<visualElement>
- <elementName>atk16_regbank.dig</elementName>
- <elementAttributes/>
- <pos x="280" y="-80"/>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>PC_IE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="920" y="300"/>
</visualElement>
<visualElement>
- <elementName>atk16_alu.dig</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>shapeType</string>
- <shapeType>SIMPLE</shapeType>
+ <string>NetName</string>
+ <string>PC_OE</string>
</entry>
+ </elementAttributes>
+ <pos x="920" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
- <string>Label</string>
- <string>ALU</string>
+ <string>NetName</string>
+ <string>MAR_IE</string>
</entry>
</elementAttributes>
- <pos x="480" y="20"/>
+ <pos x="920" y="260"/>
</visualElement>
<visualElement>
- <elementName>Driver</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>16</int>
+ <string>NetName</string>
+ <string>MEM_IE</string>
</entry>
+ </elementAttributes>
+ <pos x="920" y="240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
- <string>flipSelPos</string>
- <boolean>true</boolean>
+ <string>NetName</string>
+ <string>MEM_OE</string>
</entry>
</elementAttributes>
- <pos x="460" y="-100"/>
+ <pos x="920" y="220"/>
</visualElement>
<visualElement>
- <elementName>Driver</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>16</int>
+ <string>NetName</string>
+ <string>R1_OE</string>
</entry>
+ </elementAttributes>
+ <pos x="920" y="180"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
- <string>flipSelPos</string>
- <boolean>true</boolean>
+ <string>NetName</string>
+ <string>R2_OE</string>
</entry>
</elementAttributes>
- <pos x="480" y="-60"/>
+ <pos x="920" y="160"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>R2_OE</string>
+ <string>IR_IE</string>
</entry>
</elementAttributes>
- <pos x="500" y="-40"/>
+ <pos x="920" y="140"/>
</visualElement>
<visualElement>
- <elementName>Driver</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>16</int>
+ <string>NetName</string>
+ <string>ALU_OE</string>
</entry>
</elementAttributes>
- <pos x="600" y="20"/>
+ <pos x="920" y="80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="1"/>
+ <string>NetName</string>
+ <string>US_RS</string>
</entry>
+ </elementAttributes>
+ <pos x="920" y="20"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
<string>NetName</string>
- <string>ALU_OE</string>
+ <string>FR_IE</string>
</entry>
</elementAttributes>
- <pos x="600" y="0"/>
+ <pos x="920" y="60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>R1_OE</string>
+ <string>RW_IE</string>
</entry>
</elementAttributes>
- <pos x="480" y="-80"/>
+ <pos x="920" y="200"/>
</visualElement>
<visualElement>
- <elementName>Probe</elementName>
+ <elementName>Stop</elementName>
+ <elementAttributes/>
+ <pos x="1000" y="40"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>ALU</string>
+ <string>NetName</string>
+ <string>LI_OE</string>
</entry>
</elementAttributes>
- <pos x="680" y="-40"/>
+ <pos x="920" y="100"/>
</visualElement>
<visualElement>
- <elementName>Counter</elementName>
+ <elementName>EEPROM</elementName>
<elementAttributes>
<entry>
- <string>valueIsProbe</string>
- <boolean>true</boolean>
+ <string>AddrBits</string>
+ <int>8</int>
</entry>
<entry>
<string>Label</string>
- <string>Microsequencer</string>
+ <string>UCODE</string>
</entry>
<entry>
<string>Bits</string>
- <int>3</int>
+ <int>16</int>
+ </entry>
+ <entry>
+ <string>Data</string>
+ <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3040,8000,4*0,c
+,221,3040,8000,4*0,c,221,88,60,8000,0,0,0,c,221,88,60,8000,0,0,0
+,c,221,88,90,8000,0,0,0,c,221,88,90,8000,0,0,0,c,221,840,8000
+,4*0,c,221,840,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c
+,221,802,8000,4*0,c,221,802,8000,4*0,c,221,8000,5*0,c,221,82,8000
+,4*0,c,221,8000,5*0,c,221,802,8000,4*0,c,221,8000,5*0,c,221,8000
+,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0
+,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c
+,221,8000,5*0,c,221,8000,5*0,c,221,4000,5*0,c,221,4000</data>
</entry>
</elementAttributes>
- <pos x="60" y="240"/>
+ <pos x="780" y="280"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
+ </elementAttributes>
+ <pos x="760" y="300"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
<entry>
- <string>NetName</string>
- <string>US_RS</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="-80" y="280"/>
+ <pos x="760" y="340"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
@@ -834,12 +827,7 @@
<rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="40" y="240"/>
- </visualElement>
- <visualElement>
- <elementName>Not</elementName>
- <elementAttributes/>
- <pos x="0" y="260"/>
+ <pos x="740" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -850,58 +838,101 @@
</entry>
<entry>
<string>NetName</string>
- <string>CLK</string>
+ <string>LI_OE</string>
</entry>
</elementAttributes>
- <pos x="-40" y="260"/>
+ <pos x="-60" y="-20"/>
</visualElement>
<visualElement>
- <elementName>Reset</elementName>
+ <elementName>atk16_alu.dig</elementName>
<elementAttributes>
<entry>
- <string>invertOutput</string>
- <boolean>false</boolean>
+ <string>shapeType</string>
+ <shapeType>SIMPLE</shapeType>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>ALU</string>
</entry>
</elementAttributes>
- <pos x="-60" y="320"/>
+ <pos x="740" y="-40"/>
</visualElement>
<visualElement>
- <elementName>Or</elementName>
+ <elementName>atk16_alu_inputs.dig</elementName>
<elementAttributes/>
- <pos x="-20" y="280"/>
+ <pos x="580" y="-40"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Driver</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="880" y="-40"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Driver</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ <entry>
+ <string>flipSelPos</string>
+ <boolean>true</boolean>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="-100"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Driver</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ <entry>
+ <string>flipSelPos</string>
+ <boolean>true</boolean>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="-60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>FLAG_EQ</string>
+ <string>R1_OE</string>
</entry>
</elementAttributes>
- <pos x="100" y="-100"/>
+ <pos x="460" y="-80"/>
</visualElement>
<visualElement>
- <elementName>Stop</elementName>
- <elementAttributes/>
- <pos x="820" y="40"/>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>R2_OE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="-40"/>
</visualElement>
<visualElement>
- <elementName>Probe</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="2"/>
</entry>
<entry>
- <string>Label</string>
+ <string>NetName</string>
<string>OPCODE</string>
</entry>
- <entry>
- <string>intFormat</string>
- <intFormat>bin</intFormat>
- </entry>
</elementAttributes>
- <pos x="60" y="60"/>
+ <pos x="540" y="60"/>
</visualElement>
<visualElement>
<elementName>Testcase</elementName>
@@ -921,51 +952,74 @@ program(0x4051, 0x40a2, 0x029b)
</testData>
</entry>
</elementAttributes>
- <pos x="-340" y="-240"/>
+ <pos x="-60" y="-460"/>
</visualElement>
<visualElement>
- <elementName>Out</elementName>
+ <elementName>atk16_jump_unit.dig</elementName>
+ <elementAttributes/>
+ <pos x="-220" y="-240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>OUT</string>
+ <string>rotation</string>
+ <rotation rotation="2"/>
</entry>
<entry>
- <string>Description</string>
- <string>Dummy output</string>
+ <string>NetName</string>
+ <string>OPCODE</string>
</entry>
</elementAttributes>
- <pos x="960" y="-140"/>
+ <pos x="-240" y="-200"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="1"/>
</entry>
+ <entry>
+ <string>NetName</string>
+ <string>ALU_OE</string>
+ </entry>
</elementAttributes>
- <pos x="940" y="-140"/>
+ <pos x="880" y="-60"/>
</visualElement>
<visualElement>
- <elementName>In</elementName>
+ <elementName>Probe</elementName>
<elementAttributes>
<entry>
<string>Label</string>
- <string>IN</string>
+ <string>PC</string>
</entry>
</elementAttributes>
- <pos x="960" y="-200"/>
+ <pos x="240" y="-380"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[74]/elementAttributes/entry/rotation"/>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>OPCODE</string>
</entry>
</elementAttributes>
- <pos x="980" y="-200"/>
+ <pos x="240" y="-440"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Probe</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>OPCODE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="-440"/>
</visualElement>
</visualElements>
<wires>
@@ -974,32 +1028,40 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="300" y="320"/>
</wire>
<wire>
- <p1 x="680" y="320"/>
- <p2 x="700" y="320"/>
+ <p1 x="-60" y="320"/>
+ <p2 x="-20" y="320"/>
</wire>
<wire>
- <p1 x="720" y="320"/>
- <p2 x="740" y="320"/>
+ <p1 x="900" y="320"/>
+ <p2 x="920" y="320"/>
</wire>
<wire>
- <p1 x="-60" y="320"/>
- <p2 x="-20" y="320"/>
+ <p1 x="840" y="320"/>
+ <p2 x="880" y="320"/>
</wire>
<wire>
<p1 x="60" y="0"/>
- <p2 x="80" y="0"/>
+ <p2 x="160" y="0"/>
</wire>
<wire>
- <p1 x="160" y="0"/>
+ <p1 x="180" y="0"/>
<p2 x="280" y="0"/>
</wire>
<wire>
- <p1 x="0" y="-260"/>
- <p2 x="20" y="-260"/>
+ <p1 x="720" y="0"/>
+ <p2 x="740" y="0"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="0"/>
+ <p2 x="520" y="0"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="0"/>
+ <p2 x="580" y="0"/>
</wire>
<wire>
- <p1 x="720" y="260"/>
- <p2 x="740" y="260"/>
+ <p1 x="0" y="-260"/>
+ <p2 x="20" y="-260"/>
</wire>
<wire>
<p1 x="40" y="260"/>
@@ -1010,6 +1072,10 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="0" y="260"/>
</wire>
<wire>
+ <p1 x="900" y="260"/>
+ <p2 x="920" y="260"/>
+ </wire>
+ <wire>
<p1 x="380" y="-200"/>
<p2 x="400" y="-200"/>
</wire>
@@ -1026,60 +1092,64 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="980" y="-200"/>
</wire>
<wire>
- <p1 x="720" y="200"/>
- <p2 x="740" y="200"/>
+ <p1 x="-240" y="-200"/>
+ <p2 x="-220" y="-200"/>
+ </wire>
+ <wire>
+ <p1 x="900" y="200"/>
+ <p2 x="920" y="200"/>
</wire>
<wire>
<p1 x="280" y="200"/>
- <p2 x="580" y="200"/>
+ <p2 x="860" y="200"/>
</wire>
<wire>
<p1 x="940" y="-140"/>
<p2 x="960" y="-140"/>
</wire>
<wire>
- <p1 x="-20" y="-140"/>
- <p2 x="200" y="-140"/>
- </wire>
- <wire>
- <p1 x="480" y="-140"/>
- <p2 x="520" y="-140"/>
+ <p1 x="-280" y="-140"/>
+ <p2 x="-60" y="-140"/>
</wire>
<wire>
<p1 x="200" y="-140"/>
<p2 x="480" y="-140"/>
</wire>
<wire>
- <p1 x="720" y="140"/>
- <p2 x="740" y="140"/>
+ <p1 x="-60" y="-140"/>
+ <p2 x="200" y="-140"/>
</wire>
<wire>
- <p1 x="-20" y="-80"/>
- <p2 x="0" y="-80"/>
+ <p1 x="900" y="140"/>
+ <p2 x="920" y="140"/>
</wire>
<wire>
<p1 x="200" y="-80"/>
<p2 x="280" y="-80"/>
</wire>
<wire>
+ <p1 x="-60" y="-80"/>
+ <p2 x="-40" y="-80"/>
+ </wire>
+ <wire>
<p1 x="60" y="-80"/>
- <p2 x="180" y="-80"/>
+ <p2 x="100" y="-80"/>
</wire>
<wire>
- <p1 x="460" y="-80"/>
- <p2 x="480" y="-80"/>
+ <p1 x="440" y="-80"/>
+ <p2 x="460" y="-80"/>
</wire>
<wire>
- <p1 x="340" y="-80"/>
+ <p1 x="380" y="-80"/>
<p2 x="400" y="-80"/>
</wire>
<wire>
- <p1 x="720" y="80"/>
- <p2 x="740" y="80"/>
+ <p1 x="900" y="80"/>
+ <p2 x="920" y="80"/>
</wire>
<wire>
- <p1 x="-20" y="-20"/>
- <p2 x="0" y="-20"/>
+ <p1 x="200" y="80"/>
+ <p2 x="720" y="80"/>
</wire>
<wire>
<p1 x="260" y="-20"/>
@@ -1087,51 +1157,63 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="60" y="-20"/>
- <p2 x="120" y="-20"/>
+ <p2 x="180" y="-20"/>
</wire>
<wire>
- <p1 x="600" y="340"/>
- <p2 x="620" y="340"/>
+ <p1 x="-60" y="-20"/>
+ <p2 x="-40" y="-20"/>
</wire>
<wire>
- <p1 x="720" y="20"/>
- <p2 x="740" y="20"/>
+ <p1 x="680" y="-20"/>
+ <p2 x="740" y="-20"/>
</wire>
<wire>
- <p1 x="140" y="20"/>
- <p2 x="280" y="20"/>
+ <p1 x="840" y="-20"/>
+ <p2 x="860" y="-20"/>
</wire>
<wire>
- <p1 x="620" y="20"/>
- <p2 x="640" y="20"/>
+ <p1 x="400" y="-20"/>
+ <p2 x="500" y="-20"/>
</wire>
<wire>
- <p1 x="440" y="20"/>
- <p2 x="480" y="20"/>
+ <p1 x="520" y="-20"/>
+ <p2 x="580" y="-20"/>
+ </wire>
+ <wire>
+ <p1 x="-240" y="-340"/>
+ <p2 x="100" y="-340"/>
</wire>
<wire>
- <p1 x="540" y="20"/>
- <p2 x="560" y="20"/>
+ <p1 x="160" y="20"/>
+ <p2 x="220" y="20"/>
+ </wire>
+ <wire>
+ <p1 x="900" y="20"/>
+ <p2 x="920" y="20"/>
</wire>
<wire>
<p1 x="560" y="20"/>
<p2 x="580" y="20"/>
</wire>
<wire>
- <p1 x="80" y="-280"/>
- <p2 x="100" y="-280"/>
+ <p1 x="440" y="20"/>
+ <p2 x="540" y="20"/>
</wire>
<wire>
- <p1 x="-40" y="-280"/>
- <p2 x="20" y="-280"/>
+ <p1 x="220" y="20"/>
+ <p2 x="280" y="20"/>
</wire>
<wire>
- <p1 x="560" y="280"/>
- <p2 x="620" y="280"/>
+ <p1 x="760" y="340"/>
+ <p2 x="780" y="340"/>
</wire>
<wire>
- <p1 x="720" y="280"/>
- <p2 x="740" y="280"/>
+ <p1 x="80" y="-280"/>
+ <p2 x="100" y="-280"/>
+ </wire>
+ <wire>
+ <p1 x="-40" y="-280"/>
+ <p2 x="20" y="-280"/>
</wire>
<wire>
<p1 x="40" y="280"/>
@@ -1150,94 +1232,94 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="300" y="280"/>
</wire>
<wire>
- <p1 x="-20" y="-220"/>
- <p2 x="20" y="-220"/>
+ <p1 x="900" y="280"/>
+ <p2 x="920" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="280"/>
+ <p2 x="780" y="280"/>
</wire>
<wire>
<p1 x="460" y="-220"/>
<p2 x="580" y="-220"/>
</wire>
<wire>
- <p1 x="720" y="220"/>
- <p2 x="740" y="220"/>
+ <p1 x="-240" y="-220"/>
+ <p2 x="-220" y="-220"/>
</wire>
<wire>
- <p1 x="720" y="160"/>
- <p2 x="740" y="160"/>
+ <p1 x="-120" y="-220"/>
+ <p2 x="20" y="-220"/>
</wire>
<wire>
- <p1 x="480" y="-100"/>
- <p2 x="520" y="-100"/>
+ <p1 x="900" y="220"/>
+ <p2 x="920" y="220"/>
</wire>
<wire>
- <p1 x="400" y="-100"/>
- <p2 x="440" y="-100"/>
+ <p1 x="900" y="160"/>
+ <p2 x="920" y="160"/>
</wire>
<wire>
<p1 x="80" y="-100"/>
<p2 x="100" y="-100"/>
</wire>
<wire>
- <p1 x="520" y="-100"/>
- <p2 x="640" y="-100"/>
+ <p1 x="460" y="-100"/>
+ <p2 x="500" y="-100"/>
</wire>
<wire>
- <p1 x="-320" y="-360"/>
- <p2 x="-300" y="-360"/>
+ <p1 x="400" y="-100"/>
+ <p2 x="420" y="-100"/>
</wire>
<wire>
- <p1 x="180" y="-40"/>
- <p2 x="280" y="-40"/>
+ <p1 x="900" y="100"/>
+ <p2 x="920" y="100"/>
</wire>
<wire>
- <p1 x="60" y="-40"/>
- <p2 x="140" y="-40"/>
+ <p1 x="-320" y="-360"/>
+ <p2 x="-300" y="-360"/>
</wire>
<wire>
- <p1 x="560" y="-40"/>
- <p2 x="680" y="-40"/>
+ <p1 x="60" y="-40"/>
+ <p2 x="200" y="-40"/>
</wire>
<wire>
- <p1 x="400" y="-40"/>
- <p2 x="440" y="-40"/>
+ <p1 x="220" y="-40"/>
+ <p2 x="280" y="-40"/>
</wire>
<wire>
- <p1 x="480" y="-40"/>
- <p2 x="500" y="-40"/>
+ <p1 x="680" y="-40"/>
+ <p2 x="740" y="-40"/>
</wire>
<wire>
- <p1 x="580" y="360"/>
- <p2 x="620" y="360"/>
+ <p1 x="840" y="-40"/>
+ <p2 x="860" y="-40"/>
</wire>
<wire>
- <p1 x="400" y="360"/>
- <p2 x="420" y="360"/>
+ <p1 x="900" y="-40"/>
+ <p2 x="920" y="-40"/>
</wire>
<wire>
- <p1 x="420" y="40"/>
- <p2 x="480" y="40"/>
+ <p1 x="500" y="-40"/>
+ <p2 x="580" y="-40"/>
</wire>
<wire>
- <p1 x="120" y="40"/>
- <p2 x="180" y="40"/>
+ <p1 x="400" y="360"/>
+ <p2 x="420" y="360"/>
</wire>
<wire>
- <p1 x="540" y="40"/>
- <p2 x="580" y="40"/>
+ <p1 x="740" y="360"/>
+ <p2 x="780" y="360"/>
</wire>
<wire>
- <p1 x="720" y="40"/>
- <p2 x="820" y="40"/>
+ <p1 x="900" y="40"/>
+ <p2 x="1000" y="40"/>
</wire>
<wire>
<p1 x="280" y="300"/>
<p2 x="300" y="300"/>
</wire>
<wire>
- <p1 x="600" y="300"/>
- <p2 x="620" y="300"/>
- </wire>
- <wire>
<p1 x="360" y="300"/>
<p2 x="400" y="300"/>
</wire>
@@ -1246,8 +1328,12 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="540" y="300"/>
</wire>
<wire>
- <p1 x="720" y="300"/>
- <p2 x="740" y="300"/>
+ <p1 x="900" y="300"/>
+ <p2 x="920" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="300"/>
+ <p2 x="780" y="300"/>
</wire>
<wire>
<p1 x="100" y="-240"/>
@@ -1262,12 +1348,12 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="200" y="-240"/>
</wire>
<wire>
- <p1 x="200" y="-240"/>
- <p2 x="400" y="-240"/>
+ <p1 x="-280" y="-240"/>
+ <p2 x="-220" y="-240"/>
</wire>
<wire>
- <p1 x="720" y="240"/>
- <p2 x="740" y="240"/>
+ <p1 x="200" y="-240"/>
+ <p2 x="400" y="-240"/>
</wire>
<wire>
<p1 x="40" y="240"/>
@@ -1278,68 +1364,76 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="500" y="240"/>
</wire>
<wire>
+ <p1 x="900" y="240"/>
+ <p2 x="920" y="240"/>
+ </wire>
+ <wire>
<p1 x="0" y="-180"/>
<p2 x="20" y="-180"/>
</wire>
<wire>
- <p1 x="720" y="180"/>
- <p2 x="740" y="180"/>
+ <p1 x="900" y="180"/>
+ <p2 x="920" y="180"/>
</wire>
<wire>
- <p1 x="720" y="120"/>
- <p2 x="740" y="120"/>
+ <p1 x="480" y="-120"/>
+ <p2 x="500" y="-120"/>
</wire>
<wire>
- <p1 x="-20" y="-60"/>
- <p2 x="0" y="-60"/>
+ <p1 x="500" y="-120"/>
+ <p2 x="920" y="-120"/>
</wire>
<wire>
<p1 x="60" y="-60"/>
<p2 x="80" y="-60"/>
</wire>
<wire>
- <p1 x="340" y="-60"/>
- <p2 x="420" y="-60"/>
+ <p1 x="-60" y="-60"/>
+ <p2 x="-40" y="-60"/>
</wire>
<wire>
- <p1 x="500" y="-60"/>
- <p2 x="640" y="-60"/>
+ <p1 x="480" y="-60"/>
+ <p2 x="500" y="-60"/>
+ </wire>
+ <wire>
+ <p1 x="380" y="-60"/>
+ <p2 x="420" y="-60"/>
</wire>
<wire>
<p1 x="420" y="-60"/>
- <p2 x="460" y="-60"/>
+ <p2 x="440" y="-60"/>
</wire>
<wire>
<p1 x="80" y="-60"/>
- <p2 x="160" y="-60"/>
+ <p2 x="220" y="-60"/>
</wire>
<wire>
- <p1 x="720" y="60"/>
- <p2 x="740" y="60"/>
+ <p1 x="100" y="-380"/>
+ <p2 x="240" y="-380"/>
</wire>
<wire>
- <p1 x="180" y="60"/>
- <p2 x="480" y="60"/>
+ <p1 x="900" y="60"/>
+ <p2 x="920" y="60"/>
</wire>
<wire>
- <p1 x="60" y="60"/>
- <p2 x="80" y="60"/>
+ <p1 x="540" y="60"/>
+ <p2 x="560" y="60"/>
</wire>
<wire>
- <p1 x="480" y="-200"/>
- <p2 x="480" y="-140"/>
+ <p1 x="220" y="60"/>
+ <p2 x="440" y="60"/>
</wire>
<wire>
- <p1 x="160" y="-60"/>
- <p2 x="160" y="0"/>
+ <p1 x="480" y="-200"/>
+ <p2 x="480" y="-140"/>
</wire>
<wire>
- <p1 x="640" y="-100"/>
- <p2 x="640" y="-60"/>
+ <p1 x="480" y="-140"/>
+ <p2 x="480" y="-120"/>
</wire>
<wire>
- <p1 x="640" y="-60"/>
- <p2 x="640" y="20"/>
+ <p1 x="160" y="0"/>
+ <p2 x="160" y="20"/>
</wire>
<wire>
<p1 x="420" y="320"/>
@@ -1347,21 +1441,29 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="420" y="-60"/>
- <p2 x="420" y="40"/>
+ <p2 x="420" y="0"/>
</wire>
<wire>
- <p1 x="100" y="-280"/>
- <p2 x="100" y="-240"/>
+ <p1 x="100" y="-380"/>
+ <p2 x="100" y="-340"/>
</wire>
<wire>
- <p1 x="580" y="40"/>
- <p2 x="580" y="200"/>
+ <p1 x="100" y="-340"/>
+ <p2 x="100" y="-280"/>
+ </wire>
+ <wire>
+ <p1 x="100" y="-280"/>
+ <p2 x="100" y="-240"/>
</wire>
<wire>
<p1 x="200" y="-280"/>
<p2 x="200" y="-240"/>
</wire>
<wire>
+ <p1 x="200" y="-40"/>
+ <p2 x="200" y="80"/>
+ </wire>
+ <wire>
<p1 x="200" y="-240"/>
<p2 x="200" y="-140"/>
</wire>
@@ -1374,56 +1476,60 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="40" y="300"/>
</wire>
<wire>
- <p1 x="520" y="-140"/>
- <p2 x="520" y="-100"/>
+ <p1 x="520" y="-20"/>
+ <p2 x="520" y="0"/>
</wire>
<wire>
<p1 x="-300" y="-400"/>
<p2 x="-300" y="-360"/>
</wire>
<wire>
- <p1 x="140" y="-40"/>
- <p2 x="140" y="20"/>
- </wire>
- <wire>
- <p1 x="80" y="0"/>
- <p2 x="80" y="60"/>
+ <p1 x="-240" y="-340"/>
+ <p2 x="-240" y="-220"/>
</wire>
<wire>
<p1 x="80" y="-100"/>
<p2 x="80" y="-60"/>
</wire>
<wire>
+ <p1 x="720" y="0"/>
+ <p2 x="720" y="80"/>
+ </wire>
+ <wire>
<p1 x="400" y="-100"/>
<p2 x="400" y="-80"/>
</wire>
<wire>
<p1 x="400" y="-80"/>
- <p2 x="400" y="-40"/>
+ <p2 x="400" y="-20"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="20"/>
+ <p2 x="560" y="60"/>
</wire>
<wire>
- <p1 x="560" y="-40"/>
- <p2 x="560" y="20"/>
+ <p1 x="500" y="240"/>
+ <p2 x="500" y="280"/>
</wire>
<wire>
- <p1 x="-20" y="-220"/>
- <p2 x="-20" y="-140"/>
+ <p1 x="500" y="-120"/>
+ <p2 x="500" y="-100"/>
</wire>
<wire>
- <p1 x="-20" y="-140"/>
- <p2 x="-20" y="-80"/>
+ <p1 x="500" y="-40"/>
+ <p2 x="500" y="-20"/>
</wire>
<wire>
- <p1 x="180" y="-80"/>
- <p2 x="180" y="-40"/>
+ <p1 x="500" y="-100"/>
+ <p2 x="500" y="-60"/>
</wire>
<wire>
- <p1 x="180" y="40"/>
- <p2 x="180" y="60"/>
+ <p1 x="180" y="-20"/>
+ <p2 x="180" y="0"/>
</wire>
<wire>
- <p1 x="500" y="240"/>
- <p2 x="500" y="280"/>
+ <p1 x="-280" y="-240"/>
+ <p2 x="-280" y="-140"/>
</wire>
<wire>
<p1 x="280" y="320"/>
@@ -1434,17 +1540,37 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="280" y="280"/>
</wire>
<wire>
- <p1 x="440" y="-40"/>
- <p2 x="440" y="20"/>
+ <p1 x="920" y="-120"/>
+ <p2 x="920" y="-40"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="20"/>
+ <p2 x="440" y="60"/>
</wire>
<wire>
- <p1 x="120" y="-20"/>
- <p2 x="120" y="40"/>
+ <p1 x="-60" y="-140"/>
+ <p2 x="-60" y="-80"/>
</wire>
<wire>
<p1 x="380" y="-200"/>
<p2 x="380" y="-180"/>
</wire>
+ <wire>
+ <p1 x="220" y="-60"/>
+ <p2 x="220" y="-40"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="20"/>
+ <p2 x="220" y="60"/>
+ </wire>
+ <wire>
+ <p1 x="860" y="-20"/>
+ <p2 x="860" y="200"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="0"/>
+ <p2 x="540" y="20"/>
+ </wire>
</wires>
<measurementOrdering/>
</circuit> \ No newline at end of file
diff --git a/digital/atk16_alu.dig b/digital/atk16_alu.dig
index d456fee..0f40f94 100644
--- a/digital/atk16_alu.dig
+++ b/digital/atk16_alu.dig
@@ -1,737 +1,526 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>2</version>
- <attributes/>
+ <attributes>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
<visualElements>
<visualElement>
- <elementName>74382.dig</elementName>
- <elementAttributes/>
- <pos x="-100" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>74382.dig</elementName>
- <elementAttributes/>
- <pos x="220" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>74382.dig</elementName>
- <elementAttributes/>
- <pos x="560" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>74382.dig</elementName>
- <elementAttributes/>
- <pos x="920" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>VDD</elementName>
+ <elementName>Add</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="3"/>
+ <string>Label</string>
+ <string>PLUS</string>
</entry>
- </elementAttributes>
- <pos x="60" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>VDD</elementName>
- <elementAttributes>
<entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="380" y="160"/>
+ <pos x="60" y="0"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/>
+ <rotation rotation="2"/>
</entry>
- </elementAttributes>
- <pos x="720" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>VDD</elementName>
- <elementAttributes>
<entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/>
- </entry>
- </elementAttributes>
- <pos x="1080" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
+ <string>NetName</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="-120" y="520"/>
+ <pos x="40" y="0"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/>
+ <rotation rotation="2"/>
</entry>
- </elementAttributes>
- <pos x="200" y="520"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
<entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/>
+ <string>NetName</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="540" y="520"/>
+ <pos x="40" y="20"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/>
- </entry>
- </elementAttributes>
- <pos x="900" y="520"/>
- </visualElement>
- <visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>mirror</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>16</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>1*16</string>
- </entry>
- </elementAttributes>
- <pos x="-440" y="220"/>
- </visualElement>
- <visualElement>
- <elementName>In</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>LHS of binary ALU operation</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>A</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="-480" y="220"/>
- </visualElement>
- <visualElement>
- <elementName>In</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>RHS of binary ALU operation</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>B</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="-480" y="360"/>
+ <elementAttributes/>
+ <pos x="40" y="60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>A0</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="-380" y="220"/>
+ <pos x="240" y="0"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>A1</string>
+ <string>FC</string>
</entry>
</elementAttributes>
- <pos x="-380" y="200"/>
+ <pos x="240" y="20"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A2</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-380" y="180"/>
+ <pos x="160" y="0"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A3</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
- </elementAttributes>
- <pos x="-380" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>A4</string>
+ <string>S0</string>
</entry>
</elementAttributes>
- <pos x="-380" y="140"/>
+ <pos x="160" y="-20"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>A5</string>
- </entry>
- </elementAttributes>
- <pos x="-380" y="120"/>
+ <elementName>Driver</elementName>
+ <elementAttributes/>
+ <pos x="200" y="40"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A6</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
- </elementAttributes>
- <pos x="-380" y="100"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>A7</string>
+ <string>S0</string>
</entry>
</elementAttributes>
- <pos x="-380" y="80"/>
+ <pos x="200" y="20"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>atk16_alu_fo.dig</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A8</string>
+ <string>Label</string>
+ <string>Overflow flag</string>
</entry>
</elementAttributes>
- <pos x="-380" y="60"/>
+ <pos x="620" y="0"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A9</string>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
- </elementAttributes>
- <pos x="-380" y="40"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>A10</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="-380" y="20"/>
+ <pos x="200" y="120"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A11</string>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/>
</entry>
- </elementAttributes>
- <pos x="-380" y="0"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>A12</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="-380" y="-20"/>
+ <pos x="200" y="140"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>A13</string>
- </entry>
- </elementAttributes>
- <pos x="-380" y="-40"/>
+ <elementName>Ground</elementName>
+ <elementAttributes/>
+ <pos x="200" y="180"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>A14</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="-380" y="-60"/>
+ <pos x="400" y="120"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>A15</string>
+ <string>FC</string>
</entry>
</elementAttributes>
- <pos x="-380" y="-80"/>
+ <pos x="400" y="140"/>
</visualElement>
<visualElement>
- <elementName>In</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>Description</string>
- <string>ALU operation code</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>S</string>
- </entry>
- <entry>
<string>Bits</string>
- <int>4</int>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-500" y="600"/>
+ <pos x="320" y="120"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>4</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>1*4</string>
+ <string>NetName</string>
+ <string>S1</string>
</entry>
</elementAttributes>
- <pos x="-420" y="600"/>
+ <pos x="320" y="100"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>mirror</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>16</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>1*16</string>
- </entry>
- </elementAttributes>
- <pos x="-320" y="360"/>
+ <elementName>Driver</elementName>
+ <elementAttributes/>
+ <pos x="360" y="160"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B0</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
- </elementAttributes>
- <pos x="-260" y="360"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>B1</string>
+ <string>S1</string>
</entry>
</elementAttributes>
- <pos x="-260" y="340"/>
+ <pos x="360" y="140"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Sub</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B2</string>
+ <string>Label</string>
+ <string>MINUS</string>
</entry>
- </elementAttributes>
- <pos x="-260" y="320"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>B3</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-260" y="300"/>
+ <pos x="220" y="120"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>And</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B4</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-260" y="280"/>
+ <pos x="60" y="240"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Text</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B5</string>
+ <string>Description</string>
+ <string>AND</string>
</entry>
</elementAttributes>
- <pos x="-260" y="260"/>
+ <pos x="60" y="200"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B6</string>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
- </elementAttributes>
- <pos x="-260" y="240"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>B7</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="-260" y="220"/>
+ <pos x="40" y="240"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B8</string>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/>
</entry>
- </elementAttributes>
- <pos x="-260" y="200"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>B9</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="-260" y="180"/>
+ <pos x="40" y="260"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B10</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-260" y="160"/>
+ <pos x="160" y="260"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B11</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
- </elementAttributes>
- <pos x="-260" y="140"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>B12</string>
+ <string>S2</string>
</entry>
</elementAttributes>
- <pos x="-260" y="120"/>
+ <pos x="160" y="240"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>B13</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="-260" y="100"/>
+ <pos x="240" y="260"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Or</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B14</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="-260" y="80"/>
+ <pos x="220" y="360"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Text</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B15</string>
+ <string>Description</string>
+ <string>OR</string>
</entry>
</elementAttributes>
- <pos x="-260" y="60"/>
+ <pos x="220" y="320"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>A0</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="-100" y="240"/>
+ <pos x="200" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>A1</string>
- </entry>
- </elementAttributes>
- <pos x="-100" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>A2</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="40" y="200"/>
+ <pos x="200" y="380"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A3</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="40" y="280"/>
+ <pos x="320" y="380"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>NetName</string>
- <string>B0</string>
+ <string>S3</string>
</entry>
</elementAttributes>
- <pos x="-100" y="280"/>
+ <pos x="320" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>B1</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="-100" y="200"/>
+ <pos x="400" y="380"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>XOr</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B2</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="40" y="240"/>
+ <pos x="60" y="480"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Text</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B3</string>
+ <string>Description</string>
+ <string>XOR</string>
</entry>
</elementAttributes>
- <pos x="40" y="320"/>
+ <pos x="60" y="440"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>Y0</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="-100" y="440"/>
+ <pos x="40" y="480"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>Y1</string>
+ <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/>
</entry>
- </elementAttributes>
- <pos x="-100" y="480"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>Y2</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="40" y="520"/>
+ <pos x="40" y="500"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y3</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="40" y="480"/>
+ <pos x="160" y="500"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>NetName</string>
- <string>Y4</string>
+ <string>S4</string>
</entry>
</elementAttributes>
- <pos x="220" y="440"/>
+ <pos x="160" y="480"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y5</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="220" y="480"/>
+ <pos x="240" y="500"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>BarrelShifter</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y6</string>
+ <string>Label</string>
+ <string>LOG SHIFT RIGHT</string>
</entry>
- </elementAttributes>
- <pos x="360" y="520"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y7</string>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ <entry>
+ <string>direction</string>
+ <direction>right</direction>
</entry>
</elementAttributes>
- <pos x="360" y="480"/>
+ <pos x="220" y="620"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>Y8</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="560" y="440"/>
+ <pos x="200" y="620"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -742,222 +531,176 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y9</string>
- </entry>
- </elementAttributes>
- <pos x="560" y="480"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>Y10</string>
+ <string>B_L5</string>
</entry>
</elementAttributes>
- <pos x="700" y="520"/>
+ <pos x="200" y="640"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y11</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="700" y="480"/>
+ <pos x="380" y="640"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>NetName</string>
- <string>Y12</string>
+ <string>S5</string>
</entry>
</elementAttributes>
- <pos x="920" y="440"/>
+ <pos x="380" y="620"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y13</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="920" y="480"/>
+ <pos x="420" y="640"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>BarrelShifter</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y14</string>
+ <string>Label</string>
+ <string>ARI SHIFT RIGHT</string>
</entry>
- </elementAttributes>
- <pos x="1060" y="520"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>Y15</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
- </elementAttributes>
- <pos x="1060" y="480"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>barrelShifterMode</string>
+ <barrelShifterMode>arithmetic</barrelShifterMode>
</entry>
<entry>
- <string>NetName</string>
- <string>A4</string>
+ <string>direction</string>
+ <direction>right</direction>
</entry>
</elementAttributes>
- <pos x="220" y="240"/>
+ <pos x="80" y="760"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>A5</string>
- </entry>
- </elementAttributes>
- <pos x="220" y="160"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>A6</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="360" y="200"/>
+ <pos x="60" y="760"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A7</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="360" y="280"/>
+ <pos x="240" y="780"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>NetName</string>
- <string>A8</string>
+ <string>S6</string>
</entry>
</elementAttributes>
- <pos x="560" y="240"/>
+ <pos x="240" y="760"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>A9</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="560" y="160"/>
+ <pos x="280" y="780"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>BarrelShifter</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>A10</string>
+ <string>Label</string>
+ <string>LOG SHIFT LEFT</string>
</entry>
- </elementAttributes>
- <pos x="700" y="200"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>NetName</string>
- <string>A11</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="700" y="280"/>
+ <pos x="220" y="920"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
- <string>A12</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="920" y="240"/>
+ <pos x="200" y="920"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>A13</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="920" y="160"/>
+ <pos x="380" y="940"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>A14</string>
+ <string>S7</string>
</entry>
</elementAttributes>
- <pos x="1060" y="200"/>
+ <pos x="380" y="920"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>A15</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="1060" y="280"/>
+ <pos x="420" y="940"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -968,10 +711,10 @@
</entry>
<entry>
<string>NetName</string>
- <string>B4</string>
+ <string>B_L5</string>
</entry>
</elementAttributes>
- <pos x="220" y="280"/>
+ <pos x="60" y="780"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -982,30 +725,24 @@
</entry>
<entry>
<string>NetName</string>
- <string>B5</string>
+ <string>B_L5</string>
</entry>
</elementAttributes>
- <pos x="220" y="200"/>
+ <pos x="200" y="940"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>B6</string>
+ <string>rotation</string>
+ <rotation rotation="2"/>
</entry>
- </elementAttributes>
- <pos x="360" y="240"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
<string>NetName</string>
- <string>B7</string>
+ <string>B15</string>
</entry>
</elementAttributes>
- <pos x="360" y="320"/>
+ <pos x="600" y="60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1016,10 +753,10 @@
</entry>
<entry>
<string>NetName</string>
- <string>B8</string>
+ <string>Y15</string>
</entry>
</elementAttributes>
- <pos x="560" y="280"/>
+ <pos x="600" y="80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1030,44 +767,30 @@
</entry>
<entry>
<string>NetName</string>
- <string>B9</string>
- </entry>
- </elementAttributes>
- <pos x="560" y="200"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>B10</string>
+ <string>A15</string>
</entry>
</elementAttributes>
- <pos x="700" y="240"/>
+ <pos x="600" y="20"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>B11</string>
+ <string>FO</string>
</entry>
</elementAttributes>
- <pos x="700" y="320"/>
+ <pos x="720" y="40"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Text</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>B12</string>
+ <string>Description</string>
+ <string>Sign flag</string>
</entry>
</elementAttributes>
- <pos x="920" y="280"/>
+ <pos x="820" y="-40"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1078,108 +801,54 @@
</entry>
<entry>
<string>NetName</string>
- <string>B13</string>
- </entry>
- </elementAttributes>
- <pos x="920" y="200"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>B14</string>
+ <string>Y15</string>
</entry>
</elementAttributes>
- <pos x="1060" y="240"/>
+ <pos x="860" y="0"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>B15</string>
- </entry>
- </elementAttributes>
- <pos x="1060" y="320"/>
- </visualElement>
- <visualElement>
- <elementName>Out</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>ALU output</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>Y</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
+ <string>FS</string>
</entry>
</elementAttributes>
- <pos x="960" y="720"/>
+ <pos x="900" y="0"/>
</visualElement>
<visualElement>
- <elementName>BarrelShifter</elementName>
+ <elementName>atk16_alu_fz.dig</elementName>
<elementAttributes>
<entry>
<string>Label</string>
- <string>SRL</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- <entry>
- <string>direction</string>
- <direction>right</direction>
- </entry>
- </elementAttributes>
- <pos x="20" y="780"/>
- </visualElement>
- <visualElement>
- <elementName>Demultiplexer</elementName>
- <elementAttributes>
- <entry>
- <string>Selector Bits</string>
- <int>3</int>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
+ <string>Zero flag</string>
</entry>
</elementAttributes>
- <pos x="-220" y="780"/>
+ <pos x="840" y="80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="3"/>
+ <rotation rotation="2"/>
</entry>
<entry>
<string>NetName</string>
- <string>A</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="-460" y="260"/>
+ <pos x="820" y="80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="3"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>B</string>
+ <string>FZ</string>
</entry>
</elementAttributes>
- <pos x="-460" y="420"/>
+ <pos x="920" y="80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1190,441 +859,330 @@
</entry>
<entry>
<string>NetName</string>
- <string>A</string>
+ <string>S1</string>
</entry>
</elementAttributes>
- <pos x="-220" y="860"/>
+ <pos x="600" y="0"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Testcase</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>16</string>
+ <string>Label</string>
+ <string>PLUS test</string>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>5,</string>
+ <string>Testdata</string>
+ <testData>
+ <dataString>A B S FLAGS Y
+0x1 0x2 0 0b0000 0x3
+0xff 0x1 0 0b0000 0x100
+0x1 0xffff 0 0b0101 0x0
+0x4000 0x4000 0 0b1010 0x8000</dataString>
+ </testData>
</entry>
</elementAttributes>
- <pos x="-200" y="1040"/>
+ <pos x="700" y="620"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Testcase</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Label</string>
+ <string>MINUS test</string>
</entry>
<entry>
- <string>NetName</string>
- <string>B</string>
+ <string>Testdata</string>
+ <testData>
+ <dataString>A B S FLAGS Y
+0x10 0x1 1 0b0000 0xF
+0x1 0x0 1 0b0000 0x1
+0x0 0x1 1 0b1001 0xFFFF
+0x8000 0x1 1 0b0010 0x7FFF</dataString>
+ </testData>
</entry>
</elementAttributes>
- <pos x="-220" y="1040"/>
+ <pos x="700" y="700"/>
</visualElement>
<visualElement>
- <elementName>BarrelShifter</elementName>
+ <elementName>In</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>SRA</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- <entry>
- <string>barrelShifterMode</string>
- <barrelShifterMode>arithmetic</barrelShifterMode>
+ <string>Description</string>
+ <string>LHS of binary ALU operation</string>
</entry>
<entry>
- <string>direction</string>
- <direction>right</direction>
- </entry>
- </elementAttributes>
- <pos x="140" y="940"/>
- </visualElement>
- <visualElement>
- <elementName>BarrelShifter</elementName>
- <elementAttributes>
- <entry>
<string>Label</string>
- <string>SLL</string>
+ <string>A</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
- <pos x="40" y="1120"/>
+ <pos x="-300" y="40"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>In</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>1*4</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>4</string>
+ <string>Description</string>
+ <string>RHS of binary ALU operation</string>
</entry>
- </elementAttributes>
- <pos x="1220" y="400"/>
- </visualElement>
- <visualElement>
- <elementName>Out</elementName>
- <elementAttributes>
<entry>
<string>Label</string>
- <string>FLAGS</string>
+ <string>B</string>
</entry>
<entry>
<string>Bits</string>
- <int>4</int>
- </entry>
- </elementAttributes>
- <pos x="1300" y="400"/>
- </visualElement>
- <visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>splitterSpreading</string>
- <int>2</int>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>16</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>8*2</string>
- </entry>
- </elementAttributes>
- <pos x="960" y="820"/>
- </visualElement>
- <visualElement>
- <elementName>BitSelector</elementName>
- <elementAttributes>
- <entry>
- <string>Selector Bits</string>
- <int>4</int>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="1000" y="960"/>
+ <pos x="-300" y="180"/>
</visualElement>
<visualElement>
- <elementName>Const</elementName>
+ <elementName>In</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="1"/>
+ <string>Description</string>
+ <string>ALU operation code</string>
</entry>
<entry>
- <string>Value</string>
- <long>15</long>
+ <string>Label</string>
+ <string>S</string>
</entry>
<entry>
<string>Bits</string>
- <int>4</int>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="1020" y="980"/>
+ <pos x="-320" y="420"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Text</elementName>
<elementAttributes>
<entry>
- <string>splitterSpreading</string>
- <int>2</int>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>8</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>4*2</string>
+ <string>Description</string>
+ <string>S Y
+0 A + B
+1 A - B
+2 A and B
+3 A or B
+4 A xor B
+5 A &gt;&gt; B # logical
+6 A &gt;&gt;&gt; B # arithmetic
+7 A &lt;&lt; B</string>
</entry>
</elementAttributes>
- <pos x="1040" y="820"/>
+ <pos x="-380" y="640"/>
</visualElement>
<visualElement>
- <elementName>Testcase</elementName>
+ <elementName>Decoder</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>Add test 1</string>
+ <string>Selector Bits</string>
+ <int>3</int>
</entry>
<entry>
- <string>Testdata</string>
- <testData>
- <dataString>A B S FLAGS Y
-0x1 0x2 3 0b0000 0x3
-0xff 0x1 3 0b0000 0x100
-0x1 0xffff 3 0b0101 0x0</dataString>
- </testData>
+ <string>flipSelPos</string>
+ <boolean>true</boolean>
</entry>
</elementAttributes>
- <pos x="480" y="1260"/>
+ <pos x="-260" y="420"/>
</visualElement>
<visualElement>
- <elementName>Or</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>8</int>
+ <string>NetName</string>
+ <string>S0</string>
</entry>
</elementAttributes>
- <pos x="980" y="820"/>
+ <pos x="-200" y="420"/>
</visualElement>
<visualElement>
- <elementName>Or</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>4</int>
+ <string>NetName</string>
+ <string>S1</string>
</entry>
</elementAttributes>
- <pos x="1060" y="820"/>
+ <pos x="-200" y="440"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>splitterSpreading</string>
- <int>2</int>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>2</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>1*2</string>
+ <string>NetName</string>
+ <string>S2</string>
</entry>
</elementAttributes>
- <pos x="1200" y="820"/>
+ <pos x="-200" y="460"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>splitterSpreading</string>
- <int>2</int>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>4</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>2*2</string>
+ <string>NetName</string>
+ <string>S3</string>
</entry>
</elementAttributes>
- <pos x="1120" y="820"/>
+ <pos x="-200" y="480"/>
</visualElement>
<visualElement>
- <elementName>Or</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Bits</string>
- <int>2</int>
+ <string>NetName</string>
+ <string>S4</string>
</entry>
</elementAttributes>
- <pos x="1140" y="820"/>
- </visualElement>
- <visualElement>
- <elementName>NOr</elementName>
- <elementAttributes/>
- <pos x="1220" y="820"/>
+ <pos x="-200" y="500"/>
</visualElement>
<visualElement>
- <elementName>Testcase</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Label</string>
- <string>Sub test 1</string>
- </entry>
- <entry>
- <string>Testdata</string>
- <testData>
- <dataString>A B S FLAGS Y
-0x10 0x1 2 0b0001 0xF
-0x1 0x0 1 0b1000 0xFFFF</dataString>
- </testData>
+ <string>NetName</string>
+ <string>S5</string>
</entry>
</elementAttributes>
- <pos x="660" y="1260"/>
- </visualElement>
- <visualElement>
- <elementName>atk16_alu_carryfix.dig</elementName>
- <elementAttributes/>
- <pos x="-60" y="-40"/>
+ <pos x="-200" y="520"/>
</visualElement>
<visualElement>
- <elementName>Multiplexer</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>flipSelPos</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- <entry>
- <string>Selector Bits</string>
- <int>2</int>
+ <string>NetName</string>
+ <string>S6</string>
</entry>
</elementAttributes>
- <pos x="340" y="800"/>
+ <pos x="-200" y="540"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
+ <string>NetName</string>
+ <string>S7</string>
</entry>
</elementAttributes>
- <pos x="320" y="860"/>
+ <pos x="-200" y="560"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="3"/>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>1,1</string>
+ <rotation rotation="1"/>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>2</string>
+ <string>NetName</string>
+ <string>A</string>
</entry>
</elementAttributes>
- <pos x="360" y="740"/>
+ <pos x="-280" y="0"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
- <string>1*16</string>
+ <string>16</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>16</string>
+ <string>15,1</string>
</entry>
</elementAttributes>
- <pos x="1260" y="0"/>
+ <pos x="-240" y="40"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>NetName</string>
- <string>Y0</string>
+ <string>B</string>
</entry>
</elementAttributes>
- <pos x="1240" y="0"/>
+ <pos x="-280" y="140"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Input Splitting</string>
+ <string>16</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y1</string>
+ <string>Output Splitting</string>
+ <string>15,1</string>
</entry>
</elementAttributes>
- <pos x="1240" y="20"/>
+ <pos x="-240" y="180"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Input Splitting</string>
+ <string>16</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y2</string>
+ <string>Output Splitting</string>
+ <string>5</string>
</entry>
</elementAttributes>
- <pos x="1240" y="40"/>
+ <pos x="-260" y="240"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y3</string>
+ <string>B_L5</string>
</entry>
</elementAttributes>
- <pos x="1240" y="60"/>
+ <pos x="-200" y="240"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y4</string>
+ <string>A15</string>
</entry>
</elementAttributes>
- <pos x="1240" y="80"/>
+ <pos x="-200" y="60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y5</string>
+ <string>B15</string>
</entry>
</elementAttributes>
- <pos x="1240" y="100"/>
+ <pos x="-200" y="200"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Input Splitting</string>
+ <string>16</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y6</string>
+ <string>Output Splitting</string>
+ <string>15,1</string>
</entry>
</elementAttributes>
- <pos x="1240" y="120"/>
+ <pos x="700" y="220"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1635,80 +1193,66 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y7</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="1240" y="140"/>
+ <pos x="660" y="220"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>Y8</string>
+ <string>Y15</string>
</entry>
</elementAttributes>
- <pos x="1240" y="160"/>
+ <pos x="760" y="240"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>Y9</string>
+ <string>Description</string>
+ <string>Output</string>
</entry>
- </elementAttributes>
- <pos x="1240" y="180"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Label</string>
+ <string>Y</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y10</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="1240" y="200"/>
+ <pos x="700" y="180"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Input Splitting</string>
+ <string>1*4</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y11</string>
+ <string>Output Splitting</string>
+ <string>4</string>
</entry>
</elementAttributes>
- <pos x="1240" y="220"/>
+ <pos x="720" y="360"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Label</string>
+ <string>FLAGS</string>
</entry>
<entry>
- <string>NetName</string>
- <string>Y12</string>
+ <string>Bits</string>
+ <int>4</int>
</entry>
</elementAttributes>
- <pos x="1240" y="240"/>
+ <pos x="800" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1719,10 +1263,10 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y13</string>
+ <string>FO</string>
</entry>
</elementAttributes>
- <pos x="1240" y="260"/>
+ <pos x="700" y="380"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1733,10 +1277,10 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y14</string>
+ <string>FZ</string>
</entry>
</elementAttributes>
- <pos x="1240" y="280"/>
+ <pos x="700" y="400"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1747,44 +1291,10 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y15</string>
+ <string>FS</string>
</entry>
</elementAttributes>
- <pos x="1240" y="300"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>ALU1</string>
- </entry>
- </elementAttributes>
- <pos x="1300" y="0"/>
- </visualElement>
- <visualElement>
- <elementName>Multiplexer</elementName>
- <elementAttributes>
- <entry>
- <string>flipSelPos</string>
- <boolean>true</boolean>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="740" y="800"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>NetName</string>
- <string>ALU2</string>
- </entry>
- </elementAttributes>
- <pos x="400" y="840"/>
+ <pos x="700" y="420"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1795,800 +1305,390 @@
</entry>
<entry>
<string>NetName</string>
- <string>ALU1</string>
+ <string>FC</string>
</entry>
</elementAttributes>
- <pos x="720" y="800"/>
+ <pos x="660" y="360"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>PullDown</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="2"/>
</entry>
- <entry>
- <string>NetName</string>
- <string>ALU2</string>
- </entry>
- </elementAttributes>
- <pos x="720" y="840"/>
- </visualElement>
- <visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="3"/>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>1,1,1</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>3</string>
- </entry>
</elementAttributes>
- <pos x="-320" y="940"/>
+ <pos x="700" y="340"/>
</visualElement>
</visualElements>
<wires>
<wire>
- <p1 x="-420" y="0"/>
- <p2 x="-380" y="0"/>
- </wire>
- <wire>
- <p1 x="-200" y="0"/>
- <p2 x="-60" y="0"/>
- </wire>
- <wire>
- <p1 x="1240" y="0"/>
- <p2 x="1260" y="0"/>
- </wire>
- <wire>
- <p1 x="1280" y="0"/>
- <p2 x="1300" y="0"/>
+ <p1 x="40" y="0"/>
+ <p2 x="60" y="0"/>
</wire>
<wire>
- <p1 x="-400" y="640"/>
- <p2 x="-360" y="640"/>
+ <p1 x="120" y="0"/>
+ <p2 x="140" y="0"/>
</wire>
<wire>
- <p1 x="500" y="640"/>
- <p2 x="860" y="640"/>
+ <p1 x="180" y="0"/>
+ <p2 x="240" y="0"/>
</wire>
<wire>
- <p1 x="-360" y="640"/>
- <p2 x="-160" y="640"/>
+ <p1 x="860" y="0"/>
+ <p2 x="900" y="0"/>
</wire>
<wire>
- <p1 x="-160" y="640"/>
- <p2 x="160" y="640"/>
+ <p1 x="600" y="0"/>
+ <p2 x="620" y="0"/>
</wire>
<wire>
- <p1 x="160" y="640"/>
- <p2 x="500" y="640"/>
+ <p1 x="400" y="640"/>
+ <p2 x="420" y="640"/>
</wire>
<wire>
- <p1 x="-200" y="320"/>
- <p2 x="-100" y="320"/>
- </wire>
- <wire>
- <p1 x="120" y="320"/>
- <p2 x="220" y="320"/>
- </wire>
- <wire>
- <p1 x="460" y="320"/>
- <p2 x="560" y="320"/>
- </wire>
- <wire>
- <p1 x="820" y="320"/>
- <p2 x="920" y="320"/>
- </wire>
- <wire>
- <p1 x="-300" y="320"/>
- <p2 x="-260" y="320"/>
- </wire>
- <wire>
- <p1 x="-320" y="960"/>
- <p2 x="-200" y="960"/>
- </wire>
- <wire>
- <p1 x="940" y="960"/>
- <p2 x="1000" y="960"/>
- </wire>
- <wire>
- <p1 x="1040" y="960"/>
- <p2 x="1400" y="960"/>
+ <p1 x="280" y="640"/>
+ <p2 x="360" y="640"/>
</wire>
<wire>
<p1 x="200" y="960"/>
<p2 x="220" y="960"/>
</wire>
<wire>
- <p1 x="-300" y="260"/>
- <p2 x="-260" y="260"/>
- </wire>
- <wire>
- <p1 x="1240" y="260"/>
- <p2 x="1260" y="260"/>
- </wire>
- <wire>
- <p1 x="-120" y="520"/>
- <p2 x="-100" y="520"/>
- </wire>
- <wire>
- <p1 x="200" y="520"/>
- <p2 x="220" y="520"/>
- </wire>
- <wire>
- <p1 x="540" y="520"/>
- <p2 x="560" y="520"/>
- </wire>
- <wire>
- <p1 x="900" y="520"/>
- <p2 x="920" y="520"/>
- </wire>
- <wire>
- <p1 x="1140" y="520"/>
- <p2 x="1380" y="520"/>
- </wire>
- <wire>
- <p1 x="-60" y="1160"/>
- <p2 x="40" y="1160"/>
- </wire>
- <wire>
- <p1 x="720" y="840"/>
- <p2 x="740" y="840"/>
- </wire>
- <wire>
- <p1 x="1300" y="840"/>
- <p2 x="1380" y="840"/>
- </wire>
- <wire>
- <p1 x="240" y="840"/>
- <p2 x="340" y="840"/>
- </wire>
- <wire>
- <p1 x="380" y="840"/>
- <p2 x="400" y="840"/>
- </wire>
- <wire>
- <p1 x="-420" y="200"/>
- <p2 x="-380" y="200"/>
- </wire>
- <wire>
- <p1 x="-300" y="200"/>
- <p2 x="-260" y="200"/>
- </wire>
- <wire>
- <p1 x="1240" y="200"/>
- <p2 x="1260" y="200"/>
- </wire>
- <wire>
- <p1 x="-420" y="140"/>
- <p2 x="-380" y="140"/>
+ <p1 x="120" y="260"/>
+ <p2 x="140" y="260"/>
</wire>
<wire>
- <p1 x="-300" y="140"/>
- <p2 x="-260" y="140"/>
+ <p1 x="180" y="260"/>
+ <p2 x="240" y="260"/>
</wire>
<wire>
- <p1 x="1240" y="140"/>
- <p2 x="1260" y="140"/>
+ <p1 x="40" y="520"/>
+ <p2 x="60" y="520"/>
</wire>
<wire>
- <p1 x="-180" y="780"/>
- <p2 x="20" y="780"/>
+ <p1 x="-220" y="520"/>
+ <p2 x="-200" y="520"/>
</wire>
<wire>
- <p1 x="1200" y="460"/>
- <p2 x="1220" y="460"/>
+ <p1 x="-220" y="200"/>
+ <p2 x="-200" y="200"/>
</wire>
<wire>
- <p1 x="-420" y="-80"/>
- <p2 x="-380" y="-80"/>
+ <p1 x="200" y="140"/>
+ <p2 x="220" y="140"/>
</wire>
<wire>
- <p1 x="40" y="400"/>
- <p2 x="100" y="400"/>
+ <p1 x="280" y="140"/>
+ <p2 x="300" y="140"/>
</wire>
<wire>
- <p1 x="360" y="400"/>
- <p2 x="440" y="400"/>
+ <p1 x="260" y="780"/>
+ <p2 x="280" y="780"/>
</wire>
<wire>
- <p1 x="700" y="400"/>
- <p2 x="800" y="400"/>
+ <p1 x="140" y="780"/>
+ <p2 x="220" y="780"/>
</wire>
<wire>
- <p1 x="-160" y="400"/>
- <p2 x="-100" y="400"/>
+ <p1 x="-220" y="460"/>
+ <p2 x="-200" y="460"/>
</wire>
<wire>
- <p1 x="160" y="400"/>
+ <p1 x="200" y="400"/>
<p2 x="220" y="400"/>
</wire>
<wire>
- <p1 x="500" y="400"/>
- <p2 x="560" y="400"/>
- </wire>
- <wire>
- <p1 x="860" y="400"/>
- <p2 x="920" y="400"/>
- </wire>
- <wire>
- <p1 x="1060" y="400"/>
- <p2 x="1220" y="400"/>
- </wire>
- <wire>
- <p1 x="1240" y="400"/>
- <p2 x="1300" y="400"/>
- </wire>
- <wire>
- <p1 x="-220" y="1040"/>
- <p2 x="-200" y="1040"/>
- </wire>
- <wire>
- <p1 x="-180" y="1040"/>
- <p2 x="-60" y="1040"/>
- </wire>
- <wire>
- <p1 x="940" y="720"/>
- <p2 x="960" y="720"/>
- </wire>
- <wire>
- <p1 x="-420" y="80"/>
- <p2 x="-380" y="80"/>
- </wire>
- <wire>
- <p1 x="-300" y="80"/>
- <p2 x="-260" y="80"/>
- </wire>
- <wire>
- <p1 x="1240" y="80"/>
- <p2 x="1260" y="80"/>
- </wire>
- <wire>
- <p1 x="-420" y="-20"/>
- <p2 x="-380" y="-20"/>
- </wire>
- <wire>
- <p1 x="0" y="-20"/>
- <p2 x="80" y="-20"/>
- </wire>
- <wire>
- <p1 x="-180" y="-20"/>
- <p2 x="-60" y="-20"/>
- </wire>
- <wire>
- <p1 x="-420" y="20"/>
- <p2 x="-380" y="20"/>
- </wire>
- <wire>
- <p1 x="1240" y="20"/>
- <p2 x="1260" y="20"/>
- </wire>
- <wire>
- <p1 x="-300" y="340"/>
- <p2 x="-260" y="340"/>
- </wire>
- <wire>
- <p1 x="-60" y="980"/>
- <p2 x="140" y="980"/>
- </wire>
- <wire>
- <p1 x="-400" y="660"/>
- <p2 x="760" y="660"/>
- </wire>
- <wire>
- <p1 x="-300" y="280"/>
- <p2 x="-260" y="280"/>
- </wire>
- <wire>
- <p1 x="1240" y="280"/>
- <p2 x="1260" y="280"/>
- </wire>
- <wire>
- <p1 x="-500" y="600"/>
- <p2 x="-420" y="600"/>
- </wire>
- <wire>
- <p1 x="-400" y="600"/>
- <p2 x="-320" y="600"/>
- </wire>
- <wire>
- <p1 x="460" y="600"/>
- <p2 x="820" y="600"/>
- </wire>
- <wire>
- <p1 x="-200" y="600"/>
- <p2 x="120" y="600"/>
- </wire>
- <wire>
- <p1 x="120" y="600"/>
- <p2 x="360" y="600"/>
- </wire>
- <wire>
- <p1 x="-320" y="600"/>
- <p2 x="-200" y="600"/>
- </wire>
- <wire>
- <p1 x="360" y="600"/>
- <p2 x="460" y="600"/>
- </wire>
- <wire>
- <p1 x="-420" y="220"/>
- <p2 x="-380" y="220"/>
- </wire>
- <wire>
- <p1 x="-480" y="220"/>
- <p2 x="-460" y="220"/>
- </wire>
- <wire>
- <p1 x="-300" y="220"/>
- <p2 x="-260" y="220"/>
- </wire>
- <wire>
- <p1 x="1240" y="220"/>
- <p2 x="1260" y="220"/>
- </wire>
- <wire>
- <p1 x="-460" y="220"/>
- <p2 x="-440" y="220"/>
+ <p1 x="700" y="400"/>
+ <p2 x="720" y="400"/>
</wire>
<wire>
- <p1 x="320" y="860"/>
- <p2 x="340" y="860"/>
+ <p1 x="600" y="80"/>
+ <p2 x="620" y="80"/>
</wire>
<wire>
- <p1 x="40" y="160"/>
- <p2 x="60" y="160"/>
+ <p1 x="820" y="80"/>
+ <p2 x="840" y="80"/>
</wire>
<wire>
- <p1 x="360" y="160"/>
- <p2 x="380" y="160"/>
+ <p1 x="900" y="80"/>
+ <p2 x="920" y="80"/>
</wire>
<wire>
- <p1 x="700" y="160"/>
- <p2 x="720" y="160"/>
+ <p1 x="40" y="20"/>
+ <p2 x="60" y="20"/>
</wire>
<wire>
- <p1 x="1060" y="160"/>
- <p2 x="1080" y="160"/>
+ <p1 x="120" y="20"/>
+ <p2 x="140" y="20"/>
</wire>
<wire>
- <p1 x="-420" y="160"/>
- <p2 x="-380" y="160"/>
+ <p1 x="600" y="20"/>
+ <p2 x="620" y="20"/>
</wire>
<wire>
- <p1 x="-300" y="160"/>
- <p2 x="-260" y="160"/>
+ <p1 x="200" y="660"/>
+ <p2 x="220" y="660"/>
</wire>
<wire>
- <p1 x="1240" y="160"/>
- <p2 x="1260" y="160"/>
+ <p1 x="40" y="280"/>
+ <p2 x="60" y="280"/>
</wire>
<wire>
- <p1 x="-180" y="800"/>
- <p2 x="-80" y="800"/>
+ <p1 x="200" y="920"/>
+ <p2 x="220" y="920"/>
</wire>
<wire>
- <p1 x="80" y="800"/>
- <p2 x="340" y="800"/>
+ <p1 x="-220" y="540"/>
+ <p2 x="-200" y="540"/>
</wire>
<wire>
- <p1 x="720" y="800"/>
- <p2 x="740" y="800"/>
+ <p1 x="660" y="220"/>
+ <p2 x="680" y="220"/>
</wire>
<wire>
- <p1 x="-100" y="1120"/>
- <p2 x="40" y="1120"/>
+ <p1 x="680" y="220"/>
+ <p2 x="700" y="220"/>
</wire>
<wire>
- <p1 x="1100" y="420"/>
- <p2 x="1220" y="420"/>
+ <p1 x="380" y="160"/>
+ <p2 x="400" y="160"/>
</wire>
<wire>
- <p1 x="100" y="100"/>
- <p2 x="420" y="100"/>
+ <p1 x="300" y="160"/>
+ <p2 x="340" y="160"/>
</wire>
<wire>
- <p1 x="440" y="100"/>
- <p2 x="780" y="100"/>
+ <p1 x="200" y="160"/>
+ <p2 x="220" y="160"/>
</wire>
<wire>
- <p1 x="800" y="100"/>
- <p2 x="1140" y="100"/>
+ <p1 x="40" y="480"/>
+ <p2 x="60" y="480"/>
</wire>
<wire>
- <p1 x="-420" y="100"/>
- <p2 x="-380" y="100"/>
+ <p1 x="-220" y="480"/>
+ <p2 x="-200" y="480"/>
</wire>
<wire>
- <p1 x="-300" y="100"/>
- <p2 x="-260" y="100"/>
+ <p1 x="60" y="800"/>
+ <p2 x="80" y="800"/>
</wire>
<wire>
- <p1 x="1240" y="100"/>
- <p2 x="1260" y="100"/>
+ <p1 x="-320" y="420"/>
+ <p2 x="-240" y="420"/>
</wire>
<wire>
- <p1 x="-420" y="-40"/>
- <p2 x="-380" y="-40"/>
+ <p1 x="-220" y="420"/>
+ <p2 x="-200" y="420"/>
</wire>
<wire>
- <p1 x="-160" y="-40"/>
- <p2 x="-60" y="-40"/>
+ <p1 x="700" y="420"/>
+ <p2 x="720" y="420"/>
</wire>
<wire>
- <p1 x="-420" y="40"/>
- <p2 x="-380" y="40"/>
+ <p1 x="40" y="40"/>
+ <p2 x="60" y="40"/>
</wire>
<wire>
- <p1 x="1240" y="40"/>
- <p2 x="1260" y="40"/>
+ <p1 x="220" y="40"/>
+ <p2 x="240" y="40"/>
</wire>
<wire>
- <p1 x="360" y="360"/>
- <p2 x="420" y="360"/>
+ <p1 x="140" y="40"/>
+ <p2 x="180" y="40"/>
</wire>
<wire>
- <p1 x="700" y="360"/>
- <p2 x="780" y="360"/>
+ <p1 x="700" y="40"/>
+ <p2 x="720" y="40"/>
</wire>
<wire>
- <p1 x="1060" y="360"/>
- <p2 x="1140" y="360"/>
+ <p1 x="-300" y="40"/>
+ <p2 x="-280" y="40"/>
</wire>
<wire>
- <p1 x="-180" y="360"/>
- <p2 x="-100" y="360"/>
+ <p1 x="-280" y="40"/>
+ <p2 x="-240" y="40"/>
</wire>
<wire>
- <p1 x="140" y="360"/>
+ <p1 x="200" y="360"/>
<p2 x="220" y="360"/>
</wire>
<wire>
- <p1 x="480" y="360"/>
- <p2 x="560" y="360"/>
- </wire>
- <wire>
- <p1 x="840" y="360"/>
- <p2 x="920" y="360"/>
- </wire>
- <wire>
- <p1 x="-300" y="360"/>
- <p2 x="-260" y="360"/>
+ <p1 x="740" y="360"/>
+ <p2 x="800" y="360"/>
</wire>
<wire>
- <p1 x="-480" y="360"/>
- <p2 x="-460" y="360"/>
+ <p1 x="660" y="360"/>
+ <p2 x="700" y="360"/>
</wire>
<wire>
- <p1 x="40" y="360"/>
- <p2 x="80" y="360"/>
- </wire>
- <wire>
- <p1 x="-460" y="360"/>
- <p2 x="-320" y="360"/>
- </wire>
- <wire>
- <p1 x="-300" y="300"/>
- <p2 x="-260" y="300"/>
- </wire>
- <wire>
- <p1 x="1240" y="300"/>
- <p2 x="1260" y="300"/>
- </wire>
- <wire>
- <p1 x="-80" y="940"/>
- <p2 x="140" y="940"/>
- </wire>
- <wire>
- <p1 x="-400" y="620"/>
- <p2 x="-340" y="620"/>
+ <p1 x="700" y="360"/>
+ <p2 x="720" y="360"/>
</wire>
<wire>
- <p1 x="480" y="620"/>
- <p2 x="840" y="620"/>
+ <p1 x="200" y="620"/>
+ <p2 x="220" y="620"/>
</wire>
<wire>
- <p1 x="340" y="620"/>
- <p2 x="480" y="620"/>
+ <p1 x="400" y="940"/>
+ <p2 x="420" y="940"/>
</wire>
<wire>
- <p1 x="-340" y="620"/>
- <p2 x="-180" y="620"/>
+ <p1 x="280" y="940"/>
+ <p2 x="360" y="940"/>
</wire>
<wire>
- <p1 x="-180" y="620"/>
- <p2 x="140" y="620"/>
+ <p1 x="40" y="240"/>
+ <p2 x="60" y="240"/>
</wire>
<wire>
- <p1 x="140" y="620"/>
- <p2 x="340" y="620"/>
+ <p1 x="-240" y="240"/>
+ <p2 x="-200" y="240"/>
</wire>
<wire>
- <p1 x="-300" y="240"/>
+ <p1 x="-280" y="240"/>
<p2 x="-260" y="240"/>
</wire>
<wire>
- <p1 x="1240" y="240"/>
- <p2 x="1260" y="240"/>
- </wire>
- <wire>
- <p1 x="-60" y="820"/>
- <p2 x="20" y="820"/>
- </wire>
- <wire>
- <p1 x="-180" y="820"/>
- <p2 x="-100" y="820"/>
+ <p1 x="720" y="240"/>
+ <p2 x="760" y="240"/>
</wire>
<wire>
- <p1 x="220" y="820"/>
- <p2 x="340" y="820"/>
+ <p1 x="-220" y="560"/>
+ <p2 x="-200" y="560"/>
</wire>
<wire>
- <p1 x="780" y="820"/>
- <p2 x="940" y="820"/>
+ <p1 x="120" y="500"/>
+ <p2 x="140" y="500"/>
</wire>
<wire>
- <p1 x="940" y="820"/>
- <p2 x="960" y="820"/>
+ <p1 x="180" y="500"/>
+ <p2 x="240" y="500"/>
</wire>
<wire>
- <p1 x="-420" y="180"/>
- <p2 x="-380" y="180"/>
+ <p1 x="-220" y="500"/>
+ <p2 x="-200" y="500"/>
</wire>
<wire>
<p1 x="-300" y="180"/>
- <p2 x="-260" y="180"/>
- </wire>
- <wire>
- <p1 x="1240" y="180"/>
- <p2 x="1260" y="180"/>
- </wire>
- <wire>
- <p1 x="1200" y="500"/>
- <p2 x="1400" y="500"/>
- </wire>
- <wire>
- <p1 x="100" y="1140"/>
- <p2 x="240" y="1140"/>
- </wire>
- <wire>
- <p1 x="1060" y="440"/>
- <p2 x="1100" y="440"/>
- </wire>
- <wire>
- <p1 x="1140" y="440"/>
- <p2 x="1220" y="440"/>
- </wire>
- <wire>
- <p1 x="-420" y="120"/>
- <p2 x="-380" y="120"/>
- </wire>
- <wire>
- <p1 x="-300" y="120"/>
- <p2 x="-260" y="120"/>
- </wire>
- <wire>
- <p1 x="1240" y="120"/>
- <p2 x="1260" y="120"/>
- </wire>
- <wire>
- <p1 x="-420" y="-60"/>
- <p2 x="-380" y="-60"/>
- </wire>
- <wire>
- <p1 x="-420" y="60"/>
- <p2 x="-380" y="60"/>
- </wire>
- <wire>
- <p1 x="-300" y="60"/>
- <p2 x="-260" y="60"/>
- </wire>
- <wire>
- <p1 x="1240" y="60"/>
- <p2 x="1260" y="60"/>
- </wire>
- <wire>
- <p1 x="-200" y="0"/>
- <p2 x="-200" y="320"/>
- </wire>
- <wire>
- <p1 x="-200" y="940"/>
- <p2 x="-200" y="960"/>
- </wire>
- <wire>
- <p1 x="-200" y="320"/>
- <p2 x="-200" y="600"/>
- </wire>
- <wire>
- <p1 x="840" y="360"/>
- <p2 x="840" y="620"/>
- </wire>
- <wire>
- <p1 x="-460" y="220"/>
- <p2 x="-460" y="260"/>
- </wire>
- <wire>
- <p1 x="-460" y="360"/>
- <p2 x="-460" y="420"/>
- </wire>
- <wire>
- <p1 x="140" y="360"/>
- <p2 x="140" y="620"/>
- </wire>
- <wire>
- <p1 x="780" y="100"/>
- <p2 x="780" y="360"/>
- </wire>
- <wire>
- <p1 x="460" y="320"/>
- <p2 x="460" y="600"/>
- </wire>
- <wire>
- <p1 x="1100" y="420"/>
- <p2 x="1100" y="440"/>
- </wire>
- <wire>
- <p1 x="-80" y="800"/>
- <p2 x="-80" y="940"/>
- </wire>
- <wire>
- <p1 x="1040" y="820"/>
- <p2 x="1040" y="840"/>
- </wire>
- <wire>
- <p1 x="80" y="-20"/>
- <p2 x="80" y="360"/>
- </wire>
- <wire>
- <p1 x="-340" y="620"/>
- <p2 x="-340" y="940"/>
- </wire>
- <wire>
- <p1 x="340" y="620"/>
- <p2 x="340" y="740"/>
- </wire>
- <wire>
- <p1 x="860" y="400"/>
- <p2 x="860" y="640"/>
- </wire>
- <wire>
- <p1 x="220" y="820"/>
- <p2 x="220" y="960"/>
- </wire>
- <wire>
- <p1 x="-160" y="-40"/>
- <p2 x="-160" y="400"/>
- </wire>
- <wire>
- <p1 x="-160" y="400"/>
- <p2 x="-160" y="640"/>
- </wire>
- <wire>
- <p1 x="160" y="400"/>
- <p2 x="160" y="640"/>
+ <p2 x="-280" y="180"/>
</wire>
<wire>
- <p1 x="800" y="100"/>
- <p2 x="800" y="400"/>
+ <p1 x="680" y="180"/>
+ <p2 x="700" y="180"/>
</wire>
<wire>
- <p1 x="480" y="360"/>
- <p2 x="480" y="620"/>
+ <p1 x="-280" y="180"/>
+ <p2 x="-240" y="180"/>
</wire>
<wire>
- <p1 x="1120" y="820"/>
- <p2 x="1120" y="840"/>
+ <p1 x="340" y="120"/>
+ <p2 x="400" y="120"/>
</wire>
<wire>
- <p1 x="-100" y="820"/>
- <p2 x="-100" y="1120"/>
+ <p1 x="280" y="120"/>
+ <p2 x="300" y="120"/>
</wire>
<wire>
- <p1 x="100" y="100"/>
- <p2 x="100" y="400"/>
+ <p1 x="200" y="120"/>
+ <p2 x="220" y="120"/>
</wire>
<wire>
- <p1 x="420" y="100"/>
- <p2 x="420" y="360"/>
+ <p1 x="60" y="760"/>
+ <p2 x="80" y="760"/>
</wire>
<wire>
- <p1 x="1380" y="520"/>
- <p2 x="1380" y="840"/>
+ <p1 x="-220" y="440"/>
+ <p2 x="-200" y="440"/>
</wire>
<wire>
- <p1 x="-360" y="640"/>
- <p2 x="-360" y="940"/>
+ <p1 x="280" y="380"/>
+ <p2 x="300" y="380"/>
</wire>
<wire>
- <p1 x="360" y="760"/>
- <p2 x="360" y="800"/>
+ <p1 x="340" y="380"/>
+ <p2 x="400" y="380"/>
</wire>
<wire>
- <p1 x="360" y="600"/>
- <p2 x="360" y="740"/>
+ <p1 x="700" y="380"/>
+ <p2 x="720" y="380"/>
</wire>
<wire>
- <p1 x="940" y="720"/>
- <p2 x="940" y="820"/>
+ <p1 x="600" y="60"/>
+ <p2 x="620" y="60"/>
</wire>
<wire>
- <p1 x="940" y="820"/>
- <p2 x="940" y="960"/>
+ <p1 x="-220" y="60"/>
+ <p2 x="-200" y="60"/>
</wire>
<wire>
- <p1 x="1200" y="820"/>
- <p2 x="1200" y="840"/>
+ <p1 x="240" y="20"/>
+ <p2 x="240" y="40"/>
</wire>
<wire>
- <p1 x="1200" y="460"/>
- <p2 x="1200" y="500"/>
+ <p1 x="400" y="140"/>
+ <p2 x="400" y="160"/>
</wire>
<wire>
- <p1 x="240" y="840"/>
- <p2 x="240" y="1140"/>
+ <p1 x="-280" y="0"/>
+ <p2 x="-280" y="40"/>
</wire>
<wire>
- <p1 x="-180" y="-20"/>
- <p2 x="-180" y="360"/>
+ <p1 x="-280" y="140"/>
+ <p2 x="-280" y="180"/>
</wire>
<wire>
- <p1 x="-180" y="360"/>
- <p2 x="-180" y="620"/>
+ <p1 x="-280" y="180"/>
+ <p2 x="-280" y="240"/>
</wire>
<wire>
- <p1 x="1140" y="100"/>
- <p2 x="1140" y="360"/>
+ <p1 x="40" y="40"/>
+ <p2 x="40" y="60"/>
</wire>
<wire>
- <p1 x="1140" y="440"/>
- <p2 x="1140" y="520"/>
+ <p1 x="40" y="260"/>
+ <p2 x="40" y="280"/>
</wire>
<wire>
- <p1 x="500" y="400"/>
- <p2 x="500" y="640"/>
+ <p1 x="40" y="500"/>
+ <p2 x="40" y="520"/>
</wire>
<wire>
- <p1 x="820" y="320"/>
- <p2 x="820" y="600"/>
+ <p1 x="200" y="160"/>
+ <p2 x="200" y="180"/>
</wire>
<wire>
- <p1 x="440" y="100"/>
- <p2 x="440" y="400"/>
+ <p1 x="200" y="380"/>
+ <p2 x="200" y="400"/>
</wire>
<wire>
- <p1 x="120" y="320"/>
- <p2 x="120" y="600"/>
+ <p1 x="200" y="640"/>
+ <p2 x="200" y="660"/>
</wire>
<wire>
- <p1 x="1400" y="500"/>
- <p2 x="1400" y="960"/>
+ <p1 x="200" y="940"/>
+ <p2 x="200" y="960"/>
</wire>
<wire>
- <p1 x="760" y="660"/>
- <p2 x="760" y="800"/>
+ <p1 x="680" y="180"/>
+ <p2 x="680" y="220"/>
</wire>
<wire>
- <p1 x="-60" y="820"/>
- <p2 x="-60" y="980"/>
+ <p1 x="140" y="20"/>
+ <p2 x="140" y="40"/>
</wire>
<wire>
- <p1 x="-60" y="1040"/>
- <p2 x="-60" y="1160"/>
+ <p1 x="300" y="140"/>
+ <p2 x="300" y="160"/>
</wire>
<wire>
- <p1 x="-60" y="980"/>
- <p2 x="-60" y="1040"/>
+ <p1 x="60" y="780"/>
+ <p2 x="60" y="800"/>
</wire>
<wire>
- <p1 x="-320" y="600"/>
- <p2 x="-320" y="940"/>
+ <p1 x="700" y="340"/>
+ <p2 x="700" y="360"/>
</wire>
</wires>
<measurementOrdering/>
diff --git a/digital/atk16_alu_fo.dig b/digital/atk16_alu_fo.dig
new file mode 100644
index 0000000..ecf0021
--- /dev/null
+++ b/digital/atk16_alu_fo.dig
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="utf-8"?>
+<circuit>
+ <version>2</version>
+ <attributes>
+ <entry>
+ <string>Label</string>
+ <string>alu_fo</string>
+ </entry>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>4</int>
+ </entry>
+ </attributes>
+ <visualElements>
+ <visualElement>
+ <elementName>Testcase</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Testdata</string>
+ <testData>
+ <dataString>A15 B15 Y15 ~A/S FO
+0 0 0 0 0
+0 0 1 0 1
+0 1 0 0 0
+0 1 1 0 0
+1 0 0 0 0
+1 0 1 0 0
+1 1 0 0 1
+1 1 1 0 0
+0 0 0 1 0
+0 0 1 1 0
+0 1 0 1 0
+0 1 1 1 1
+1 0 0 1 1
+1 0 1 1 0
+1 1 0 1 0
+1 1 1 1 0
+</dataString>
+ </testData>
+ </entry>
+ </elementAttributes>
+ <pos x="400" y="740"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>FO</string>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>1</int>
+ </entry>
+ </elementAttributes>
+ <pos x="900" y="440"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Or</elementName>
+ <elementAttributes>
+ <entry>
+ <string>wideShape</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="800" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes>
+ <entry>
+ <string>wideShape</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes>
+ <entry>
+ <string>wideShape</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="340"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes>
+ <entry>
+ <string>wideShape</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes>
+ <entry>
+ <string>wideShape</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="580"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>~A/S</string>
+ </entry>
+ </elementAttributes>
+ <pos x="420" y="120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="160"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>A15</string>
+ </entry>
+ </elementAttributes>
+ <pos x="480" y="120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ </elementAttributes>
+ <pos x="500" y="160"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>B15</string>
+ </entry>
+ </elementAttributes>
+ <pos x="540" y="120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ </elementAttributes>
+ <pos x="560" y="160"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>Y15</string>
+ </entry>
+ </elementAttributes>
+ <pos x="600" y="120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ </elementAttributes>
+ <pos x="620" y="160"/>
+ </visualElement>
+ </visualElements>
+ <wires>
+ <wire>
+ <p1 x="540" y="480"/>
+ <p2 x="660" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="780" y="480"/>
+ <p2 x="800" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="640"/>
+ <p2 x="660" y="640"/>
+ </wire>
+ <wire>
+ <p1 x="740" y="260"/>
+ <p2 x="780" y="260"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="420"/>
+ <p2 x="660" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="420"/>
+ <p2 x="800" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="580"/>
+ <p2 x="660" y="580"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="360"/>
+ <p2 x="660" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="520"/>
+ <p2 x="660" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="140"/>
+ <p2 x="440" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="140"/>
+ <p2 x="500" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="140"/>
+ <p2 x="560" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="140"/>
+ <p2 x="620" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="300"/>
+ <p2 x="660" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="460"/>
+ <p2 x="660" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="460"/>
+ <p2 x="800" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="740" y="620"/>
+ <p2 x="780" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="240"/>
+ <p2 x="660" y="240"/>
+ </wire>
+ <wire>
+ <p1 x="780" y="400"/>
+ <p2 x="800" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="400"/>
+ <p2 x="660" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="340"/>
+ <p2 x="660" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="740" y="500"/>
+ <p2 x="760" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="660"/>
+ <p2 x="660" y="660"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="280"/>
+ <p2 x="660" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="600"/>
+ <p2 x="660" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="880" y="440"/>
+ <p2 x="900" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="220"/>
+ <p2 x="660" y="220"/>
+ </wire>
+ <wire>
+ <p1 x="740" y="380"/>
+ <p2 x="760" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="540"/>
+ <p2 x="660" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="120"/>
+ <p2 x="480" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="140"/>
+ <p2 x="480" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="580"/>
+ <p2 x="480" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="340"/>
+ <p2 x="480" y="580"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="140"/>
+ <p2 x="560" y="160"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="200"/>
+ <p2 x="560" y="240"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="600"/>
+ <p2 x="560" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="240"/>
+ <p2 x="560" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="120"/>
+ <p2 x="420" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="140"/>
+ <p2 x="420" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="660"/>
+ <p2 x="420" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="540"/>
+ <p2 x="420" y="660"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="140"/>
+ <p2 x="500" y="160"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="200"/>
+ <p2 x="500" y="220"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="460"/>
+ <p2 x="500" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="220"/>
+ <p2 x="500" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="140"/>
+ <p2 x="440" y="160"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="200"/>
+ <p2 x="440" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="420"/>
+ <p2 x="440" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="300"/>
+ <p2 x="440" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="120"/>
+ <p2 x="600" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="520"/>
+ <p2 x="600" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="140"/>
+ <p2 x="600" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="280"/>
+ <p2 x="600" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="380"/>
+ <p2 x="760" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="460"/>
+ <p2 x="760" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="120"/>
+ <p2 x="540" y="140"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="480"/>
+ <p2 x="540" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="360"/>
+ <p2 x="540" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="140"/>
+ <p2 x="540" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="140"/>
+ <p2 x="620" y="160"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="200"/>
+ <p2 x="620" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="640"/>
+ <p2 x="620" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="400"/>
+ <p2 x="620" y="640"/>
+ </wire>
+ <wire>
+ <p1 x="780" y="260"/>
+ <p2 x="780" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="780" y="480"/>
+ <p2 x="780" y="620"/>
+ </wire>
+ </wires>
+ <measurementOrdering/>
+</circuit> \ No newline at end of file
diff --git a/digital/atk16_alu_fz.dig b/digital/atk16_alu_fz.dig
new file mode 100644
index 0000000..2da652a
--- /dev/null
+++ b/digital/atk16_alu_fz.dig
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<circuit>
+ <version>2</version>
+ <attributes>
+ <entry>
+ <string>Label</string>
+ <string>alu_fz</string>
+ </entry>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ </attributes>
+ <visualElements>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>Y</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="360" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>16</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>4*4</string>
+ </entry>
+ </elementAttributes>
+ <pos x="380" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>4</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>1*4</string>
+ </entry>
+ </elementAttributes>
+ <pos x="600" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>FZ</string>
+ </entry>
+ </elementAttributes>
+ <pos x="800" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Testcase</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Testdata</string>
+ <testData>
+ <dataString>Y FZ
+0x0 1
+0x1 0
+0xff 0</dataString>
+ </testData>
+ </entry>
+ </elementAttributes>
+ <pos x="360" y="220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>NOr</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="680" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Or</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="480" y="340"/>
+ </visualElement>
+ </visualElements>
+ <wires>
+ <wire>
+ <p1 x="760" y="400"/>
+ <p2 x="800" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="400"/>
+ <p2 x="660" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="400" y="400"/>
+ <p2 x="480" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="420"/>
+ <p2 x="640" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="660" y="420"/>
+ <p2 x="680" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="400" y="420"/>
+ <p2 x="480" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="400" y="340"/>
+ <p2 x="480" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="360" y="360"/>
+ <p2 x="380" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="360"/>
+ <p2 x="600" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="360"/>
+ <p2 x="680" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="360"/>
+ <p2 x="480" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="640" y="440"/>
+ <p2 x="680" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="400" y="380"/>
+ <p2 x="420" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="620" y="380"/>
+ <p2 x="680" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="380"/>
+ <p2 x="560" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="400" y="340"/>
+ <p2 x="400" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="360"/>
+ <p2 x="560" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="640" y="420"/>
+ <p2 x="640" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="360"/>
+ <p2 x="420" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="660" y="400"/>
+ <p2 x="660" y="420"/>
+ </wire>
+ </wires>
+ <measurementOrdering/>
+</circuit> \ No newline at end of file
diff --git a/digital/atk16_alu_inputs.dig b/digital/atk16_alu_inputs.dig
new file mode 100644
index 0000000..2ed5b74
--- /dev/null
+++ b/digital/atk16_alu_inputs.dig
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="utf-8"?>
+<circuit>
+ <version>2</version>
+ <attributes>
+ <entry>
+ <string>Description</string>
+ <string>Maps the R1 input to the A output. Uses OPCODE parity to mux either the R2 input (even parity) or the RW_S input, here acting as a small immediate value, to the B output.</string>
+ </entry>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
+ <visualElements>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Register 1 value from regbank</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>R1</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="380"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Register 2 value from regbank</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>R2</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>4</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>1</string>
+ </entry>
+ </elementAttributes>
+ <pos x="220" y="620"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Multiplexer</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="260" y="500"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Register 2 selector</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>R2_S</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Opcode</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>OPCODE</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="620"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Output A</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>A</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="380" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Output B</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>B</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="380" y="520"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>3,13</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>16</string>
+ </entry>
+ </elementAttributes>
+ <pos x="220" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>13</int>
+ </entry>
+ </elementAttributes>
+ <pos x="200" y="580"/>
+ </visualElement>
+ </visualElements>
+ <wires>
+ <wire>
+ <p1 x="200" y="560"/>
+ <p2 x="220" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="500"/>
+ <p2 x="260" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="520"/>
+ <p2 x="380" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="180" y="620"/>
+ <p2 x="220" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="240" y="620"/>
+ <p2 x="280" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="60" y="460"/>
+ <p2 x="200" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="460"/>
+ <p2 x="380" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="60" y="380"/>
+ <p2 x="340" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="240" y="540"/>
+ <p2 x="260" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="180" y="540"/>
+ <p2 x="220" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="380"/>
+ <p2 x="340" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="280" y="540"/>
+ <p2 x="280" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="460"/>
+ <p2 x="200" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="560"/>
+ <p2 x="200" y="580"/>
+ </wire>
+ </wires>
+ <measurementOrdering/>
+</circuit> \ No newline at end of file
diff --git a/digital/atk16_decoder.dig b/digital/atk16_decoder.dig
index ca22f72..0570615 100644
--- a/digital/atk16_decoder.dig
+++ b/digital/atk16_decoder.dig
@@ -1,51 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>2</version>
- <attributes/>
+ <attributes>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
<visualElements>
<visualElement>
- <elementName>Out</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>Write register selection</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>RW_S</string>
- </entry>
- </elementAttributes>
- <pos x="440" y="360"/>
- </visualElement>
- <visualElement>
- <elementName>Out</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>Read register 1 selection</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>R1_S</string>
- </entry>
- </elementAttributes>
- <pos x="440" y="480"/>
- </visualElement>
- <visualElement>
- <elementName>Out</elementName>
- <elementAttributes>
- <entry>
- <string>Description</string>
- <string>Read register 2 selection</string>
- </entry>
- <entry>
- <string>Label</string>
- <string>R2_S</string>
- </entry>
- </elementAttributes>
- <pos x="440" y="440"/>
- </visualElement>
- <visualElement>
<elementName>Register</elementName>
<elementAttributes>
<entry>
@@ -124,34 +93,6 @@
<pos x="400" y="360"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>Input Splitting</string>
- <string>9,7</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>16</string>
- </entry>
- </elementAttributes>
- <pos x="380" y="660"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>7</int>
- </entry>
- </elementAttributes>
- <pos x="360" y="680"/>
- </visualElement>
- <visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
@@ -176,120 +117,187 @@
<pos x="200" y="340"/>
</visualElement>
<visualElement>
- <elementName>Driver</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
+ <string>Description</string>
+ <string>Opcode</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>OP</string>
+ </entry>
+ <entry>
<string>Bits</string>
- <int>16</int>
+ <int>4</int>
</entry>
+ </elementAttributes>
+ <pos x="440" y="520"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
<entry>
- <string>flipSelPos</string>
- <boolean>true</boolean>
+ <string>Description</string>
+ <string>Write register selection</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>RW_S</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="460" y="660"/>
+ <pos x="440" y="480"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>DBUS</string>
+ <string>Description</string>
+ <string>ALU selection code</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>ALU_S</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="500" y="660"/>
+ <pos x="440" y="360"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Out</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>16</string>
+ <string>Description</string>
+ <string>Read register 1 selection</string>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>3,9,</string>
+ <string>Label</string>
+ <string>R1_S</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="280" y="640"/>
+ <pos x="440" y="440"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Description</string>
- <string>ALU selection code</string>
+ <string>Read register 2 selection</string>
</entry>
<entry>
<string>Label</string>
- <string>ALU_S</string>
+ <string>R2_S</string>
</entry>
<entry>
<string>Bits</string>
- <int>4</int>
+ <int>3</int>
</entry>
</elementAttributes>
- <pos x="640" y="500"/>
+ <pos x="440" y="400"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
- <string>3,1</string>
+ <string>16</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>4</string>
+ <string>9,</string>
</entry>
</elementAttributes>
- <pos x="600" y="500"/>
+ <pos x="300" y="600"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>4</string>
+ <string>Bits</string>
+ <int>16</int>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>1,3</string>
+ <string>flipSelPos</string>
+ <boolean>true</boolean>
+ </entry>
+ </elementAttributes>
+ <pos x="480" y="600"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>DBUS</string>
</entry>
</elementAttributes>
- <pos x="480" y="520"/>
+ <pos x="520" y="600"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Description</string>
- <string>Jump address output enable</string>
+ <string>Low 9 bits immediate value output enable</string>
</entry>
<entry>
<string>Label</string>
- <string>JA_OE</string>
+ <string>LI_OE</string>
</entry>
</elementAttributes>
- <pos x="440" y="740"/>
+ <pos x="460" y="680"/>
</visualElement>
<visualElement>
- <elementName>Out</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>Description</string>
- <string>Opcode</string>
+ <string>Input Splitting</string>
+ <string>9,7</string>
</entry>
<entry>
- <string>Label</string>
- <string>OP</string>
+ <string>Output Splitting</string>
+ <string>16</string>
+ </entry>
+ </elementAttributes>
+ <pos x="400" y="600"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
<entry>
<string>Bits</string>
- <int>4</int>
+ <int>7</int>
+ </entry>
+ </elementAttributes>
+ <pos x="380" y="620"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Testcase</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Testdata</string>
+ <testData>
+ <dataString>CLK DBUS IR_IE LI_OE OP RW_S R1_S R2_S ALU_S
+C 0b0000001010011000 1 0 0 1 2 3 0</dataString>
+ </testData>
</entry>
</elementAttributes>
- <pos x="640" y="580"/>
+ <pos x="120" y="160"/>
</visualElement>
</visualElements>
<wires>
@@ -299,71 +307,51 @@
</wire>
<wire>
<p1 x="420" y="400"/>
- <p2 x="600" y="400"/>
- </wire>
- <wire>
- <p1 x="300" y="660"/>
- <p2 x="380" y="660"/>
- </wire>
- <wire>
- <p1 x="400" y="660"/>
- <p2 x="440" y="660"/>
- </wire>
- <wire>
- <p1 x="480" y="660"/>
- <p2 x="500" y="660"/>
+ <p2 x="440" y="400"/>
</wire>
<wire>
<p1 x="140" y="420"/>
<p2 x="180" y="420"/>
</wire>
<wire>
- <p1 x="620" y="500"/>
- <p2 x="640" y="500"/>
- </wire>
- <wire>
- <p1 x="440" y="740"/>
- <p2 x="460" y="740"/>
- </wire>
- <wire>
- <p1 x="460" y="580"/>
- <p2 x="640" y="580"/>
- </wire>
- <wire>
- <p1 x="360" y="680"/>
- <p2 x="380" y="680"/>
- </wire>
- <wire>
<p1 x="160" y="360"/>
<p2 x="200" y="360"/>
</wire>
<wire>
<p1 x="260" y="360"/>
- <p2 x="280" y="360"/>
+ <p2 x="300" y="360"/>
</wire>
<wire>
<p1 x="420" y="360"/>
<p2 x="440" y="360"/>
</wire>
<wire>
- <p1 x="280" y="360"/>
+ <p1 x="300" y="360"/>
<p2 x="400" y="360"/>
</wire>
<wire>
<p1 x="420" y="520"/>
- <p2 x="460" y="520"/>
+ <p2 x="440" y="520"/>
</wire>
<wire>
- <p1 x="500" y="520"/>
- <p2 x="600" y="520"/>
+ <p1 x="420" y="440"/>
+ <p2 x="440" y="440"/>
</wire>
<wire>
- <p1 x="460" y="520"/>
- <p2 x="480" y="520"/>
+ <p1 x="500" y="600"/>
+ <p2 x="520" y="600"/>
</wire>
<wire>
- <p1 x="420" y="440"/>
- <p2 x="440" y="440"/>
+ <p1 x="420" y="600"/>
+ <p2 x="460" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="600"/>
+ <p2 x="400" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="680"/>
+ <p2 x="480" y="680"/>
</wire>
<wire>
<p1 x="180" y="380"/>
@@ -374,28 +362,24 @@
<p2 x="160" y="380"/>
</wire>
<wire>
- <p1 x="160" y="360"/>
- <p2 x="160" y="380"/>
+ <p1 x="380" y="620"/>
+ <p2 x="400" y="620"/>
</wire>
<wire>
- <p1 x="180" y="380"/>
- <p2 x="180" y="420"/>
- </wire>
- <wire>
- <p1 x="280" y="360"/>
- <p2 x="280" y="640"/>
+ <p1 x="160" y="360"/>
+ <p2 x="160" y="380"/>
</wire>
<wire>
- <p1 x="600" y="400"/>
- <p2 x="600" y="500"/>
+ <p1 x="480" y="620"/>
+ <p2 x="480" y="680"/>
</wire>
<wire>
- <p1 x="460" y="680"/>
- <p2 x="460" y="740"/>
+ <p1 x="180" y="380"/>
+ <p2 x="180" y="420"/>
</wire>
<wire>
- <p1 x="460" y="520"/>
- <p2 x="460" y="580"/>
+ <p1 x="300" y="360"/>
+ <p2 x="300" y="600"/>
</wire>
</wires>
<measurementOrdering/>
diff --git a/digital/atk16_jump_unit.dig b/digital/atk16_jump_unit.dig
new file mode 100644
index 0000000..1156aae
--- /dev/null
+++ b/digital/atk16_jump_unit.dig
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>
+<circuit>
+ <version>2</version>
+ <attributes>
+ <entry>
+ <string>Description</string>
+ <string>Uses OPCODE parity to choose between relative addressing mode (even parity) or absolute addressing mode (odd parity).</string>
+ </entry>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
+ <visualElements>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Jump address</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>ADDR</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="380"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>PC value</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>PC</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="300"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>OPCODE</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>OPCODE</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>4</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>1,</string>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Text</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>OP parity bit</string>
+ </entry>
+ </elementAttributes>
+ <pos x="220" y="480"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Result PC value</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>PC_RES</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="580" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Add</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="300"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Multiplexer</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="400" y="340"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes/>
+ <pos x="220" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Testcase</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Testdata</string>
+ <testData>
+ <dataString>PC ADDR OPCODE PC_RES
+10 20 0b0101 20
+10 20 0b0110 30</dataString>
+ </testData>
+ </entry>
+ </elementAttributes>
+ <pos x="180" y="620"/>
+ </visualElement>
+ </visualElements>
+ <wires>
+ <wire>
+ <p1 x="200" y="320"/>
+ <p2 x="240" y="320"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="340"/>
+ <p2 x="240" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="380" y="340"/>
+ <p2 x="400" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="360"/>
+ <p2 x="580" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="180" y="460"/>
+ <p2 x="240" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="260" y="460"/>
+ <p2 x="420" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="180" y="300"/>
+ <p2 x="240" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="300"/>
+ <p2 x="380" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="180" y="380"/>
+ <p2 x="200" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="380"/>
+ <p2 x="400" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="380"/>
+ <p2 x="420" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="320"/>
+ <p2 x="200" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="380" y="300"/>
+ <p2 x="380" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="340"/>
+ <p2 x="220" y="360"/>
+ </wire>
+ </wires>
+ <measurementOrdering/>
+</circuit> \ No newline at end of file
diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig
index f323545..c5ce679 100644
--- a/digital/atk16_mem.dig
+++ b/digital/atk16_mem.dig
@@ -1,7 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>2</version>
- <attributes/>
+ <attributes>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
<visualElements>
<visualElement>
<elementName>RAMAsync</elementName>
@@ -56,8 +67,8 @@
</entry>
<entry>
<string>Data</string>
- <data>4019,5200,8000,4051,40a2,29b,4014,2804,38c0,d9,40f2,4084,293,6500
-,4011,f000,4009,f000</data>
+ <data>4203,5040,8000,420a,4414,650,4802,2900,38c0,12c0,441e,4810,651
+,7500,4202,f000,4201,f000</data>
</entry>
</elementAttributes>
<pos x="740" y="100"/>
diff --git a/digital/atk16_regbank.dig b/digital/atk16_regbank.dig
index 35c072a..d65e6fb 100644
--- a/digital/atk16_regbank.dig
+++ b/digital/atk16_regbank.dig
@@ -1,7 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>2</version>
- <attributes/>
+ <attributes>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>5</int>
+ </entry>
+ </attributes>
<visualElements>
<visualElement>
<elementName>In</elementName>
@@ -170,20 +181,6 @@
<pos x="920" y="440"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="920" y="480"/>
- </visualElement>
- <visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
@@ -310,20 +307,6 @@
<pos x="920" y="720"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="920" y="760"/>
- </visualElement>
- <visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
@@ -505,7 +488,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -519,7 +502,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -548,7 +531,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[33]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[31]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -594,7 +577,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -608,7 +591,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -655,7 +638,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -669,7 +652,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -698,7 +681,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[33]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[31]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -730,7 +713,7 @@
</entry>
<entry>
<string>Label</string>
- <string>PA</string>
+ <string>RE</string>
</entry>
<entry>
<string>Bits</string>
@@ -805,7 +788,7 @@
</entry>
<entry>
<string>NetName</string>
- <string>RW_PA</string>
+ <string>RW_E</string>
</entry>
</elementAttributes>
<pos x="460" y="820"/>
@@ -819,7 +802,7 @@
</entry>
<entry>
<string>Label</string>
- <string>PB</string>
+ <string>RF</string>
</entry>
<entry>
<string>Bits</string>
@@ -833,7 +816,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[55]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[53]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -847,7 +830,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[56]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[54]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -876,7 +859,7 @@
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[59]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[57]/elementAttributes/entry/rotation"/>
</entry>
<entry>
<string>NetName</string>
@@ -894,40 +877,12 @@
</entry>
<entry>
<string>NetName</string>
- <string>RW_PB</string>
+ <string>RW_F</string>
</entry>
</elementAttributes>
<pos x="460" y="980"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="920" y="740"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Bits</string>
- <int>16</int>
- </entry>
- </elementAttributes>
- <pos x="920" y="460"/>
- </visualElement>
- <visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
@@ -1038,7 +993,7 @@
<elementAttributes>
<entry>
<string>NetName</string>
- <string>RW_PA</string>
+ <string>RW_E</string>
</entry>
</elementAttributes>
<pos x="120" y="700"/>
@@ -1048,7 +1003,7 @@
<elementAttributes>
<entry>
<string>NetName</string>
- <string>RW_PB</string>
+ <string>RW_F</string>
</entry>
</elementAttributes>
<pos x="120" y="720"/>
@@ -1073,6 +1028,133 @@ C 0xA 1 0 0 X 0 X</dataString>
</elementAttributes>
<pos x="900" y="920"/>
</visualElement>
+ <visualElement>
+ <elementName>Register</elementName>
+ <elementAttributes>
+ <entry>
+ <string>valueIsProbe</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>RG</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ </elementAttributes>
+ <pos x="560" y="1080"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[53]/elementAttributes/entry/rotation"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>Din</string>
+ </entry>
+ </elementAttributes>
+ <pos x="560" y="1080"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[54]/elementAttributes/entry/rotation"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>CLK</string>
+ </entry>
+ </elementAttributes>
+ <pos x="560" y="1100"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>Q7</string>
+ </entry>
+ </elementAttributes>
+ <pos x="640" y="1100"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes/>
+ <pos x="460" y="1120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[57]/elementAttributes/entry/rotation"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>RW_IE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="1120"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>RW_G</string>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="1160"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>Q7</string>
+ </entry>
+ </elementAttributes>
+ <pos x="920" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>Q7</string>
+ </entry>
+ </elementAttributes>
+ <pos x="920" y="740"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>RW_G</string>
+ </entry>
+ </elementAttributes>
+ <pos x="120" y="740"/>
+ </visualElement>
</visualElements>
<wires>
<wire>
@@ -1108,14 +1190,14 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="560" y="460"/>
</wire>
<wire>
- <p1 x="920" y="460"/>
- <p2 x="940" y="460"/>
- </wire>
- <wire>
<p1 x="440" y="460"/>
<p2 x="460" y="460"/>
</wire>
<wire>
+ <p1 x="920" y="460"/>
+ <p2 x="940" y="460"/>
+ </wire>
+ <wire>
<p1 x="540" y="140"/>
<p2 x="560" y="140"/>
</wire>
@@ -1124,6 +1206,10 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="560" y="780"/>
</wire>
<wire>
+ <p1 x="620" y="1100"/>
+ <p2 x="640" y="1100"/>
+ </wire>
+ <wire>
<p1 x="980" y="400"/>
<p2 x="1080" y="400"/>
</wire>
@@ -1164,10 +1250,6 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="540" y="480"/>
</wire>
<wire>
- <p1 x="920" y="480"/>
- <p2 x="940" y="480"/>
- </wire>
- <wire>
<p1 x="940" y="800"/>
<p2 x="960" y="800"/>
</wire>
@@ -1180,6 +1262,10 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="540" y="160"/>
</wire>
<wire>
+ <p1 x="540" y="1120"/>
+ <p2 x="560" y="1120"/>
+ </wire>
+ <wire>
<p1 x="920" y="420"/>
<p2 x="940" y="420"/>
</wire>
@@ -1228,6 +1314,10 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="100" y="820"/>
</wire>
<wire>
+ <p1 x="520" y="1140"/>
+ <p2 x="540" y="1140"/>
+ </wire>
+ <wire>
<p1 x="920" y="440"/>
<p2 x="940" y="440"/>
</wire>
@@ -1236,10 +1326,6 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="640" y="440"/>
</wire>
<wire>
- <p1 x="920" y="760"/>
- <p2 x="940" y="760"/>
- </wire>
- <wire>
<p1 x="620" y="760"/>
<p2 x="640" y="760"/>
</wire>
@@ -1292,8 +1378,8 @@ C 0xA 1 0 0 X 0 X</dataString>
<p2 x="540" y="960"/>
</wire>
<wire>
- <p1 x="940" y="460"/>
- <p2 x="940" y="480"/>
+ <p1 x="540" y="1120"/>
+ <p2 x="540" y="1140"/>
</wire>
</wires>
<measurementOrdering/>
diff --git a/digital/tests_alu.dig b/digital/tests_alu.dig
deleted file mode 100644
index 9390503..0000000
--- a/digital/tests_alu.dig
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<circuit>
- <version>2</version>
- <attributes/>
- <visualElements>
- <visualElement>
- <elementName>Testcase</elementName>
- <elementAttributes>
- <entry>
- <string>Label</string>
- <string>test01</string>
- </entry>
- <entry>
- <string>Testdata</string>
- <testData>
- <dataString>A B Y
-0 0 1</dataString>
- </testData>
- </entry>
- </elementAttributes>
- <pos x="200" y="200"/>
- </visualElement>
- </visualElements>
- <wires/>
- <measurementOrdering/>
-</circuit> \ No newline at end of file
diff --git a/src/assembler.py b/src/assembler.py
index 5802983..7deb0f0 100755
--- a/src/assembler.py
+++ b/src/assembler.py
@@ -25,8 +25,8 @@ src_lines = src.splitlines()
def parse(line: str) -> list[str]:
depth = 0
- result = []
- acc = ""
+ result: list[str] = []
+ acc: str = ""
for c in line:
if c.isspace() and depth == 0:
result.append(acc)
@@ -47,42 +47,47 @@ def eval_expr(expr: str) -> int:
expr = eval_symbol(expr)
return eval(expr, labels.copy()) # eval as Python expr
+constants: dict[str, str] = {
+ # Registers
+ "rz": "0",
+ "ra": "1",
+ "rb": "2",
+ "rc": "3",
+ "rd": "4",
+ "rf": "5",
+ "rg": "6",
+ # ALU instructions
+ "al_plus": "0",
+ "al_minus": "1",
+ "al_and": "2",
+ "al_or": "3",
+ "al_xor": "4",
+ "al_shift_lr": "5",
+ "al_shift_ar": "6",
+ "al_shift_ll": "7",
+ # ALU flags
+ "f_carry": "0",
+ "f_overflow": "1",
+ "f_zero": "2",
+ "f_sign": "3",
+}
+
def eval_symbol(c: str):
if c in labels:
return str(labels[c])
- match c:
- # Registers
- case "rz": return "0"
- case "ra": return "1"
- case "rb": return "2"
- case "rc": return "3"
- case "rd": return "4"
- case "pa": return "5"
- case "pb": return "6"
- # ALU instructions
- case "al_clear": return "0"
- case "al_b_minus_a": return "1"
- case "al_a_minus_b": return "2"
- case "al_a_plus_b": return "3"
- case "al_a_xor_b": return "4"
- case "al_a_or_b": return "5"
- case "al_a_and_b": return "6"
- case "al_preset": return "7"
- case "al_logical_shift_right": return "8"
- case "al_arithmetic_shift_right": return "9"
- case "al_logical_shift_left": return "10"
- # ALU flags
- case "f_carry": return "0"
- case "f_overflow": return "1"
- case "f_zero": return "2"
- case "f_sign": return "3"
- case _: return c
+ if c in constants:
+ return constants[c]
+
+ return c
-# 1st pass, gather labels
+# 1st pass, gather labels, set options
+options: dict[str, str] = {
+ "stack_pointer": "6" # RG
+}
labels: dict[str, int] = {}
-address = 0
+address: int = 0
for (lineNo, line) in enumerate(src_lines):
line = line.split(";")[0].strip()
@@ -95,11 +100,116 @@ for (lineNo, line) in enumerate(src_lines):
case "@label":
labels[args[0]] = address
continue
+ case "@opt":
+ opt_name = args[0]
+ opt_value = constants.get(args[1], args[1])
+ options[opt_name] = opt_value
+ case _:
+ pass
address += 1
# 2nd pass
+def make_alr(alu_op: str, left: str, right: str, target: str) -> list[int]:
+ """ALR 0000 TTTL LLRR RSSS"""
+ target_e = eval_expr(target)
+ left_e = eval_expr(left)
+ right_e = eval_expr(right)
+ alu_op_e = eval_expr(alu_op)
+ word = (0b0000 << 12) + \
+ (target_e << 9) + \
+ (left_e << 6) + \
+ (right_e << 3) + \
+ alu_op_e
+ return [word]
+
+def make_ali(alu_op: str, left: str, imm: str, target: str) -> list[int]:
+ """ALI 0001 TTTL LLII ISSS"""
+ target_e = eval_expr(target)
+ left_e = eval_expr(left)
+ imm_e = eval_expr(imm)
+ alu_op_e = eval_expr(alu_op)
+ word = (0b0001 << 12) + \
+ (target_e << 9) + \
+ (left_e << 6) + \
+ (imm_e << 3) + \
+ alu_op_e
+ return [word]
+
+def make_ldr(to_reg: str, addr_reg: str) -> list[int]:
+ """LDR 0010 TTTR RRXX XXXX"""
+ to_reg_e = eval_expr(to_reg)
+ addr_reg_e = eval_expr(addr_reg)
+ word = (0b0010 << 12) + \
+ (to_reg_e << 9) + \
+ (addr_reg_e << 6)
+ return [word]
+
+def make_str(from_reg: str, addr_reg: str) -> list[int]:
+ """STR 0011 TTTR RRXX XXXX"""
+ from_reg_e = eval_expr(from_reg)
+ addr_reg_e = eval_expr(addr_reg)
+ word = (0b0011 << 12) + \
+ (from_reg_e << 9) + \
+ (addr_reg_e << 6)
+ return [word]
+
+def make_ldi(to_reg: str, imm: str) -> list[int]:
+ """LDI 0100 TTTI IIII IIII"""
+ to_reg_e = eval_expr(to_reg)
+ imm_e = eval_expr(imm)
+ word = (0b0100 << 12) + \
+ (to_reg_e << 9) + \
+ imm_e
+ return [word]
+
+def make_jpr(addr_reg: str) -> list[int]:
+ """JPR 0101 XXXR RRXX XXXX"""
+ addr_reg_e = eval_expr(addr_reg)
+ word = (0b0101 << 12) + \
+ (addr_reg_e << 6)
+ return [word]
+
+def make_jpi(address: int, imm: str) -> list[int]:
+ """JPI 0110 XXXI IIII IIII"""
+ imm_e = eval_expr(imm)
+ imm_e -= address
+ word = (0b0110 << 12) + \
+ imm_e
+ return [word]
+
+def make_br(flag_s: str, addr_reg: str) -> list[int]:
+ """BR 0111 XFFR RRXX XXXX"""
+ flag_s_e = eval_expr(flag_s)
+ addr_reg_e = eval_expr(addr_reg)
+ word = (0b0111 << 12) + \
+ (flag_s_e << 9) + \
+ (addr_reg_e << 6)
+ return [word]
+
+def make_bri(address: int, flag_s: str, imm: str) -> list[int]:
+ """BRI 1000 XFFI IIII IIII"""
+ flag_s_e = eval_expr(flag_s)
+ imm_e = eval_expr(imm)
+ imm_e -= address
+ word = (0b1000 << 12) + \
+ (flag_s_e << 9) + \
+ imm_e
+ return [word]
+
+def make_hlt() -> list[int]:
+ """HLT 1111 XXXX XXXX XXXX"""
+ word = (0b1111 << 12)
+ return [word]
+
+# def make_spu(reg: str) -> list[int]:
+# stack_pointer = options["stack_pointer"]
+# reg = eval_symbol(reg)
+# words_inc: list[int] = make_inc(stack_pointer, stack_pointer)
+# words_str: list[int] = make_str(reg, stack_pointer)
+# return words_inc + words_str
+
address = 0
nop = bytearray([0b1000_0000, 0])
result = bytearray()
@@ -115,85 +225,52 @@ for (lineNo, line) in enumerate(src_lines):
case "@address":
address = eval_expr(args[0])
continue
- case "@label":
+ case "@label" | "@opt":
continue
# Instructions
- case "alu":
- # S (alu op)
- # L (lhs)
- # R (rhs)
- # T (target)
- word = (0b0000 << 12) + \
- (eval_expr(args[0]) << 3) + \
- (eval_expr(args[1]) << 9) + \
- (eval_expr(args[2]) << 6) + \
- (eval_expr(args[3]) << 0)
- case "als":
- # S (alu op)
- # L (lhs)
- # R (rhs)
- # T (target)
- word = (0b0001 << 12) + \
- (eval_expr(args[0]) << 3) + \
- (eval_expr(args[1]) << 9) + \
- (eval_expr(args[2]) << 6) + \
- (eval_expr(args[3]) << 0)
+ case "alr":
+ words = make_alr(*args)
+ case "ali":
+ words = make_ali(*args)
case "ldr":
- # R (address)
- # T (target)
- word = (0b0010 << 12) + \
- (eval_expr(args[0]) << 9) + \
- (eval_expr(args[1]) << 0)
+ words = make_ldr(*args)
case "str":
- # R (address)
- # T (value to store)
- word = (0b0011 << 12) + \
- (eval_expr(args[0]) << 9) + \
- (eval_expr(args[1]) << 6)
+ words = make_str(*args)
case "ldi":
- # T (target)
- # I (immediate)
- word = (0b0100 << 12) + \
- (eval_expr(args[0]) << 0) + \
- (eval_expr(args[1]) << 3)
- case "jmp":
- # R (reg holding address)
- word = (0b0101 << 12) + \
- (eval_expr(args[0]) << 9)
+ words = make_ldi(*args)
+ case "jpr":
+ words = make_jpr(*args)
+ case "jpi":
+ words = make_jpi(address, *args)
case "br":
- # F (flag selector)
- # R (reg holding address)
- word = (0b0110 << 12) + \
- (eval_expr(args[0]) << 9) + \
- (eval_expr(args[1]) << 6)
+ words = make_br(*args)
+ case "bri":
+ words = make_bri(address, *args)
case "hlt":
- word = 0b1111 << 12
+ words = make_hlt()
# Pseudoinstructions
case "add":
- word = (0b0000 << 12) + \
- (eval_expr(args[0]) << 9) + \
- (eval_expr(args[1]) << 6) + \
- (eval_expr("al_a_plus_b") << 3) + \
- (eval_expr(args[2]) << 0)
+ words = make_alr("al_plus", *args)
case "sub":
- word = (0b0000 << 12) + \
- (eval_expr(args[0]) << 9) + \
- (eval_expr(args[1]) << 6) + \
- (eval_expr("al_a_minus_b") << 3) + \
- (eval_expr(args[2]) << 0)
+ words = make_alr("al_minus", *args)
+ case "inc":
+ words = make_ali("al_plus", args[0], "1", args[0])
+ case "dec":
+ words = make_ali("al_minus", args[0], "1", args[0])
case "mov":
- word = (0b0000 << 12) + \
- (eval_expr("rz") << 9) + \
- (eval_expr(args[0]) << 6) + \
- (eval_expr("al_a_plus_b") << 3) + \
- (eval_expr(args[1]) << 0)
+ words = make_ali("al_plus", args[0], "0", args[1])
+ # case "csr":
+ # reg = args[0]
+ # words_spu = make_spu(reg)
+ # words = []
+ # # todo finish this
# Default case: evaluate as is (e.g. data word)
case _:
try:
- word = eval_expr(keyword)
+ words = [eval_expr(keyword)]
except:
raise Exception(f"Invalid assembly at {infile_path}:{lineNo + 1}\n\n{line}")
@@ -204,79 +281,13 @@ for (lineNo, line) in enumerate(src_lines):
if address == label_addr:
print(f"{label}:")
- print(f"{address:>08x} 0x{word:>04x} {line}")
- result[2 * address + 0] = ((word >> 8) & 0xff)
- result[2 * address + 1] = ((word >> 0) & 0xff)
- address += 1
+ for word in words:
+ print(f"{address:>08x} 0x{word:>04x} {line}")
+ result[2 * address + 0] = ((word >> 8) & 0xff)
+ result[2 * address + 1] = ((word >> 0) & 0xff)
+ address += 1
with open(outfile_path, "wb") as f:
f.write(result)
print(f"Wrote {len(result)} bytes to {outfile_path}")
-
-with open(f"{outfile_path}.logisim.txt", "w") as f:
- f.write("v2.0 raw\n")
- run_length = 0
- run_last = ""
- for i in range(len(result) // 2):
- b0 = result[2 * i + 0]
- b1 = result[2 * i + 1]
- word = f"{b0:>02x}{b1:>02x}\n"
-
- if word != run_last and run_length <= 1:
- f.write(f"{run_last}")
- run_length = 1
- run_last = word
- elif word != run_last and run_length > 1:
- f.write(f"{run_length}*{run_last}")
- run_length = 1
- run_last = word
- else:
- run_length += 1
-
- if run_length <= 1:
- f.write(f"{run_last}")
- else:
- f.write(f"{run_length}*{run_last}")
-
-print(f"Wrote Logisim image format to {outfile_path}.logisim.txt")
-
-with open(f"{outfile_path}.ver.txt", "w") as f:
- f.write("addr/data: 15 16")
- run_length = 0
- run_last = ""
- written = -1
-
- def update_layout():
- if run_last == "": return
- if written % 8 == 0:
- f.write("\n")
- else:
- f.write(" ")
-
- for i in range(len(result) // 2):
- b0 = result[2 * i + 0]
- b1 = result[2 * i + 1]
- word = f"{b0:>02x}{b1:>02x}"
-
- if word != run_last and run_length <= 1:
- f.write(f"{run_last}")
- run_length = 1
- run_last = word
- written += 1
- update_layout()
- elif word != run_last and run_length > 1:
- f.write(f"{run_length}*{run_last}")
- run_length = 1
- run_last = word
- written += 1
- update_layout()
- else:
- run_length += 1
-
- if run_length <= 1:
- f.write(f"{run_last}")
- else:
- f.write(f"{run_length}*{run_last}")
-
-print(f"Wrote verification test format to {outfile_path}.ver.txt")
diff --git a/src/test.atk16 b/src/test.atk16
index 364480b..da7c7c8 100644
--- a/src/test.atk16
+++ b/src/test.atk16
@@ -3,7 +3,7 @@
; ROM (and program execution) starts at offset 0x0
@address 0x0
ldi RA program
- jmp RA
+ jpr RA
@label ram_offset
0x8000 ; store ram offset for later memory access
diff --git a/src/test_fibo.atk16 b/src/test_fibo.atk16
new file mode 100644
index 0000000..7f1abb9
--- /dev/null
+++ b/src/test_fibo.atk16
@@ -0,0 +1,47 @@
+@opt stack_pointer RG
+
+@label program
+ ; call fibo subroutine with parameter 10
+ ldi RA 10
+ csr fibo
+ hlt
+
+@label fibo
+ ; function fibo
+ ; parameters:
+ ; RA n : u16
+ ; return value:
+ ; RA fibo(n) : u16
+
+ spu RB ; prelude
+ spu RC
+
+ ldi RC 2 ; if n < 2, return n
+ sub RA RC RA
+ bri f_sign fibo_early
+
+ spu RD ; prelude
+ spu RE
+
+ ldi RE 1 ; constant 1
+ ldi RB 0 ; a = 0
+ ldi RC 1 ; b = 1
+@label fibo_loop
+ add RB RC RD ; v = a + b
+ mov RC RB ; a = b
+ mov RD RC ; b = v
+ sub RA RE RA ; n -= 1
+ bri f_zero fibo_done ; loop while n > 0
+ jpi fibo_loop
+
+@label fibo_early
+ spo RC
+ spo RB
+ rsr
+@label fibo_done
+ ldr RD RA
+ spo RE
+ spo RD
+ spo RC
+ spo RB
+ rsr
diff --git a/src/ucode.py b/src/ucode.py
index 9d7c55c..3c34a71 100755
--- a/src/ucode.py
+++ b/src/ucode.py
@@ -20,23 +20,23 @@ MEM_IE = 0b0000_0000_0001_0000
MEM_OE = 0b0000_0000_0010_0000
RW_IE = 0b0000_0000_0100_0000
R1_OE = 0b0000_0000_1000_0000
-R2_OE = 0b0000_0001_0000_0000
+R2_OE = 0b0000_0001_0000_0000 # needed?
IR_IE = 0b0000_0010_0000_0000
-L9_OE = 0b0000_0100_0000_0000
-unused1 = 0b0000_1000_0000_0000
+unused = 0b0000_0100_0000_0000
+LI_OE = 0b0000_1000_0000_0000
ALU_OE = 0b0001_0000_0000_0000
FR_IE = 0b0010_0000_0000_0000
HALT = 0b0100_0000_0000_0000
US_RS = 0b1000_0000_0000_0000
BRANCH_FLAG_STATES_N = 2
-UCODE_N = 2**3
+UCODE_N: int = 2**3
CONTROL_WORD_SIZE = 2
-def not_branch(bs):
+def not_branch(bs: list[int]) -> list[list[int]]:
return BRANCH_FLAG_STATES_N * [bs]
-def branch(false_branch, true_branch):
+def branch(false_branch: list[int], true_branch: list[int]) -> list[list[int]]:
return [false_branch, true_branch]
fetch = [PC_OE|MAR_IE, MEM_OE|IR_IE|PC_CO]
@@ -45,25 +45,26 @@ def nop():
return not_branch([*fetch, US_RS, 0, 0, 0, 0, 0])
ucode = [
- # ALU 0000 LLLR RRSS STTT
+ # ALR 0000 TTTL LLRR RSSS
not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]),
- # ALS 0001 LLLR RRSS STTT
+ # ALI 0001 TTTL LLII ISSS
not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]),
- # LDR 0010 RRRX XXXX XTTT
+ # LDR 0010 TTTR RRXX XXXX
not_branch([*fetch, R1_OE|MAR_IE, MEM_OE|RW_IE, US_RS, 0, 0, 0]),
- # STR 0011 RRRT TTXX XXXX
- not_branch([*fetch, R1_OE|MAR_IE, R2_OE|MEM_IE, US_RS, 0, 0, 0]),
- # LDI 0100 IIII IIII ITTT
- not_branch([*fetch, H9_OE|RW_IE, US_RS, 0, 0, 0, 0]),
- # JMP 0101 RRRX XXXX XXXX
+ # STR 0011 TTTR RRXX XXXX
+ not_branch([*fetch, R1_OE|MAR_IE, R1_OE|MEM_IE, US_RS, 0, 0, 0]),
+ # LDI 0100 TTTI IIII IIII
+ not_branch([*fetch, LI_OE|RW_IE, US_RS, 0, 0, 0, 0]),
+ # JPR 0101 XXXR RRXX XXXX
not_branch([*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]),
- # BR 0110 XFFR RRXX XXXX
+ # JPI 0110 XXXI IIII IIII
+ not_branch([*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]),
+ # BR 0111 XFFR RRXX XXXX
branch([*fetch, US_RS, 0, 0, 0, 0, 0],
- [*fetch, R2_OE|PC_IE, US_RS, 0, 0, 0, 0]),
- # NOP 0111 XXXX XXXX XXXX
- nop(),
- # NOP 1000 XXXX XXXX XXXX
- nop(),
+ [*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]),
+ # BRI 1000 XFFI IIII IIII
+ branch([*fetch, US_RS, 0, 0, 0, 0, 0],
+ [*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]),
# NOP 1001 XXXX XXXX XXXX
nop(),
# NOP 1010 XXXX XXXX XXXX