diff options
| -rw-r--r-- | asm/bootstrap.atk16 | 5 | ||||
| -rw-r--r-- | digital/atk16.dig | 1072 | ||||
| -rw-r--r-- | digital/atk16_mem.dig | 2 | ||||
| -rw-r--r-- | digital/atk16_ucode_addr.dig | 741 | ||||
| -rw-r--r-- | src/asm_ops.py | 7 | ||||
| -rwxr-xr-x | src/ucode.py | 54 |
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]), ] |
