diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 19:41:41 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 19:41:41 +0300 |
| commit | cdbb38ddd23c9f14efefd2ae11b04dbe965b3540 (patch) | |
| tree | da5a391934fd66727785d26a883f18af0d0458b1 | |
| parent | 5b6637fb92c54b8f367ec8751f53f6f238d8dbed (diff) | |
Add IM_M (immediate mode) control line
| -rw-r--r-- | digital/atk16.dig | 92 | ||||
| -rw-r--r-- | digital/atk16_alu_inputs.dig | 34 | ||||
| -rw-r--r-- | digital/atk16_jump_unit.dig | 59 | ||||
| -rwxr-xr-x | src/ucode.py | 8 |
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 |
