tisc

tiny instruction set computer
Log | Files | Refs | README

commit 88e45b8d5edfb9cdd5463a446d2ccb06c0be1567
parent 5a3d614a22d5710ec2554ad434226479dc638388
Author: Paul Longtine <paul@nanner.co>
Date:   Sun, 17 Jan 2021 02:47:31 -0500

Multiplexed what was the ADD instruction to use the set operation for compare.

This allowed the bytecode to pack in more types of operations, like left shift and right shift, xor, xnor, and subtract.

Adjusted documentation accordingly

Diffstat:
MCPU/CPU.circ | 3194++++++++++++++++++++++++++++++++++++++++++-------------------------------------
DCPU/logism.jar | 0
MExamplePrograms/README.md | 81++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
MExamplePrograms/fibb_test.tac | 29+++++++++++++++++------------
MExamplePrograms/test_compare.tac | 10+++++-----
MExamplePrograms/typing_test.tac | 33+++++++++++++++++++++++++--------
MExamplePrograms/weird_loop_test.tac | 5++---
MINSTRUCTION_SET | 40++++++++++++++++++++++------------------
MREADME.md | 34++++++++++++++++++++++++++--------
DScreenshots/tiscv1_2.png | 0
AScreenshots/tiscv1_3.png | 0
AScreenshots/tiscv1_3_example.png | 0
Mtisc.c | 22++++++++++++++++------
13 files changed, 1871 insertions(+), 1577 deletions(-)

