aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asm/bootstrap.atk165
-rw-r--r--digital/atk16.dig1072
-rw-r--r--digital/atk16_mem.dig2
-rw-r--r--digital/atk16_ucode_addr.dig741
-rw-r--r--src/asm_ops.py7
-rwxr-xr-xsrc/ucode.py54
6 files changed, 1522 insertions, 359 deletions
diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16
index c7ab63e..73165b9 100644
--- a/asm/bootstrap.atk16
+++ b/asm/bootstrap.atk16
@@ -7,10 +7,11 @@
hlt_isr ; 0x12 ISR2
hlt_isr ; 0x13 ISR3
stack_segment ; 0x14 Stack address
+ 0x0 ; 0x15 Interrupt PC address (IPCA)
@label hlt_isr
- ldi 0x55 RA
- hlt
+ ldi 0x55 RE
+ rti
@label program_segment
@address 0x0
diff --git a/digital/atk16.dig b/digital/atk16.dig
index 2b804fd..d1787ab 100644
--- a/digital/atk16.dig
+++ b/digital/atk16.dig
@@ -72,20 +72,6 @@
<pos x="400" y="-240"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>PC_IE</string>
- </entry>
- </elementAttributes>
- <pos x="-40" y="-200"/>
- </visualElement>
- <visualElement>
<elementName>CounterPreset</elementName>
<elementAttributes>
<entry>
@@ -115,16 +101,6 @@
<rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="-40" y="-240"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[4]/elementAttributes/entry/rotation"/>
- </entry>
- </elementAttributes>
<pos x="0" y="-180"/>
</visualElement>
<visualElement>
@@ -136,40 +112,12 @@
</entry>
<entry>
<string>NetName</string>
- <string>PC_CO</string>
- </entry>
- </elementAttributes>
- <pos x="-40" y="-280"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
<string>CLK</string>
</entry>
</elementAttributes>
<pos x="400" y="-220"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>CLK</string>
- </entry>
- </elementAttributes>
- <pos x="0" y="-260"/>
- </visualElement>
- <visualElement>
<elementName>atk16_mem.dig</elementName>
<elementAttributes/>
<pos x="580" y="-220"/>
@@ -218,30 +166,6 @@
<pos x="240" y="-380"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>OPCODE</string>
- </entry>
- </elementAttributes>
- <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>
- <visualElement>
<elementName>Testcase</elementName>
<elementAttributes>
<entry>
@@ -300,7 +224,7 @@ program(0x4051, 0x40a2, 0x029b)
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation reference="../../../../visualElement[18]/elementAttributes/entry/rotation"/>
+ <rotation reference="../../../../visualElement[12]/elementAttributes/entry/rotation"/>
</entry>
</elementAttributes>
<pos x="740" y="740"/>
@@ -318,7 +242,7 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>Frequency</string>
- <int>50</int>
+ <int>15</int>
</entry>
</elementAttributes>
<pos x="660" y="-340"/>
@@ -329,60 +253,6 @@ program(0x4051, 0x40a2, 0x029b)
<pos x="700" y="-380"/>
</visualElement>
<visualElement>
- <elementName>DipSwitch</elementName>
- <elementAttributes>
- <entry>
- <string>Label</string>
- <string>IRQ0</string>
- </entry>
- </elementAttributes>
- <pos x="-160" y="-480"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- </elementAttributes>
- <pos x="-180" y="-460"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[24]/elementAttributes/entry/rotation"/>
- </entry>
- </elementAttributes>
- <pos x="-180" y="-440"/>
- </visualElement>
- <visualElement>
- <elementName>Ground</elementName>
- <elementAttributes>
- <entry>
- <string>rotation</string>
- <rotation reference="../../../../visualElement[24]/elementAttributes/entry/rotation"/>
- </entry>
- </elementAttributes>
- <pos x="-180" y="-420"/>
- </visualElement>
- <visualElement>
- <elementName>Splitter</elementName>
- <elementAttributes>
- <entry>
- <string>Input Splitting</string>
- <string>1*4</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>4</string>
- </entry>
- </elementAttributes>
- <pos x="-140" y="-480"/>
- </visualElement>
- <visualElement>
<elementName>atk16_decoder.dig</elementName>
<elementAttributes>
<entry>
@@ -397,10 +267,10 @@ program(0x4051, 0x40a2, 0x029b)
<elementAttributes>
<entry>
<string>NetName</string>
- <string>FLAG_EQ</string>
+ <string>FLAG_S</string>
</entry>
</elementAttributes>
- <pos x="-120" y="-100"/>
+ <pos x="-80" y="-80"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -434,16 +304,6 @@ program(0x4051, 0x40a2, 0x029b)
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>OPCODE</string>
- </entry>
- </elementAttributes>
- <pos x="-120" y="-80"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
<string>rotation</string>
<rotation rotation="2"/>
</entry>
@@ -721,14 +581,28 @@ program(0x4051, 0x40a2, 0x029b)
<pos x="-220" y="220"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Driver</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>3,1,4</string>
+ <string>Bits</string>
+ <int>16</int>
+ </entry>
+ <entry>
+ <string>flipSelPos</string>
+ <boolean>true</boolean>
+ </entry>
+ </elementAttributes>
+ <pos x="140" y="-240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Probe</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>Bus</string>
</entry>
</elementAttributes>
- <pos x="140" y="220"/>
+ <pos x="240" y="-320"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -739,52 +613,48 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>OPCODE</string>
+ <string>MAR_IE</string>
</entry>
</elementAttributes>
- <pos x="140" y="260"/>
+ <pos x="380" y="-200"/>
</visualElement>
<visualElement>
- <elementName>BitSelector</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Selector Bits</string>
- <int>2</int>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>PC_OE</string>
</entry>
</elementAttributes>
- <pos x="0" y="240"/>
+ <pos x="140" y="-200"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>FLAG_EQ</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="0" y="300"/>
+ <pos x="700" y="-340"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="1"/>
- </entry>
- <entry>
- <string>Input Splitting</string>
- <string>3</string>
+ <rotation rotation="2"/>
</entry>
<entry>
- <string>Output Splitting</string>
- <string>2,</string>
+ <string>NetName</string>
+ <string>IM_M</string>
</entry>
</elementAttributes>
- <pos x="20" y="300"/>
+ <pos x="-220" y="-200"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -795,50 +665,48 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>FR_Q</string>
+ <string>OPCODE</string>
</entry>
</elementAttributes>
- <pos x="-20" y="240"/>
+ <pos x="220" y="-440"/>
</visualElement>
<visualElement>
- <elementName>EEPROM</elementName>
+ <elementName>Probe</elementName>
<elementAttributes>
<entry>
- <string>AddrBits</string>
- <int>8</int>
- </entry>
- <entry>
<string>Label</string>
- <string>UCODE</string>
+ <string>OPCODE</string>
</entry>
+ </elementAttributes>
+ <pos x="240" y="-440"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
- <string>Bits</string>
- <int>16</int>
+ <string>rotation</string>
+ <rotation rotation="2"/>
</entry>
<entry>
- <string>Data</string>
- <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3440,8000,4*0,c
-,221,3440,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,840,8000
-,4*0,c,221,840,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c
-,221,c02,8000,4*0,c,221,c02,8000,4*0,c,221,8000,5*0,c,221,82,8000
-,4*0,c,221,8000,5*0,c,221,c02,8000,4*0,c,221,44,8000,4*0,c,221
-,44,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,4000,5*0,c,221,4000</data>
+ <string>NetName</string>
+ <string>PC_CO</string>
</entry>
</elementAttributes>
- <pos x="220" y="220"/>
+ <pos x="20" y="-280"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="1"/>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="200" y="240"/>
+ <pos x="20" y="-260"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
@@ -848,17 +716,21 @@ program(0x4051, 0x40a2, 0x029b)
<rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="200" y="280"/>
+ <pos x="0" y="-240"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="1"/>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>PC_IE</string>
</entry>
</elementAttributes>
- <pos x="180" y="300"/>
+ <pos x="20" y="-200"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
@@ -869,14 +741,14 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>Input Splitting</string>
- <string>16</string>
+ <string>24</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>1*16</string>
+ <string>1*24</string>
</entry>
</elementAttributes>
- <pos x="360" y="420"/>
+ <pos x="400" y="560"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -886,7 +758,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>PC_CO</string>
</entry>
</elementAttributes>
- <pos x="400" y="420"/>
+ <pos x="440" y="560"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -896,7 +768,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>PC_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="400"/>
+ <pos x="440" y="540"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -906,7 +778,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>PC_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="380"/>
+ <pos x="440" y="520"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -916,7 +788,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>MAR_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="360"/>
+ <pos x="440" y="500"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -926,7 +798,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>MEM_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="340"/>
+ <pos x="440" y="480"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -936,7 +808,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>MEM_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="320"/>
+ <pos x="440" y="460"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -946,7 +818,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>R1_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="280"/>
+ <pos x="440" y="420"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -956,7 +828,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>IR_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="240"/>
+ <pos x="440" y="380"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -966,7 +838,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>ALU_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="180"/>
+ <pos x="440" y="320"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -976,7 +848,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>US_RS</string>
</entry>
</elementAttributes>
- <pos x="400" y="120"/>
+ <pos x="440" y="260"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -986,7 +858,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>FR_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="160"/>
+ <pos x="440" y="300"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -996,12 +868,12 @@ program(0x4051, 0x40a2, 0x029b)
<string>RW_IE</string>
</entry>
</elementAttributes>
- <pos x="400" y="300"/>
+ <pos x="440" y="440"/>
</visualElement>
<visualElement>
<elementName>Stop</elementName>
<elementAttributes/>
- <pos x="480" y="140"/>
+ <pos x="520" y="280"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1011,7 +883,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>LI_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="200"/>
+ <pos x="440" y="340"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1021,7 +893,7 @@ program(0x4051, 0x40a2, 0x029b)
<string>IM_M</string>
</entry>
</elementAttributes>
- <pos x="400" y="220"/>
+ <pos x="440" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1031,7 +903,221 @@ program(0x4051, 0x40a2, 0x029b)
<string>R2_OE</string>
</entry>
</elementAttributes>
- <pos x="400" y="260"/>
+ <pos x="440" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>atk16_ucode_addr.dig</elementName>
+ <elementAttributes/>
+ <pos x="80" y="180"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>FLAG_S</string>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="180"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>FR_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="200"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>OPCODE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>1*4</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>4</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-20" y="320"/>
+ </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>24</int>
+ </entry>
+ <entry>
+ <string>Data</string>
+ <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3440,8000,4*0,c
+,221,3440,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,840,8000
+,4*0,c,221,840,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c
+,221,c02,8000,4*0,c,221,c02,8000,4*0,c,221,8000,5*0,c,221,82,8000
+,4*0,c,221,8000,5*0,c,221,c02,8000,4*0,c,221,44,8000,4*0,c,221
+,44,8000,4*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221
+,8000,5*0,c0004,10008,22,8000,4*0,c0004,10008,22,8000,4*0,c0004
+,10008,22,8000,4*0,c0004,10008,22,8000,4*0,c,221,120002,8000,4*0
+,c,221,120002,8000,4*0,c,221,4000,5*0,c,221,4000</data>
+ </entry>
+ </elementAttributes>
+ <pos x="260" y="240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>VDD</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="260"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="300"/>
+ </visualElement>
+ <visualElement>
+ <elementName>VDD</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="240" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>OPCODE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-120" y="-100"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>IT_N</string>
+ </entry>
+ </elementAttributes>
+ <pos x="260" y="160"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>US_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-40" y="260"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>ISRA_OE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="240"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>IM_EN</string>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>IM_DS</string>
+ </entry>
+ </elementAttributes>
+ <pos x="60" y="300"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>IPC_IE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="180"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>IPC_OE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="160"/>
</visualElement>
<visualElement>
<elementName>Driver</elementName>
@@ -1045,17 +1131,77 @@ program(0x4051, 0x40a2, 0x029b)
<boolean>true</boolean>
</entry>
</elementAttributes>
- <pos x="140" y="-240"/>
+ <pos x="-380" y="-220"/>
</visualElement>
<visualElement>
- <elementName>Probe</elementName>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>ISRA_OE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-360" y="-200"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Const</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Value</string>
+ <long>4</long>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>14</int>
+ </entry>
+ <entry>
+ <string>intFormat</string>
+ <intFormat>hex</intFormat>
+ </entry>
+ </elementAttributes>
+ <pos x="-460" y="-200"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>IT_N</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-460" y="-220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>2,14</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>16</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-440" y="-220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Register</elementName>
<elementAttributes>
<entry>
<string>Label</string>
- <string>Bus</string>
+ <string>IPC</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>16</int>
</entry>
</elementAttributes>
- <pos x="240" y="-320"/>
+ <pos x="-540" y="-100"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1066,10 +1212,34 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>MAR_IE</string>
+ <string>IPC_IE</string>
</entry>
</elementAttributes>
- <pos x="380" y="-200"/>
+ <pos x="-540" y="-60"/>
+ </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="-80"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>IPC_OE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="-420" y="-60"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1080,20 +1250,64 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>PC_OE</string>
+ <string>CLK</string>
</entry>
</elementAttributes>
- <pos x="140" y="-200"/>
+ <pos x="-540" y="-80"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>IM_EN</string>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="200"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
+ <string>IM_DS</string>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="220"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Keyboard</elementName>
+ <elementAttributes/>
+ <pos x="-220" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
<string>CLK</string>
</entry>
</elementAttributes>
- <pos x="700" y="-340"/>
+ <pos x="-240" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>VDD</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="-240" y="480"/>
+ </visualElement>
+ <visualElement>
+ <elementName>RS_FF_AS</elementName>
+ <elementAttributes/>
+ <pos x="-120" y="380"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -1104,10 +1318,50 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>IM_M</string>
+ <string>IM_DS</string>
</entry>
</elementAttributes>
- <pos x="-220" y="-200"/>
+ <pos x="-160" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="-60" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[108]/elementAttributes/entry/rotation"/>
+ </entry>
+ </elementAttributes>
+ <pos x="-40" y="340"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[108]/elementAttributes/entry/rotation"/>
+ </entry>
+ </elementAttributes>
+ <pos x="-60" y="360"/>
+ </visualElement>
+ <visualElement>
+ <elementName>LED</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="3"/>
+ </entry>
+ </elementAttributes>
+ <pos x="220" y="360"/>
</visualElement>
</visualElements>
<wires>
@@ -1136,38 +1390,54 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="60" y="0"/>
</wire>
<wire>
- <p1 x="380" y="320"/>
- <p2 x="400" y="320"/>
+ <p1 x="420" y="320"/>
+ <p2 x="440" y="320"/>
+ </wire>
+ <wire>
+ <p1 x="240" y="320"/>
+ <p2 x="260" y="320"/>
</wire>
<wire>
- <p1 x="0" y="-260"/>
- <p2 x="20" y="-260"/>
+ <p1 x="-60" y="320"/>
+ <p2 x="-20" y="320"/>
</wire>
<wire>
<p1 x="-260" y="260"/>
<p2 x="-220" y="260"/>
</wire>
<wire>
- <p1 x="380" y="260"/>
- <p2 x="400" y="260"/>
+ <p1 x="420" y="260"/>
+ <p2 x="440" y="260"/>
</wire>
<wire>
- <p1 x="280" y="260"/>
- <p2 x="300" y="260"/>
+ <p1 x="240" y="260"/>
+ <p2 x="260" y="260"/>
</wire>
<wire>
- <p1 x="380" y="-200"/>
- <p2 x="400" y="-200"/>
+ <p1 x="-40" y="260"/>
+ <p2 x="-20" y="260"/>
+ </wire>
+ <wire>
+ <p1 x="0" y="260"/>
+ <p2 x="80" y="260"/>
</wire>
<wire>
- <p1 x="-40" y="-200"/>
- <p2 x="20" y="-200"/>
+ <p1 x="380" y="-200"/>
+ <p2 x="400" y="-200"/>
</wire>
<wire>
<p1 x="480" y="-200"/>
<p2 x="580" y="-200"/>
</wire>
<wire>
+ <p1 x="-380" y="-200"/>
+ <p2 x="-360" y="-200"/>
+ </wire>
+ <wire>
+ <p1 x="-460" y="-200"/>
+ <p2 x="-440" y="-200"/>
+ </wire>
+ <wire>
<p1 x="-160" y="200"/>
<p2 x="-140" y="200"/>
</wire>
@@ -1176,12 +1446,24 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="-200" y="200"/>
</wire>
<wire>
- <p1 x="380" y="200"/>
- <p2 x="400" y="200"/>
+ <p1 x="60" y="200"/>
+ <p2 x="80" y="200"/>
</wire>
<wire>
- <p1 x="-280" y="-140"/>
- <p2 x="20" y="-140"/>
+ <p1 x="200" y="200"/>
+ <p2 x="220" y="200"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="200"/>
+ <p2 x="440" y="200"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="520"/>
+ <p2 x="440" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="-580" y="-140"/>
+ <p2 x="-280" y="-140"/>
</wire>
<wire>
<p1 x="300" y="-140"/>
@@ -1200,20 +1482,20 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="480" y="-140"/>
</wire>
<wire>
- <p1 x="-180" y="-460"/>
- <p2 x="-140" y="-460"/>
+ <p1 x="-280" y="-140"/>
+ <p2 x="20" y="-140"/>
</wire>
<wire>
- <p1 x="380" y="140"/>
- <p2 x="480" y="140"/>
+ <p1 x="420" y="460"/>
+ <p2 x="440" y="460"/>
</wire>
<wire>
- <p1 x="-280" y="-80"/>
- <p2 x="-260" y="-80"/>
+ <p1 x="-240" y="460"/>
+ <p2 x="-220" y="460"/>
</wire>
<wire>
- <p1 x="-160" y="-80"/>
- <p2 x="-120" y="-80"/>
+ <p1 x="-420" y="-80"/>
+ <p2 x="-280" y="-80"/>
</wire>
<wire>
<p1 x="160" y="-80"/>
@@ -1232,12 +1514,32 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="660" y="-80"/>
</wire>
<wire>
+ <p1 x="-100" y="-80"/>
+ <p2 x="-80" y="-80"/>
+ </wire>
+ <wire>
+ <p1 x="-160" y="-80"/>
+ <p2 x="-140" y="-80"/>
+ </wire>
+ <wire>
+ <p1 x="-480" y="-80"/>
+ <p2 x="-460" y="-80"/>
+ </wire>
+ <wire>
+ <p1 x="-280" y="-80"/>
+ <p2 x="-260" y="-80"/>
+ </wire>
+ <wire>
<p1 x="-140" y="80"/>
- <p2 x="480" y="80"/>
+ <p2 x="200" y="80"/>
</wire>
<wire>
- <p1 x="380" y="400"/>
- <p2 x="400" y="400"/>
+ <p1 x="420" y="400"/>
+ <p2 x="440" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="-160" y="400"/>
+ <p2 x="-120" y="400"/>
</wire>
<wire>
<p1 x="-280" y="-20"/>
@@ -1280,24 +1582,28 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="700" y="20"/>
</wire>
<wire>
- <p1 x="380" y="340"/>
- <p2 x="400" y="340"/>
+ <p1 x="420" y="340"/>
+ <p2 x="440" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="-40" y="340"/>
+ <p2 x="-20" y="340"/>
</wire>
<wire>
<p1 x="80" y="-280"/>
<p2 x="100" y="-280"/>
</wire>
<wire>
- <p1 x="-40" y="-280"/>
- <p2 x="20" y="-280"/>
+ <p1 x="420" y="280"/>
+ <p2 x="520" y="280"/>
</wire>
<wire>
- <p1 x="200" y="280"/>
- <p2 x="220" y="280"/>
+ <p1 x="320" y="280"/>
+ <p2 x="340" y="280"/>
</wire>
<wire>
- <p1 x="380" y="280"/>
- <p2 x="400" y="280"/>
+ <p1 x="60" y="280"/>
+ <p2 x="80" y="280"/>
</wire>
<wire>
<p1 x="460" y="-220"/>
@@ -1312,6 +1618,18 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="20" y="-220"/>
</wire>
<wire>
+ <p1 x="-360" y="-220"/>
+ <p2 x="-280" y="-220"/>
+ </wire>
+ <wire>
+ <p1 x="-460" y="-220"/>
+ <p2 x="-440" y="-220"/>
+ </wire>
+ <wire>
+ <p1 x="-420" y="-220"/>
+ <p2 x="-400" y="-220"/>
+ </wire>
+ <wire>
<p1 x="-160" y="220"/>
<p2 x="-140" y="220"/>
</wire>
@@ -1320,32 +1638,44 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="-220" y="220"/>
</wire>
<wire>
- <p1 x="100" y="220"/>
- <p2 x="140" y="220"/>
+ <p1 x="60" y="220"/>
+ <p2 x="80" y="220"/>
</wire>
<wire>
- <p1 x="160" y="220"/>
- <p2 x="220" y="220"/>
+ <p1 x="420" y="220"/>
+ <p2 x="440" y="220"/>
</wire>
<wire>
- <p1 x="380" y="220"/>
- <p2 x="400" y="220"/>
+ <p1 x="200" y="220"/>
+ <p2 x="220" y="220"/>
</wire>
<wire>
- <p1 x="-160" y="-480"/>
- <p2 x="-140" y="-480"/>
+ <p1 x="420" y="540"/>
+ <p2 x="440" y="540"/>
</wire>
<wire>
<p1 x="700" y="800"/>
<p2 x="720" y="800"/>
</wire>
<wire>
- <p1 x="380" y="160"/>
- <p2 x="400" y="160"/>
+ <p1 x="420" y="480"/>
+ <p2 x="440" y="480"/>
</wire>
<wire>
- <p1 x="-140" y="-100"/>
- <p2 x="-120" y="-100"/>
+ <p1 x="-240" y="480"/>
+ <p2 x="-220" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="-160" y="480"/>
+ <p2 x="-140" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="160"/>
+ <p2 x="260" y="160"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="160"/>
+ <p2 x="440" y="160"/>
</wire>
<wire>
<p1 x="20" y="-100"/>
@@ -1372,24 +1702,24 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="680" y="-100"/>
</wire>
<wire>
- <p1 x="200" y="-100"/>
- <p2 x="220" y="-100"/>
+ <p1 x="-140" y="-100"/>
+ <p2 x="-120" y="-100"/>
</wire>
<wire>
- <p1 x="-180" y="-420"/>
- <p2 x="-140" y="-420"/>
+ <p1 x="-580" y="-100"/>
+ <p2 x="-540" y="-100"/>
</wire>
<wire>
- <p1 x="720" y="740"/>
- <p2 x="740" y="740"/>
+ <p1 x="200" y="-100"/>
+ <p2 x="220" y="-100"/>
</wire>
<wire>
- <p1 x="380" y="420"/>
- <p2 x="400" y="420"/>
+ <p1 x="720" y="740"/>
+ <p2 x="740" y="740"/>
</wire>
<wire>
- <p1 x="300" y="420"/>
- <p2 x="360" y="420"/>
+ <p1 x="420" y="420"/>
+ <p2 x="440" y="420"/>
</wire>
<wire>
<p1 x="40" y="-40"/>
@@ -1416,24 +1746,24 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="680" y="-40"/>
</wire>
<wire>
- <p1 x="380" y="360"/>
- <p2 x="400" y="360"/>
+ <p1 x="420" y="360"/>
+ <p2 x="440" y="360"/>
</wire>
<wire>
- <p1 x="0" y="300"/>
- <p2 x="20" y="300"/>
+ <p1 x="-60" y="360"/>
+ <p2 x="-20" y="360"/>
</wire>
<wire>
- <p1 x="180" y="300"/>
- <p2 x="220" y="300"/>
+ <p1 x="420" y="300"/>
+ <p2 x="440" y="300"/>
</wire>
<wire>
- <p1 x="380" y="300"/>
- <p2 x="400" y="300"/>
+ <p1 x="240" y="300"/>
+ <p2 x="260" y="300"/>
</wire>
<wire>
- <p1 x="-40" y="-240"/>
- <p2 x="20" y="-240"/>
+ <p1 x="60" y="300"/>
+ <p2 x="80" y="300"/>
</wire>
<wire>
<p1 x="-280" y="-240"/>
@@ -1448,6 +1778,10 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="120" y="-240"/>
</wire>
<wire>
+ <p1 x="0" y="-240"/>
+ <p2 x="20" y="-240"/>
+ </wire>
+ <wire>
<p1 x="180" y="-240"/>
<p2 x="300" y="-240"/>
</wire>
@@ -1456,20 +1790,28 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="400" y="-240"/>
</wire>
<wire>
- <p1 x="40" y="240"/>
- <p2 x="140" y="240"/>
+ <p1 x="420" y="560"/>
+ <p2 x="440" y="560"/>
</wire>
<wire>
- <p1 x="-20" y="240"/>
- <p2 x="0" y="240"/>
+ <p1 x="340" y="560"/>
+ <p2 x="400" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="240" y="240"/>
+ <p2 x="260" y="240"/>
</wire>
<wire>
- <p1 x="200" y="240"/>
- <p2 x="220" y="240"/>
+ <p1 x="-60" y="240"/>
+ <p2 x="-20" y="240"/>
</wire>
<wire>
- <p1 x="380" y="240"/>
- <p2 x="400" y="240"/>
+ <p1 x="420" y="240"/>
+ <p2 x="440" y="240"/>
+ </wire>
+ <wire>
+ <p1 x="-20" y="240"/>
+ <p2 x="80" y="240"/>
</wire>
<wire>
<p1 x="0" y="-180"/>
@@ -1481,19 +1823,31 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="-80" y="180"/>
- <p2 x="100" y="180"/>
+ <p2 x="-60" y="180"/>
+ </wire>
+ <wire>
+ <p1 x="60" y="180"/>
+ <p2 x="80" y="180"/>
+ </wire>
+ <wire>
+ <p1 x="200" y="180"/>
+ <p2 x="240" y="180"/>
</wire>
<wire>
- <p1 x="380" y="180"/>
- <p2 x="400" y="180"/>
+ <p1 x="420" y="180"/>
+ <p2 x="440" y="180"/>
</wire>
<wire>
- <p1 x="-180" y="-440"/>
- <p2 x="-140" y="-440"/>
+ <p1 x="420" y="500"/>
+ <p2 x="440" y="500"/>
</wire>
<wire>
- <p1 x="380" y="120"/>
- <p2 x="400" y="120"/>
+ <p1 x="220" y="-440"/>
+ <p2 x="240" y="-440"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="440"/>
+ <p2 x="440" y="440"/>
</wire>
<wire>
<p1 x="-280" y="-60"/>
@@ -1501,10 +1855,14 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="-160" y="-60"/>
- <p2 x="-140" y="-60"/>
+ <p2 x="-100" y="-60"/>
</wire>
<wire>
- <p1 x="-140" y="-60"/>
+ <p1 x="-440" y="-60"/>
+ <p2 x="-420" y="-60"/>
+ </wire>
+ <wire>
+ <p1 x="-100" y="-60"/>
<p2 x="60" y="-60"/>
</wire>
<wire>
@@ -1520,36 +1878,56 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="180" y="60"/>
</wire>
<wire>
- <p1 x="380" y="380"/>
- <p2 x="400" y="380"/>
+ <p1 x="200" y="60"/>
+ <p2 x="480" y="60"/>
+ </wire>
+ <wire>
+ <p1 x="420" y="380"/>
+ <p2 x="440" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="-140" y="380"/>
+ <p2 x="-120" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="-60" y="380"/>
+ <p2 x="-20" y="380"/>
</wire>
<wire>
<p1 x="180" y="-320"/>
<p2 x="240" y="-320"/>
</wire>
<wire>
+ <p1 x="320" y="-100"/>
+ <p2 x="320" y="-20"/>
+ </wire>
+ <wire>
+ <p1 x="640" y="-80"/>
+ <p2 x="640" y="-60"/>
+ </wire>
+ <wire>
+ <p1 x="0" y="260"/>
+ <p2 x="0" y="320"/>
+ </wire>
+ <wire>
<p1 x="480" y="-200"/>
<p2 x="480" y="-140"/>
</wire>
<wire>
<p1 x="480" y="0"/>
- <p2 x="480" y="80"/>
+ <p2 x="480" y="60"/>
</wire>
<wire>
<p1 x="480" y="-140"/>
<p2 x="480" y="-100"/>
</wire>
<wire>
- <p1 x="320" y="-100"/>
- <p2 x="320" y="-20"/>
- </wire>
- <wire>
- <p1 x="640" y="-80"/>
- <p2 x="640" y="-60"/>
+ <p1 x="-580" y="-140"/>
+ <p2 x="-580" y="-100"/>
</wire>
<wire>
- <p1 x="100" y="180"/>
- <p2 x="100" y="220"/>
+ <p1 x="-100" y="-80"/>
+ <p2 x="-100" y="-60"/>
</wire>
<wire>
<p1 x="100" y="-380"/>
@@ -1568,6 +1946,10 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="200" y="-40"/>
</wire>
<wire>
+ <p1 x="200" y="60"/>
+ <p2 x="200" y="80"/>
+ </wire>
+ <wire>
<p1 x="680" y="20"/>
<p2 x="680" y="40"/>
</wire>
@@ -1580,26 +1962,26 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="680" y="-340"/>
</wire>
<wire>
- <p1 x="-140" y="-100"/>
- <p2 x="-140" y="-60"/>
- </wire>
- <wire>
<p1 x="-140" y="-40"/>
<p2 x="-140" y="80"/>
</wire>
<wire>
- <p1 x="300" y="260"/>
- <p2 x="300" y="420"/>
+ <p1 x="-140" y="-100"/>
+ <p2 x="-140" y="-80"/>
</wire>
<wire>
- <p1 x="300" y="-240"/>
- <p2 x="300" y="-140"/>
+ <p1 x="-140" y="380"/>
+ <p2 x="-140" y="480"/>
</wire>
<wire>
<p1 x="140" y="-220"/>
<p2 x="140" y="-200"/>
</wire>
<wire>
+ <p1 x="300" y="-240"/>
+ <p2 x="300" y="-140"/>
+ </wire>
+ <wire>
<p1 x="-240" y="-340"/>
<p2 x="-240" y="-220"/>
</wire>
@@ -1608,6 +1990,14 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="400" y="-100"/>
</wire>
<wire>
+ <p1 x="240" y="180"/>
+ <p2 x="240" y="240"/>
+ </wire>
+ <wire>
+ <p1 x="-20" y="240"/>
+ <p2 x="-20" y="260"/>
+ </wire>
+ <wire>
<p1 x="20" y="-140"/>
<p2 x="20" y="-100"/>
</wire>
@@ -1616,8 +2006,8 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="20" y="60"/>
</wire>
<wire>
- <p1 x="20" y="260"/>
- <p2 x="20" y="280"/>
+ <p1 x="340" y="280"/>
+ <p2 x="340" y="560"/>
</wire>
<wire>
<p1 x="180" y="-80"/>
@@ -1633,17 +2023,33 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="-280" y="-240"/>
- <p2 x="-280" y="-140"/>
+ <p2 x="-280" y="-220"/>
</wire>
<wire>
<p1 x="-280" y="-140"/>
<p2 x="-280" y="-80"/>
</wire>
<wire>
+ <p1 x="-280" y="-220"/>
+ <p2 x="-280" y="-140"/>
+ </wire>
+ <wire>
<p1 x="280" y="-140"/>
<p2 x="280" y="-100"/>
</wire>
<wire>
+ <p1 x="-60" y="180"/>
+ <p2 x="-60" y="240"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="160"/>
+ <p2 x="220" y="200"/>
+ </wire>
+ <wire>
+ <p1 x="220" y="220"/>
+ <p2 x="220" y="360"/>
+ </wire>
+ <wire>
<p1 x="-160" y="220"/>
<p2 x="-160" y="240"/>
</wire>
diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig
index 5c56552..540e64d 100644
--- a/digital/atk16_mem.dig
+++ b/digital/atk16_mem.dig
@@ -67,7 +67,7 @@
</entry>
<entry>
<string>Data</string>
- <data>4014,2a00,6014,13*8000,4*15,8000,4055,f000,400a,9e00,1fe0,3178
+ <data>4014,2a00,6015,13*8000,4*16,8010,0,4855,e000,400a,9e00,1fe0,3178
,1b48,6001,f000,3148,1b48,3150,1b48,1011,860a,3158,1b48,4200,4401
,650,1280,14c0,1009,8408,61fa,1b49,2540,1b49,2340,1b49,2f40,51c0
,10c0,1b49,2740,1b49,2540,1b49,2340,1b49,2f40,51c0</data>
diff --git a/digital/atk16_ucode_addr.dig b/digital/atk16_ucode_addr.dig
new file mode 100644
index 0000000..682c90e
--- /dev/null
+++ b/digital/atk16_ucode_addr.dig
@@ -0,0 +1,741 @@
+<?xml version="1.0" encoding="utf-8"?>
+<circuit>
+ <version>2</version>
+ <attributes>
+ <entry>
+ <string>romContent</string>
+ <romList>
+ <roms/>
+ </romList>
+ </entry>
+ <entry>
+ <string>Width</string>
+ <int>6</int>
+ </entry>
+ </attributes>
+ <visualElements>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Flag selector from instruction</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>FLAG_S</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="300" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Flag register output value</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>FR_Q</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="300" y="380"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>OPCODE</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>OP</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="300" y="260"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>OP</string>
+ </entry>
+ </elementAttributes>
+ <pos x="320" y="260"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>FLAG_S</string>
+ </entry>
+ </elementAttributes>
+ <pos x="320" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>FR_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="320" y="380"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Microsequencer value</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>US_Q</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="300" y="200"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>US_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="320" y="200"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Interrupt request bus</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>IRQ</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>4</int>
+ </entry>
+ </elementAttributes>
+ <pos x="300" y="440"/>
+ </visualElement>
+ <visualElement>
+ <elementName>PriorityEncoder</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Selector Bits</string>
+ <int>2</int>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>Interrupts</string>
+ </entry>
+ </elementAttributes>
+ <pos x="360" y="540"/>
+ </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="320" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Multiplexer</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>5</int>
+ </entry>
+ </elementAttributes>
+ <pos x="740" y="420"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>3,5</string>
+ </entry>
+ </elementAttributes>
+ <pos x="820" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>US_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="760" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>ADDR</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>8</int>
+ </entry>
+ </elementAttributes>
+ <pos x="1020" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes/>
+ <pos x="700" y="600"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>OP</string>
+ </entry>
+ </elementAttributes>
+ <pos x="640" y="420"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>1,4</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>5</string>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>FC</string>
+ </entry>
+ </elementAttributes>
+ <pos x="640" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>2,3</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>5</string>
+ </entry>
+ </elementAttributes>
+ <pos x="680" y="460"/>
+ </visualElement>
+ <visualElement>
+ <elementName>BitSelector</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Selector Bits</string>
+ <int>2</int>
+ </entry>
+ </elementAttributes>
+ <pos x="520" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>FLAG_S</string>
+ </entry>
+ </elementAttributes>
+ <pos x="520" y="340"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ <entry>
+ <string>Input Splitting</string>
+ <string>3</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>2,</string>
+ </entry>
+ </elementAttributes>
+ <pos x="540" y="340"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>FR_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="500" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>NetName</string>
+ <string>FC</string>
+ </entry>
+ </elementAttributes>
+ <pos x="560" y="280"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Interrupt number</string>
+ </entry>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>IT_N</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>2</int>
+ </entry>
+ </elementAttributes>
+ <pos x="580" y="380"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Out</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>INT_ACTIVE</string>
+ </entry>
+ </elementAttributes>
+ <pos x="1000" y="500"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Interrupt mask assert active</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>IM_EN</string>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="700"/>
+ </visualElement>
+ <visualElement>
+ <elementName>In</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Description</string>
+ <string>Interrupt mask assert not active</string>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>IM_DS</string>
+ </entry>
+ </elementAttributes>
+ <pos x="460" y="740"/>
+ </visualElement>
+ <visualElement>
+ <elementName>RS_FF_AS</elementName>
+ <elementAttributes>
+ <entry>
+ <string>valueIsProbe</string>
+ <boolean>true</boolean>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>INT MASK</string>
+ </entry>
+ </elementAttributes>
+ <pos x="520" y="700"/>
+ </visualElement>
+ <visualElement>
+ <elementName>D_FF</elementName>
+ <elementAttributes/>
+ <pos x="780" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Comparator</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="600" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Const</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Value</string>
+ <long>0</long>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="580" y="560"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>US_Q</string>
+ </entry>
+ </elementAttributes>
+ <pos x="580" y="540"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Const</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Value</string>
+ <long>6</long>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ <entry>
+ <string>intFormat</string>
+ <intFormat>bin</intFormat>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="480"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Register</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Label</string>
+ <string>INT LINE</string>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>2</int>
+ </entry>
+ </elementAttributes>
+ <pos x="500" y="440"/>
+ </visualElement>
+ <visualElement>
+ <elementName>VDD</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ </elementAttributes>
+ <pos x="440" y="480"/>
+ </visualElement>
+ </visualElements>
+ <wires>
+ <wire>
+ <p1 x="300" y="320"/>
+ <p2 x="320" y="320"/>
+ </wire>
+ <wire>
+ <p1 x="680" y="640"/>
+ <p2 x="700" y="640"/>
+ </wire>
+ <wire>
+ <p1 x="660" y="480"/>
+ <p2 x="680" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="480"/>
+ <p2 x="500" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="260"/>
+ <p2 x="320" y="260"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="580"/>
+ <p2 x="360" y="580"/>
+ </wire>
+ <wire>
+ <p1 x="700" y="420"/>
+ <p2 x="740" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="640" y="420"/>
+ <p2 x="660" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="740"/>
+ <p2 x="480" y="740"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="200"/>
+ <p2 x="320" y="200"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="520"/>
+ <p2 x="680" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="800" y="300"/>
+ <p2 x="820" y="300"/>
+ </wire>
+ <wire>
+ <p1 x="700" y="460"/>
+ <p2 x="740" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="460"/>
+ <p2 x="580" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="460"/>
+ <p2 x="500" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="460"/>
+ <p2 x="680" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="560"/>
+ <p2 x="360" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="560"/>
+ <p2 x="480" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="660" y="560"/>
+ <p2 x="680" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="560"/>
+ <p2 x="600" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="680" y="560"/>
+ <p2 x="780" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="640" y="400"/>
+ <p2 x="660" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="680" y="400"/>
+ <p2 x="700" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="720"/>
+ <p2 x="520" y="720"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="720"/>
+ <p2 x="680" y="720"/>
+ </wire>
+ <wire>
+ <p1 x="520" y="340"/>
+ <p2 x="540" y="340"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="500"/>
+ <p2 x="860" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="860" y="500"/>
+ <p2 x="1000" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="600"/>
+ <p2 x="360" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="600"/>
+ <p2 x="700" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="440"/>
+ <p2 x="320" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="780" y="440"/>
+ <p2 x="800" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="440"/>
+ <p2 x="500" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="280"/>
+ <p2 x="820" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="840" y="280"/>
+ <p2 x="1020" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="500" y="280"/>
+ <p2 x="520" y="280"/>
+ </wire>
+ <wire>
+ <p1 x="300" y="380"/>
+ <p2 x="320" y="380"/>
+ </wire>
+ <wire>
+ <p1 x="340" y="540"/>
+ <p2 x="360" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="540"/>
+ <p2 x="780" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="840" y="540"/>
+ <p2 x="860" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="540"/>
+ <p2 x="600" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="540"/>
+ <p2 x="460" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="700"/>
+ <p2 x="520" y="700"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="440"/>
+ <p2 x="320" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="800" y="300"/>
+ <p2 x="800" y="440"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="720"/>
+ <p2 x="480" y="740"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="560"/>
+ <p2 x="480" y="600"/>
+ </wire>
+ <wire>
+ <p1 x="480" y="460"/>
+ <p2 x="480" y="520"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="380"/>
+ <p2 x="580" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="460"/>
+ <p2 x="760" y="500"/>
+ </wire>
+ <wire>
+ <p1 x="760" y="540"/>
+ <p2 x="760" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="680" y="640"/>
+ <p2 x="680" y="720"/>
+ </wire>
+ <wire>
+ <p1 x="680" y="520"/>
+ <p2 x="680" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="700" y="400"/>
+ <p2 x="700" y="420"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="300"/>
+ <p2 x="540" y="320"/>
+ </wire>
+ <wire>
+ <p1 x="860" y="500"/>
+ <p2 x="860" y="540"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="440"/>
+ <p2 x="460" y="540"/>
+ </wire>
+ </wires>
+ <measurementOrdering/>
+</circuit> \ No newline at end of file
diff --git a/src/asm_ops.py b/src/asm_ops.py
index 61e2caa..78ec356 100644
--- a/src/asm_ops.py
+++ b/src/asm_ops.py
@@ -109,6 +109,11 @@ def make_lpc(meta: Meta, symbols: Symbols, target: str) -> int:
(target_e << 9)
return word
+def make_rti(meta: Meta, symbols: Symbols) -> int:
+ """RTI 1110 XXXX XXXX XXXX"""
+ word = (0b1110 << 12)
+ return word
+
def make_hlt(meta: Meta, symbols: Symbols) -> int:
"""HLT 1111 XXXX XXXX XXXX"""
word = (0b1111 << 12)
@@ -126,6 +131,7 @@ operations: OpWordDict = {
"brr": make_brr,
"bri": make_bri,
"lpc": make_lpc,
+ "rti": make_rti,
"hlt": make_hlt,
}
@@ -147,6 +153,7 @@ default_expansions: OpExpansionDict = {
"brr": lambda *args: expand_id("brr", *args),
"bri": lambda *args: expand_id("bri", *args),
"lpc": lambda *args: expand_id("lpc", *args),
+ "rti": lambda *args: expand_id("rti", *args),
"hlt": lambda *args: expand_id("hlt", *args),
}
diff --git a/src/ucode.py b/src/ucode.py
index 1d050c8..07d0554 100755
--- a/src/ucode.py
+++ b/src/ucode.py
@@ -12,26 +12,34 @@ if len(sys.argv) != 2:
outfile_path = sys.argv[1]
-PC_CO = 0b0000_0000_0000_0001
-PC_IE = 0b0000_0000_0000_0010
-PC_OE = 0b0000_0000_0000_0100
-MAR_IE = 0b0000_0000_0000_1000
-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
-IR_IE = 0b0000_0010_0000_0000
-IM_M = 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
+PC_CO = 1 << 0
+PC_IE = 1 << 1
+PC_OE = 1 << 2
+MAR_IE = 1 << 3
+MEM_IE = 1 << 4
+MEM_OE = 1 << 5
+RW_IE = 1 << 6
+R1_OE = 1 << 7
+R2_OE = 1 << 8
+IR_IE = 1 << 9
+IM_M = 1 << 10
+LI_OE = 1 << 11
+ALU_OE = 1 << 12
+FR_IE = 1 << 13
+HALT = 1 << 14
+US_RS = 1 << 15
+ISRA_OE = 1 << 16
+IM_DS = 1 << 17
+IM_EN = 1 << 18
+IPC_IE = 1 << 19
+IPC_OE = 1 << 20
+NOP5 = 1 << 21
+NOP6 = 1 << 22
+NOP7 = 1 << 23
BRANCH_FLAG_STATES_N = 2
UCODE_N: int = 2**3
-CONTROL_WORD_SIZE = 2
+CONTROL_WORD_SIZE = 3
def not_branch(bs: list[int]) -> list[list[int]]:
return BRANCH_FLAG_STATES_N * [bs]
@@ -71,12 +79,12 @@ ucode = [
nop(),
# NOP 1011 XXXX XXXX XXXX
nop(),
- # NOP 1100 XXXX XXXX XXXX
- nop(),
- # NOP 1101 XXXX XXXX XXXX
- nop(),
- # NOP 1110 XXXX XXXX XXXX
- nop(),
+ # ISRP0 1100 XXXX XXXX XXXX
+ not_branch([IM_EN|PC_OE|IPC_IE, ISRA_OE|MAR_IE, MEM_OE|PC_IE, US_RS, 0, 0, 0, 0]),
+ # ISRP1 1101 XXXX XXXX XXXX
+ not_branch([IM_EN|PC_OE|IPC_IE, ISRA_OE|MAR_IE, MEM_OE|PC_IE, US_RS, 0, 0, 0, 0]),
+ # RTI 1110 XXXX XXXX XXXX
+ not_branch([*fetch, IM_DS|IPC_OE|PC_IE, US_RS, 0, 0, 0, 0]),
# HLT 1111 XXXX XXXX XXXX
not_branch([*fetch, HALT, 0, 0, 0, 0, 0]),
]