aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-09 19:41:41 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-09 19:41:41 +0300
commitcdbb38ddd23c9f14efefd2ae11b04dbe965b3540 (patch)
treeda5a391934fd66727785d26a883f18af0d0458b1
parent5b6637fb92c54b8f367ec8751f53f6f238d8dbed (diff)
Add IM_M (immediate mode) control line
-rw-r--r--digital/atk16.dig92
-rw-r--r--digital/atk16_alu_inputs.dig34
-rw-r--r--digital/atk16_jump_unit.dig59
-rwxr-xr-xsrc/ucode.py8
4 files changed, 50 insertions, 143 deletions
diff --git a/digital/atk16.dig b/digital/atk16.dig
index 2716409..914baab 100644
--- a/digital/atk16.dig
+++ b/digital/atk16.dig
@@ -699,7 +699,7 @@
<elementAttributes>
<entry>
<string>NetName</string>
- <string>R2_OE</string>
+ <string>IM_M</string>
</entry>
</elementAttributes>
<pos x="920" y="160"/>
@@ -786,12 +786,12 @@
</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
+ <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3140,8000,4*0,c
+,221,3140,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
+,221,902,8000,4*0,c,221,902,8000,4*0,c,221,8000,5*0,c,221,82,8000
+,4*0,c,221,8000,5*0,c,221,902,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>
@@ -887,20 +887,6 @@
<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>
@@ -914,22 +900,12 @@
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>R2_OE</string>
- </entry>
- </elementAttributes>
- <pos x="460" y="-40"/>
- </visualElement>
- <visualElement>
- <elementName>Tunnel</elementName>
- <elementAttributes>
- <entry>
<string>rotation</string>
<rotation rotation="2"/>
</entry>
<entry>
<string>NetName</string>
- <string>OPCODE</string>
+ <string>IM_M</string>
</entry>
</elementAttributes>
<pos x="540" y="60"/>
@@ -968,7 +944,7 @@ program(0x4051, 0x40a2, 0x029b)
</entry>
<entry>
<string>NetName</string>
- <string>OPCODE</string>
+ <string>IM_M</string>
</entry>
</elementAttributes>
<pos x="-240" y="-200"/>
@@ -1052,10 +1028,6 @@ program(0x4051, 0x40a2, 0x029b)
<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>
@@ -1136,12 +1108,16 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="100" y="-80"/>
</wire>
<wire>
+ <p1 x="380" y="-80"/>
+ <p2 x="400" y="-80"/>
+ </wire>
+ <wire>
<p1 x="440" y="-80"/>
<p2 x="460" y="-80"/>
</wire>
<wire>
- <p1 x="380" y="-80"/>
- <p2 x="400" y="-80"/>
+ <p1 x="400" y="-80"/>
+ <p2 x="420" y="-80"/>
</wire>
<wire>
<p1 x="900" y="80"/>
@@ -1173,10 +1149,6 @@ program(0x4051, 0x40a2, 0x029b)
</wire>
<wire>
<p1 x="400" y="-20"/>
- <p2 x="500" y="-20"/>
- </wire>
- <wire>
- <p1 x="520" y="-20"/>
<p2 x="580" y="-20"/>
</wire>
<wire>
@@ -1300,7 +1272,7 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="920" y="-40"/>
</wire>
<wire>
- <p1 x="500" y="-40"/>
+ <p1 x="420" y="-40"/>
<p2 x="580" y="-40"/>
</wire>
<wire>
@@ -1392,16 +1364,8 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="-40" y="-60"/>
</wire>
<wire>
- <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="440" y="-60"/>
+ <p2 x="400" y="-60"/>
</wire>
<wire>
<p1 x="80" y="-60"/>
@@ -1440,22 +1404,22 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="420" y="340"/>
</wire>
<wire>
- <p1 x="420" y="-60"/>
- <p2 x="420" y="0"/>
+ <p1 x="420" y="-80"/>
+ <p2 x="420" y="-40"/>
</wire>
<wire>
<p1 x="100" y="-380"/>
<p2 x="100" y="-340"/>
</wire>
<wire>
- <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="100" y="-340"/>
+ <p2 x="100" y="-280"/>
+ </wire>
+ <wire>
<p1 x="200" y="-280"/>
<p2 x="200" y="-240"/>
</wire>
@@ -1476,10 +1440,6 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="40" y="300"/>
</wire>
<wire>
- <p1 x="520" y="-20"/>
- <p2 x="520" y="0"/>
- </wire>
- <wire>
<p1 x="-300" y="-400"/>
<p2 x="-300" y="-360"/>
</wire>
@@ -1500,7 +1460,7 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="400" y="-80"/>
</wire>
<wire>
- <p1 x="400" y="-80"/>
+ <p1 x="400" y="-60"/>
<p2 x="400" y="-20"/>
</wire>
<wire>
@@ -1516,14 +1476,6 @@ program(0x4051, 0x40a2, 0x029b)
<p2 x="500" y="-100"/>
</wire>
<wire>
- <p1 x="500" y="-40"/>
- <p2 x="500" y="-20"/>
- </wire>
- <wire>
- <p1 x="500" y="-100"/>
- <p2 x="500" y="-60"/>
- </wire>
- <wire>
<p1 x="180" y="-20"/>
<p2 x="180" y="0"/>
</wire>
diff --git a/digital/atk16_alu_inputs.dig b/digital/atk16_alu_inputs.dig
index 2ed5b74..310bafb 100644
--- a/digital/atk16_alu_inputs.dig
+++ b/digital/atk16_alu_inputs.dig
@@ -55,20 +55,6 @@
<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>
@@ -101,15 +87,11 @@
<elementAttributes>
<entry>
<string>Description</string>
- <string>Opcode</string>
+ <string>Immediate mode on?</string>
</entry>
<entry>
<string>Label</string>
- <string>OPCODE</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>4</int>
+ <string>IM_M</string>
</entry>
</elementAttributes>
<pos x="180" y="620"/>
@@ -189,14 +171,6 @@
<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>
@@ -217,6 +191,10 @@
<p2 x="220" y="540"/>
</wire>
<wire>
+ <p1 x="180" y="620"/>
+ <p2 x="280" y="620"/>
+ </wire>
+ <wire>
<p1 x="340" y="380"/>
<p2 x="340" y="460"/>
</wire>
diff --git a/digital/atk16_jump_unit.dig b/digital/atk16_jump_unit.dig
index 1156aae..4ccd266 100644
--- a/digital/atk16_jump_unit.dig
+++ b/digital/atk16_jump_unit.dig
@@ -59,44 +59,16 @@
<elementAttributes>
<entry>
<string>Description</string>
- <string>OPCODE</string>
+ <string>Immediate mode on?</string>
</entry>
<entry>
<string>Label</string>
- <string>OPCODE</string>
- </entry>
- <entry>
- <string>Bits</string>
- <int>4</int>
+ <string>IM_M</string>
</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>
@@ -145,14 +117,19 @@
<entry>
<string>Testdata</string>
<testData>
- <dataString>PC ADDR OPCODE PC_RES
-10 20 0b0101 20
-10 20 0b0110 30</dataString>
+ <dataString>PC ADDR IM_M PC_RES
+10 20 0 20
+10 20 1 30</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="180" y="620"/>
</visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes/>
+ <pos x="200" y="460"/>
+ </visualElement>
</visualElements>
<wires>
<wire>
@@ -172,14 +149,6 @@
<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>
@@ -196,6 +165,14 @@
<p2 x="400" y="380"/>
</wire>
<wire>
+ <p1 x="180" y="460"/>
+ <p2 x="200" y="460"/>
+ </wire>
+ <wire>
+ <p1 x="240" y="460"/>
+ <p2 x="420" y="460"/>
+ </wire>
+ <wire>
<p1 x="420" y="380"/>
<p2 x="420" y="460"/>
</wire>
diff --git a/src/ucode.py b/src/ucode.py
index 3c34a71..a847a35 100755
--- a/src/ucode.py
+++ b/src/ucode.py
@@ -20,7 +20,7 @@ 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 # needed?
+IM_M = 0b0000_0001_0000_0000
IR_IE = 0b0000_0010_0000_0000
unused = 0b0000_0100_0000_0000
LI_OE = 0b0000_1000_0000_0000
@@ -48,7 +48,7 @@ ucode = [
# ALR 0000 TTTL LLRR RSSS
not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]),
# ALI 0001 TTTL LLII ISSS
- not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]),
+ not_branch([*fetch, IM_M|ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]),
# LDR 0010 TTTR RRXX XXXX
not_branch([*fetch, R1_OE|MAR_IE, MEM_OE|RW_IE, US_RS, 0, 0, 0]),
# STR 0011 TTTR RRXX XXXX
@@ -58,13 +58,13 @@ ucode = [
# JPR 0101 XXXR RRXX XXXX
not_branch([*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]),
# JPI 0110 XXXI IIII IIII
- not_branch([*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]),
+ not_branch([*fetch, IM_M|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, 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]),
+ [*fetch, IM_M|LI_OE|PC_IE, US_RS, 0, 0, 0, 0]),
# NOP 1001 XXXX XXXX XXXX
nop(),
# NOP 1010 XXXX XXXX XXXX