diff --git a/CPU/CPU.circ b/CPU/CPU.circ @@ -70,7 +70,7 @@ <path d="M53,12 Q57,22 61,12" fill="none" stroke="#808080" stroke-width="2"/> <rect fill="none" height="137" stroke="#000000" stroke-width="2" width="120" x="40" y="11"/> <rect fill="#707070" height="137" stroke="#000000" width="120" x="40" y="10"/> - <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="101" y="126">tisc v1.2</text> + <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="101" y="126">tisc v1.3</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="152" y="44">IO ENABLE</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="151" y="62">INPUT</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="153" y="82">ADDRESS</text> @@ -94,8 +94,8 @@ <wire from="(330,200)" to="(440,200)"/> <wire from="(440,200)" to="(440,230)"/> <wire from="(220,130)" to="(220,220)"/> - <wire from="(260,220)" to="(260,250)"/> <wire from="(140,110)" to="(180,110)"/> + <wire from="(260,220)" to="(260,250)"/> <wire from="(270,360)" to="(310,360)"/> <wire from="(220,100)" to="(220,130)"/> <wire from="(230,250)" to="(260,250)"/> @@ -188,29 +188,46 @@ <wire from="(210,110)" to="(210,230)"/> <wire from="(210,230)" to="(210,350)"/> <wire from="(350,440)" to="(480,440)"/> + <comp loc="(200,90)" name="STK"/> + <comp loc="(280,150)" name="GPR"/> <comp lib="0" loc="(290,340)" name="Constant"> <a name="facing" val="north"/> </comp> - <comp lib="4" loc="(380,300)" name="RAM"> - <a name="bus" val="separate"/> + <comp lib="0" loc="(480,320)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="label" val="IO ACTIVE"/> + <a name="labelloc" val="east"/> </comp> - <comp loc="(260,130)" name="ALU"/> - <comp lib="6" loc="(303,244)" name="Text"> - <a name="text" val="TISCv1.2"/> - <a name="font" val="Dialog plain 14"/> + <comp lib="1" loc="(270,360)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(480,440)" name="Pin"> + <comp loc="(160,210)" name="PC"/> + <comp lib="6" loc="(290,239)" name="Text"/> + <comp lib="0" loc="(480,420)" name="Pin"> <a name="facing" val="west"/> <a name="tristate" val="false"/> <a name="pull" val="down"/> - <a name="label" val="RST"/> + <a name="label" val="CLK"/> <a name="labelloc" val="east"/> </comp> - <comp loc="(200,90)" name="STK"/> - <comp lib="2" loc="(290,80)" name="Multiplexer"> - <a name="select" val="2"/> + <comp loc="(260,130)" name="ALU"/> + <comp lib="0" loc="(420,400)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> <a name="width" val="8"/> - <a name="enable" val="false"/> + <a name="tristate" val="false"/> + <a name="pull" val="down"/> + <a name="label" val="OUT"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="0" loc="(480,340)" name="Pin"> + <a name="facing" val="west"/> + <a name="tristate" val="false"/> + <a name="pull" val="down"/> + <a name="label" val="IO ENABLE"/> + <a name="labelloc" val="east"/> </comp> <comp lib="0" loc="(420,360)" name="Pin"> <a name="facing" val="west"/> @@ -220,12 +237,16 @@ <a name="label" val="IN"/> <a name="labelloc" val="east"/> </comp> - <comp loc="(160,210)" name="PC"/> - <comp lib="6" loc="(290,239)" name="Text"/> - <comp loc="(230,170)" name="ISD"/> - <comp lib="1" loc="(270,360)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(480,440)" name="Pin"> + <a name="facing" val="west"/> + <a name="tristate" val="false"/> + <a name="pull" val="down"/> + <a name="label" val="RST"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="6" loc="(303,244)" name="Text"> + <a name="text" val="TISCv1.3"/> + <a name="font" val="Dialog plain 14"/> </comp> <comp lib="1" loc="(400,240)" name="AND Gate"> <a name="facing" val="west"/> @@ -233,20 +254,10 @@ <a name="inputs" val="2"/> <a name="negate0" val="true"/> </comp> - <comp lib="0" loc="(480,320)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="label" val="IO ACTIVE"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="0" loc="(420,400)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> + <comp lib="2" loc="(290,80)" name="Multiplexer"> + <a name="select" val="2"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="pull" val="down"/> - <a name="label" val="OUT"/> - <a name="labelloc" val="east"/> + <a name="enable" val="false"/> </comp> <comp lib="2" loc="(170,280)" name="Multiplexer"> <a name="facing" val="south"/> @@ -254,21 +265,8 @@ <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(480,420)" name="Pin"> - <a name="facing" val="west"/> - <a name="tristate" val="false"/> - <a name="pull" val="down"/> - <a name="label" val="CLK"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="0" loc="(420,380)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="pull" val="down"/> - <a name="label" val="ADDR"/> - <a name="labelloc" val="east"/> + <comp lib="4" loc="(380,300)" name="RAM"> + <a name="bus" val="separate"/> </comp> <comp lib="2" loc="(360,220)" name="Multiplexer"> <a name="facing" val="north"/> @@ -276,14 +274,16 @@ <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp loc="(280,150)" name="GPR"/> - <comp lib="0" loc="(480,340)" name="Pin"> + <comp lib="0" loc="(420,380)" name="Pin"> <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="width" val="8"/> <a name="tristate" val="false"/> <a name="pull" val="down"/> - <a name="label" val="IO ENABLE"/> + <a name="label" val="ADDR"/> <a name="labelloc" val="east"/> </comp> + <comp loc="(230,170)" name="ISD"/> </circuit> <circuit name="ALU"> <a name="circuit" val="ALU"/> @@ -294,25 +294,31 @@ <path d="M61,51 Q65,61 69,51" fill="none" stroke="#808080" stroke-width="2"/> <rect fill="none" height="30" stroke="#000000" stroke-width="2" width="30" x="50" y="50"/> <text font-family="SansSerif" font-size="12" text-anchor="middle" x="64" y="72">ALU</text> - <circ-port height="10" pin="650,320" width="10" x="45" y="55"/> - <circ-port height="8" pin="500,380" width="8" x="66" y="76"/> - <circ-port height="8" pin="580,130" width="8" x="76" y="56"/> - <circ-port height="8" pin="710,130" width="8" x="76" y="66"/> - <circ-port height="10" pin="310,890" width="10" x="55" y="75"/> + <circ-port height="10" pin="530,280" width="10" x="45" y="55"/> + <circ-port height="8" pin="510,390" width="8" x="66" y="76"/> + <circ-port height="8" pin="570,40" width="8" x="76" y="56"/> + <circ-port height="8" pin="700,40" width="8" x="76" y="66"/> + <circ-port height="10" pin="320,890" width="10" x="55" y="75"/> <circ-port height="8" pin="500,550" width="8" x="76" y="76"/> - <circ-port height="8" pin="500,470" width="8" x="46" y="76"/> + <circ-port height="8" pin="490,460" width="8" x="46" y="76"/> <circ-anchor facing="east" height="6" width="6" x="77" y="57"/> </appear> <wire from="(760,280)" to="(760,290)"/> <wire from="(320,270)" to="(320,340)"/> + <wire from="(820,100)" to="(870,100)"/> + <wire from="(690,530)" to="(740,530)"/> + <wire from="(1010,210)" to="(1010,220)"/> <wire from="(190,670)" to="(190,680)"/> <wire from="(200,360)" to="(200,370)"/> <wire from="(340,100)" to="(390,100)"/> + <wire from="(550,340)" to="(800,340)"/> <wire from="(340,580)" to="(340,590)"/> + <wire from="(590,220)" to="(590,290)"/> <wire from="(270,750)" to="(270,770)"/> <wire from="(840,280)" to="(840,820)"/> <wire from="(340,340)" to="(340,360)"/> - <wire from="(310,870)" to="(310,890)"/> + <wire from="(1070,70)" to="(1070,840)"/> + <wire from="(870,70)" to="(870,100)"/> <wire from="(190,110)" to="(190,130)"/> <wire from="(200,280)" to="(200,300)"/> <wire from="(180,290)" to="(180,380)"/> @@ -322,8 +328,12 @@ <wire from="(290,290)" to="(290,320)"/> <wire from="(220,780)" to="(220,810)"/> <wire from="(260,610)" to="(260,700)"/> + <wire from="(760,520)" to="(760,540)"/> <wire from="(150,650)" to="(180,650)"/> + <wire from="(870,100)" to="(890,100)"/> + <wire from="(550,20)" to="(570,20)"/> <wire from="(320,270)" to="(340,270)"/> + <wire from="(800,110)" to="(800,210)"/> <wire from="(320,430)" to="(340,430)"/> <wire from="(730,270)" to="(760,270)"/> <wire from="(190,140)" to="(210,140)"/> @@ -341,17 +351,19 @@ <wire from="(200,480)" to="(210,480)"/> <wire from="(200,720)" to="(210,720)"/> <wire from="(220,420)" to="(230,420)"/> - <wire from="(530,410)" to="(540,410)"/> + <wire from="(570,330)" to="(570,380)"/> + <wire from="(880,120)" to="(890,120)"/> + <wire from="(780,100)" to="(790,100)"/> <wire from="(320,720)" to="(320,790)"/> <wire from="(190,400)" to="(190,410)"/> <wire from="(200,90)" to="(200,100)"/> - <wire from="(500,470)" to="(550,470)"/> <wire from="(340,550)" to="(390,550)"/> <wire from="(340,310)" to="(340,320)"/> <wire from="(270,480)" to="(270,500)"/> <wire from="(260,790)" to="(260,810)"/> <wire from="(340,70)" to="(340,90)"/> <wire from="(340,790)" to="(340,810)"/> + <wire from="(870,190)" to="(870,540)"/> <wire from="(190,560)" to="(190,580)"/> <wire from="(200,730)" to="(200,750)"/> <wire from="(140,140)" to="(140,230)"/> @@ -359,6 +371,8 @@ <wire from="(290,740)" to="(290,770)"/> <wire from="(260,340)" to="(260,430)"/> <wire from="(150,380)" to="(180,380)"/> + <wire from="(870,150)" to="(890,150)"/> + <wire from="(870,70)" to="(890,70)"/> <wire from="(320,160)" to="(340,160)"/> <wire from="(250,570)" to="(270,570)"/> <wire from="(320,720)" to="(340,720)"/> @@ -374,36 +388,46 @@ <wire from="(290,540)" to="(300,540)"/> <wire from="(330,580)" to="(340,580)"/> <wire from="(140,230)" to="(150,230)"/> + <wire from="(520,410)" to="(520,470)"/> <wire from="(200,210)" to="(210,210)"/> <wire from="(190,280)" to="(200,280)"/> <wire from="(220,150)" to="(230,150)"/> <wire from="(200,450)" to="(210,450)"/> <wire from="(830,280)" to="(840,280)"/> - <wire from="(690,540)" to="(700,540)"/> + <wire from="(880,170)" to="(890,170)"/> <wire from="(750,290)" to="(750,300)"/> + <wire from="(740,520)" to="(740,530)"/> + <wire from="(550,330)" to="(550,340)"/> <wire from="(320,450)" to="(320,520)"/> + <wire from="(810,190)" to="(810,200)"/> + <wire from="(590,220)" to="(960,220)"/> <wire from="(190,130)" to="(190,140)"/> <wire from="(200,540)" to="(200,550)"/> <wire from="(340,280)" to="(390,280)"/> <wire from="(340,760)" to="(340,770)"/> <wire from="(270,210)" to="(270,230)"/> <wire from="(340,520)" to="(340,540)"/> - <wire from="(320,820)" to="(320,840)"/> <wire from="(200,460)" to="(200,480)"/> <wire from="(190,290)" to="(190,310)"/> <wire from="(180,470)" to="(180,560)"/> <wire from="(140,590)" to="(140,680)"/> + <wire from="(850,150)" to="(850,170)"/> <wire from="(220,510)" to="(220,600)"/> <wire from="(260,70)" to="(260,160)"/> <wire from="(290,470)" to="(290,500)"/> <wire from="(300,720)" to="(300,750)"/> + <wire from="(1020,160)" to="(1020,180)"/> <wire from="(150,110)" to="(180,110)"/> - <wire from="(500,380)" to="(530,380)"/> + <wire from="(1000,90)" to="(1020,90)"/> + <wire from="(520,410)" to="(540,410)"/> + <wire from="(510,390)" to="(540,390)"/> <wire from="(740,310)" to="(760,310)"/> + <wire from="(930,160)" to="(1020,160)"/> <wire from="(320,610)" to="(340,610)"/> <wire from="(320,450)" to="(340,450)"/> <wire from="(130,660)" to="(150,660)"/> <wire from="(130,180)" to="(150,180)"/> + <wire from="(850,170)" to="(880,170)"/> <wire from="(190,320)" to="(210,320)"/> <wire from="(190,560)" to="(210,560)"/> <wire from="(250,300)" to="(270,300)"/> @@ -416,11 +440,15 @@ <wire from="(200,180)" to="(210,180)"/> <wire from="(200,660)" to="(210,660)"/> <wire from="(220,600)" to="(230,600)"/> + <wire from="(790,210)" to="(800,210)"/> <wire from="(320,180)" to="(320,250)"/> <wire from="(650,320)" to="(650,330)"/> + <wire from="(820,90)" to="(820,100)"/> <wire from="(200,270)" to="(200,280)"/> <wire from="(190,580)" to="(190,590)"/> + <wire from="(520,470)" to="(710,470)"/> <wire from="(340,730)" to="(390,730)"/> + <wire from="(800,210)" to="(800,340)"/> <wire from="(340,490)" to="(340,500)"/> <wire from="(270,660)" to="(270,680)"/> <wire from="(340,250)" to="(340,270)"/> @@ -434,6 +462,7 @@ <wire from="(290,200)" to="(290,230)"/> <wire from="(260,520)" to="(260,610)"/> <wire from="(150,560)" to="(180,560)"/> + <wire from="(550,380)" to="(550,420)"/> <wire from="(320,180)" to="(340,180)"/> <wire from="(250,750)" to="(270,750)"/> <wire from="(320,340)" to="(340,340)"/> @@ -445,6 +474,7 @@ <wire from="(290,720)" to="(300,720)"/> <wire from="(290,240)" to="(300,240)"/> <wire from="(280,470)" to="(290,470)"/> + <wire from="(570,270)" to="(640,270)"/> <wire from="(330,760)" to="(340,760)"/> <wire from="(140,410)" to="(150,410)"/> <wire from="(200,630)" to="(210,630)"/> @@ -456,8 +486,11 @@ <wire from="(320,630)" to="(320,700)"/> <wire from="(190,310)" to="(190,320)"/> <wire from="(200,720)" to="(200,730)"/> + <wire from="(1000,110)" to="(1000,180)"/> <wire from="(340,460)" to="(390,460)"/> + <wire from="(340,870)" to="(710,870)"/> <wire from="(340,220)" to="(340,230)"/> + <wire from="(320,840)" to="(320,850)"/> <wire from="(270,390)" to="(270,410)"/> <wire from="(340,700)" to="(340,720)"/> <wire from="(190,470)" to="(190,490)"/> @@ -466,9 +499,12 @@ <wire from="(180,650)" to="(180,740)"/> <wire from="(300,180)" to="(300,210)"/> <wire from="(290,650)" to="(290,680)"/> + <wire from="(800,340)" to="(800,490)"/> <wire from="(260,250)" to="(260,340)"/> + <wire from="(700,20)" to="(700,40)"/> <wire from="(150,290)" to="(180,290)"/> <wire from="(570,400)" to="(590,400)"/> + <wire from="(550,380)" to="(570,380)"/> <wire from="(250,480)" to="(270,480)"/> <wire from="(320,790)" to="(340,790)"/> <wire from="(320,630)" to="(340,630)"/> @@ -485,15 +521,14 @@ <wire from="(200,360)" to="(210,360)"/> <wire from="(200,120)" to="(210,120)"/> <wire from="(220,780)" to="(230,780)"/> - <wire from="(700,540)" to="(700,850)"/> + <wire from="(880,120)" to="(880,170)"/> + <wire from="(640,320)" to="(650,320)"/> <wire from="(710,320)" to="(710,330)"/> - <wire from="(530,380)" to="(530,390)"/> <wire from="(320,360)" to="(320,430)"/> <wire from="(190,760)" to="(190,770)"/> <wire from="(200,450)" to="(200,460)"/> <wire from="(340,190)" to="(390,190)"/> <wire from="(650,330)" to="(710,330)"/> - <wire from="(530,410)" to="(530,480)"/> <wire from="(340,670)" to="(340,680)"/> <wire from="(300,70)" to="(300,90)"/> <wire from="(270,120)" to="(270,140)"/> @@ -505,10 +540,13 @@ <wire from="(220,420)" to="(220,510)"/> <wire from="(290,380)" to="(290,410)"/> <wire from="(300,630)" to="(300,660)"/> + <wire from="(570,20)" to="(570,40)"/> <wire from="(260,700)" to="(260,790)"/> - <wire from="(710,480)" to="(710,500)"/> <wire from="(150,740)" to="(180,740)"/> + <wire from="(570,290)" to="(590,290)"/> + <wire from="(1060,70)" to="(1070,70)"/> <wire from="(730,290)" to="(750,290)"/> + <wire from="(930,70)" to="(1020,70)"/> <wire from="(320,520)" to="(340,520)"/> <wire from="(320,360)" to="(340,360)"/> <wire from="(730,280)" to="(760,280)"/> @@ -527,11 +565,13 @@ <wire from="(200,570)" to="(210,570)"/> <wire from="(220,510)" to="(230,510)"/> <wire from="(730,300)" to="(740,300)"/> - <wire from="(320,820)" to="(840,820)"/> + <wire from="(960,220)" to="(1010,220)"/> <wire from="(730,310)" to="(730,320)"/> <wire from="(320,90)" to="(320,160)"/> + <wire from="(490,460)" to="(550,460)"/> <wire from="(140,70)" to="(140,140)"/> - <wire from="(530,480)" to="(710,480)"/> + <wire from="(870,190)" to="(990,190)"/> + <wire from="(750,490)" to="(800,490)"/> <wire from="(200,180)" to="(200,190)"/> <wire from="(190,490)" to="(190,500)"/> <wire from="(340,640)" to="(390,640)"/> @@ -539,6 +579,7 @@ <wire from="(270,570)" to="(270,590)"/> <wire from="(340,160)" to="(340,180)"/> <wire from="(220,70)" to="(220,150)"/> + <wire from="(710,520)" to="(710,870)"/> <wire from="(200,100)" to="(200,120)"/> <wire from="(190,650)" to="(190,670)"/> <wire from="(180,110)" to="(180,200)"/> @@ -556,6 +597,7 @@ <wire from="(130,300)" to="(150,300)"/> <wire from="(190,200)" to="(210,200)"/> <wire from="(190,680)" to="(210,680)"/> + <wire from="(690,540)" to="(760,540)"/> <wire from="(290,150)" to="(300,150)"/> <wire from="(290,630)" to="(300,630)"/> <wire from="(280,380)" to="(290,380)"/> @@ -565,28 +607,33 @@ <wire from="(200,300)" to="(210,300)"/> <wire from="(190,370)" to="(200,370)"/> <wire from="(200,540)" to="(210,540)"/> - <wire from="(530,390)" to="(540,390)"/> <wire from="(320,540)" to="(320,610)"/> <wire from="(190,220)" to="(190,230)"/> <wire from="(200,630)" to="(200,640)"/> <wire from="(340,370)" to="(390,370)"/> - <wire from="(330,850)" to="(700,850)"/> + <wire from="(960,90)" to="(960,220)"/> <wire from="(340,130)" to="(340,140)"/> <wire from="(270,300)" to="(270,320)"/> <wire from="(340,610)" to="(340,630)"/> <wire from="(190,380)" to="(190,400)"/> <wire from="(200,550)" to="(200,570)"/> + <wire from="(320,840)" to="(1070,840)"/> <wire from="(140,680)" to="(140,770)"/> <wire from="(180,560)" to="(180,650)"/> <wire from="(220,600)" to="(220,690)"/> + <wire from="(760,540)" to="(870,540)"/> <wire from="(290,560)" to="(290,590)"/> <wire from="(300,90)" to="(300,120)"/> - <wire from="(300,810)" to="(300,840)"/> + <wire from="(310,820)" to="(310,850)"/> <wire from="(260,160)" to="(260,250)"/> <wire from="(150,200)" to="(180,200)"/> + <wire from="(550,420)" to="(550,460)"/> <wire from="(500,550)" to="(530,550)"/> + <wire from="(680,20)" to="(700,20)"/> <wire from="(320,540)" to="(340,540)"/> <wire from="(320,700)" to="(340,700)"/> + <wire from="(310,820)" to="(840,820)"/> + <wire from="(300,810)" to="(300,850)"/> <wire from="(130,750)" to="(150,750)"/> <wire from="(130,270)" to="(150,270)"/> <wire from="(190,650)" to="(210,650)"/> @@ -598,64 +645,48 @@ <wire from="(330,400)" to="(340,400)"/> <wire from="(140,770)" to="(150,770)"/> <wire from="(190,100)" to="(200,100)"/> + <wire from="(930,110)" to="(1000,110)"/> <wire from="(220,690)" to="(230,690)"/> <wire from="(200,270)" to="(210,270)"/> <wire from="(200,750)" to="(210,750)"/> - <wire from="(550,420)" to="(550,470)"/> - <comp lib="0" loc="(130,720)" name="Tunnel"> + <wire from="(640,270)" to="(640,320)"/> + <wire from="(770,200)" to="(780,200)"/> + <wire from="(530,280)" to="(540,280)"/> + <wire from="(870,100)" to="(870,150)"/> + <comp lib="0" loc="(130,480)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b7"/> - </comp> - <comp lib="6" loc="(611,272)" name="Text"> - <a name="text" val="Output"/> + <a name="label" val="a4"/> </comp> - <comp lib="1" loc="(270,500)" name="AND Gate"> + <comp lib="1" loc="(330,760)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(140,70)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="!A"/> - </comp> - <comp lib="0" loc="(390,730)" name="Tunnel"> - <a name="label" val="o7"/> - </comp> - <comp lib="1" loc="(250,640)" name="NOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(510,390)" name="Pin"> + <a name="width" val="3"/> + <a name="tristate" val="false"/> </comp> - <comp lib="0" loc="(560,210)" name="Tunnel"> + <comp lib="0" loc="(550,60)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b7"/> - </comp> - <comp lib="1" loc="(830,280)" name="OR Gate"> - <a name="size" val="70"/> - <a name="inputs" val="8"/> + <a name="label" val="b1"/> </comp> - <comp lib="1" loc="(300,240)" name="AND Gate"> + <comp lib="1" loc="(330,580)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(250,550)" name="NOR Gate"> + <comp lib="1" loc="(300,780)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(130,390)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a3"/> - </comp> - <comp lib="0" loc="(130,630)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b6"/> - </comp> - <comp lib="1" loc="(300,180)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(330,400)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(190,730)" name="XOR Gate"> + <comp lib="1" loc="(310,240)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> @@ -663,326 +694,271 @@ <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(340,904)" name="Text"> - <a name="text" val="FLAG"/> + <comp lib="0" loc="(390,730)" name="Tunnel"> + <a name="label" val="o7"/> </comp> - <comp lib="1" loc="(270,410)" name="AND Gate"> + <comp lib="1" loc="(190,460)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(280,380)" name="OR Gate"> + <comp lib="0" loc="(670,270)" name="Tunnel"> + <a name="label" val="o3"/> + </comp> + <comp lib="0" loc="(550,50)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b0"/> + </comp> + <comp lib="2" loc="(540,280)" name="Multiplexer"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> + <comp lib="1" loc="(240,130)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(300,540)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(340,100)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(481,532)" name="Text"> - <a name="text" val="AUX OP"/> - </comp> - <comp lib="0" loc="(670,270)" name="Tunnel"> - <a name="label" val="o3"/> - </comp> - <comp lib="0" loc="(710,500)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="3"/> - <a name="incoming" val="3"/> - </comp> - <comp lib="1" loc="(190,580)" name="XOR Gate"> + <comp lib="1" loc="(190,490)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,210)" name="Tunnel"> + <comp lib="0" loc="(550,120)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a1"/> + <a name="label" val="b7"/> </comp> - <comp lib="0" loc="(340,70)" name="Tunnel"> + <comp lib="0" loc="(780,380)" name="Tunnel"> <a name="facing" val="south"/> - <a name="label" val="FC"/> + <a name="label" val="CI"/> </comp> - <comp lib="0" loc="(790,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="FC"/> + <comp lib="2" loc="(570,400)" name="Multiplexer"> + <a name="width" val="3"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(240,670)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(640,440)" name="Constant"/> + <comp lib="0" loc="(670,280)" name="Tunnel"> + <a name="label" val="o4"/> </comp> - <comp lib="1" loc="(330,310)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> + <comp lib="6" loc="(481,532)" name="Text"> + <a name="text" val="DYN OP"/> </comp> <comp lib="0" loc="(130,570)" name="Tunnel"> <a name="facing" val="east"/> <a name="label" val="a5"/> </comp> - <comp lib="1" loc="(240,130)" name="AND Gate"> + <comp lib="1" loc="(300,270)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(500,470)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="1" loc="(190,640)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="2" loc="(320,890)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="selloc" val="tr"/> + <a name="select" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(390,280)" name="Tunnel"> - <a name="label" val="o2"/> + <comp lib="0" loc="(390,370)" name="Tunnel"> + <a name="label" val="o3"/> </comp> - <comp lib="1" loc="(310,330)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(240,670)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,480)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a4"/> - </comp> - <comp lib="1" loc="(300,600)" name="AND Gate"> + <comp lib="1" loc="(300,510)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(560,190)" name="Tunnel"> + <comp lib="0" loc="(390,190)" name="Tunnel"> + <a name="label" val="o1"/> + </comp> + <comp lib="0" loc="(180,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="!B"/> + </comp> + <comp lib="0" loc="(550,90)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b5"/> + <a name="label" val="b4"/> </comp> - <comp lib="4" loc="(730,400)" name="ROM"> - <a name="addrWidth" val="3"/> - <a name="dataWidth" val="6"/> - <a name="contents">addr/data: 3 6 -8 3b 4 0 2 38 7 12 -</a> + <comp lib="0" loc="(650,320)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(240,580)" name="AND Gate"> + <comp lib="0" loc="(670,260)" name="Tunnel"> + <a name="label" val="o2"/> + </comp> + <comp lib="1" loc="(190,280)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(612,164)" name="Text"> + <comp lib="6" loc="(602,74)" name="Text"> <a name="text" val="Input B"/> </comp> - <comp lib="1" loc="(190,100)" name="XOR Gate"> + <comp lib="0" loc="(670,550)" name="Splitter"> + <a name="fanout" val="7"/> + <a name="incoming" val="7"/> + </comp> + <comp lib="1" loc="(300,360)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(488,363)" name="Text"> - <a name="text" val="OPCODE"/> + <comp lib="0" loc="(780,100)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="8"/> + <a name="label" val="A"/> </comp> - <comp lib="0" loc="(390,100)" name="Tunnel"> - <a name="label" val="o0"/> + <comp lib="0" loc="(710,320)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(310,150)" name="OR Gate"> + <comp lib="1" loc="(310,780)" name="OR Gate"> <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,120)" name="Tunnel"> + <comp lib="0" loc="(680,90)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a0"/> - </comp> - <comp lib="2" loc="(570,400)" name="Multiplexer"> - <a name="width" val="3"/> - <a name="enable" val="false"/> + <a name="label" val="a4"/> </comp> - <comp lib="1" loc="(250,100)" name="NOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="6" loc="(355,906)" name="Text"> + <a name="text" val="FLAG"/> </comp> - <comp lib="0" loc="(390,460)" name="Tunnel"> - <a name="label" val="o4"/> + <comp lib="0" loc="(320,890)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="tristate" val="false"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="1" loc="(310,690)" name="OR Gate"> + <comp lib="0" loc="(700,40)" name="Splitter"> <a name="facing" val="west"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="6" loc="(624,352)" name="Text"> - <a name="text" val="Opcodes"/> - </comp> - <comp lib="0" loc="(690,180)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a4"/> - </comp> - <comp lib="0" loc="(560,160)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b2"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="0" loc="(220,70)" name="Tunnel"> + <comp lib="1" loc="(300,450)" name="OR Gate"> <a name="facing" val="south"/> - <a name="label" val="OR"/> - </comp> - <comp lib="1" loc="(250,190)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(670,550)" name="Splitter"> - <a name="fanout" val="4"/> - <a name="incoming" val="4"/> + <comp lib="0" loc="(670,250)" name="Tunnel"> + <a name="label" val="o1"/> </comp> - <comp lib="1" loc="(280,740)" name="OR Gate"> + <comp lib="1" loc="(560,300)" name="AND Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(340,640)" name="XNOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(770,200)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="8"/> + <a name="label" val="B"/> </comp> - <comp lib="1" loc="(190,760)" name="XOR Gate"> + <comp lib="1" loc="(340,730)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(690,190)" name="Tunnel"> + <comp lib="0" loc="(680,100)" name="Tunnel"> <a name="facing" val="east"/> <a name="label" val="a5"/> </comp> - <comp lib="1" loc="(300,450)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="1" loc="(280,200)" name="OR Gate"> + <comp lib="1" loc="(250,370)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,750)" name="Tunnel"> + <comp lib="0" loc="(130,360)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a7"/> - </comp> - <comp lib="1" loc="(190,310)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="label" val="b3"/> </comp> - <comp lib="1" loc="(340,100)" name="XNOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="6" loc="(476,260)" name="Text"> + <a name="text" val="Output"/> </comp> - <comp lib="1" loc="(280,110)" name="OR Gate"> + <comp lib="1" loc="(330,490)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(690,200)" name="Tunnel"> + <comp lib="0" loc="(680,50)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a6"/> - </comp> - <comp lib="1" loc="(190,550)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(670,280)" name="Tunnel"> - <a name="label" val="o4"/> + <a name="label" val="a0"/> </comp> - <comp lib="1" loc="(270,590)" name="AND Gate"> + <comp lib="1" loc="(270,680)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(670,310)" name="Tunnel"> - <a name="label" val="o7"/> - </comp> - <comp lib="1" loc="(300,780)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> + <comp lib="0" loc="(680,20)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="8"/> + <a name="label" val="A"/> </comp> - <comp lib="0" loc="(580,130)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <comp lib="4" loc="(670,550)" name="ROM"> + <a name="addrWidth" val="4"/> + <a name="dataWidth" val="7"/> + <a name="contents">addr/data: 4 7 +3 7 9 a 6 4 30 50 +</a> </comp> - <comp lib="0" loc="(390,190)" name="Tunnel"> - <a name="label" val="o1"/> + <comp lib="0" loc="(500,550)" name="Pin"> + <a name="width" val="4"/> + <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(340,280)" name="XNOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(670,290)" name="Tunnel"> + <a name="label" val="o5"/> </comp> - <comp lib="1" loc="(280,560)" name="OR Gate"> + <comp lib="1" loc="(300,720)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(250,730)" name="NOR Gate"> + <comp lib="1" loc="(280,380)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(270,680)" name="AND Gate"> + <comp lib="1" loc="(270,140)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(310,890)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="tristate" val="false"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="0" loc="(560,150)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b1"/> - </comp> - <comp lib="0" loc="(560,180)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b4"/> - </comp> - <comp lib="0" loc="(710,130)" name="Splitter"> + <comp lib="1" loc="(310,600)" name="OR Gate"> <a name="facing" val="west"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - </comp> - <comp lib="1" loc="(300,330)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="0" loc="(690,160)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a2"/> - </comp> - <comp lib="0" loc="(500,380)" name="Pin"> - <a name="width" val="3"/> - <a name="tristate" val="false"/> </comp> <comp lib="0" loc="(130,540)" name="Tunnel"> <a name="facing" val="east"/> <a name="label" val="b5"/> </comp> - <comp lib="1" loc="(330,580)" name="AND Gate"> + <comp lib="1" loc="(240,400)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="0" loc="(650,320)" name="Pin"> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="labelloc" val="east"/> </comp> - <comp lib="1" loc="(190,460)" name="XOR Gate"> + <comp lib="1" loc="(190,400)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(310,870)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="selloc" val="tr"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(390,640)" name="Tunnel"> - <a name="label" val="o6"/> + <comp lib="1" loc="(280,740)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(640,440)" name="Constant"/> - <comp lib="1" loc="(340,190)" name="XNOR Gate"> + <comp lib="1" loc="(240,310)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="4" loc="(670,550)" name="ROM"> - <a name="addrWidth" val="4"/> - <a name="dataWidth" val="4"/> - <a name="contents">addr/data: 4 4 -7 3 9 a a -</a> + <comp lib="0" loc="(130,120)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a0"/> + </comp> + <comp lib="0" loc="(670,240)" name="Tunnel"> + <a name="label" val="o0"/> + </comp> + <comp lib="6" loc="(472,443)" name="Text"> + <a name="text" val="ALU STATE"/> + </comp> + <comp lib="0" loc="(340,850)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> </comp> <comp lib="0" loc="(730,400)" name="Splitter"> <a name="facing" val="north"/> @@ -990,129 +966,126 @@ <a name="incoming" val="6"/> <a name="appear" val="right"/> </comp> - <comp lib="1" loc="(330,400)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="1" loc="(190,370)" name="XOR Gate"> + <comp lib="1" loc="(250,550)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(690,170)" name="Tunnel"> + <comp lib="0" loc="(130,720)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a3"/> - </comp> - <comp lib="0" loc="(760,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="OR"/> + <a name="label" val="b7"/> </comp> - <comp lib="0" loc="(130,270)" name="Tunnel"> + <comp lib="0" loc="(680,70)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b2"/> - </comp> - <comp lib="0" loc="(750,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="!B"/> + <a name="label" val="a2"/> </comp> - <comp lib="1" loc="(190,190)" name="XOR Gate"> + <comp lib="1" loc="(270,320)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(670,260)" name="Tunnel"> - <a name="label" val="o2"/> + <comp lib="0" loc="(300,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="CI"/> </comp> - <comp lib="1" loc="(340,550)" name="XNOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(130,660)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a6"/> </comp> - <comp lib="1" loc="(300,270)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(190,670)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(560,200)" name="Tunnel"> + <comp lib="0" loc="(130,450)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b6"/> + <a name="label" val="b4"/> </comp> - <comp lib="1" loc="(190,490)" name="XOR Gate"> + <comp lib="1" loc="(270,410)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(300,810)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(830,280)" name="OR Gate"> + <a name="size" val="70"/> + <a name="inputs" val="8"/> + </comp> + <comp lib="1" loc="(250,190)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(240,310)" name="AND Gate"> + <comp lib="1" loc="(310,510)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(240,760)" name="AND Gate"> + <comp lib="1" loc="(330,130)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(670,290)" name="Tunnel"> - <a name="label" val="o5"/> - </comp> - <comp lib="0" loc="(500,550)" name="Pin"> - <a name="width" val="4"/> - <a name="tristate" val="false"/> + <comp lib="0" loc="(790,80)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(690,150)" name="Tunnel"> + <comp lib="0" loc="(130,750)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a1"/> + <a name="label" val="a7"/> </comp> - <comp lib="1" loc="(330,220)" name="AND Gate"> + <comp lib="1" loc="(190,730)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(240,400)" name="AND Gate"> + <comp lib="1" loc="(300,540)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(190,670)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(560,140)" name="Tunnel"> + <comp lib="0" loc="(130,270)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b0"/> + <a name="label" val="b2"/> </comp> - <comp lib="0" loc="(710,130)" name="Pin"> + <comp lib="0" loc="(570,40)" name="Splitter"> <a name="facing" val="west"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(310,600)" name="OR Gate"> - <a name="facing" val="west"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="6" loc="(498,373)" name="Text"> + <a name="text" val="STATIC OPCODE"/> </comp> - <comp lib="0" loc="(130,180)" name="Tunnel"> + <comp lib="0" loc="(550,100)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b1"/> + <a name="label" val="b5"/> </comp> - <comp lib="0" loc="(670,250)" name="Tunnel"> - <a name="label" val="o1"/> + <comp lib="0" loc="(740,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="!A"/> </comp> - <comp lib="1" loc="(270,320)" name="AND Gate"> + <comp lib="0" loc="(390,100)" name="Tunnel"> + <a name="label" val="o0"/> + </comp> + <comp lib="1" loc="(190,640)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(280,290)" name="OR Gate"> + <comp lib="1" loc="(300,330)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(780,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="CI"/> + <comp lib="0" loc="(680,80)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a3"/> + </comp> + <comp lib="0" loc="(810,200)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="1" loc="(190,550)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(690,140)" name="Tunnel"> + <comp lib="0" loc="(130,210)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a0"/> + <a name="label" val="a1"/> </comp> <comp lib="1" loc="(300,420)" name="AND Gate"> <a name="size" val="30"/> @@ -1122,235 +1095,401 @@ <comp lib="6" loc="(880,461)" name="Text"> <a name="text" val="OPCODES: 000: OR, 001: AND, 010: XOR, 011: ADD, 100: CIN, 101: NAND, 110: XNOR, 111: SUB"/> </comp> - <comp lib="0" loc="(390,370)" name="Tunnel"> - <a name="label" val="o3"/> - </comp> - <comp lib="1" loc="(300,360)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(240,580)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(650,320)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - </comp> - <comp lib="1" loc="(300,690)" name="AND Gate"> + <comp lib="1" loc="(190,310)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(270,230)" name="AND Gate"> + <comp lib="1" loc="(240,760)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="0" loc="(390,550)" name="Tunnel"> - <a name="label" val="o5"/> </comp> - <comp lib="1" loc="(330,130)" name="AND Gate"> + <comp lib="1" loc="(330,670)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="6" loc="(746,165)" name="Text"> - <a name="text" val="Input A"/> + <comp lib="0" loc="(220,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="OR"/> </comp> - <comp lib="1" loc="(310,240)" name="OR Gate"> + <comp lib="1" loc="(310,690)" name="OR Gate"> <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(190,280)" name="XOR Gate"> + <comp lib="1" loc="(280,650)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,360)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b3"/> - </comp> - <comp lib="0" loc="(690,210)" name="Tunnel"> + <comp lib="0" loc="(130,300)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a7"/> + <a name="label" val="a2"/> </comp> - <comp lib="0" loc="(670,240)" name="Tunnel"> - <a name="label" val="o0"/> + <comp lib="2" loc="(820,90)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(250,370)" name="NOR Gate"> + <comp lib="1" loc="(250,100)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,660)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a6"/> + <comp lib="0" loc="(670,310)" name="Tunnel"> + <a name="label" val="o7"/> </comp> - <comp lib="1" loc="(300,720)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(300,690)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(300,510)" name="AND Gate"> + <comp lib="0" loc="(390,460)" name="Tunnel"> + <a name="label" val="o4"/> + </comp> + <comp lib="1" loc="(190,220)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(240,490)" name="AND Gate"> + <comp lib="1" loc="(340,640)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(670,300)" name="Tunnel"> - <a name="label" val="o6"/> + <comp lib="6" loc="(736,75)" name="Text"> + <a name="text" val="Input A"/> </comp> - <comp lib="1" loc="(300,150)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> + <comp lib="3" loc="(930,70)" name="BitAdder"/> + <comp lib="0" loc="(340,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="FC"/> </comp> - <comp lib="1" loc="(340,370)" name="XNOR Gate"> + <comp lib="0" loc="(490,460)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="1" loc="(300,180)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(560,170)" name="Tunnel"> + <comp lib="0" loc="(550,110)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b3"/> + <a name="label" val="b6"/> </comp> - <comp lib="0" loc="(130,450)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b4"/> + <comp lib="3" loc="(930,110)" name="Shifter"/> + <comp lib="1" loc="(270,770)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(130,300)" name="Tunnel"> + <comp lib="0" loc="(680,60)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a2"/> + <a name="label" val="a1"/> </comp> - <comp lib="0" loc="(300,70)" name="Tunnel"> + <comp lib="0" loc="(330,850)" name="Constant"> <a name="facing" val="south"/> - <a name="label" val="CI"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(740,380)" name="Tunnel"> + <comp lib="0" loc="(390,640)" name="Tunnel"> + <a name="label" val="o6"/> + </comp> + <comp lib="1" loc="(750,490)" name="OR Gate"> + <a name="facing" val="north"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(770,380)" name="Tunnel"> <a name="facing" val="south"/> - <a name="label" val="!A"/> + <a name="label" val="CC"/> </comp> - <comp lib="6" loc="(472,453)" name="Text"> - <a name="text" val="COMPARE ENABLE"/> + <comp lib="1" loc="(250,730)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(240,220)" name="AND Gate"> + <comp lib="1" loc="(270,230)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(250,460)" name="NOR Gate"> + <comp lib="1" loc="(330,220)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(190,400)" name="XOR Gate"> + <comp lib="1" loc="(190,190)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(250,280)" name="NOR Gate"> + <comp lib="3" loc="(1060,80)" name="Comparator"> + <a name="width" val="4"/> + </comp> + <comp lib="1" loc="(340,370)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(270,140)" name="AND Gate"> + <comp lib="1" loc="(280,110)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(710,320)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <comp lib="1" loc="(280,560)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,670)" name="AND Gate"> + <comp lib="1" loc="(300,600)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(180,70)" name="Tunnel"> + <comp lib="0" loc="(710,470)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="3"/> + <a name="incoming" val="3"/> + </comp> + <comp lib="0" loc="(750,380)" name="Tunnel"> <a name="facing" val="south"/> <a name="label" val="!B"/> </comp> - <comp lib="1" loc="(190,130)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(780,180)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(580,130)" name="Pin"> - <a name="facing" val="west"/> + <comp lib="0" loc="(680,120)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a7"/> + </comp> + <comp lib="0" loc="(550,20)" name="Tunnel"> + <a name="facing" val="east"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> + <a name="label" val="B"/> </comp> <comp lib="0" loc="(260,70)" name="Tunnel"> <a name="facing" val="south"/> <a name="label" val="CC"/> </comp> - <comp lib="0" loc="(770,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="CC"/> + <comp lib="0" loc="(680,110)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a6"/> </comp> - <comp lib="1" loc="(270,770)" name="AND Gate"> + <comp lib="1" loc="(280,470)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(310,510)" name="OR Gate"> + <comp lib="1" loc="(310,330)" name="OR Gate"> <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(340,730)" name="XNOR Gate"> + <comp lib="0" loc="(760,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="OR"/> + </comp> + <comp lib="1" loc="(310,420)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(280,470)" name="OR Gate"> + <comp lib="0" loc="(570,40)" name="Pin"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(850,150)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="3"/> + <a name="incoming" val="3"/> + <a name="appear" val="right"/> + </comp> + <comp lib="1" loc="(190,370)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,490)" name="AND Gate"> + <comp lib="1" loc="(280,290)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(330,760)" name="AND Gate"> + <comp lib="1" loc="(330,310)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(310,780)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="0" loc="(130,630)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b6"/> + </comp> + <comp lib="1" loc="(270,500)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(310,420)" name="OR Gate"> + <comp lib="1" loc="(310,150)" name="OR Gate"> <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(190,220)" name="XOR Gate"> + <comp lib="1" loc="(190,130)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,90)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b0"/> + <comp lib="6" loc="(617,355)" name="Text"> + <a name="text" val="Opcodes"/> </comp> - <comp lib="1" loc="(300,630)" name="OR Gate"> + <comp lib="1" loc="(300,810)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(280,650)" name="OR Gate"> + <comp lib="1" loc="(300,240)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - </circuit> - <circuit name="GPR"> - <a name="circuit" val="GPR"/> - <a name="clabel" val=""/> - <a name="clabelup" val="east"/> - <a name="clabelfont" val="SansSerif plain 12"/> - <appear> - <rect fill="none" height="30" stroke="#000000" stroke-width="2" width="49" x="50" y="70"/> - <text font-family="SansSerif" font-size="12" text-anchor="middle" x="74" y="89">GPR</text> - <circ-port height="8" pin="100,90" width="8" x="86" y="96"/> - <circ-port height="8" pin="140,130" width="8" x="86" y="66"/> - <circ-port height="10" pin="140,230" width="10" x="45" y="75"/> - <circ-port height="10" pin="140,260" width="10" x="45" y="85"/> + <comp lib="0" loc="(390,280)" name="Tunnel"> + <a name="label" val="o2"/> + </comp> + <comp lib="1" loc="(240,220)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(190,580)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(340,550)" name="XNOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="4" loc="(730,400)" name="ROM"> + <a name="addrWidth" val="3"/> + <a name="dataWidth" val="6"/> + <a name="contents">addr/data: 3 6 +8 3b 4 0 2 38 7 12 +</a> + </comp> + <comp lib="1" loc="(250,640)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(710,520)" name="Splitter"> + <a name="facing" val="west"/> + <a name="appear" val="center"/> + </comp> + <comp lib="2" loc="(1010,210)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> + <comp lib="3" loc="(1000,90)" name="BitAdder"/> + <comp lib="0" loc="(130,390)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a3"/> + </comp> + <comp lib="1" loc="(240,490)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(190,760)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(670,300)" name="Tunnel"> + <a name="label" val="o6"/> + </comp> + <comp lib="1" loc="(280,200)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(300,150)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> + </comp> + <comp lib="0" loc="(550,80)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b3"/> + </comp> + <comp lib="1" loc="(250,280)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="2" loc="(810,190)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> + <comp lib="1" loc="(300,630)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(190,100)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(140,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="!A"/> + </comp> + <comp lib="0" loc="(550,70)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b2"/> + </comp> + <comp lib="1" loc="(340,280)" name="XNOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(340,190)" name="XNOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(530,280)" name="Pin"> + <a name="output" val="true"/> + <a name="width" val="8"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="0" loc="(790,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="FC"/> + </comp> + <comp lib="0" loc="(130,180)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b1"/> + </comp> + <comp lib="3" loc="(930,160)" name="Shifter"> + <a name="shift" val="lr"/> + </comp> + <comp lib="0" loc="(390,550)" name="Tunnel"> + <a name="label" val="o5"/> + </comp> + <comp lib="0" loc="(130,90)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b0"/> + </comp> + <comp lib="1" loc="(250,460)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(270,590)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> + </comp> + <comp lib="0" loc="(700,40)" name="Pin"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + </comp> + </circuit> + <circuit name="GPR"> + <a name="circuit" val="GPR"/> + <a name="clabel" val=""/> + <a name="clabelup" val="east"/> + <a name="clabelfont" val="SansSerif plain 12"/> + <appear> + <rect fill="none" height="30" stroke="#000000" stroke-width="2" width="49" x="50" y="70"/> + <text font-family="SansSerif" font-size="12" text-anchor="middle" x="74" y="89">GPR</text> + <circ-port height="8" pin="100,90" width="8" x="86" y="96"/> + <circ-port height="8" pin="140,130" width="8" x="86" y="66"/> + <circ-port height="10" pin="140,230" width="10" x="45" y="75"/> + <circ-port height="10" pin="140,260" width="10" x="45" y="85"/> <circ-port height="8" pin="150,340" width="8" x="56" y="96"/> <circ-port height="8" pin="240,340" width="8" x="66" y="96"/> <circ-port height="8" pin="110,60" width="8" x="56" y="66"/> @@ -1419,96 +1558,86 @@ <wire from="(180,250)" to="(190,250)"/> <wire from="(220,250)" to="(230,250)"/> <wire from="(300,250)" to="(300,310)"/> - <comp lib="0" loc="(240,340)" name="Pin"> - <a name="facing" val="west"/> - <a name="width" val="2"/> - <a name="tristate" val="false"/> - </comp> - <comp lib="1" loc="(290,260)" name="Controlled Buffer"> - <a name="facing" val="west"/> + <comp lib="1" loc="(190,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> <a name="width" val="8"/> </comp> - <comp lib="2" loc="(130,80)" name="Multiplexer"> - <a name="selloc" val="tr"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(240,180)" name="Constant"/> - <comp lib="0" loc="(100,90)" name="Pin"> - <a name="width" val="2"/> - <a name="tristate" val="false"/> - </comp> - <comp lib="4" loc="(190,170)" name="Register"/> - <comp lib="2" loc="(160,80)" name="Decoder"> - <a name="facing" val="south"/> + <comp lib="2" loc="(150,340)" name="Decoder"> + <a name="facing" val="north"/> <a name="select" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(160,180)" name="Constant"/> - <comp lib="1" loc="(250,230)" name="Controlled Buffer"> - <a name="facing" val="south"/> + <comp lib="1" loc="(290,260)" name="Controlled Buffer"> + <a name="facing" val="west"/> <a name="width" val="8"/> </comp> + <comp lib="4" loc="(190,170)" name="Register"/> + <comp lib="4" loc="(270,170)" name="Register"/> <comp lib="1" loc="(290,230)" name="Controlled Buffer"> <a name="facing" val="west"/> <a name="width" val="8"/> </comp> - <comp lib="0" loc="(140,130)" name="Pin"> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - </comp> <comp lib="0" loc="(310,260)" name="Constant"> <a name="facing" val="west"/> <a name="width" val="8"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(130,200)" name="Pin"> + <comp lib="1" loc="(230,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="0" loc="(100,90)" name="Pin"> + <a name="width" val="2"/> <a name="tristate" val="false"/> </comp> - <comp lib="2" loc="(150,340)" name="Decoder"> - <a name="facing" val="north"/> - <a name="select" val="2"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(130,200)" name="Pin"> + <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(170,230)" name="Controlled Buffer"> - <a name="facing" val="south"/> + <comp lib="0" loc="(140,130)" name="Pin"> <a name="width" val="8"/> - </comp> - <comp lib="0" loc="(110,60)" name="Pin"> - <a name="facing" val="south"/> <a name="tristate" val="false"/> </comp> - <comp lib="0" loc="(310,230)" name="Constant"> + <comp lib="0" loc="(240,340)" name="Pin"> <a name="facing" val="west"/> - <a name="width" val="8"/> - <a name="value" val="0x0"/> + <a name="width" val="2"/> + <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(190,260)" name="Controlled Buffer"> + <comp lib="2" loc="(160,80)" name="Decoder"> <a name="facing" val="south"/> - <a name="width" val="8"/> + <a name="select" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(270,260)" name="Controlled Buffer"> + <comp lib="2" loc="(130,80)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> + </comp> + <comp lib="0" loc="(110,60)" name="Pin"> <a name="facing" val="south"/> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(140,230)" name="Pin"> + <a name="output" val="true"/> <a name="width" val="8"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="1" loc="(230,260)" name="Controlled Buffer"> + <comp lib="1" loc="(250,230)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> + <comp lib="0" loc="(240,180)" name="Constant"/> <comp lib="1" loc="(210,230)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> - <comp lib="4" loc="(230,170)" name="Register"/> - <comp lib="4" loc="(270,170)" name="Register"/> <comp lib="0" loc="(140,260)" name="Pin"> <a name="output" val="true"/> <a name="width" val="8"/> <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(150,340)" name="Pin"> + <comp lib="0" loc="(100,70)" name="Constant"> <a name="width" val="2"/> - <a name="tristate" val="false"/> + <a name="value" val="0x0"/> </comp> <comp lib="2" loc="(240,340)" name="Decoder"> <a name="facing" val="north"/> @@ -1516,15 +1645,25 @@ <a name="select" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(100,70)" name="Constant"> - <a name="width" val="2"/> + <comp lib="1" loc="(270,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="1" loc="(170,230)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="0" loc="(160,180)" name="Constant"/> + <comp lib="4" loc="(230,170)" name="Register"/> + <comp lib="0" loc="(310,230)" name="Constant"> + <a name="facing" val="west"/> + <a name="width" val="8"/> <a name="value" val="0x0"/> </comp> <comp lib="0" loc="(200,180)" name="Constant"/> - <comp lib="0" loc="(140,230)" name="Pin"> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="labelloc" val="east"/> + <comp lib="0" loc="(150,340)" name="Pin"> + <a name="width" val="2"/> + <a name="tristate" val="false"/> </comp> </circuit> <circuit name="ISD"> @@ -1554,7 +1693,7 @@ <circ-port height="8" pin="440,1690" width="8" x="46" y="86"/> <circ-port height="10" pin="570,1690" width="10" x="145" y="65"/> <circ-port height="10" pin="1190,1480" width="10" x="75" y="45"/> - <circ-port height="10" pin="1110,1370" width="10" x="45" y="45"/> + <circ-port height="10" pin="1110,1360" width="10" x="45" y="45"/> <circ-port height="10" pin="440,1880" width="10" x="145" y="85"/> <circ-port height="10" pin="830,1890" width="10" x="145" y="55"/> <circ-anchor facing="east" height="6" width="6" x="47" y="57"/> @@ -1597,7 +1736,6 @@ <wire from="(240,880)" to="(240,970)"/> <wire from="(510,1190)" to="(670,1190)"/> <wire from="(340,1750)" to="(340,1790)"/> - <wire from="(720,1370)" to="(1110,1370)"/> <wire from="(570,60)" to="(570,120)"/> <wire from="(690,1140)" to="(690,1200)"/> <wire from="(920,210)" to="(930,210)"/> @@ -1721,8 +1859,8 @@ <wire from="(200,1380)" to="(250,1380)"/> <wire from="(170,780)" to="(280,780)"/> <wire from="(830,650)" to="(830,670)"/> - <wire from="(240,250)" to="(240,340)"/> <wire from="(210,1180)" to="(210,1270)"/> + <wire from="(240,250)" to="(240,340)"/> <wire from="(170,1140)" to="(170,1230)"/> <wire from="(870,1010)" to="(870,1030)"/> <wire from="(200,210)" to="(200,300)"/> @@ -1816,6 +1954,7 @@ <wire from="(630,650)" to="(630,660)"/> <wire from="(430,1810)" to="(810,1810)"/> <wire from="(180,70)" to="(180,140)"/> + <wire from="(1030,380)" to="(1030,1350)"/> <wire from="(850,870)" to="(850,880)"/> <wire from="(1090,1520)" to="(1130,1520)"/> <wire from="(860,1710)" to="(860,1780)"/> @@ -2044,6 +2183,7 @@ <wire from="(470,380)" to="(470,390)"/> <wire from="(220,1170)" to="(270,1170)"/> <wire from="(170,870)" to="(280,870)"/> + <wire from="(720,1370)" to="(1080,1370)"/> <wire from="(830,830)" to="(870,830)"/> <wire from="(660,1850)" to="(660,1880)"/> <wire from="(170,1230)" to="(170,1320)"/> @@ -2057,6 +2197,7 @@ <wire from="(180,1220)" to="(270,1220)"/> <wire from="(890,480)" to="(890,520)"/> <wire from="(510,1370)" to="(720,1370)"/> + <wire from="(550,380)" to="(1030,380)"/> <wire from="(1070,1550)" to="(1070,1800)"/> <wire from="(480,510)" to="(490,510)"/> <wire from="(100,70)" to="(100,250)"/> @@ -2172,6 +2313,7 @@ <wire from="(910,830)" to="(910,850)"/> <wire from="(900,820)" to="(900,840)"/> <wire from="(240,250)" to="(280,250)"/> + <wire from="(1030,1350)" to="(1080,1350)"/> <wire from="(160,1420)" to="(160,1580)"/> <wire from="(180,590)" to="(270,590)"/> <wire from="(930,210)" to="(930,250)"/> @@ -2360,246 +2502,210 @@ <wire from="(520,510)" to="(530,510)"/> <wire from="(880,430)" to="(880,480)"/> <wire from="(450,1140)" to="(450,1580)"/> - <comp lib="0" loc="(440,60)" name="Constant"> + <comp lib="2" loc="(850,960)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(280,480)" name="Constant"/> - <comp lib="1" loc="(280,370)" name="OR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="2" loc="(850,870)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(560,150)" name="OR Gate"> + <comp lib="0" loc="(280,1110)" name="Constant"/> + <comp lib="0" loc="(280,1300)" name="Constant"/> + <comp lib="0" loc="(560,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(400,420)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,1280)" name="AND Gate"> + <comp lib="0" loc="(280,1210)" name="Constant"/> + <comp lib="0" loc="(160,1670)" name="Constant"> + <a name="width" val="8"/> + </comp> + <comp lib="1" loc="(330,1370)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="SP"/> - <a name="negate6" val="true"/> + <a name="label" val="CMP"/> </comp> - <comp lib="0" loc="(280,500)" name="Constant"/> - <comp lib="0" loc="(280,220)" name="Constant"/> - <comp lib="2" loc="(930,960)" name="Multiplexer"> + <comp lib="0" loc="(280,540)" name="Constant"/> + <comp lib="0" loc="(280,210)" name="Constant"/> + <comp lib="1" loc="(480,1410)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(440,1880)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="label" val="Memory Select"/> - <a name="labelloc" val="south"/> + <comp lib="0" loc="(760,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(440,1610)" name="Pin"> + <comp lib="0" loc="(570,1690)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="width" val="3"/> - <a name="label" val="ALU OP"/> + <a name="width" val="8"/> + <a name="label" val="IMM VALUE"/> <a name="labelloc" val="south"/> </comp> - <comp lib="2" loc="(850,1050)" name="Multiplexer"> + <comp lib="0" loc="(900,910)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(280,640)" name="Constant"/> - <comp lib="0" loc="(720,60)" name="Constant"> - <a name="facing" val="south"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(800,870)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(280,1360)" name="Constant"/> - <comp lib="0" loc="(520,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <comp lib="0" loc="(280,120)" name="Constant"/> + <comp lib="4" loc="(710,1700)" name="Register"> + <a name="width" val="1"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="1" loc="(840,1610)" name="OR Gate"> + <comp lib="1" loc="(480,330)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(480,1410)" name="OR Gate"> + <comp lib="0" loc="(720,60)" name="Constant"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(1150,1480)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="4"/> - <a name="incoming" val="4"/> - </comp> - <comp lib="0" loc="(280,1120)" name="Constant"/> - <comp lib="6" loc="(233,1834)" name="Text"> - <a name="text" val="This input defines the range of MMIO --&gt;"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(880,1610)" name="OR Gate"> + <comp lib="0" loc="(280,1290)" name="Constant"/> + <comp lib="0" loc="(930,60)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(890,1050)" name="Multiplexer"> - <a name="facing" val="south"/> + <comp lib="2" loc="(290,1530)" name="Multiplexer"> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(240,1630)" name="Splitter"> + <comp lib="0" loc="(620,1400)" name="Splitter"> <a name="facing" val="north"/> - <a name="incoming" val="8"/> - <a name="bit1" val="0"/> - <a name="bit2" val="0"/> - <a name="bit3" val="0"/> - <a name="bit4" val="1"/> - <a name="bit5" val="1"/> - <a name="bit6" val="1"/> - <a name="bit7" val="1"/> + <a name="appear" val="center"/> </comp> - <comp lib="1" loc="(330,110)" name="AND Gate"> + <comp lib="1" loc="(330,470)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="OR"/> + <a name="label" val="CIN"/> <a name="negate0" val="true"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="1" loc="(290,1610)" name="OR Gate"> - <a name="width" val="8"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="negate2" val="true"/> + <a name="negate3" val="true"/> </comp> - <comp lib="2" loc="(850,870)" name="Multiplexer"> + <comp lib="0" loc="(280,140)" name="Constant"/> + <comp lib="1" loc="(920,1610)" name="OR Gate"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="1" loc="(640,690)" name="OR Gate"> - <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,300)" name="Constant"/> - <comp lib="0" loc="(900,640)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - </comp> - <comp lib="4" loc="(710,1700)" name="Register"> - <a name="width" val="1"/> - <a name="trigger" val="falling"/> - </comp> - <comp lib="1" loc="(1040,1510)" name="AND Gate"> + <comp lib="1" loc="(260,1750)" name="AND Gate"> <a name="facing" val="west"/> - <a name="label" val="ptrinc"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(890,960)" name="Multiplexer"> + <comp lib="0" loc="(860,910)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(160,50)" name="Splitter"> + <comp lib="1" loc="(820,1860)" name="AND Gate"> <a name="facing" val="south"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate0" val="true"/> </comp> - <comp lib="0" loc="(260,1520)" name="Constant"> + <comp lib="0" loc="(620,1610)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="label" val="GPR MUX"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(770,1690)" name="AND Gate"> + <comp lib="0" loc="(280,1350)" name="Constant"/> + <comp lib="1" loc="(670,1820)" name="AND Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(360,510)" name="OR Gate"> + <comp lib="1" loc="(330,1280)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="SP"/> + <a name="negate6" val="true"/> + </comp> + <comp lib="1" loc="(640,1140)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,670)" name="Constant"/> - <comp lib="0" loc="(280,1300)" name="Constant"/> - <comp lib="1" loc="(720,780)" name="OR Gate"> + <comp lib="0" loc="(400,60)" name="Constant"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(940,640)" name="Constant"> + <comp lib="2" loc="(320,1620)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> + <comp lib="0" loc="(900,640)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> </comp> - <comp lib="0" loc="(330,1680)" name="Pin"> + <comp lib="0" loc="(80,50)" name="Pin"> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + <a name="label" val="DATA"/> + <a name="labelloc" val="north"/> + </comp> + <comp lib="0" loc="(530,1880)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="label" val="MEM POINTER"/> + <a name="label" val="Address MUX"/> <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(480,420)" name="OR Gate"> + <comp lib="0" loc="(440,1610)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="width" val="3"/> + <a name="label" val="ALU OP"/> + <a name="labelloc" val="south"/> + </comp> + <comp lib="1" loc="(440,1870)" name="AND Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(240,1580)" name="Constant"> + <comp lib="2" loc="(890,690)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="width" val="4"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="2" loc="(290,1450)" name="Multiplexer"> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(330,290)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="NAND"/> - <a name="negate1" val="true"/> + <comp lib="1" loc="(520,1140)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(850,960)" name="Multiplexer"> + <comp lib="2" loc="(930,600)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(680,1230)" name="OR Gate"> + <comp lib="1" loc="(800,870)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(620,1400)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="center"/> - </comp> - <comp lib="0" loc="(780,1880)" name="Pin"> + <comp lib="0" loc="(920,1610)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="label" val="BRANCH"/> - <a name="labelloc" val="south"/> - </comp> - <comp lib="0" loc="(860,1000)" name="Constant"> - <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(80,250)" name="Pin"> - <a name="tristate" val="false"/> - <a name="label" val="RST"/> - </comp> - <comp lib="0" loc="(360,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <a name="label" val="C (W)"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(400,420)" name="OR Gate"> + <comp lib="1" loc="(480,510)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(320,1620)" name="Multiplexer"> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="1" loc="(280,100)" name="OR Gate"> + <comp lib="1" loc="(440,330)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> @@ -2609,345 +2715,300 @@ <a name="label" val="POP"/> <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(600,60)" name="Constant"> + <comp lib="0" loc="(220,1610)" name="Constant"> <a name="facing" val="south"/> + <a name="width" val="4"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(520,1230)" name="OR Gate"> + <comp lib="0" loc="(480,60)" name="Constant"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(930,870)" name="Multiplexer"> + <comp lib="0" loc="(280,310)" name="Constant"/> + <comp lib="0" loc="(940,550)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="2" loc="(160,50)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(230,1580)" name="Splitter"> - <a name="facing" val="north"/> + <comp lib="0" loc="(1150,1480)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="4"/> <a name="incoming" val="4"/> - <a name="bit1" val="0"/> - <a name="bit2" val="1"/> - <a name="bit3" val="1"/> </comp> - <comp lib="0" loc="(80,50)" name="Pin"> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="DATA"/> - <a name="labelloc" val="north"/> + <comp lib="2" loc="(850,600)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(330,560)" name="AND Gate"> + <comp lib="1" loc="(330,740)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="LLI"/> + <a name="label" val="JMP"/> + <a name="negate2" val="true"/> + <a name="negate3" val="true"/> + <a name="negate4" val="true"/> + <a name="negate5" val="true"/> <a name="negate6" val="true"/> - <a name="negate7" val="true"/> </comp> - <comp lib="1" loc="(760,960)" name="OR Gate"> + <comp lib="2" loc="(890,870)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(280,1110)" name="Constant"/> - <comp lib="0" loc="(280,1290)" name="Constant"/> - <comp lib="0" loc="(480,60)" name="Constant"> + <comp lib="0" loc="(520,60)" name="Constant"> <a name="facing" val="south"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(280,540)" name="Constant"/> - <comp lib="0" loc="(860,820)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> + <comp lib="2" loc="(520,1670)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(930,1050)" name="Multiplexer"> + <comp lib="0" loc="(440,60)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <a name="value" val="0x0"/> </comp> - <comp lib="4" loc="(870,1690)" name="Register"> - <a name="width" val="1"/> - <a name="trigger" val="falling"/> + <comp lib="1" loc="(770,1690)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(220,1460)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="center"/> + <comp lib="4" loc="(1190,1480)" name="Register"> + <a name="width" val="4"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="2" loc="(890,600)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(280,640)" name="Constant"/> + <comp lib="0" loc="(1190,1480)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="width" val="4"/> + <a name="label" val="Dynamic OP"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(280,630)" name="Constant"/> - <comp lib="0" loc="(280,420)" name="Constant"/> - <comp lib="3" loc="(200,1680)" name="Adder"/> - <comp lib="0" loc="(900,820)" name="Constant"> + <comp lib="0" loc="(680,60)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(440,1870)" name="AND Gate"> + <comp lib="1" loc="(880,1610)" name="OR Gate"> <a name="facing" val="south"/> + <a name="width" val="2"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(860,910)" name="Constant"> + <comp lib="0" loc="(900,820)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(280,1200)" name="Constant"/> - <comp lib="0" loc="(180,1580)" name="Splitter"> - <a name="facing" val="north"/> - <a name="incoming" val="4"/> - <a name="appear" val="right"/> - <a name="bit1" val="0"/> - <a name="bit2" val="1"/> - <a name="bit3" val="1"/> - </comp> - <comp lib="1" loc="(600,1050)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(940,1000)" name="Constant"> + <comp lib="2" loc="(850,690)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x3"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(250,1600)" name="Splitter"> - <a name="facing" val="north"/> - <a name="incoming" val="8"/> - <a name="bit1" val="0"/> - <a name="bit2" val="0"/> - <a name="bit3" val="0"/> - <a name="bit4" val="1"/> - <a name="bit5" val="1"/> - <a name="bit6" val="1"/> - <a name="bit7" val="1"/> + <comp lib="2" loc="(230,1670)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(940,550)" name="Constant"> - <a name="facing" val="south"/> + <comp lib="0" loc="(280,240)" name="Constant"/> + <comp lib="0" loc="(840,1610)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> <a name="width" val="2"/> + <a name="label" val="A (R)"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(1150,1560)" name="AND Gate"> + <comp lib="1" loc="(1110,1360)" name="OR Gate"> <a name="size" val="30"/> - <a name="inputs" val="4"/> - <a name="negate0" val="true"/> - <a name="negate1" val="true"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(640,1140)" name="OR Gate"> + <comp lib="1" loc="(520,1230)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(890,60)" name="Constant"> + <comp lib="2" loc="(890,1050)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(480,150)" name="OR Gate"> + <comp lib="4" loc="(260,1670)" name="Register"/> + <comp lib="1" loc="(840,1610)" name="OR Gate"> <a name="facing" val="south"/> + <a name="width" val="2"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(1190,1480)" name="Pin"> - <a name="facing" val="west"/> + <comp lib="0" loc="(600,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(880,1610)" name="Pin"> + <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="width" val="4"/> - <a name="label" val="Compare OP"/> - <a name="labelloc" val="east"/> + <a name="width" val="2"/> + <a name="label" val="B (R)"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(280,390)" name="Constant"/> - <comp lib="2" loc="(850,690)" name="Multiplexer"> + <comp lib="0" loc="(280,320)" name="Constant"/> + <comp lib="0" loc="(280,1380)" name="Constant"/> + <comp lib="0" loc="(940,640)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(90,1640)" name="Pin"> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="ALU OUTPUT"/> - <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(280,230)" name="Constant"/> - <comp lib="1" loc="(330,380)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="ADD"/> - <a name="negate0" val="true"/> + <comp lib="0" loc="(280,580)" name="Constant"/> + <comp lib="0" loc="(900,1000)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(1110,1190)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="label" val="Write Enable"/> - <a name="labelloc" val="east"/> + <comp lib="0" loc="(640,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(660,1880)" name="Pin"> + <comp lib="0" loc="(280,550)" name="Constant"/> + <comp lib="0" loc="(180,1580)" name="Splitter"> <a name="facing" val="north"/> - <a name="tristate" val="false"/> - <a name="label" val="JMP FLAG"/> - <a name="labelloc" val="south"/> + <a name="incoming" val="4"/> + <a name="appear" val="right"/> + <a name="bit1" val="0"/> + <a name="bit2" val="1"/> + <a name="bit3" val="1"/> </comp> - <comp lib="0" loc="(800,1580)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="label" val="PUSH"/> - <a name="labelloc" val="south"/> + <comp lib="0" loc="(280,1120)" name="Constant"/> + <comp lib="1" loc="(520,1410)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,1370)" name="AND Gate"> + <comp lib="1" loc="(330,1100)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="CMP"/> + <a name="label" val="LB"/> + <a name="negate3" val="true"/> + <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(280,120)" name="Constant"/> - <comp lib="2" loc="(290,1490)" name="Multiplexer"> + <comp lib="0" loc="(280,90)" name="Constant"/> + <comp lib="1" loc="(280,100)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(280,630)" name="Constant"/> + <comp lib="0" loc="(280,570)" name="Constant"/> + <comp lib="2" loc="(850,1050)" name="Multiplexer"> + <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(520,150)" name="OR Gate"> + <comp lib="0" loc="(280,510)" name="Constant"/> + <comp lib="1" loc="(360,510)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> + <comp lib="0" loc="(280,670)" name="Constant"/> + <comp lib="0" loc="(440,1690)" name="Pin"> + <a name="facing" val="north"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + <a name="label" val="PC ADDRESS"/> + <a name="labelloc" val="south"/> + </comp> + <comp lib="2" loc="(160,50)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> <comp lib="0" loc="(440,1600)" name="Splitter"> <a name="facing" val="north"/> <a name="fanout" val="3"/> <a name="incoming" val="3"/> <a name="appear" val="center"/> </comp> - <comp lib="1" loc="(440,330)" name="OR Gate"> + <comp lib="2" loc="(930,960)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> <comp lib="0" loc="(180,1540)" name="Splitter"> <a name="facing" val="north"/> <a name="appear" val="center"/> </comp> - <comp lib="0" loc="(1110,1370)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="label" val="Compare Enable"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="0" loc="(280,570)" name="Constant"/> - <comp lib="0" loc="(260,1480)" name="Constant"> - <a name="width" val="2"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(900,550)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="2" loc="(290,1530)" name="Multiplexer"> - <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="2" loc="(910,1560)" name="Multiplexer"> + <comp lib="1" loc="(640,690)" name="OR Gate"> <a name="facing" val="south"/> - <a name="selloc" val="tr"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(280,580)" name="Constant"/> - <comp lib="1" loc="(260,1750)" name="AND Gate"> - <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(600,960)" name="OR Gate"> + <comp lib="0" loc="(280,300)" name="Constant"/> + <comp lib="1" loc="(520,330)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,740)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="JMP"/> - <a name="negate2" val="true"/> - <a name="negate3" val="true"/> - <a name="negate4" val="true"/> - <a name="negate5" val="true"/> - <a name="negate6" val="true"/> - </comp> - <comp lib="0" loc="(280,360)" name="Constant"/> - <comp lib="0" loc="(760,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="1" loc="(520,510)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(300,1740)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(80,80)" name="Pin"> - <a name="tristate" val="false"/> - <a name="label" val="CLK"/> - </comp> - <comp lib="1" loc="(330,1190)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="SB"/> - <a name="negate2" val="true"/> - <a name="negate6" val="true"/> - </comp> - <comp lib="0" loc="(850,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(280,660)" name="Constant"/> - <comp lib="1" loc="(670,1820)" name="AND Gate"> - <a name="facing" val="north"/> + <comp lib="1" loc="(290,1610)" name="OR Gate"> + <a name="width" val="8"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,400)" name="Constant"/> - <comp lib="0" loc="(280,310)" name="Constant"/> - <comp lib="0" loc="(280,1380)" name="Constant"/> - <comp lib="0" loc="(860,640)" name="Constant"> + <comp lib="1" loc="(640,1050)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,270)" name="Constant"/> - <comp lib="1" loc="(820,1860)" name="AND Gate"> + <comp lib="1" loc="(440,420)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate0" val="true"/> </comp> - <comp lib="1" loc="(330,650)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="LUI"/> - <a name="negate7" val="true"/> + <comp lib="0" loc="(220,1460)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="center"/> </comp> - <comp lib="3" loc="(420,1820)" name="Comparator"> - <a name="mode" val="unsigned"/> + <comp lib="0" loc="(280,410)" name="Constant"/> + <comp lib="0" loc="(280,220)" name="Constant"/> + <comp lib="0" loc="(330,1680)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="width" val="8"/> + <a name="label" val="MEM POINTER"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(930,60)" name="Constant"> + <comp lib="0" loc="(890,60)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(530,1880)" name="Pin"> + <comp lib="0" loc="(780,1880)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="label" val="Address MUX"/> + <a name="label" val="BRANCH"/> <a name="labelloc" val="south"/> </comp> - <comp lib="4" loc="(260,1670)" name="Register"/> - <comp lib="0" loc="(280,330)" name="Constant"/> - <comp lib="2" loc="(890,690)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <comp lib="1" loc="(1150,1560)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="4"/> + <a name="negate0" val="true"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(640,600)" name="OR Gate"> + <comp lib="0" loc="(830,1890)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="label" val="External Address Select"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="1" loc="(680,1230)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> + <comp lib="1" loc="(840,1690)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(1040,1510)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="label" val="ptrinc"/> + </comp> <comp lib="1" loc="(330,830)" name="AND Gate"> <a name="inputs" val="8"/> <a name="label" val="PUSH"/> @@ -2956,63 +3017,86 @@ <a name="negate5" val="true"/> <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(280,90)" name="Constant"/> - <comp lib="0" loc="(400,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(620,1610)" name="Pin"> + <comp lib="0" loc="(440,1880)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="GPR MUX"/> + <a name="label" val="Memory Select"/> <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(440,420)" name="OR Gate"> + <comp lib="1" loc="(600,600)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,280)" name="Constant"/> - <comp lib="0" loc="(280,1390)" name="Constant"/> - <comp lib="1" loc="(520,1410)" name="OR Gate"> + <comp lib="0" loc="(280,420)" name="Constant"/> + <comp lib="2" loc="(290,1450)" name="Multiplexer"> + <a name="width" val="2"/> + <a name="enable" val="false"/> + </comp> + <comp lib="2" loc="(910,1560)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="selloc" val="tr"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(130,60)" name="Constant"> - <a name="width" val="8"/> + <comp lib="0" loc="(280,1200)" name="Constant"/> + <comp lib="0" loc="(800,60)" name="Constant"> + <a name="facing" val="south"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(520,1320)" name="OR Gate"> + <comp lib="0" loc="(900,550)" name="Constant"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(160,1670)" name="Constant"> - <a name="width" val="8"/> + <comp lib="0" loc="(860,550)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(800,1580)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="label" val="PUSH"/> + <a name="labelloc" val="south"/> + </comp> + <comp lib="0" loc="(660,1880)" name="Pin"> + <a name="facing" val="north"/> + <a name="tristate" val="false"/> + <a name="label" val="JMP FLAG"/> + <a name="labelloc" val="south"/> + </comp> + <comp lib="1" loc="(330,560)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="LLI"/> + <a name="negate6" val="true"/> + <a name="negate7" val="true"/> </comp> - <comp lib="1" loc="(560,330)" name="OR Gate"> + <comp lib="2" loc="(890,600)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(330,1100)" name="AND Gate"> + <comp lib="1" loc="(330,200)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="LB"/> + <a name="label" val="SOP"/> + <a name="negate0" val="true"/> + <a name="negate1" val="true"/> + <a name="negate2" val="true"/> <a name="negate3" val="true"/> - <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(830,1890)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="label" val="External Address Select"/> - <a name="labelloc" val="east"/> + <comp lib="1" loc="(330,110)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="OR"/> + <a name="negate0" val="true"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(680,1140)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(260,1440)" name="Constant"> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="3" loc="(420,1820)" name="Comparator"> + <a name="mode" val="unsigned"/> </comp> <comp lib="1" loc="(330,1010)" name="AND Gate"> <a name="inputs" val="8"/> @@ -3021,100 +3105,128 @@ <a name="negate3" val="true"/> <a name="negate6" val="true"/> </comp> - <comp lib="2" loc="(230,1670)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="1" loc="(680,1140)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(840,1610)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="A (R)"/> - <a name="labelloc" val="south"/> + <comp lib="0" loc="(380,1830)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xf0"/> </comp> - <comp lib="0" loc="(280,1210)" name="Constant"/> - <comp lib="0" loc="(280,240)" name="Constant"/> - <comp lib="1" loc="(480,510)" name="OR Gate"> + <comp lib="1" loc="(560,330)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,200)" name="AND Gate"> + <comp lib="1" loc="(330,290)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="SCO"/> - <a name="negate0" val="true"/> + <a name="label" val="NAND"/> <a name="negate1" val="true"/> - <a name="negate2" val="true"/> - <a name="negate3" val="true"/> </comp> - <comp lib="1" loc="(480,330)" name="OR Gate"> + <comp lib="0" loc="(280,1390)" name="Constant"/> + <comp lib="1" loc="(520,1320)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(680,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="1" loc="(520,420)" name="OR Gate"> + <comp lib="1" loc="(440,1140)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(640,60)" name="Constant"> + <comp lib="0" loc="(850,60)" name="Constant"> <a name="facing" val="south"/> + <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(940,820)" name="Constant"> + <comp lib="2" loc="(290,1490)" name="Multiplexer"> + <a name="width" val="2"/> + <a name="enable" val="false"/> + </comp> + <comp lib="0" loc="(280,270)" name="Constant"/> + <comp lib="0" loc="(860,820)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(860,550)" name="Constant"> + <comp lib="2" loc="(890,960)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(570,1690)" name="Pin"> - <a name="facing" val="north"/> + <comp lib="0" loc="(1110,1190)" name="Pin"> + <a name="facing" val="west"/> <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="label" val="IMM VALUE"/> - <a name="labelloc" val="south"/> + <a name="label" val="Write Enable"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(280,210)" name="Constant"/> - <comp lib="0" loc="(280,410)" name="Constant"/> - <comp lib="0" loc="(440,1690)" name="Pin"> + <comp lib="0" loc="(1110,1360)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="label" val="ALU State"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="0" loc="(250,1600)" name="Splitter"> <a name="facing" val="north"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="PC ADDRESS"/> - <a name="labelloc" val="south"/> + <a name="incoming" val="8"/> + <a name="bit1" val="0"/> + <a name="bit2" val="0"/> + <a name="bit3" val="0"/> + <a name="bit4" val="1"/> + <a name="bit5" val="1"/> + <a name="bit6" val="1"/> + <a name="bit7" val="1"/> </comp> - <comp lib="1" loc="(920,1610)" name="OR Gate"> + <comp lib="0" loc="(860,1000)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(330,650)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="LUI"/> + <a name="negate7" val="true"/> + </comp> + <comp lib="0" loc="(860,640)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(260,1480)" name="Constant"> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(280,370)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="4" loc="(1190,1480)" name="Register"> - <a name="width" val="4"/> - <a name="trigger" val="falling"/> + <comp lib="1" loc="(760,960)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(440,1140)" name="OR Gate"> + <comp lib="1" loc="(600,1050)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,130)" name="Constant"/> - <comp lib="0" loc="(280,510)" name="Constant"/> - <comp lib="0" loc="(280,1350)" name="Constant"/> - <comp lib="1" loc="(640,1050)" name="OR Gate"> + <comp lib="0" loc="(280,480)" name="Constant"/> + <comp lib="1" loc="(520,420)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(600,600)" name="OR Gate"> + <comp lib="0" loc="(940,910)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + </comp> + <comp lib="0" loc="(280,490)" name="Constant"/> + <comp lib="1" loc="(560,150)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(520,150)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> @@ -3127,137 +3239,171 @@ <a name="negate4" val="true"/> <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(920,1610)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="C (W)"/> - <a name="labelloc" val="south"/> - </comp> - <comp lib="2" loc="(850,600)" name="Multiplexer"> + <comp lib="1" loc="(600,960)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,470)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="CIN"/> - <a name="negate0" val="true"/> - <a name="negate2" val="true"/> - <a name="negate3" val="true"/> + <comp lib="4" loc="(110,50)" name="Register"> + <a name="trigger" val="falling"/> </comp> - <comp lib="1" loc="(560,510)" name="OR Gate"> + <comp lib="0" loc="(280,150)" name="Constant"/> + <comp lib="1" loc="(720,780)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(220,1610)" name="Constant"> + <comp lib="0" loc="(280,280)" name="Constant"/> + <comp lib="0" loc="(240,1630)" name="Splitter"> + <a name="facing" val="north"/> + <a name="incoming" val="8"/> + <a name="bit1" val="0"/> + <a name="bit2" val="0"/> + <a name="bit3" val="0"/> + <a name="bit4" val="1"/> + <a name="bit5" val="1"/> + <a name="bit6" val="1"/> + <a name="bit7" val="1"/> + </comp> + <comp lib="0" loc="(940,820)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="4"/> + <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(600,690)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(90,1640)" name="Pin"> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + <a name="label" val="ALU OUTPUT"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(280,150)" name="Constant"/> - <comp lib="0" loc="(900,910)" name="Constant"> + <comp lib="0" loc="(80,250)" name="Pin"> + <a name="tristate" val="false"/> + <a name="label" val="RST"/> + </comp> + <comp lib="1" loc="(330,380)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="DYN"/> + <a name="negate0" val="true"/> + </comp> + <comp lib="0" loc="(280,500)" name="Constant"/> + <comp lib="0" loc="(360,60)" name="Constant"> <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(260,1520)" name="Constant"> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(930,600)" name="Multiplexer"> + <comp lib="0" loc="(280,400)" name="Constant"/> + <comp lib="0" loc="(280,130)" name="Constant"/> + <comp lib="0" loc="(280,1360)" name="Constant"/> + <comp lib="0" loc="(240,1580)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="4"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="2" loc="(930,690)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(520,330)" name="OR Gate"> + <comp lib="0" loc="(280,360)" name="Constant"/> + <comp lib="0" loc="(130,60)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(480,150)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(380,1830)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xf0"/> + <comp lib="4" loc="(870,1690)" name="Register"> + <a name="width" val="1"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="2" loc="(520,1670)" name="Multiplexer"> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(280,390)" name="Constant"/> + <comp lib="0" loc="(940,1000)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="value" val="0x3"/> </comp> - <comp lib="0" loc="(900,1000)" name="Constant"> + <comp lib="0" loc="(280,330)" name="Constant"/> + <comp lib="2" loc="(930,870)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(930,690)" name="Multiplexer"> + <comp lib="2" loc="(930,1050)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(300,1740)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(520,510)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(880,1610)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="B (R)"/> - <a name="labelloc" val="south"/> - </comp> - <comp lib="0" loc="(200,1500)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="center"/> - </comp> - <comp lib="0" loc="(280,550)" name="Constant"/> - <comp lib="0" loc="(280,490)" name="Constant"/> - <comp lib="1" loc="(520,1140)" name="OR Gate"> + <comp lib="1" loc="(600,690)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(560,420)" name="OR Gate"> + <comp lib="1" loc="(640,600)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(840,1690)" name="OR Gate"> + <comp lib="1" loc="(480,420)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(940,910)" name="Constant"> + <comp lib="1" loc="(560,510)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(560,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <comp lib="1" loc="(330,1190)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="SB"/> + <a name="negate2" val="true"/> + <a name="negate6" val="true"/> </comp> - <comp lib="4" loc="(110,50)" name="Register"> - <a name="trigger" val="falling"/> + <comp lib="3" loc="(200,1680)" name="Adder"/> + <comp lib="0" loc="(280,230)" name="Constant"/> + <comp lib="0" loc="(230,1580)" name="Splitter"> + <a name="facing" val="north"/> + <a name="incoming" val="4"/> + <a name="bit1" val="0"/> + <a name="bit2" val="1"/> + <a name="bit3" val="1"/> </comp> - <comp lib="2" loc="(890,870)" name="Multiplexer"> + <comp lib="0" loc="(280,660)" name="Constant"/> + <comp lib="1" loc="(560,420)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(260,1440)" name="Constant"> - <a name="width" val="2"/> - <a name="value" val="0x0"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,320)" name="Constant"/> <comp lib="1" loc="(360,330)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,140)" name="Constant"/> - <comp lib="0" loc="(800,60)" name="Constant"> + <comp lib="0" loc="(80,80)" name="Pin"> + <a name="tristate" val="false"/> + <a name="label" val="CLK"/> + </comp> + <comp lib="0" loc="(160,50)" name="Splitter"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="6" loc="(233,1834)" name="Text"> + <a name="text" val="This input defines the range of MMIO --&gt;"/> + </comp> + <comp lib="0" loc="(200,1500)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="center"/> </comp> </circuit> <circuit name="STK"> @@ -3770,61 +3916,26 @@ <wire from="(750,260)" to="(760,260)"/> <wire from="(760,270)" to="(770,270)"/> <wire from="(1250,270)" to="(1270,270)"/> - <comp lib="4" loc="(1790,270)" name="Register"/> - <comp lib="4" loc="(2230,270)" name="Register"/> - <comp lib="1" loc="(150,300)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="4" loc="(3660,270)" name="Register"/> - <comp lib="2" loc="(1410,260)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="4" loc="(800,270)" name="Register"/> - <comp lib="2" loc="(2840,260)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="4" loc="(1460,270)" name="Register"/> - <comp lib="4" loc="(360,270)" name="Register"/> - <comp lib="0" loc="(150,220)" name="Pin"> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="0" loc="(180,320)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="2" loc="(2510,260)" name="Multiplexer"> + <comp lib="2" loc="(2730,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3000,270)" name="Register"/> - <comp lib="2" loc="(1190,260)" name="Multiplexer"> + <comp lib="2" loc="(2290,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3110,270)" name="Register"/> - <comp lib="4" loc="(1570,270)" name="Register"/> - <comp lib="4" loc="(2010,270)" name="Register"/> <comp lib="4" loc="(3220,270)" name="Register"/> - <comp lib="4" loc="(2670,270)" name="Register"/> - <comp lib="2" loc="(2400,260)" name="Multiplexer"> + <comp lib="2" loc="(3390,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(690,270)" name="Register"/> - <comp lib="2" loc="(1300,260)" name="Multiplexer"> + <comp lib="4" loc="(910,270)" name="Register"/> + <comp lib="4" loc="(1790,270)" name="Register"/> + <comp lib="2" loc="(2950,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(2450,270)" name="Register"/> - <comp lib="4" loc="(910,270)" name="Register"/> - <comp lib="4" loc="(2120,270)" name="Register"/> - <comp lib="4" loc="(1680,270)" name="Register"/> - <comp lib="2" loc="(1630,260)" name="Multiplexer"> + <comp lib="2" loc="(1300,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> @@ -3832,136 +3943,171 @@ <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2070,260)" name="Multiplexer"> + <comp lib="2" loc="(860,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(310,260)" name="Multiplexer"> + <comp lib="4" loc="(360,270)" name="Register"/> + <comp lib="1" loc="(150,300)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(150,220)" name="Pin"> + <a name="output" val="true"/> <a name="width" val="8"/> - <a name="enable" val="false"/> + <a name="tristate" val="false"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="4" loc="(1350,270)" name="Register"/> - <comp lib="2" loc="(1740,260)" name="Multiplexer"> + <comp lib="4" loc="(690,270)" name="Register"/> + <comp lib="0" loc="(150,270)" name="Pin"> <a name="width" val="8"/> - <a name="enable" val="false"/> + <a name="tristate" val="false"/> </comp> - <comp lib="2" loc="(1080,260)" name="Multiplexer"> + <comp lib="4" loc="(2780,270)" name="Register"/> + <comp lib="4" loc="(3550,270)" name="Register"/> + <comp lib="4" loc="(1680,270)" name="Register"/> + <comp lib="4" loc="(1570,270)" name="Register"/> + <comp lib="4" loc="(1900,270)" name="Register"/> + <comp lib="2" loc="(2180,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(2340,270)" name="Register"/> <comp lib="2" loc="(3610,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(1020,270)" name="Register"/> - <comp lib="2" loc="(2950,260)" name="Multiplexer"> + <comp lib="2" loc="(530,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(580,270)" name="Register"/> - <comp lib="2" loc="(860,260)" name="Multiplexer"> + <comp lib="4" loc="(2120,270)" name="Register"/> + <comp lib="4" loc="(2010,270)" name="Register"/> + <comp lib="2" loc="(1190,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> <comp lib="4" loc="(1240,270)" name="Register"/> + <comp lib="4" loc="(3440,270)" name="Register"/> <comp lib="4" loc="(250,270)" name="Register"/> - <comp lib="2" loc="(970,260)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(90,290)" name="Pin"> + <a name="tristate" val="false"/> </comp> <comp lib="2" loc="(3500,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(1130,270)" name="Register"/> - <comp lib="2" loc="(1850,260)" name="Multiplexer"> + <comp lib="4" loc="(2670,270)" name="Register"/> + <comp lib="4" loc="(2560,270)" name="Register"/> + <comp lib="0" loc="(90,360)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="4" loc="(580,270)" name="Register"/> + <comp lib="2" loc="(2510,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2730,260)" name="Multiplexer"> + <comp lib="2" loc="(2400,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3440,270)" name="Register"/> - <comp lib="2" loc="(3280,260)" name="Multiplexer"> + <comp lib="4" loc="(1350,270)" name="Register"/> + <comp lib="4" loc="(2230,270)" name="Register"/> + <comp lib="2" loc="(420,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(530,260)" name="Multiplexer"> + <comp lib="2" loc="(1080,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2620,260)" name="Multiplexer"> + <comp lib="4" loc="(1130,270)" name="Register"/> + <comp lib="4" loc="(2890,270)" name="Register"/> + <comp lib="0" loc="(90,330)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="4" loc="(3000,270)" name="Register"/> + <comp lib="0" loc="(180,320)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="1" loc="(130,340)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="2" loc="(3170,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(90,360)" name="Pin"> - <a name="tristate" val="false"/> + <comp lib="2" loc="(640,260)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(420,260)" name="Multiplexer"> + <comp lib="2" loc="(1410,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(3390,260)" name="Multiplexer"> + <comp lib="4" loc="(3660,270)" name="Register"/> + <comp lib="4" loc="(470,270)" name="Register"/> + <comp lib="2" loc="(1960,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(90,290)" name="Pin"> - <a name="tristate" val="false"/> + <comp lib="2" loc="(1850,260)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(640,260)" name="Multiplexer"> + <comp lib="2" loc="(970,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(3170,260)" name="Multiplexer"> + <comp lib="4" loc="(1020,270)" name="Register"/> + <comp lib="4" loc="(3110,270)" name="Register"/> + <comp lib="2" loc="(2070,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3330,270)" name="Register"/> - <comp lib="4" loc="(2560,270)" name="Register"/> - <comp lib="0" loc="(3670,220)" name="Constant"> - <a name="facing" val="west"/> + <comp lib="2" loc="(1520,260)" name="Multiplexer"> <a name="width" val="8"/> - <a name="value" val="0x0"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2180,260)" name="Multiplexer"> + <comp lib="2" loc="(3060,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(1960,260)" name="Multiplexer"> + <comp lib="2" loc="(2620,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(130,340)" name="OR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="4" loc="(800,270)" name="Register"/> + <comp lib="4" loc="(2340,270)" name="Register"/> + <comp lib="4" loc="(3330,270)" name="Register"/> + <comp lib="2" loc="(750,260)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3550,270)" name="Register"/> - <comp lib="0" loc="(90,330)" name="Pin"> - <a name="tristate" val="false"/> + <comp lib="4" loc="(1460,270)" name="Register"/> + <comp lib="2" loc="(1630,260)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(470,270)" name="Register"/> - <comp lib="2" loc="(1520,260)" name="Multiplexer"> + <comp lib="2" loc="(310,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(150,270)" name="Pin"> + <comp lib="0" loc="(3670,220)" name="Constant"> + <a name="facing" val="west"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> + <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(3060,260)" name="Multiplexer"> + <comp lib="2" loc="(3280,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(2890,270)" name="Register"/> - <comp lib="4" loc="(1900,270)" name="Register"/> - <comp lib="4" loc="(2780,270)" name="Register"/> - <comp lib="2" loc="(2290,260)" name="Multiplexer"> + <comp lib="4" loc="(2450,270)" name="Register"/> + <comp lib="2" loc="(1740,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(750,260)" name="Multiplexer"> + <comp lib="2" loc="(2840,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> @@ -4004,300 +4150,290 @@ <wire from="(200,330)" to="(200,350)"/> <wire from="(140,400)" to="(240,400)"/> <wire from="(230,320)" to="(230,380)"/> - <comp lib="0" loc="(140,320)" name="Pin"> - <a name="width" val="8"/> + <comp lib="6" loc="(79,355)" name="Text"> + <a name="text" val="Jump Enable"/> + </comp> + <comp lib="1" loc="(200,380)" name="NOT Gate"/> + <comp lib="0" loc="(140,350)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(140,380)" name="Pin"> <a name="tristate" val="false"/> </comp> <comp lib="4" loc="(260,310)" name="Register"> <a name="trigger" val="falling"/> </comp> + <comp lib="2" loc="(220,310)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> + </comp> + <comp lib="0" loc="(140,430)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="6" loc="(101,297)" name="Text"> + <a name="text" val="Jump Address"/> + </comp> <comp lib="0" loc="(360,360)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="width" val="8"/> <a name="labelloc" val="east"/> </comp> + <comp lib="3" loc="(330,320)" name="Adder"/> <comp lib="0" loc="(290,330)" name="Constant"> <a name="width" val="8"/> </comp> - <comp lib="3" loc="(330,320)" name="Adder"/> + <comp lib="0" loc="(140,400)" name="Pin"> + <a name="tristate" val="false"/> + </comp> <comp lib="0" loc="(270,360)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="width" val="8"/> <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(140,400)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="0" loc="(140,380)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="2" loc="(220,310)" name="Multiplexer"> + <comp lib="0" loc="(140,320)" name="Pin"> <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="6" loc="(79,355)" name="Text"> - <a name="text" val="Jump Enable"/> - </comp> - <comp lib="0" loc="(140,430)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="1" loc="(200,380)" name="NOT Gate"/> - <comp lib="0" loc="(140,350)" name="Pin"> <a name="tristate" val="false"/> </comp> - <comp lib="6" loc="(101,297)" name="Text"> - <a name="text" val="Jump Address"/> - </comp> </circuit> <circuit name="ExampleConfigurationROM"> <a name="circuit" val="ExampleConfigurationROM"/> <a name="clabel" val=""/> <a name="clabelup" val="east"/> <a name="clabelfont" val="SansSerif plain 12"/> - <wire from="(340,730)" to="(400,730)"/> - <wire from="(360,560)" to="(360,820)"/> - <wire from="(530,770)" to="(530,780)"/> - <wire from="(700,60)" to="(750,60)"/> - <wire from="(310,390)" to="(500,390)"/> - <wire from="(360,420)" to="(360,560)"/> - <wire from="(300,140)" to="(300,410)"/> - <wire from="(330,370)" to="(380,370)"/> - <wire from="(330,770)" to="(380,770)"/> - <wire from="(480,410)" to="(660,410)"/> - <wire from="(330,10)" to="(380,10)"/> - <wire from="(480,80)" to="(480,90)"/> - <wire from="(500,380)" to="(500,390)"/> - <wire from="(360,420)" to="(670,420)"/> - <wire from="(350,30)" to="(350,50)"/> - <wire from="(500,100)" to="(500,120)"/> - <wire from="(590,750)" to="(590,780)"/> - <wire from="(420,700)" to="(520,700)"/> + <wire from="(420,540)" to="(420,800)"/> + <wire from="(620,380)" to="(620,390)"/> + <wire from="(430,390)" to="(620,390)"/> + <wire from="(600,410)" to="(780,410)"/> + <wire from="(220,170)" to="(470,170)"/> + <wire from="(420,400)" to="(420,540)"/> + <wire from="(480,420)" to="(790,420)"/> + <wire from="(360,280)" to="(360,290)"/> + <wire from="(420,800)" to="(590,800)"/> + <wire from="(540,700)" to="(640,700)"/> + <wire from="(720,800)" to="(720,830)"/> <wire from="(290,800)" to="(290,900)"/> - <wire from="(530,730)" to="(530,770)"/> - <wire from="(590,710)" to="(590,750)"/> - <wire from="(520,750)" to="(540,750)"/> - <wire from="(530,400)" to="(550,400)"/> - <wire from="(420,690)" to="(580,690)"/> - <wire from="(420,650)" to="(580,650)"/> - <wire from="(350,490)" to="(380,490)"/> - <wire from="(420,90)" to="(440,90)"/> - <wire from="(420,10)" to="(440,10)"/> - <wire from="(290,230)" to="(290,400)"/> - <wire from="(430,30)" to="(430,70)"/> - <wire from="(340,60)" to="(490,60)"/> - <wire from="(310,210)" to="(310,390)"/> - <wire from="(430,70)" to="(440,70)"/> - <wire from="(350,170)" to="(350,350)"/> - <wire from="(520,80)" to="(530,80)"/> - <wire from="(340,470)" to="(480,470)"/> - <wire from="(470,510)" to="(480,510)"/> - <wire from="(480,360)" to="(490,360)"/> - <wire from="(220,150)" to="(360,150)"/> - <wire from="(470,20)" to="(730,20)"/> - <wire from="(730,130)" to="(740,130)"/> - <wire from="(740,780)" to="(750,780)"/> - <wire from="(530,730)" to="(540,730)"/> - <wire from="(530,770)" to="(540,770)"/> - <wire from="(520,360)" to="(530,360)"/> - <wire from="(290,540)" to="(290,800)"/> - <wire from="(430,70)" to="(430,140)"/> - <wire from="(300,550)" to="(300,810)"/> - <wire from="(340,470)" to="(340,730)"/> - <wire from="(560,370)" to="(560,380)"/> - <wire from="(630,720)" to="(630,730)"/> - <wire from="(600,370)" to="(600,380)"/> - <wire from="(310,120)" to="(500,120)"/> - <wire from="(290,400)" to="(290,540)"/> - <wire from="(300,410)" to="(300,550)"/> - <wire from="(340,330)" to="(340,470)"/> - <wire from="(350,50)" to="(530,50)"/> - <wire from="(330,100)" to="(380,100)"/> - <wire from="(290,800)" to="(600,800)"/> - <wire from="(490,60)" to="(490,80)"/> - <wire from="(510,520)" to="(510,540)"/> - <wire from="(430,520)" to="(430,550)"/> - <wire from="(480,330)" to="(480,360)"/> - <wire from="(300,110)" to="(300,140)"/> - <wire from="(530,60)" to="(530,80)"/> - <wire from="(290,130)" to="(290,230)"/> - <wire from="(530,500)" to="(530,540)"/> - <wire from="(290,400)" to="(510,400)"/> - <wire from="(630,760)" to="(630,800)"/> - <wire from="(590,750)" to="(610,750)"/> - <wire from="(590,710)" to="(610,710)"/> - <wire from="(420,660)" to="(580,660)"/> - <wire from="(570,520)" to="(600,520)"/> - <wire from="(420,500)" to="(440,500)"/> + <wire from="(650,730)" to="(650,770)"/> + <wire from="(420,130)" to="(420,230)"/> + <wire from="(710,710)" to="(710,750)"/> + <wire from="(540,90)" to="(560,90)"/> + <wire from="(540,10)" to="(560,10)"/> + <wire from="(470,490)" to="(500,490)"/> + <wire from="(640,750)" to="(660,750)"/> + <wire from="(540,690)" to="(700,690)"/> + <wire from="(460,60)" to="(610,60)"/> + <wire from="(220,210)" to="(430,210)"/> + <wire from="(350,510)" to="(500,510)"/> + <wire from="(460,470)" to="(600,470)"/> + <wire from="(410,10)" to="(410,60)"/> + <wire from="(590,20)" to="(850,20)"/> + <wire from="(650,770)" to="(660,770)"/> + <wire from="(640,360)" to="(650,360)"/> + <wire from="(750,720)" to="(750,730)"/> + <wire from="(720,370)" to="(720,380)"/> + <wire from="(460,470)" to="(460,730)"/> + <wire from="(430,120)" to="(620,120)"/> + <wire from="(460,330)" to="(460,470)"/> + <wire from="(550,70)" to="(550,140)"/> + <wire from="(550,520)" to="(550,550)"/> + <wire from="(600,330)" to="(600,360)"/> + <wire from="(590,800)" to="(590,830)"/> + <wire from="(630,520)" to="(630,540)"/> + <wire from="(650,60)" to="(650,80)"/> + <wire from="(370,450)" to="(370,550)"/> + <wire from="(710,710)" to="(730,710)"/> + <wire from="(540,660)" to="(700,660)"/> + <wire from="(690,520)" to="(720,520)"/> + <wire from="(420,540)" to="(630,540)"/> <wire from="(310,790)" to="(310,900)"/> - <wire from="(480,770)" to="(480,810)"/> - <wire from="(480,370)" to="(480,410)"/> - <wire from="(430,520)" to="(440,520)"/> - <wire from="(340,730)" to="(340,910)"/> - <wire from="(470,80)" to="(480,80)"/> - <wire from="(480,90)" to="(490,90)"/> - <wire from="(480,770)" to="(490,770)"/> - <wire from="(480,370)" to="(490,370)"/> - <wire from="(360,850)" to="(370,850)"/> - <wire from="(300,810)" to="(430,810)"/> - <wire from="(300,410)" to="(430,410)"/> - <wire from="(220,170)" to="(350,170)"/> - <wire from="(750,760)" to="(760,760)"/> - <wire from="(550,120)" to="(560,120)"/> - <wire from="(310,530)" to="(310,790)"/> - <wire from="(350,490)" to="(350,750)"/> - <wire from="(480,810)" to="(730,810)"/> - <wire from="(520,700)" to="(520,710)"/> - <wire from="(360,820)" to="(740,820)"/> - <wire from="(350,750)" to="(350,880)"/> - <wire from="(340,60)" to="(340,190)"/> - <wire from="(310,530)" to="(500,530)"/> - <wire from="(310,390)" to="(310,530)"/> - <wire from="(350,350)" to="(350,490)"/> - <wire from="(330,510)" to="(380,510)"/> - <wire from="(480,550)" to="(660,550)"/> - <wire from="(530,780)" to="(590,780)"/> - <wire from="(500,520)" to="(500,530)"/> - <wire from="(600,730)" to="(600,800)"/> - <wire from="(360,560)" to="(670,560)"/> - <wire from="(360,820)" to="(360,850)"/> - <wire from="(350,50)" to="(350,80)"/> - <wire from="(310,120)" to="(310,210)"/> - <wire from="(350,80)" to="(350,170)"/> - <wire from="(290,130)" to="(510,130)"/> - <wire from="(530,540)" to="(550,540)"/> - <wire from="(220,210)" to="(310,210)"/> - <wire from="(730,20)" to="(730,130)"/> - <wire from="(420,630)" to="(580,630)"/> - <wire from="(420,670)" to="(580,670)"/> - <wire from="(350,350)" to="(380,350)"/> - <wire from="(350,750)" to="(380,750)"/> - <wire from="(350,30)" to="(380,30)"/> - <wire from="(350,880)" to="(370,880)"/> - <wire from="(600,800)" to="(630,800)"/> - <wire from="(470,770)" to="(480,770)"/> - <wire from="(480,500)" to="(490,500)"/> - <wire from="(340,330)" to="(480,330)"/> - <wire from="(470,370)" to="(480,370)"/> + <wire from="(380,280)" to="(850,280)"/> + <wire from="(460,730)" to="(460,910)"/> + <wire from="(360,450)" to="(370,450)"/> + <wire from="(360,290)" to="(370,290)"/> + <wire from="(670,120)" to="(680,120)"/> + <wire from="(370,130)" to="(370,250)"/> + <wire from="(600,770)" to="(610,770)"/> + <wire from="(600,370)" to="(610,370)"/> + <wire from="(370,590)" to="(370,840)"/> + <wire from="(480,820)" to="(860,820)"/> + <wire from="(460,60)" to="(460,190)"/> + <wire from="(370,290)" to="(370,420)"/> + <wire from="(310,790)" to="(430,790)"/> + <wire from="(600,810)" to="(850,810)"/> + <wire from="(480,820)" to="(480,850)"/> + <wire from="(850,130)" to="(850,280)"/> + <wire from="(850,20)" to="(850,130)"/> + <wire from="(470,350)" to="(500,350)"/> + <wire from="(470,750)" to="(500,750)"/> + <wire from="(470,30)" to="(500,30)"/> + <wire from="(650,540)" to="(670,540)"/> + <wire from="(540,630)" to="(700,630)"/> + <wire from="(350,770)" to="(500,770)"/> + <wire from="(350,370)" to="(500,370)"/> <wire from="(280,900)" to="(290,900)"/> - <wire from="(220,230)" to="(290,230)"/> - <wire from="(300,140)" to="(430,140)"/> - <wire from="(520,780)" to="(530,780)"/> - <wire from="(520,500)" to="(530,500)"/> - <wire from="(600,700)" to="(610,700)"/> - <wire from="(750,140)" to="(750,150)"/> - <wire from="(760,750)" to="(760,760)"/> - <wire from="(560,510)" to="(560,520)"/> - <wire from="(600,510)" to="(600,520)"/> - <wire from="(570,760)" to="(620,760)"/> - <wire from="(570,720)" to="(620,720)"/> - <wire from="(340,190)" to="(340,330)"/> - <wire from="(310,790)" to="(490,790)"/> - <wire from="(220,190)" to="(340,190)"/> - <wire from="(360,150)" to="(360,420)"/> - <wire from="(400,710)" to="(400,730)"/> - <wire from="(510,380)" to="(510,400)"/> - <wire from="(430,780)" to="(430,810)"/> - <wire from="(430,380)" to="(430,410)"/> - <wire from="(510,100)" to="(510,130)"/> - <wire from="(480,470)" to="(480,500)"/> - <wire from="(520,710)" to="(520,750)"/> - <wire from="(290,540)" to="(510,540)"/> - <wire from="(530,360)" to="(530,400)"/> - <wire from="(420,640)" to="(580,640)"/> - <wire from="(420,680)" to="(580,680)"/> - <wire from="(340,910)" to="(370,910)"/> - <wire from="(350,80)" to="(380,80)"/> - <wire from="(420,760)" to="(440,760)"/> - <wire from="(570,380)" to="(600,380)"/> - <wire from="(420,360)" to="(440,360)"/> - <wire from="(600,730)" to="(630,730)"/> - <wire from="(480,510)" to="(480,550)"/> - <wire from="(430,780)" to="(440,780)"/> - <wire from="(430,380)" to="(440,380)"/> - <wire from="(480,510)" to="(490,510)"/> - <wire from="(220,110)" to="(300,110)"/> - <wire from="(550,60)" to="(550,120)"/> - <wire from="(220,130)" to="(230,130)"/> - <wire from="(750,60)" to="(750,120)"/> - <wire from="(300,550)" to="(430,550)"/> - <wire from="(550,60)" to="(560,60)"/> - <wire from="(520,710)" to="(530,710)"/> - <wire from="(360,150)" to="(750,150)"/> - <comp lib="0" loc="(600,700)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="7"/> - <a name="incoming" val="7"/> - <a name="appear" val="right"/> - </comp> - <comp lib="0" loc="(740,800)" name="Splitter"> + <wire from="(460,330)" to="(600,330)"/> + <wire from="(640,780)" to="(650,780)"/> + <wire from="(720,700)" to="(730,700)"/> + <wire from="(600,500)" to="(610,500)"/> + <wire from="(220,150)" to="(480,150)"/> + <wire from="(680,510)" to="(680,520)"/> + <wire from="(440,550)" to="(440,810)"/> + <wire from="(690,760)" to="(740,760)"/> + <wire from="(870,140)" to="(870,150)"/> + <wire from="(440,410)" to="(440,550)"/> + <wire from="(430,790)" to="(610,790)"/> + <wire from="(460,190)" to="(460,330)"/> + <wire from="(550,780)" to="(550,810)"/> + <wire from="(550,380)" to="(550,410)"/> + <wire from="(440,110)" to="(440,140)"/> + <wire from="(630,380)" to="(630,400)"/> + <wire from="(410,10)" to="(500,10)"/> + <wire from="(600,510)" to="(600,550)"/> + <wire from="(640,710)" to="(640,750)"/> + <wire from="(470,80)" to="(500,80)"/> + <wire from="(370,840)" to="(850,840)"/> + <wire from="(220,110)" to="(440,110)"/> + <wire from="(540,680)" to="(700,680)"/> + <wire from="(690,380)" to="(720,380)"/> + <wire from="(420,400)" to="(630,400)"/> + <wire from="(720,730)" to="(750,730)"/> + <wire from="(220,130)" to="(370,130)"/> + <wire from="(420,230)" to="(420,400)"/> + <wire from="(870,60)" to="(870,120)"/> + <wire from="(670,60)" to="(680,60)"/> + <wire from="(650,770)" to="(650,780)"/> + <wire from="(820,60)" to="(870,60)"/> + <wire from="(460,730)" to="(520,730)"/> + <wire from="(480,560)" to="(480,820)"/> + <wire from="(600,80)" to="(600,90)"/> + <wire from="(480,420)" to="(480,560)"/> + <wire from="(470,30)" to="(470,50)"/> + <wire from="(850,810)" to="(850,840)"/> + <wire from="(440,550)" to="(550,550)"/> + <wire from="(710,750)" to="(710,780)"/> + <wire from="(620,100)" to="(620,120)"/> + <wire from="(550,30)" to="(550,70)"/> + <wire from="(650,400)" to="(670,400)"/> + <wire from="(540,650)" to="(700,650)"/> + <wire from="(420,130)" to="(630,130)"/> + <wire from="(430,210)" to="(430,390)"/> + <wire from="(470,170)" to="(470,350)"/> + <wire from="(380,450)" to="(780,450)"/> + <wire from="(850,130)" to="(860,130)"/> + <wire from="(860,780)" to="(870,780)"/> + <wire from="(650,730)" to="(660,730)"/> + <wire from="(430,100)" to="(500,100)"/> + <wire from="(550,70)" to="(560,70)"/> + <wire from="(640,80)" to="(650,80)"/> + <wire from="(590,510)" to="(600,510)"/> + <wire from="(600,360)" to="(610,360)"/> + <wire from="(680,370)" to="(680,380)"/> + <wire from="(470,50)" to="(650,50)"/> + <wire from="(780,550)" to="(780,580)"/> + <wire from="(220,190)" to="(460,190)"/> + <wire from="(610,60)" to="(610,80)"/> + <wire from="(600,770)" to="(600,810)"/> + <wire from="(600,370)" to="(600,410)"/> + <wire from="(650,500)" to="(650,540)"/> + <wire from="(750,760)" to="(750,800)"/> + <wire from="(540,500)" to="(560,500)"/> + <wire from="(710,750)" to="(730,750)"/> + <wire from="(480,850)" to="(490,850)"/> + <wire from="(380,580)" to="(780,580)"/> + <wire from="(290,800)" to="(420,800)"/> + <wire from="(220,230)" to="(420,230)"/> + <wire from="(550,520)" to="(560,520)"/> + <wire from="(590,80)" to="(600,80)"/> + <wire from="(600,90)" to="(610,90)"/> + <wire from="(640,700)" to="(640,710)"/> + <wire from="(430,530)" to="(430,790)"/> + <wire from="(470,490)" to="(470,750)"/> + <wire from="(620,520)" to="(620,530)"/> + <wire from="(430,530)" to="(620,530)"/> + <wire from="(470,750)" to="(470,880)"/> + <wire from="(600,550)" to="(780,550)"/> + <wire from="(440,140)" to="(440,410)"/> + <wire from="(430,390)" to="(430,530)"/> + <wire from="(470,350)" to="(470,490)"/> + <wire from="(720,730)" to="(720,800)"/> + <wire from="(480,560)" to="(790,560)"/> + <wire from="(650,780)" to="(710,780)"/> + <wire from="(360,580)" to="(360,590)"/> + <wire from="(440,410)" to="(550,410)"/> + <wire from="(440,810)" to="(550,810)"/> + <wire from="(470,50)" to="(470,80)"/> + <wire from="(430,120)" to="(430,210)"/> + <wire from="(470,80)" to="(470,170)"/> + <wire from="(540,670)" to="(700,670)"/> + <wire from="(720,800)" to="(750,800)"/> + <wire from="(470,880)" to="(490,880)"/> + <wire from="(590,830)" to="(720,830)"/> + <wire from="(590,770)" to="(600,770)"/> + <wire from="(590,370)" to="(600,370)"/> + <wire from="(640,500)" to="(650,500)"/> + <wire from="(720,510)" to="(720,520)"/> + <wire from="(690,720)" to="(740,720)"/> + <wire from="(480,150)" to="(480,420)"/> + <wire from="(440,140)" to="(550,140)"/> + <wire from="(630,100)" to="(630,130)"/> + <wire from="(600,470)" to="(600,500)"/> + <wire from="(520,710)" to="(520,730)"/> + <wire from="(650,360)" to="(650,400)"/> + <wire from="(540,760)" to="(560,760)"/> + <wire from="(540,360)" to="(560,360)"/> + <wire from="(780,410)" to="(780,450)"/> + <wire from="(460,910)" to="(490,910)"/> + <wire from="(540,640)" to="(700,640)"/> + <wire from="(430,60)" to="(430,100)"/> + <wire from="(360,590)" to="(370,590)"/> + <wire from="(670,60)" to="(670,120)"/> + <wire from="(640,710)" to="(650,710)"/> + <wire from="(480,150)" to="(870,150)"/> + <wire from="(550,780)" to="(560,780)"/> + <wire from="(550,380)" to="(560,380)"/> + <wire from="(600,510)" to="(610,510)"/> + <comp lib="1" loc="(370,250)" name="OR Gate"> <a name="facing" val="north"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - <a name="appear" val="right"/> - </comp> - <comp lib="0" loc="(330,510)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xfd"/> - </comp> - <comp lib="3" loc="(420,20)" name="Comparator"> - <a name="mode" val="unsigned"/> - </comp> - <comp lib="0" loc="(330,370)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xfe"/> - </comp> - <comp lib="1" loc="(520,780)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(560,120)" name="Probe"> - <a name="facing" val="west"/> - <a name="label" val="Real Address"/> - <a name="labelloc" val="east"/> - </comp> - <comp lib="3" loc="(420,760)" name="Comparator"> - <a name="mode" val="unsigned"/> + <comp lib="6" loc="(330,373)" name="Text"> + <a name="text" val="Memory Mapped I/O Port Address"/> + <a name="halign" val="right"/> </comp> - <comp lib="1" loc="(740,820)" name="Controlled Buffer"> + <comp lib="0" loc="(790,400)" name="Pin"> <a name="facing" val="south"/> <a name="width" val="8"/> + <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(470,770)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(230,130)" name="Constant"> - <a name="facing" val="west"/> - </comp> - <comp lib="1" loc="(470,370)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="1" loc="(470,510)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="5" loc="(730,710)" name="TTY"> + <a name="cols" val="80"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="3" loc="(420,360)" name="Comparator"> - <a name="mode" val="unsigned"/> + <comp lib="5" loc="(730,750)" name="Keyboard"> + <a name="buflen" val="80"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="1" loc="(570,760)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="1" loc="(790,560)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> </comp> - <comp lib="3" loc="(420,90)" name="Comparator"> + <comp lib="3" loc="(540,20)" name="Comparator"> <a name="mode" val="unsigned"/> </comp> - <comp lib="5" loc="(610,750)" name="Keyboard"> - <a name="buflen" val="80"/> - <a name="trigger" val="falling"/> + <comp lib="6" loc="(329,514)" name="Text"> + <a name="text" val="Memory Mapped I/O Port Address"/> + <a name="halign" val="right"/> </comp> - <comp lib="0" loc="(330,770)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xfc"/> + <comp lib="0" loc="(310,900)" name="Clock"> + <a name="facing" val="north"/> + <a name="label" val="CLOCK"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(550,60)" name="Splitter"> + <comp loc="(220,130)" name="MCU"/> + <comp lib="5" loc="(680,510)" name="Hex Digit Display"/> + <comp lib="0" loc="(670,60)" name="Splitter"> <a name="facing" val="west"/> <a name="incoming" val="16"/> <a name="appear" val="center"/> @@ -4317,116 +4453,206 @@ <a name="bit14" val="1"/> <a name="bit15" val="1"/> </comp> - <comp lib="1" loc="(470,80)" name="AND Gate"> + <comp lib="0" loc="(280,900)" name="Pin"> + <a name="facing" val="north"/> + <a name="tristate" val="false"/> + <a name="label" val="RESET"/> + </comp> + <comp lib="5" loc="(720,370)" name="Hex Digit Display"/> + <comp lib="0" loc="(430,60)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xff"/> + </comp> + <comp lib="3" loc="(540,360)" name="Comparator"> + <a name="mode" val="unsigned"/> + </comp> + <comp lib="4" loc="(640,80)" name="Register"/> + <comp lib="1" loc="(790,420)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="0" loc="(490,850)" name="Probe"> + <a name="facing" val="west"/> + <a name="label" val="Input"/> + <a name="labelloc" val="east"/> + <a name="labelfont" val="SansSerif bold 12"/> + </comp> + <comp lib="0" loc="(520,710)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="1" loc="(590,770)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(570,720)" name="AND Gate"> + <comp lib="5" loc="(720,510)" name="Hex Digit Display"/> + <comp lib="0" loc="(350,510)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfd"/> + </comp> + <comp lib="0" loc="(680,120)" name="Probe"> + <a name="facing" val="west"/> + <a name="label" val="Real Address"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="6" loc="(388,63)" name="Text"> + <a name="text" val="Sets the memory-mapped address range"/> + <a name="halign" val="right"/> + </comp> + <comp lib="3" loc="(540,90)" name="Comparator"> + <a name="mode" val="unsigned"/> + </comp> + <comp lib="0" loc="(410,60)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfc"/> + </comp> + <comp lib="6" loc="(883,753)" name="Text"> + <a name="text" val=" ← Keyboard"/> + <a name="font" val="SansSerif bold 16"/> + <a name="halign" val="left"/> + </comp> + <comp lib="1" loc="(640,780)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate0" val="true"/> </comp> - <comp lib="5" loc="(610,710)" name="TTY"> - <a name="cols" val="80"/> - <a name="trigger" val="falling"/> + <comp lib="0" loc="(670,540)" name="Splitter"> + <a name="facing" val="north"/> + <a name="incoming" val="8"/> + <a name="appear" val="right"/> + <a name="bit1" val="0"/> + <a name="bit2" val="0"/> + <a name="bit3" val="0"/> + <a name="bit4" val="1"/> + <a name="bit5" val="1"/> + <a name="bit6" val="1"/> + <a name="bit7" val="1"/> + </comp> + <comp lib="6" loc="(382,57)" name="Text"> + <a name="halign" val="right"/> + </comp> + <comp lib="1" loc="(590,510)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(370,420)" name="OR Gate"> + <a name="facing" val="north"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="6" loc="(678,17)" name="Text"> + <a name="text" val="PROGRAM MEMORY"/> + <a name="font" val="SansSerif bold 12"/> + <a name="halign" val="left"/> + </comp> + <comp lib="1" loc="(860,780)" name="NOT Gate"> + <a name="facing" val="south"/> + <a name="size" val="20"/> + </comp> + <comp lib="0" loc="(790,540)" name="Pin"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + </comp> + <comp lib="1" loc="(590,20)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> + </comp> + <comp lib="3" loc="(540,760)" name="Comparator"> + <a name="mode" val="unsigned"/> </comp> - <comp lib="4" loc="(520,360)" name="Register"/> - <comp lib="5" loc="(600,510)" name="Hex Digit Display"/> - <comp lib="4" loc="(700,60)" name="ROM"> + <comp lib="4" loc="(820,60)" name="ROM"> <a name="addrWidth" val="16"/> <a name="contents">addr/data: 16 8 -30 3 4b c4 33 7f 9f 3 +3 4b c4 30 33 7f 9f 3 63 a7 db 83 9 ab 9b 23 43 e7 83 23 bf ab f2 3 5f f7 83 0 2b 43 db 83 -2d 83 4 3 4b f7 83 4 -3f 7f f6 83 4 3 4b 9f -a7 93 33 7f 9f ab a3 52 -f7 83 0 83 2f +2e 83 3 3 4b f7 83 3 +7 43 10 de 83 3 3 4b +9f a7 93 33 7f 9f ab a3 +52 f7 83 0 83 30 </a> </comp> - <comp lib="0" loc="(330,10)" name="Constant"> + <comp lib="0" loc="(350,770)" name="Constant"> <a name="width" val="8"/> - <a name="value" val="0xf0"/> - </comp> - <comp lib="3" loc="(420,500)" name="Comparator"> - <a name="mode" val="unsigned"/> + <a name="value" val="0xfc"/> </comp> - <comp lib="0" loc="(370,880)" name="Probe"> - <a name="facing" val="west"/> - <a name="label" val="Address"/> - <a name="labelloc" val="east"/> + <comp lib="1" loc="(690,760)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="5" loc="(560,370)" name="Hex Digit Display"/> - <comp lib="0" loc="(400,710)" name="Splitter"> + <comp lib="5" loc="(680,370)" name="Hex Digit Display"/> + <comp lib="0" loc="(860,800)" name="Splitter"> + <a name="facing" val="north"/> <a name="fanout" val="8"/> <a name="incoming" val="8"/> + <a name="appear" val="right"/> </comp> - <comp lib="0" loc="(280,900)" name="Pin"> - <a name="facing" val="north"/> - <a name="tristate" val="false"/> - </comp> - <comp lib="1" loc="(750,140)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> + <comp lib="1" loc="(590,80)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(470,20)" name="AND Gate"> + <comp lib="4" loc="(640,500)" name="Register"/> + <comp lib="1" loc="(590,370)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(670,540)" name="Pin"> + <comp lib="0" loc="(350,370)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfe"/> + </comp> + <comp lib="1" loc="(870,140)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> </comp> - <comp lib="5" loc="(600,370)" name="Hex Digit Display"/> - <comp lib="1" loc="(740,780)" name="NOT Gate"> + <comp lib="1" loc="(860,820)" name="Controlled Buffer"> <a name="facing" val="south"/> - <a name="size" val="20"/> + <a name="width" val="8"/> + </comp> + <comp lib="0" loc="(870,760)" name="Splitter"> + <a name="facing" val="south"/> + <a name="fanout" val="7"/> + <a name="incoming" val="7"/> </comp> - <comp lib="0" loc="(370,850)" name="Probe"> + <comp lib="0" loc="(490,880)" name="Probe"> <a name="facing" val="west"/> - <a name="label" val="Input"/> + <a name="label" val="Address"/> <a name="labelloc" val="east"/> + <a name="labelfont" val="SansSerif bold 12"/> + </comp> + <comp lib="6" loc="(656,608)" name="Text"> + <a name="text" val="Output:"/> + <a name="font" val="SansSerif bold 16"/> + <a name="halign" val="left"/> + </comp> + <comp lib="3" loc="(540,500)" name="Comparator"> + <a name="mode" val="unsigned"/> </comp> - <comp lib="5" loc="(560,510)" name="Hex Digit Display"/> - <comp lib="0" loc="(760,750)" name="Probe"> + <comp lib="0" loc="(720,700)" name="Splitter"> <a name="facing" val="west"/> - <a name="radix" val="10unsigned"/> + <a name="fanout" val="7"/> + <a name="incoming" val="7"/> + <a name="appear" val="right"/> </comp> - <comp lib="0" loc="(370,910)" name="Probe"> + <comp lib="0" loc="(490,910)" name="Probe"> <a name="facing" val="west"/> <a name="label" val="Output"/> <a name="labelloc" val="east"/> + <a name="labelfont" val="SansSerif bold 12"/> </comp> - <comp lib="4" loc="(520,80)" name="Register"/> - <comp lib="0" loc="(310,900)" name="Clock"> - <a name="facing" val="north"/> - </comp> - <comp lib="1" loc="(670,560)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - </comp> - <comp lib="4" loc="(520,500)" name="Register"/> - <comp lib="0" loc="(550,540)" name="Splitter"> + <comp lib="4" loc="(640,360)" name="Register"/> + <comp lib="1" loc="(370,550)" name="OR Gate"> <a name="facing" val="north"/> - <a name="incoming" val="8"/> - <a name="appear" val="right"/> - <a name="bit1" val="0"/> - <a name="bit2" val="0"/> - <a name="bit3" val="0"/> - <a name="bit4" val="1"/> - <a name="bit5" val="1"/> - <a name="bit6" val="1"/> - <a name="bit7" val="1"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp loc="(220,130)" name="MCU"/> - <comp lib="1" loc="(670,420)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> + <comp lib="1" loc="(690,720)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate0" val="true"/> </comp> - <comp lib="0" loc="(550,400)" name="Splitter"> + <comp lib="0" loc="(670,400)" name="Splitter"> <a name="facing" val="north"/> <a name="incoming" val="8"/> <a name="appear" val="right"/> @@ -4438,19 +4664,9 @@ f7 83 0 83 2f <a name="bit6" val="1"/> <a name="bit7" val="1"/> </comp> - <comp lib="0" loc="(330,100)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xff"/> - </comp> - <comp lib="0" loc="(670,400)" name="Pin"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - </comp> - <comp lib="0" loc="(750,760)" name="Splitter"> - <a name="facing" val="south"/> - <a name="fanout" val="7"/> - <a name="incoming" val="7"/> + <comp lib="6" loc="(331,773)" name="Text"> + <a name="text" val="Memory Mapped I/O Port Address"/> + <a name="halign" val="right"/> </comp> </circuit> </project> diff --git a/CPU/logism.jar b/CPU/logism.jar Binary files differ. diff --git a/ExamplePrograms/README.md b/ExamplePrograms/README.md @@ -10,37 +10,38 @@ Each assembly line must start with either a comment, An Instruction: - [opcode] [arguements] + [opcode] [arguments] Or a label, followed with an instruction, - [label]: [opcode] [arguements] + [label]: [opcode] [arguments] Please refer to other examples as reference. -### Arguement Legend +### Argument Legend - * `A,B,C` specifies the positional arguements as types + * `A,B,C` specifies the positional arguments as types - * `<GR>` specifies the arguement type as a General Register + * `<GR>` specifies the argument type as a General Register * The following types are accepted: * `GRA` General Purpose Register A * `GRB` General Purpose Register B * `GRC` General Purpose Register C + * `NIL` No register referenced - * `<label>` specifies the arguement as a label + * `<label>` specifies the argument as a label -## 0 Arguement Instructions +## 0 Argument Instructions -Do nothing and reset comparsion operation +Do nothing and reset the set operation to ADD nop - Push GRC to the stack +Push GRA to the stack push -Pop the stack to GRC +Pop the stack to GRA pop @@ -48,42 +49,67 @@ Program Counter Read - get the program counters current address pcr -Set Comparsion Operation - `cmp` instruction will compare for `A > B` +Set ADD Operation for `cmp` and `op` instructions. `cmp` will flag if there is +an overflow. `op` will perform addition. - sco_gthan + sop_add -Set Comparison Operation - `cmp` instruction will compare for `A + B > 255` +Set SUBTRACT Operation for `cmp` and `op` instructions. `cmp` will flag if the +result has a positive sign. `op` will perform subtraction. - sco_oflow + sop_sub -Set Comparison Operation - `cmp` instruction will compare for `A & B == 0` +Set AND Operation for `cmp` and `op` instructions. `cmp` will flag if the result +is nonzero. `op` will perform bitwise AND. - sco_andeq + sop_and -Set Comparison Operation - `cmp` instruction will compare for `A ^ B == 0` +Set XOR Operation for `cmp` and `op` instructions. `cmp` will flag if the result +is nonzero. `op` will perform bitwise XOR. - sco_xoreq + sop_xor + +Set XNOR Operation for `cmp` and `op` instructions. `cmp` will flag if the +result is nonzero. `op` will perform bitwise XNOR. + + sop_xnor + +Set CIN Operation for `cmp` and `op` instructions. `cmp` will flag if there is +an overflow. `op` will perform with the carry in set. + + sop_cin + +Set Left Shift operation for `cmp` and `op` instructions. `cmp` will flag if +there is overflow. `op` will perform A << B. + + sop_lsh + +Set Right Shift operation for `cmp` and `op` instructions. `cmp` will flag if +there is underflow. `op` will perform A >> B. + + sop_rsh Increment memory pointer (set with the `sp` instruction) by `1` ptrinc -## 1 Arguement Instructions +## 1 Argument Instructions Load immediate to `GRC`. This is a macro for successive lli and lui instructions li A<0-255> -Load Lower Immediate to `GRC`, Least Significant 4 bits of a byte 'nibble' +Load Lower Immediate to `GRC`, Least Significant 4 bits of a byte lli A<0-15> -Load Upper Immediate to `GRC`, Most Significant 4 bits of a byte 'nibble' +Load Upper Immediate to `GRC`, Most Significant 4 bits of a byte > Note: This operation ORs the contents of `GRC`. (you may find this useful) lui A<0-15> -Jumps to particular label. This jump will be conditional if following a cmp +Jumps to particular label unless the flag is set by the `cmp` instruction +executed prior to the `jmp` instruction. jmp A<label> @@ -99,13 +125,13 @@ Set the memory pointer to specify a specific address in RAM from the specified r sp A<GR> -# 2 Arguement Instructions +# 2 Argument Instructions Increment the specified register `A` and save in register `B` cin A<GR> B<GR> -Move the conents of `A` to `B` +Move the contents of `A` to `B` mov A<GR> B<GR> @@ -113,17 +139,16 @@ Compare `A` and `B` and generate a flag based on the current compare operation cmp A<GR> B<GR> -# 3 Arguement Instructions +# 3 Argument Instructions Logical OR the contents of `A` and `B`, store the result in `C` or A<GR> B<GR> C<GR> Logical NAND the contents of `A` and `B`, store the result in `C` -> NOTE: Considering using this instruction spot for a generic 'do operation' from the currently configured operations that are set by the `sco_*` functions nand A<GR> B<GR> C<GR> -Add the contents of `A` and `B`, store the result in `C` +Perform the operation configured with the `sco_*` opcode, with `A` and `B`, store the result in `C` - add A<GR> B<GR> C<GR> + op A<GR> B<GR> C<GR> diff --git a/ExamplePrograms/fibb_test.tac b/ExamplePrograms/fibb_test.tac @@ -1,21 +1,26 @@ # This program computes the classic Fibbonacci sequence +###################### Clear GRA and GRB start: li 0 mov GRA GRB +###################### Set our memory pointer li 254 sp GRA +###################### Set our inital state li 1 mov GRA GRC - li 144 - sb GRC -loop: add GRB GRC GRB - push - mov GRB GRA - push - mov GRC GRB - pop - mov GRA GRC - pop - sb GRC - cmp GRB GRA +###################### Printout current state +loop: sb GRB +###################### Swap GRB and GRC + sop_xor + op GRB GRC GRC + op GRB GRC GRB + op GRB GRC GRC +###################### Add GRB and GRC + sop_add + op GRB GRC GRB +###################### Test if we've reached the limit if GRA+GRB overflows + cmp GRB GRC jmp loop +###################### Idle around forever + sb GRB end: jmp end \ No newline at end of file diff --git a/ExamplePrograms/test_compare.tac b/ExamplePrograms/test_compare.tac @@ -1,8 +1,8 @@ -# This program tests the compare modes set by sco_* +# This program tests the compare modes set by sop_* # If we end up jumping to the loop tag, we've failed the test start: li 255 mov GRA GRB - sco_xoreq + sop_xor cmp GRA GRB jmp next0 jmp loop @@ -10,15 +10,15 @@ next0: li 0 cmp GRA GRB jmp loop jmp next1 -next1: sco_andeq +next1: sop_and cmp GRA GRB jmp next2 jmp loop -next2: sco_gthan +next2: sop_sub cmp GRA GRB jmp next3 jmp loop -next3: sco_oflow +next3: sop_add cin GRA GRA cmp GRA GRB loop: jmp loop diff --git a/ExamplePrograms/typing_test.tac b/ExamplePrograms/typing_test.tac @@ -1,36 +1,53 @@ # This program reads the input from the 'keyboard' component and records in a # buffer until the user presses the return key, at that point it dumps the -# buffer. The buffer will step back when the backspace key is pressed. -setup: sco_xoreq - li 32 +# buffer. +###################### Set up our buffer pointer to live in GRC +setup: li 32 mov GRA GRC -poll: li 252 +###################### Set up our polling address +poll: sop_xor + li 252 sp GRA +###################### Load the bitmask for available data li 128 +###################### Poll until data is available p_loop: lb GRB cmp GRB GRA - jmp p_loop -buffer: sb GRB + jmp p_loop +###################### Handle buffering the data and echo +###################### Echo the byte + sb GRB +###################### Clears the byte out of the buffer in the keyboard sb GRA +###################### Did we read a backspace character? If so, handle that li 8 cmp GRA GRB jmp bcksp +###################### Write the byte in the buffer in RAM sp GRC sb GRB +###################### Increment the buffer pointer cin GRC GRC +###################### If we have reached the end of the buffer, restart li 112 cmp GRA GRC jmp setup +###################### If the user pressed the enter key, output the buffer li 10 cmp GRB GRA jmp output jmp poll +###################### Handle backspaces bcksp: li 32 +###################### Are we at the start of the buffer? If so, we can return cmp GRA GRC jmp poll - li 255 - add GRA GRC GRC +###################### Decrement the buffer pointer + li 1 + sop_sub + op GRC GRA GRC jmp poll +###################### Echo out all the things in the buffer to the TTY output: li 32 o_loop: sp GRA lb GRB diff --git a/ExamplePrograms/weird_loop_test.tac b/ExamplePrograms/weird_loop_test.tac @@ -10,8 +10,8 @@ start: nop nop pcr lli 4 - add GRA GRC GRA + op GRA GRC GRA cin GRA GRB sp GRB sb GRA - jmp start -\ No newline at end of file + jmp start diff --git a/INSTRUCTION_SET b/INSTRUCTION_SET @@ -1,4 +1,4 @@ -TISCv1.2 (c) Paul Longtine <paul@nanner.co> +TISCv1.3 (c) Paul Longtine <paul@nanner.co> Tiny Instruction Set Computer __________ ___ ________ ________ @@ -7,38 +7,42 @@ Tiny Instruction Set Computer \ \ \ \ \ \ \ \_____ \ \ \ \ \ \ \ \ \ \ \|____|\ \ \ \ \____ \ \__\ \ \__\ ____\_\ \ \ \_______\ - \|__| \|__| |\_________\ \|_______| v1.2 + \|__| \|__| |\_________\ \|_______| v1.3 \|_________| -----------------------------------------------------------------------<-------- RAW - memonic - description -----------------------------------------------------------------------<-------- -00000000 - NOP ----- This will default the comparison operation +00000000 - NOP ----- This will default the set operation (to ADD) C B A 00 - OR ----- C = A || B -00000000 - SCMP_GTHAN ----- CMP will A>B and flag if true -00010000 - SCMP_OFLOW ----- CMP will A+B and flag if there's overflow -00100000 - SCMP_ANDEQ ----- CMP will A&B and flag if the output is 0 -00110000 - SCMP_XOREQ ----- CMP will A^B and flag if the output is 0 +00000000 - SOP_ADD ----- SetOp ADD, flag if overflow +00010000 - SOP_SUB ----- SetOp SUB, A-B and flag if sign is positive +00100000 - SOP_AND ----- SetOp AND, A&B and flag if the output is nonzero +00110000 - SOP_XOR ----- SetOp XOR, A^B and flag if the output is nonzero +01000000 - SOP_XNOR ----- SetOp XNOR, ~(A^B) and flag if the output is nonzero +01010000 - SOP_CIN ----- SetOp CIN, CMP will A+B+1 and flag if overflow +01100000 - SOP_LSH ----- SetOp LSH, lshift A by B bits, flag if overflow +01110000 - SOP_RSH ----- SetOp RSH, rshift A by B bits, flag if underflow 11110000 - PTRINC ----- Increment pointer by 1 C B A 01 - NAND ----- C = A nand B -C B A 10 - ADD ----- C = A + B +C B A 10 - OP ----- C = A (OP) B - perform operation set by SOP_* C B 0010 - CIN ----- C = ++B -00<lo>11 - LLI ----- load lower immediate to GRC -01<hi>11 - LUI ----- load upper immediate to GRC -10000011 - JMP ----- jmp to address in next program word if flag is true -10010011 - PUS ----- Push GRA to stack +00<lo>11 - LLI ----- Load lower immediate to GRA +01<hi>11 - LUI ----- Load upper immediate to GRA +10000011 - JMP ----- JMP to address in next program word if flag is false +10010011 - PSH ----- Push GRA to stack 10100011 - POP ----- Pop stack to reg GRA 10110011 - PCR ----- Get current line and save to register GRC 10B 0111 - LB ----- Load word from mem pointer to ARGB GPR 10B 1011 - SB ----- Store contents of ARGB GPR to mem pointer -10B 1111 - SP ----- set pointer ARGB -11B A 11 - CMP ----- sets flag on comparison operation +10B 1111 - SP ----- Set pointer ARGB GPR +11B A 11 - CMP ----- Computes flag on set operation -----------------------------------------------------------------------<-------- C = Arguement C / ARGC B = Arguement B / ARGB A = Arguement A / ARGA -GRA = General Purpose Register A -GRB = General Purpose Register B -GRC = General Purpose Register C -\ No newline at end of file +GRA = General Purpose Register A = 0b01 +GRB = General Purpose Register B = 0b10 +GRC = General Purpose Register C = 0b11 +\ No newline at end of file diff --git a/README.md b/README.md @@ -1,20 +1,38 @@ # Tiny Instruction Set Computer -This is a for-fun implementation of a relatively simple microarchitecture, with +This is a for-fun implementation of a relatively simple micro-architecture, with an assembler to program the simulated implementation in [Logisim](http://www.cburch.com/logisim/). -![TISC v1.2](Screenshots/tiscv1_2.png) +![TISC v1.3](Screenshots/tiscv1_3.png) ## Want to play with it too? -To compile the assembler, I reccomend using GCC: +The default program loaded in the ExampleConfigurationROM circuit is the +`ExamplePrograms/typing_test.tac` program. The program is an interactive demo +which processes text input from the keyboard component and echoes the text out +to the TTY component. In addition, the program buffers 32 characters and echoes +the buffer once the user inputs a line feed (enter key). - gcc tisc.c +![TISC Example configuration](Screenshots/tiscv1_3_example.png) -To start Logisim with the provided .jar file: +## Compiling the assembler - java -jar CPU/logisim.jar CPU/CPU.circ +To compile the assembler, I recommend using GCC: -Otherwise, if you already have logisim installed on your computer I reccomend using that version instead. I have the .jar file packaged to make the project more portable + gcc tisc.c -o tisc -I recommend getting familiar with Logisim if you'd like to play with this circuit until there are more sophisticated peripherals available in the Logisim implementation +## Using the assembler + +Once the assembler is compiled, you can assemble TISC assembly code like so: + + tisc <input file> <output file> + +If the assembler found no errors in the code, the output file will contain the +program that is ready to load into the Logisim circuit. + +## Loading a program + +The provided example application in the circuit ExampleConfigurationROM is a +configuration with memory-mapped I/O. The I/O at memory address 0xFF is a ROM +that acts as the program memory. Left-clicking on the component and selecting +'Load Image' will allow you to load memory images generated by the assembler. diff --git a/Screenshots/tiscv1_2.png b/Screenshots/tiscv1_2.png Binary files differ. diff --git a/Screenshots/tiscv1_3.png b/Screenshots/tiscv1_3.png Binary files differ. diff --git a/Screenshots/tiscv1_3_example.png b/Screenshots/tiscv1_3_example.png Binary files differ. diff --git a/tisc.c b/tisc.c @@ -3,13 +3,15 @@ #include <stdint.h> #include <string.h> -#define TOT_INSTRUCTIONS 22 +#define TOT_INSTRUCTIONS 26 #define MAX_SYMBOLS 1000 #define MAX_SYMBOL_LEN 100 #define MAX_LINE_LEN 100 #define MAX_INSTYPES 4 #define MAX_PGR_SIZE 0xFF +#define NR 0x0 +#define NR_STRING "NIL" #define GR_A 0x1 #define GR_A_STRING "GRA" #define GR_B 0x2 @@ -133,6 +135,10 @@ uint8_t getRegisterEnumeration(char* string) { return GR_C; } else + if ((string != NULL) && (strncmp(string, NR_STRING, strlen(NR_STRING)) == 0)) + { + return NR; + } return 0xFF; } @@ -288,10 +294,14 @@ InstructionDefinition_t definitions[TOT_INSTRUCTIONS] = { "push", 0, 1, 0x93, assemble_0arg }, { "pop", 0, 1, 0xA3, assemble_0arg }, { "pcr", 0, 1, 0xB3, assemble_0arg }, - { "sco_gthan", 0, 1, 0x00, assemble_0arg }, - { "sco_oflow", 0, 1, 0x10, assemble_0arg }, - { "sco_andeq", 0, 1, 0x20, assemble_0arg }, - { "sco_xoreq", 0, 1, 0x30, assemble_0arg }, + { "sop_add", 0, 1, 0x00, assemble_0arg }, + { "sop_sub", 0, 1, 0x10, assemble_0arg }, + { "sop_and", 0, 1, 0x20, assemble_0arg }, + { "sop_xor", 0, 1, 0x30, assemble_0arg }, + { "sop_xnor", 0, 1, 0x40, assemble_0arg }, + { "sop_cin", 0, 1, 0x50, assemble_0arg }, + { "sop_lsh", 0, 1, 0x60, assemble_0arg }, + { "sop_rsh", 0, 1, 0x70, assemble_0arg }, { "ptrinc", 0, 1, 0xF0, assemble_0arg }, { "li", 1, 2, 0x00, assemble_li }, { "lli", 1, 1, 0x03, assemble_immediate }, @@ -305,7 +315,7 @@ InstructionDefinition_t definitions[TOT_INSTRUCTIONS] = { "cmp", 2, 1, 0xC3, assemble_2arg }, { "or", 3, 1, 0x00, assemble_3arg }, { "nand", 3, 1, 0x01, assemble_3arg }, - { "add", 3, 1, 0x02, assemble_3arg } + { "op", 3, 1, 0x02, assemble_3arg } }; InstructionDefinition_t* getInstructionFromOpcode(const char *opcode)