tisc

tiny instruction set computer
Log | Files | Refs | README

commit c27b72dc30c4b6d1e58e1710b7a50c1b1ba57cc4
parent 893d985dea9375bb362e3269df29e2d636b7beb1
Author: Paul Longtine <paul@nanner.co>
Date:   Thu, 23 Jun 2022 02:28:52 -0400

TISCv2.3 Utilized mode of `sp`, `lb`, `sb` instructions to use the stack

 * Bugfixes with lni instruction

 * Bugfixes in the tisc assembler

 * The tisc assembly code supports comments at the end of instructions

 * Incorporated two new meta-instructions in the tisc assembler:

   - getlabel, segment

 * Supports expanded address range via segments (see test_segments.tac)

Diffstat:
MCPU/CPU.circ | 3373++++++++++++++++++++++++++++++++++++++++---------------------------------------
MExamplePrograms/README.md | 37+++++++++++++++++++++++++++++--------
MExamplePrograms/fibb_test.tac | 2+-
MExamplePrograms/routine_test.tac | 8++++++--
MExamplePrograms/terminal_test.tac | 133+++++++++++++++++++++++++++++++++++++++++--------------------------------------
AExamplePrograms/test_segments.tac | 46++++++++++++++++++++++++++++++++++++++++++++++
MExamplePrograms/typing_test.tac | 8+++++---
MExamplePrograms/weird_loop_test.tac | 42+++++++++++++++++++++++-------------------
MINSTRUCTION_SET | 12++++++++----
MREADME.md | 8++++----
DScreenshots/tiscv2_2.png | 0
DScreenshots/tiscv2_2_example.png | 0
AScreenshots/tiscv2_3.png | 0
AScreenshots/tiscv2_3_example.png | 0
Mtisc.c | 256+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
15 files changed, 2070 insertions(+), 1855 deletions(-)

diff --git a/CPU/CPU.circ b/CPU/CPU.circ @@ -76,7 +76,7 @@ <path d="M53,12 Q57,22 61,12" fill="none" stroke="#808080" stroke-width="2"/> <rect fill="none" height="161" stroke="#000000" stroke-width="2" width="120" x="40" y="11"/> <rect fill="#707070" height="160" stroke="#000000" width="119" x="40" y="10"/> - <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="86" y="159">tisc v2.2</text> + <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="86" y="159">tisc v2.3</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="152" y="43">IO ENABLE</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="152" y="85">INPUT</text> <text fill="#fafafa" font-family="Dialog" font-size="10" text-anchor="end" x="153" y="124">ADDRESS</text> @@ -188,8 +188,8 @@ <wire from="(460,240)" to="(480,240)"/> <wire from="(140,440)" to="(350,440)"/> <wire from="(230,90)" to="(250,90)"/> - <wire from="(220,320)" to="(240,320)"/> <wire from="(330,200)" to="(480,200)"/> + <wire from="(220,320)" to="(240,320)"/> <wire from="(470,220)" to="(480,220)"/> <wire from="(220,130)" to="(230,130)"/> <wire from="(190,260)" to="(200,260)"/> @@ -199,66 +199,44 @@ <wire from="(210,110)" to="(210,230)"/> <wire from="(260,250)" to="(460,250)"/> <wire from="(330,190)" to="(400,190)"/> - <comp lib="2" loc="(170,280)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(510,300)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="label" val="IO ACTIVE"/> - <a name="labelloc" val="east"/> + <comp lib="6" loc="(303,244)" name="Text"> + <a name="text" val="TISCv2.3"/> + <a name="font" val="Dialog plain 14"/> </comp> - <comp lib="2" loc="(400,210)" name="Multiplexer"> + <comp lib="0" loc="(290,340)" name="Constant"> <a name="facing" val="north"/> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> </comp> + <comp loc="(280,150)" name="GPR"/> <comp lib="1" loc="(310,340)" name="AND Gate"> <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(450,360)" name="Pin"> - <a name="facing" val="west"/> + <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="IN"/> - <a name="labelloc" val="east"/> + <a name="enable" val="false"/> </comp> <comp lib="6" loc="(290,239)" name="Text"/> - <comp loc="(260,130)" name="ALU"/> - <comp lib="0" loc="(510,320)" name="Pin"> + <comp lib="0" loc="(510,440)" 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="label" val="RST"/> <a name="labelloc" val="east"/> </comp> - <comp loc="(280,150)" name="GPR"/> - <comp lib="1" loc="(430,230)" name="AND Gate"> - <a name="facing" val="west"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate0" val="true"/> + <comp lib="2" loc="(400,210)" name="Multiplexer"> + <a name="facing" val="north"/> + <a name="selloc" val="tr"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp loc="(230,170)" name="ISD"/> - <comp lib="0" loc="(510,420)" name="Pin"> + <comp lib="0" loc="(510,340)" name="Pin"> <a name="facing" val="west"/> - <a name="tristate" val="false"/> - <a name="pull" val="down"/> - <a name="label" val="CLK"/> + <a name="output" val="true"/> + <a name="label" val="WRITE ACTIVE"/> <a name="labelloc" val="east"/> </comp> - <comp loc="(200,90)" name="STK"/> - <comp lib="4" loc="(380,300)" name="RAM"> - <a name="bus" val="separate"/> - </comp> - <comp loc="(160,210)" name="PC"/> <comp lib="0" loc="(450,400)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> @@ -277,31 +255,53 @@ <a name="label" val="OUT"/> <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(510,340)" name="Pin"> + <comp lib="0" loc="(510,300)" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> - <a name="label" val="WRITE ACTIVE"/> + <a name="label" val="IO ACTIVE"/> <a name="labelloc" val="east"/> </comp> - <comp lib="2" loc="(290,80)" name="Multiplexer"> - <a name="select" val="2"/> + <comp loc="(230,170)" name="ISD"/> + <comp loc="(200,90)" name="STK"/> + <comp lib="0" loc="(450,360)" name="Pin"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + <a name="pull" val="down"/> + <a name="label" val="IN"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="2" loc="(170,280)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="selloc" val="tr"/> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="6" loc="(303,244)" name="Text"> - <a name="text" val="TISCv2.2"/> - <a name="font" val="Dialog plain 14"/> + <comp lib="1" loc="(430,230)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate0" val="true"/> </comp> - <comp lib="0" loc="(290,340)" name="Constant"> - <a name="facing" val="north"/> + <comp lib="0" loc="(510,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="(510,440)" name="Pin"> + <comp lib="0" loc="(510,320)" 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="IO ENABLE"/> <a name="labelloc" val="east"/> </comp> + <comp loc="(260,130)" name="ALU"/> + <comp loc="(160,210)" name="PC"/> + <comp lib="4" loc="(380,300)" name="RAM"> + <a name="bus" val="separate"/> + </comp> </circuit> <circuit name="ALU"> <a name="circuit" val="ALU"/> @@ -671,705 +671,681 @@ <wire from="(770,200)" to="(780,200)"/> <wire from="(530,280)" to="(540,280)"/> <wire from="(870,100)" to="(870,150)"/> - <comp lib="1" loc="(280,650)" name="OR Gate"> + <comp lib="1" loc="(240,760)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(680,70)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a2"/> - </comp> <comp lib="0" loc="(390,730)" name="Tunnel"> <a name="label" val="o7"/> </comp> - <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="(190,670)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="2" loc="(810,190)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(340,280)" name="XNOR 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="6" loc="(602,74)" name="Text"> - <a name="text" val="Input B"/> - </comp> - <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 lib="0" loc="(570,40)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(300,240)" name="AND 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"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(270,140)" 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"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(330,850)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <comp lib="0" loc="(130,210)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a1"/> </comp> - <comp lib="0" loc="(670,260)" name="Tunnel"> - <a name="label" val="o2"/> + <comp lib="0" loc="(670,280)" name="Tunnel"> + <a name="label" val="o4"/> </comp> - <comp lib="0" loc="(130,540)" name="Tunnel"> + <comp lib="0" loc="(130,480)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b5"/> + <a name="label" val="a4"/> </comp> - <comp lib="0" loc="(130,630)" name="Tunnel"> + <comp lib="1" loc="(250,100)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(680,100)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b6"/> + <a name="label" val="a5"/> </comp> - <comp lib="6" loc="(481,532)" name="Text"> - <a name="text" val="DYN OP"/> + <comp lib="0" loc="(670,300)" name="Tunnel"> + <a name="label" val="o6"/> </comp> - <comp lib="0" loc="(130,660)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a6"/> + <comp lib="2" loc="(820,90)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(190,640)" 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="1" loc="(250,640)" name="NOR Gate"> + <comp lib="1" loc="(190,490)" name="XOR 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="0" loc="(130,180)" name="Tunnel"> + <comp lib="0" loc="(550,70)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b1"/> + <a name="label" val="b2"/> </comp> - <comp lib="1" loc="(310,780)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(190,220)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(390,190)" name="Tunnel"> - <a name="label" val="o1"/> - </comp> - <comp lib="1" loc="(310,510)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(280,110)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="3" loc="(1060,80)" name="Comparator"> - <a name="width" val="4"/> + <comp lib="0" loc="(680,80)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a3"/> </comp> - <comp lib="1" loc="(330,400)" 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="(250,730)" name="NOR Gate"> + <comp lib="1" loc="(280,470)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(310,420)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(250,280)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(670,250)" name="Tunnel"> - <a name="label" val="o1"/> - </comp> - <comp lib="6" loc="(736,75)" name="Text"> - <a name="text" val="Input A"/> - </comp> - <comp lib="6" loc="(355,906)" name="Text"> - <a name="text" val="FLAG"/> - </comp> - <comp lib="0" loc="(670,270)" name="Tunnel"> - <a name="label" val="o3"/> - </comp> - <comp lib="1" loc="(830,280)" name="OR Gate"> - <a name="size" val="70"/> - <a name="inputs" val="8"/> + <comp lib="0" loc="(390,640)" name="Tunnel"> + <a name="label" val="o6"/> </comp> - <comp lib="1" loc="(190,760)" name="XOR Gate"> + <comp lib="1" loc="(190,730)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(250,370)" name="NOR Gate"> + <comp lib="0" loc="(130,90)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b0"/> + </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="(300,150)" name="AND Gate"> + <comp lib="0" loc="(700,40)" name="Pin"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + </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="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="0" loc="(750,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="!B"/> + <comp lib="1" loc="(190,370)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(472,443)" name="Text"> - <a name="text" val="ALU STATE"/> - </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="(270,500)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> - </comp> - <comp lib="0" loc="(130,210)" name="Tunnel"> + <comp lib="0" loc="(680,20)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a1"/> + <a name="width" val="8"/> + <a name="label" val="A"/> </comp> - <comp lib="0" loc="(130,90)" name="Tunnel"> + <comp lib="0" loc="(760,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="OR"/> + </comp> + <comp lib="0" loc="(130,120)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b0"/> + <a name="label" val="a0"/> </comp> - <comp lib="1" loc="(340,370)" name="XNOR Gate"> + <comp lib="1" loc="(340,100)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(300,810)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="0" loc="(670,290)" name="Tunnel"> + <a name="label" val="o5"/> + </comp> + <comp lib="0" loc="(390,550)" name="Tunnel"> + <a name="label" val="o5"/> + </comp> + <comp lib="1" loc="(190,130)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(270,230)" name="AND Gate"> + <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="0" loc="(300,70)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="CI"/> - </comp> - <comp lib="1" loc="(280,470)" name="OR Gate"> + <comp lib="1" loc="(240,220)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(500,550)" name="Pin"> - <a name="width" val="4"/> - <a name="tristate" val="false"/> + <comp lib="0" loc="(780,180)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(340,640)" name="XNOR Gate"> + <comp lib="1" loc="(340,730)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,220)" name="AND Gate"> + <comp lib="1" loc="(190,760)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(390,280)" name="Tunnel"> - <a name="label" val="o2"/> - </comp> - <comp lib="1" loc="(330,310)" name="AND 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> - <comp lib="2" loc="(810,190)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(740,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="!A"/> </comp> - <comp lib="3" loc="(930,160)" name="Shifter"> - <a name="shift" val="lr"/> + <comp lib="0" loc="(710,320)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(300,780)" name="AND Gate"> + <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="0" loc="(130,270)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b2"/> - </comp> - <comp lib="0" loc="(130,720)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b7"/> - </comp> - <comp lib="1" loc="(280,110)" 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="3" loc="(930,110)" name="Shifter"/> - <comp lib="1" loc="(250,100)" name="NOR Gate"> + <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="1" loc="(280,290)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(680,120)" name="Tunnel"> + <comp lib="0" loc="(130,570)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a7"/> + <a name="label" val="a5"/> </comp> - <comp lib="1" loc="(240,400)" name="AND Gate"> + <comp lib="1" loc="(340,280)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(550,50)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b0"/> - </comp> - <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="0" loc="(130,450)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b4"/> - </comp> - <comp lib="0" loc="(550,20)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="width" val="8"/> - <a name="label" val="B"/> - </comp> - <comp lib="1" loc="(270,680)" name="AND Gate"> + <comp lib="1" loc="(190,280)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(670,240)" name="Tunnel"> - <a name="label" val="o0"/> + <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,400)" name="XOR Gate"> + <comp lib="0" loc="(670,270)" name="Tunnel"> + <a name="label" val="o3"/> + </comp> + <comp lib="1" loc="(190,670)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(190,550)" name="XOR Gate"> + <comp lib="0" loc="(330,850)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(280,560)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(390,100)" name="Tunnel"> - <a name="label" val="o0"/> - </comp> - <comp lib="0" loc="(550,60)" name="Tunnel"> + <comp lib="0" loc="(130,300)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b1"/> - </comp> - <comp lib="2" loc="(540,280)" name="Multiplexer"> - <a name="facing" val="west"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <a name="label" val="a2"/> </comp> - <comp lib="0" loc="(550,80)" name="Tunnel"> + <comp lib="0" loc="(130,360)" name="Tunnel"> <a name="facing" val="east"/> <a name="label" val="b3"/> </comp> - <comp lib="1" loc="(300,630)" name="OR Gate"> - <a name="facing" val="south"/> + <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,570)" name="Tunnel"> + <comp lib="1" loc="(240,400)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(340,850)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(550,100)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a5"/> + <a name="label" val="b5"/> + </comp> + <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="(670,550)" name="Splitter"> <a name="fanout" val="7"/> <a name="incoming" val="7"/> </comp> - <comp lib="0" loc="(510,390)" name="Pin"> - <a name="width" val="3"/> - <a name="tristate" val="false"/> + <comp lib="0" loc="(390,100)" name="Tunnel"> + <a name="label" val="o0"/> </comp> - <comp lib="1" loc="(240,310)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(390,370)" name="Tunnel"> + <a name="label" val="o3"/> </comp> - <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 lib="0" loc="(810,200)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="1" loc="(270,410)" name="AND Gate"> + <comp lib="1" loc="(750,490)" name="OR 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="(300,360)" name="OR Gate"> + <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="0" loc="(390,370)" name="Tunnel"> - <a name="label" val="o3"/> - </comp> <comp lib="1" loc="(340,460)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(680,90)" name="Tunnel"> + <comp lib="0" loc="(550,110)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a4"/> + <a name="label" val="b6"/> </comp> - <comp lib="1" loc="(300,420)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - <a name="negate1" val="true"/> + <comp lib="0" loc="(680,70)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a2"/> </comp> - <comp lib="0" loc="(130,120)" name="Tunnel"> + <comp lib="0" loc="(550,80)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a0"/> + <a name="label" val="b3"/> </comp> - <comp lib="1" loc="(310,600)" name="OR Gate"> + <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="(650,320)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="1" loc="(190,100)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,670)" name="AND Gate"> + <comp lib="3" loc="(930,160)" name="Shifter"> + <a name="shift" val="lr"/> + </comp> + <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="(220,70)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="OR"/> + <comp lib="0" loc="(130,540)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b5"/> </comp> - <comp lib="1" loc="(340,550)" name="XNOR Gate"> + <comp lib="1" loc="(250,190)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(250,280)" name="NOR 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="(680,60)" name="Tunnel"> + <comp lib="0" loc="(130,660)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a1"/> + <a name="label" val="a6"/> </comp> - <comp lib="1" loc="(190,490)" name="XOR Gate"> + <comp lib="0" loc="(340,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="FC"/> + </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> - <comp lib="0" loc="(650,320)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - </comp> - <comp lib="1" loc="(190,730)" 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="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="(780,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="CI"/> - </comp> - <comp lib="1" loc="(340,190)" name="XNOR Gate"> + <comp lib="1" loc="(190,400)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(240,130)" name="AND Gate"> + <comp lib="1" loc="(190,190)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(780,180)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0x0"/> + <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="(340,100)" name="XNOR Gate"> + <comp lib="1" loc="(240,580)" name="AND 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="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="(130,750)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a7"/> - </comp> - <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="2" loc="(820,90)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(790,380)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="FC"/> - </comp> - <comp lib="0" loc="(670,290)" name="Tunnel"> - <a name="label" val="o5"/> - </comp> - <comp lib="1" loc="(240,490)" name="AND 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="(300,450)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="6" loc="(481,532)" name="Text"> + <a name="text" val="DYN OP"/> + </comp> + <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="(770,380)" name="Tunnel"> + <comp lib="0" loc="(140,70)" name="Tunnel"> <a name="facing" val="south"/> - <a name="label" val="CC"/> + <a name="label" val="!A"/> </comp> - <comp lib="0" loc="(670,280)" name="Tunnel"> + <comp lib="0" loc="(390,460)" name="Tunnel"> <a name="label" val="o4"/> </comp> - <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="(680,100)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a5"/> + <comp lib="6" loc="(736,75)" name="Text"> + <a name="text" val="Input A"/> </comp> - <comp lib="0" loc="(780,100)" name="Tunnel"> + <comp lib="0" loc="(680,60)" name="Tunnel"> <a name="facing" val="east"/> - <a name="width" val="8"/> - <a name="label" val="A"/> - </comp> - <comp lib="0" loc="(490,460)" name="Pin"> - <a name="tristate" val="false"/> + <a name="label" val="a1"/> </comp> - <comp lib="1" loc="(190,100)" name="XOR Gate"> - <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="(570,40)" name="Pin"> <a name="facing" val="west"/> <a name="width" val="8"/> <a name="tristate" val="false"/> </comp> - <comp lib="0" loc="(680,50)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a0"/> - </comp> - <comp lib="0" loc="(680,110)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a6"/> - </comp> - <comp lib="0" loc="(390,550)" name="Tunnel"> - <a name="label" val="o5"/> + <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="6" loc="(498,373)" name="Text"> - <a name="text" val="STATIC OPCODE"/> + <comp lib="1" loc="(240,310)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(550,100)" name="Tunnel"> + <comp lib="0" loc="(130,720)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b5"/> + <a name="label" val="b7"/> </comp> - <comp lib="0" loc="(130,300)" name="Tunnel"> + <comp lib="0" loc="(550,60)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a2"/> + <a name="label" val="b1"/> </comp> - <comp lib="1" loc="(300,690)" name="AND Gate"> + <comp lib="2" loc="(570,400)" name="Multiplexer"> + <a name="width" val="3"/> + <a name="enable" val="false"/> + </comp> + <comp lib="1" loc="(310,150)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(390,460)" name="Tunnel"> - <a name="label" val="o4"/> + <comp lib="0" loc="(750,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="!B"/> </comp> - <comp lib="1" loc="(310,150)" 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="(750,490)" name="OR Gate"> - <a name="facing" val="north"/> + <comp lib="0" loc="(790,80)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0x0"/> + </comp> + <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="(130,480)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="a4"/> + <comp lib="0" loc="(670,260)" name="Tunnel"> + <a name="label" val="o2"/> </comp> - <comp lib="1" loc="(310,330)" 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="1" loc="(300,510)" name="AND Gate"> + <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="2" loc="(1010,210)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="6" loc="(617,355)" name="Text"> + <a name="text" val="Opcodes"/> </comp> - <comp lib="0" loc="(770,200)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="width" val="8"/> - <a name="label" val="B"/> + <comp lib="0" loc="(390,280)" name="Tunnel"> + <a name="label" val="o2"/> </comp> - <comp lib="1" loc="(280,740)" name="OR Gate"> + <comp lib="0" loc="(730,400)" name="Splitter"> + <a name="facing" val="north"/> + <a name="fanout" val="6"/> + <a name="incoming" val="6"/> + <a name="appear" val="right"/> + </comp> + <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="(190,190)" name="XOR Gate"> + <comp lib="0" loc="(670,240)" name="Tunnel"> + <a name="label" val="o0"/> + </comp> + <comp lib="0" loc="(770,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="CC"/> + </comp> + <comp lib="6" loc="(472,443)" name="Text"> + <a name="text" val="ALU STATE"/> + </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="(810,200)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <comp lib="1" loc="(190,550)" name="XOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(550,70)" name="Tunnel"> + <comp lib="0" loc="(130,630)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b2"/> + <a name="label" val="b6"/> </comp> - <comp lib="3" loc="(930,70)" name="BitAdder"/> - <comp lib="1" loc="(280,560)" name="OR Gate"> + <comp lib="1" loc="(190,310)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(190,460)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(130,450)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b4"/> </comp> - <comp lib="1" loc="(270,590)" 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="2" loc="(570,400)" name="Multiplexer"> - <a name="width" val="3"/> - <a name="enable" val="false"/> + <comp lib="3" loc="(930,70)" name="BitAdder"/> + <comp lib="0" loc="(500,550)" name="Pin"> + <a name="width" val="4"/> + <a name="tristate" val="false"/> </comp> - <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 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="0" loc="(550,90)" name="Tunnel"> + <comp lib="0" loc="(780,100)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b4"/> + <a name="width" val="8"/> + <a name="label" val="A"/> </comp> - <comp lib="0" loc="(140,70)" name="Tunnel"> + <comp lib="2" loc="(320,890)" name="Multiplexer"> <a name="facing" val="south"/> - <a name="label" val="!A"/> - </comp> - <comp lib="1" loc="(190,310)" name="XOR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="selloc" val="tr"/> + <a name="select" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(330,490)" 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="1" loc="(300,180)" name="OR Gate"> + <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="0" loc="(700,40)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - </comp> - <comp lib="0" loc="(670,300)" name="Tunnel"> - <a name="label" val="o6"/> - </comp> - <comp lib="1" loc="(240,580)" name="AND Gate"> + <comp lib="1" loc="(340,190)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(740,380)" name="Tunnel"> + <comp lib="0" loc="(780,380)" name="Tunnel"> <a name="facing" val="south"/> - <a name="label" val="!A"/> + <a name="label" val="CI"/> </comp> - <comp lib="1" loc="(190,220)" name="XOR 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="(190,280)" name="XOR Gate"> + <comp lib="0" loc="(550,20)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="8"/> + <a name="label" val="B"/> + </comp> + <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,370)" name="XOR 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="1" loc="(250,460)" name="NOR Gate"> + <comp lib="0" loc="(670,250)" name="Tunnel"> + <a name="label" val="o1"/> + </comp> + <comp lib="0" loc="(390,190)" name="Tunnel"> + <a name="label" val="o1"/> + </comp> + <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="(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="(340,70)" name="Tunnel"> + <comp lib="0" loc="(300,70)" name="Tunnel"> <a name="facing" val="south"/> - <a name="label" val="FC"/> + <a name="label" val="CI"/> </comp> - <comp lib="0" loc="(640,440)" name="Constant"/> - <comp lib="0" loc="(130,390)" name="Tunnel"> + <comp lib="0" loc="(680,50)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a3"/> + <a name="label" val="a0"/> </comp> - <comp lib="6" loc="(476,260)" name="Text"> - <a name="text" val="Output"/> + <comp lib="0" loc="(260,70)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="CC"/> </comp> - <comp lib="0" loc="(180,70)" name="Tunnel"> + <comp lib="0" loc="(670,310)" name="Tunnel"> + <a name="label" val="o7"/> + </comp> + <comp lib="1" loc="(300,540)" name="OR Gate"> <a name="facing" val="south"/> - <a name="label" val="!B"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(550,110)" name="Tunnel"> - <a name="facing" val="east"/> - <a name="label" val="b6"/> + <comp lib="6" loc="(602,74)" name="Text"> + <a name="text" val="Input B"/> </comp> - <comp lib="3" loc="(1000,90)" name="BitAdder"/> - <comp lib="0" loc="(710,320)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <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="0" loc="(550,120)" name="Tunnel"> + <comp lib="1" loc="(240,490)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(250,730)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(640,440)" name="Constant"/> + <comp lib="6" loc="(355,906)" name="Text"> + <a name="text" val="FLAG"/> + </comp> + <comp lib="0" loc="(680,120)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b7"/> + <a name="label" val="a7"/> </comp> - <comp lib="0" loc="(260,70)" name="Tunnel"> - <a name="facing" val="south"/> - <a name="label" val="CC"/> + <comp lib="0" loc="(550,50)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b0"/> </comp> - <comp lib="1" loc="(190,580)" name="XOR 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="(240,760)" name="AND Gate"> + <comp lib="0" loc="(790,380)" name="Tunnel"> + <a name="facing" val="south"/> + <a name="label" val="FC"/> + </comp> + <comp lib="0" loc="(680,110)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a6"/> + </comp> + <comp lib="1" loc="(190,640)" name="XOR 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="(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="(730,400)" name="Splitter"> - <a name="facing" val="north"/> - <a name="fanout" val="6"/> - <a name="incoming" val="6"/> - <a name="appear" val="right"/> + <comp lib="0" loc="(710,520)" name="Splitter"> + <a name="facing" val="west"/> + <a name="appear" val="center"/> </comp> - <comp lib="1" loc="(330,130)" name="AND Gate"> + <comp lib="1" loc="(330,400)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> <a name="negate1" val="true"/> @@ -1378,123 +1354,147 @@ <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(700,40)" name="Pin"> - <a name="facing" val="west"/> - <a name="width" val="8"/> + <comp lib="0" loc="(490,460)" name="Pin"> <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(300,330)" name="AND Gate"> + <comp lib="0" loc="(680,90)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a4"/> + </comp> + <comp lib="1" loc="(240,130)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(340,850)" name="Constant"> + <comp lib="1" loc="(300,180)" name="OR Gate"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> - </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="(560,300)" name="AND Gate"> - <a name="facing" val="north"/> + <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="0" loc="(670,310)" name="Tunnel"> - <a name="label" val="o7"/> - </comp> <comp lib="1" loc="(280,380)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(310,690)" name="OR Gate"> + <comp lib="0" loc="(130,270)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b2"/> + </comp> + <comp lib="3" loc="(930,110)" name="Shifter"/> + <comp lib="2" loc="(540,280)" name="Multiplexer"> <a name="facing" val="west"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(760,380)" name="Tunnel"> + <comp lib="3" loc="(1000,90)" name="BitAdder"/> + <comp lib="0" loc="(220,70)" name="Tunnel"> <a name="facing" val="south"/> <a name="label" val="OR"/> </comp> - <comp lib="6" loc="(617,355)" name="Text"> - <a name="text" val="Opcodes"/> + <comp lib="0" loc="(550,120)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b7"/> </comp> - <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 lib="6" loc="(476,260)" name="Text"> + <a name="text" val="Output"/> </comp> - <comp lib="1" loc="(340,730)" name="XNOR Gate"> + <comp lib="1" loc="(250,640)" name="NOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(790,80)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0x0"/> + <comp lib="0" loc="(130,180)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="b1"/> </comp> - <comp lib="0" loc="(390,640)" name="Tunnel"> - <a name="label" val="o6"/> + <comp lib="0" loc="(130,390)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="label" val="a3"/> </comp> - <comp lib="1" loc="(300,270)" name="OR Gate"> - <a name="facing" val="south"/> + <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="0" loc="(710,470)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="3"/> - <a name="incoming" val="3"/> - </comp> - <comp lib="1" loc="(250,550)" name="NOR Gate"> + <comp lib="1" loc="(190,580)" name="XOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(240,670)" name="AND Gate"> + <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="1" loc="(280,290)" name="OR Gate"> + <comp lib="1" loc="(300,420)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(270,770)" name="AND Gate"> + <comp lib="1" loc="(340,640)" name="XNOR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(570,40)" 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"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(130,360)" name="Tunnel"> + <comp lib="1" loc="(830,280)" name="OR Gate"> + <a name="size" val="70"/> + <a name="inputs" val="8"/> + </comp> + <comp lib="0" loc="(510,390)" name="Pin"> + <a name="width" val="3"/> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(550,90)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="b3"/> + <a name="label" val="b4"/> </comp> - <comp lib="1" loc="(190,130)" name="XOR Gate"> + <comp lib="1" loc="(280,740)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,760)" name="AND Gate"> + <comp lib="1" loc="(300,360)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(300,540)" name="OR Gate"> + <comp lib="0" loc="(180,70)" name="Tunnel"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="label" val="!B"/> </comp> - <comp lib="0" loc="(680,80)" name="Tunnel"> + <comp lib="3" loc="(1060,80)" name="Comparator"> + <a name="width" val="4"/> + </comp> + <comp lib="0" loc="(130,750)" name="Tunnel"> <a name="facing" val="east"/> - <a name="label" val="a3"/> + <a name="label" val="a7"/> </comp> <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> + <comp lib="1" loc="(340,550)" name="XNOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(240,670)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="0" loc="(700,40)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="1" loc="(250,460)" name="NOR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> </circuit> <circuit name="GPR"> <a name="circuit" val="GPR"/> @@ -1592,40 +1592,54 @@ <wire from="(180,250)" to="(190,250)"/> <wire from="(150,180)" to="(160,180)"/> <wire from="(220,250)" to="(230,250)"/> - <comp lib="0" loc="(140,340)" name="Pin"> - <a name="width" val="2"/> - <a name="tristate" val="false"/> - <a name="label" val="Read A"/> - </comp> - <comp lib="1" loc="(210,230)" name="Controlled Buffer"> + <comp lib="1" loc="(170,230)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> - <comp lib="0" loc="(130,200)" name="Pin"> - <a name="tristate" val="false"/> - </comp> <comp lib="2" loc="(240,340)" name="Decoder"> <a name="facing" val="north"/> <a name="selloc" val="tr"/> <a name="select" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(310,260)" name="Constant"> - <a name="facing" val="west"/> + <comp lib="0" loc="(130,200)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(130,80)" name="Pin"> + <a name="width" val="2"/> + <a name="tristate" val="false"/> + <a name="label" val="Write"/> + </comp> + <comp lib="1" loc="(270,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> <a name="width" val="8"/> - <a name="value" val="0x0"/> + </comp> + <comp lib="1" loc="(190,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="1" loc="(290,230)" name="Controlled Buffer"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="control" val="left"/> + </comp> + <comp lib="4" loc="(230,170)" name="Register"/> + <comp lib="0" loc="(140,340)" name="Pin"> + <a name="width" val="2"/> + <a name="tristate" val="false"/> + <a name="label" val="Read A"/> </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> - <comp lib="1" loc="(290,230)" name="Controlled Buffer"> - <a name="facing" val="west"/> + <comp lib="0" loc="(140,130)" name="Pin"> <a name="width" val="8"/> - <a name="control" val="left"/> + <a name="tristate" val="false"/> + <a name="label" val="Input"/> </comp> - <comp lib="1" loc="(170,230)" name="Controlled Buffer"> + <comp lib="1" loc="(250,230)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> @@ -1634,77 +1648,63 @@ <a name="select" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(330,230)" name="Multiplexer"> + <comp lib="0" loc="(370,220)" name="Constant"> <a name="facing" val="west"/> <a name="width" val="8"/> - <a name="enable" val="false"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(290,260)" name="Controlled Buffer"> - <a name="facing" val="west"/> + <comp lib="0" loc="(140,230)" name="Pin"> + <a name="output" val="true"/> <a name="width" val="8"/> - <a name="control" val="left"/> + <a name="label" val="Read A"/> </comp> - <comp lib="0" loc="(140,130)" name="Pin"> + <comp lib="0" loc="(140,260)" name="Pin"> + <a name="output" val="true"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="Input"/> + <a name="label" val="Read B"/> </comp> - <comp lib="4" loc="(270,170)" name="Register"/> - <comp lib="0" loc="(130,80)" name="Pin"> + <comp lib="0" loc="(250,340)" name="Pin"> + <a name="facing" val="west"/> <a name="width" val="2"/> <a name="tristate" val="false"/> - <a name="label" val="Write"/> - </comp> - <comp lib="0" loc="(350,280)" name="Pin"> - <a name="facing" val="north"/> - <a name="tristate" val="false"/> - <a name="label" val="Forward Input A"/> + <a name="label" val="Read B"/> <a name="labelloc" val="east"/> </comp> - <comp lib="1" loc="(230,260)" name="Controlled Buffer"> + <comp lib="1" loc="(210,230)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> - <comp lib="0" loc="(140,260)" name="Pin"> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="label" val="Read B"/> - </comp> - <comp lib="4" loc="(190,170)" name="Register"/> + <comp lib="4" loc="(270,170)" name="Register"/> <comp lib="0" loc="(250,120)" name="Pin"> <a name="facing" val="south"/> <a name="tristate" val="false"/> </comp> - <comp lib="0" loc="(370,220)" name="Constant"> + <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="1" loc="(190,260)" name="Controlled Buffer"> - <a name="facing" val="south"/> + <comp lib="2" loc="(330,230)" name="Multiplexer"> + <a name="facing" val="west"/> <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(270,260)" 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"/> + <a name="control" val="left"/> </comp> - <comp lib="4" loc="(230,170)" name="Register"/> - <comp lib="0" loc="(140,230)" name="Pin"> - <a name="output" val="true"/> + <comp lib="4" loc="(190,170)" name="Register"/> + <comp lib="1" loc="(230,260)" name="Controlled Buffer"> + <a name="facing" val="south"/> <a name="width" val="8"/> - <a name="label" val="Read A"/> </comp> - <comp lib="0" loc="(250,340)" name="Pin"> - <a name="facing" val="west"/> - <a name="width" val="2"/> + <comp lib="0" loc="(350,280)" name="Pin"> + <a name="facing" val="north"/> <a name="tristate" val="false"/> - <a name="label" val="Read B"/> + <a name="label" val="Forward Input A"/> <a name="labelloc" val="east"/> </comp> - <comp lib="1" loc="(250,230)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - </comp> </circuit> <circuit name="ISD"> <a name="circuit" val="ISD"/> @@ -1728,7 +1728,7 @@ <circ-port height="10" pin="1160,1190" width="10" x="75" y="105"/> <circ-port height="10" pin="760,2000" width="10" x="45" y="75"/> <circ-port height="8" pin="660,2000" width="8" x="56" y="46"/> - <circ-port height="8" pin="90,1760" width="8" x="46" y="106"/> + <circ-port height="8" pin="80,1760" width="8" x="46" y="106"/> <circ-port height="10" pin="330,1800" width="10" x="55" y="105"/> <circ-port height="8" pin="460,1810" width="8" x="46" y="86"/> <circ-port height="10" pin="600,1810" width="10" x="145" y="65"/> @@ -1754,13 +1754,13 @@ <wire from="(220,90)" to="(220,180)"/> <wire from="(240,970)" to="(280,970)"/> <wire from="(1000,910)" to="(1000,1760)"/> + <wire from="(340,1170)" to="(340,1260)"/> <wire from="(240,340)" to="(270,340)"/> <wire from="(850,210)" to="(850,250)"/> <wire from="(1200,680)" to="(1210,680)"/> <wire from="(180,1310)" to="(270,1310)"/> <wire from="(1270,750)" to="(1280,750)"/> <wire from="(1270,820)" to="(1270,940)"/> - <wire from="(1280,740)" to="(1310,740)"/> <wire from="(200,1020)" to="(280,1020)"/> <wire from="(670,1820)" to="(670,1940)"/> <wire from="(450,60)" to="(450,300)"/> @@ -1768,7 +1768,6 @@ <wire from="(190,1660)" to="(260,1660)"/> <wire from="(920,1240)" to="(920,1290)"/> <wire from="(840,520)" to="(840,570)"/> - <wire from="(660,1870)" to="(800,1870)"/> <wire from="(880,880)" to="(880,930)"/> <wire from="(510,1100)" to="(630,1100)"/> <wire from="(510,1280)" to="(510,1290)"/> @@ -1778,33 +1777,31 @@ <wire from="(1220,710)" to="(1220,740)"/> <wire from="(230,440)" to="(280,440)"/> <wire from="(170,1410)" to="(280,1410)"/> - <wire from="(1310,670)" to="(1310,740)"/> - <wire from="(70,120)" to="(70,650)"/> - <wire from="(1120,1760)" to="(1120,1830)"/> <wire from="(180,500)" to="(180,590)"/> <wire from="(200,840)" to="(200,930)"/> <wire from="(220,540)" to="(220,630)"/> <wire from="(910,1680)" to="(910,1700)"/> <wire from="(240,880)" to="(240,970)"/> <wire from="(210,1810)" to="(210,1910)"/> + <wire from="(790,650)" to="(1070,650)"/> <wire from="(1070,680)" to="(1080,680)"/> - <wire from="(620,1500)" to="(640,1500)"/> <wire from="(510,1190)" to="(670,1190)"/> + <wire from="(590,1270)" to="(750,1270)"/> <wire from="(330,1740)" to="(330,1780)"/> <wire from="(340,1870)" to="(350,1870)"/> <wire from="(420,1950)" to="(430,1950)"/> <wire from="(570,60)" to="(570,120)"/> <wire from="(380,1790)" to="(380,1840)"/> - <wire from="(610,1050)" to="(610,1430)"/> <wire from="(690,1140)" to="(690,1200)"/> <wire from="(920,210)" to="(930,210)"/> <wire from="(180,500)" to="(250,500)"/> <wire from="(840,970)" to="(840,1020)"/> <wire from="(880,1330)" to="(880,1380)"/> <wire from="(210,1620)" to="(210,1680)"/> - <wire from="(450,1140)" to="(450,1720)"/> + <wire from="(1260,540)" to="(1280,540)"/> <wire from="(930,870)" to="(930,880)"/> <wire from="(1100,1770)" to="(1140,1770)"/> + <wire from="(80,1760)" to="(200,1760)"/> <wire from="(210,1360)" to="(210,1560)"/> <wire from="(230,890)" to="(280,890)"/> <wire from="(470,1370)" to="(470,1380)"/> @@ -1817,7 +1814,7 @@ <wire from="(190,940)" to="(280,940)"/> <wire from="(850,1110)" to="(850,1150)"/> <wire from="(1380,680)" to="(1380,730)"/> - <wire from="(440,1140)" to="(450,1140)"/> + <wire from="(660,1750)" to="(660,1870)"/> <wire from="(150,1810)" to="(160,1810)"/> <wire from="(920,340)" to="(930,340)"/> <wire from="(880,300)" to="(890,300)"/> @@ -1825,6 +1822,7 @@ <wire from="(640,60)" to="(650,60)"/> <wire from="(890,960)" to="(890,970)"/> <wire from="(850,600)" to="(850,610)"/> + <wire from="(1310,670)" to="(1310,890)"/> <wire from="(230,1340)" to="(280,1340)"/> <wire from="(660,1660)" to="(890,1660)"/> <wire from="(1000,910)" to="(1100,910)"/> @@ -1834,7 +1832,9 @@ <wire from="(190,130)" to="(190,220)"/> <wire from="(230,170)" to="(230,260)"/> <wire from="(210,370)" to="(250,370)"/> - <wire from="(1310,740)" to="(1310,750)"/> + <wire from="(1310,540)" to="(1320,540)"/> + <wire from="(660,1230)" to="(660,1660)"/> + <wire from="(750,690)" to="(750,800)"/> <wire from="(220,1350)" to="(250,1350)"/> <wire from="(170,420)" to="(250,420)"/> <wire from="(250,1720)" to="(260,1720)"/> @@ -1844,6 +1844,7 @@ <wire from="(920,1110)" to="(930,1110)"/> <wire from="(840,70)" to="(850,70)"/> <wire from="(840,390)" to="(850,390)"/> + <wire from="(790,660)" to="(800,660)"/> <wire from="(880,430)" to="(890,430)"/> <wire from="(670,1820)" to="(680,1820)"/> <wire from="(1220,760)" to="(1240,760)"/> @@ -1861,6 +1862,7 @@ <wire from="(590,560)" to="(630,560)"/> <wire from="(820,1980)" to="(820,2010)"/> <wire from="(1000,720)" to="(1100,720)"/> + <wire from="(650,690)" to="(750,690)"/> <wire from="(170,240)" to="(170,330)"/> <wire from="(210,280)" to="(210,370)"/> <wire from="(230,620)" to="(230,710)"/> @@ -1868,9 +1870,13 @@ <wire from="(1130,620)" to="(1130,820)"/> <wire from="(940,820)" to="(940,840)"/> <wire from="(530,150)" to="(530,300)"/> + <wire from="(750,1270)" to="(750,1290)"/> <wire from="(1260,940)" to="(1270,940)"/> - <wire from="(1110,1730)" to="(1140,1730)"/> + <wire from="(610,1320)" to="(610,1430)"/> + <wire from="(1100,1100)" to="(1110,1100)"/> <wire from="(100,250)" to="(100,1900)"/> + <wire from="(1110,1730)" to="(1140,1730)"/> + <wire from="(750,1270)" to="(950,1270)"/> <wire from="(920,1240)" to="(930,1240)"/> <wire from="(330,920)" to="(590,920)"/> <wire from="(840,520)" to="(850,520)"/> @@ -1880,12 +1886,15 @@ <wire from="(920,160)" to="(920,210)"/> <wire from="(190,70)" to="(190,130)"/> <wire from="(620,1520)" to="(620,1700)"/> + <wire from="(660,1750)" to="(800,1750)"/> <wire from="(600,600)" to="(610,600)"/> <wire from="(680,1970)" to="(680,1980)"/> <wire from="(590,920)" to="(590,930)"/> <wire from="(220,1260)" to="(280,1260)"/> <wire from="(330,1190)" to="(510,1190)"/> <wire from="(930,1380)" to="(930,1640)"/> + <wire from="(450,420)" to="(450,1720)"/> + <wire from="(980,840)" to="(1400,840)"/> <wire from="(170,690)" to="(170,780)"/> <wire from="(50,150)" to="(90,150)"/> <wire from="(210,730)" to="(210,820)"/> @@ -1901,9 +1910,9 @@ <wire from="(1280,770)" to="(1290,770)"/> <wire from="(930,300)" to="(930,340)"/> <wire from="(1130,620)" to="(1140,620)"/> + <wire from="(800,680)" to="(800,780)"/> <wire from="(690,1890)" to="(850,1890)"/> <wire from="(700,1900)" to="(860,1900)"/> - <wire from="(800,1870)" to="(830,1870)"/> <wire from="(180,1400)" to="(180,1640)"/> <wire from="(840,970)" to="(850,970)"/> <wire from="(880,1330)" to="(890,1330)"/> @@ -1920,6 +1929,7 @@ <wire from="(470,290)" to="(470,300)"/> <wire from="(200,1380)" to="(250,1380)"/> <wire from="(170,780)" to="(280,780)"/> + <wire from="(1300,670)" to="(1300,740)"/> <wire from="(880,700)" to="(880,730)"/> <wire from="(830,740)" to="(870,740)"/> <wire from="(1170,540)" to="(1170,610)"/> @@ -1934,10 +1944,11 @@ <wire from="(240,160)" to="(270,160)"/> <wire from="(180,1130)" to="(270,1130)"/> <wire from="(890,390)" to="(890,430)"/> - <wire from="(1170,540)" to="(1240,540)"/> + <wire from="(660,1230)" to="(680,1230)"/> <wire from="(1020,1420)" to="(1150,1420)"/> <wire from="(160,1690)" to="(180,1690)"/> <wire from="(440,60)" to="(450,60)"/> + <wire from="(770,1230)" to="(770,1290)"/> <wire from="(480,420)" to="(490,420)"/> <wire from="(200,1620)" to="(200,1670)"/> <wire from="(200,840)" to="(280,840)"/> @@ -1945,11 +1956,12 @@ <wire from="(1020,1670)" to="(1020,1770)"/> <wire from="(110,50)" to="(120,50)"/> <wire from="(210,1180)" to="(280,1180)"/> + <wire from="(190,1480)" to="(190,1600)"/> <wire from="(920,1060)" to="(920,1110)"/> - <wire from="(810,870)" to="(810,1430)"/> + <wire from="(1340,520)" to="(1340,560)"/> <wire from="(840,340)" to="(840,390)"/> + <wire from="(1260,550)" to="(1280,550)"/> <wire from="(510,1100)" to="(510,1110)"/> - <wire from="(1340,520)" to="(1340,600)"/> <wire from="(1100,1780)" to="(1140,1780)"/> <wire from="(430,380)" to="(430,390)"/> <wire from="(440,1990)" to="(440,2000)"/> @@ -1962,15 +1974,14 @@ <wire from="(240,700)" to="(240,790)"/> <wire from="(240,1240)" to="(280,1240)"/> <wire from="(450,1870)" to="(450,1960)"/> + <wire from="(590,1180)" to="(590,1200)"/> <wire from="(170,600)" to="(270,600)"/> - <wire from="(1330,640)" to="(1330,650)"/> <wire from="(220,270)" to="(250,270)"/> <wire from="(850,480)" to="(850,520)"/> <wire from="(930,1200)" to="(930,1240)"/> <wire from="(1120,1830)" to="(1130,1830)"/> <wire from="(180,320)" to="(250,320)"/> <wire from="(930,1640)" to="(940,1640)"/> - <wire from="(800,870)" to="(810,870)"/> <wire from="(520,1230)" to="(530,1230)"/> <wire from="(880,1150)" to="(880,1200)"/> <wire from="(840,790)" to="(840,840)"/> @@ -1991,14 +2002,12 @@ <wire from="(890,1290)" to="(890,1330)"/> <wire from="(1190,1780)" to="(1190,1900)"/> <wire from="(900,1920)" to="(1120,1920)"/> - <wire from="(820,640)" to="(820,800)"/> <wire from="(1130,890)" to="(1130,950)"/> - <wire from="(660,1240)" to="(660,1660)"/> + <wire from="(330,1170)" to="(340,1170)"/> <wire from="(570,330)" to="(570,390)"/> <wire from="(350,290)" to="(430,290)"/> <wire from="(370,60)" to="(370,300)"/> <wire from="(180,1660)" to="(190,1660)"/> - <wire from="(630,650)" to="(760,650)"/> <wire from="(920,160)" to="(930,160)"/> <wire from="(920,480)" to="(930,480)"/> <wire from="(980,840)" to="(980,1790)"/> @@ -2006,17 +2015,18 @@ <wire from="(1180,730)" to="(1200,730)"/> <wire from="(840,1240)" to="(840,1290)"/> <wire from="(910,560)" to="(960,560)"/> - <wire from="(760,650)" to="(760,660)"/> <wire from="(1120,800)" to="(1120,1400)"/> + <wire from="(1110,1410)" to="(1150,1410)"/> <wire from="(230,1160)" to="(280,1160)"/> <wire from="(250,1740)" to="(250,1760)"/> <wire from="(220,1260)" to="(220,1350)"/> <wire from="(180,1220)" to="(180,1310)"/> <wire from="(1280,530)" to="(1280,540)"/> + <wire from="(360,1180)" to="(590,1180)"/> <wire from="(830,1870)" to="(830,1950)"/> <wire from="(220,1580)" to="(220,1680)"/> - <wire from="(610,1460)" to="(610,1500)"/> <wire from="(960,560)" to="(960,1690)"/> + <wire from="(810,1140)" to="(810,1430)"/> <wire from="(910,740)" to="(1040,740)"/> <wire from="(170,240)" to="(250,240)"/> <wire from="(530,420)" to="(530,480)"/> @@ -2024,24 +2034,22 @@ <wire from="(840,210)" to="(850,210)"/> <wire from="(490,60)" to="(490,120)"/> <wire from="(880,250)" to="(890,250)"/> - <wire from="(630,650)" to="(630,660)"/> <wire from="(870,1610)" to="(920,1610)"/> <wire from="(180,70)" to="(180,140)"/> <wire from="(1030,380)" to="(1030,1350)"/> - <wire from="(1410,660)" to="(1410,740)"/> <wire from="(1010,1890)" to="(1180,1890)"/> + <wire from="(950,1110)" to="(1070,1110)"/> <wire from="(850,870)" to="(850,880)"/> <wire from="(1240,810)" to="(1240,900)"/> <wire from="(140,1920)" to="(900,1920)"/> <wire from="(200,300)" to="(250,300)"/> - <wire from="(120,150)" to="(120,1890)"/> + <wire from="(290,630)" to="(290,650)"/> <wire from="(790,1420)" to="(1020,1420)"/> <wire from="(190,400)" to="(190,490)"/> <wire from="(230,440)" to="(230,530)"/> <wire from="(210,100)" to="(210,190)"/> <wire from="(210,640)" to="(250,640)"/> <wire from="(180,680)" to="(280,680)"/> - <wire from="(90,110)" to="(90,150)"/> <wire from="(850,1830)" to="(850,1890)"/> <wire from="(320,1740)" to="(330,1740)"/> <wire from="(200,1620)" to="(210,1620)"/> @@ -2049,6 +2057,8 @@ <wire from="(920,1380)" to="(930,1380)"/> <wire from="(840,340)" to="(850,340)"/> <wire from="(880,700)" to="(890,700)"/> + <wire from="(1410,660)" to="(1410,770)"/> + <wire from="(630,650)" to="(630,700)"/> <wire from="(680,1140)" to="(690,1140)"/> <wire from="(1060,870)" to="(1080,870)"/> <wire from="(560,60)" to="(570,60)"/> @@ -2069,16 +2079,16 @@ <wire from="(510,110)" to="(550,110)"/> <wire from="(930,120)" to="(930,160)"/> <wire from="(950,780)" to="(950,820)"/> - <wire from="(660,1240)" to="(680,1240)"/> <wire from="(1020,1420)" to="(1020,1670)"/> <wire from="(520,150)" to="(530,150)"/> <wire from="(330,1370)" to="(470,1370)"/> + <wire from="(190,1480)" to="(270,1480)"/> <wire from="(530,1320)" to="(530,1380)"/> <wire from="(1120,800)" to="(1210,800)"/> <wire from="(860,1900)" to="(1000,1900)"/> - <wire from="(880,1150)" to="(890,1150)"/> <wire from="(840,790)" to="(850,790)"/> <wire from="(840,1110)" to="(850,1110)"/> + <wire from="(880,1150)" to="(890,1150)"/> <wire from="(920,430)" to="(920,480)"/> <wire from="(560,510)" to="(570,510)"/> <wire from="(880,70)" to="(880,120)"/> @@ -2091,23 +2101,22 @@ <wire from="(830,560)" to="(870,560)"/> <wire from="(870,920)" to="(910,920)"/> <wire from="(200,1760)" to="(200,1780)"/> + <wire from="(170,960)" to="(170,1050)"/> <wire from="(210,1000)" to="(210,1090)"/> <wire from="(860,820)" to="(860,840)"/> <wire from="(870,830)" to="(870,850)"/> <wire from="(190,1300)" to="(190,1390)"/> <wire from="(240,70)" to="(240,160)"/> - <wire from="(170,960)" to="(170,1050)"/> <wire from="(240,610)" to="(280,610)"/> <wire from="(770,1880)" to="(770,1960)"/> <wire from="(1200,730)" to="(1380,730)"/> - <wire from="(90,150)" to="(120,150)"/> <wire from="(1170,610)" to="(1180,610)"/> <wire from="(180,950)" to="(270,950)"/> <wire from="(890,210)" to="(890,250)"/> <wire from="(70,650)" to="(290,650)"/> <wire from="(1060,820)" to="(1070,820)"/> <wire from="(100,1900)" to="(250,1900)"/> - <wire from="(640,600)" to="(640,660)"/> + <wire from="(90,1890)" to="(240,1890)"/> <wire from="(1000,640)" to="(1200,640)"/> <wire from="(450,1870)" to="(530,1870)"/> <wire from="(290,1610)" to="(870,1610)"/> @@ -2117,6 +2126,7 @@ <wire from="(840,160)" to="(840,210)"/> <wire from="(1200,950)" to="(1220,950)"/> <wire from="(880,520)" to="(880,570)"/> + <wire from="(600,1320)" to="(610,1320)"/> <wire from="(1110,750)" to="(1110,830)"/> <wire from="(930,60)" to="(930,70)"/> <wire from="(1130,580)" to="(1130,600)"/> @@ -2134,18 +2144,17 @@ <wire from="(200,480)" to="(200,570)"/> <wire from="(220,180)" to="(220,270)"/> <wire from="(240,1060)" to="(280,1060)"/> - <wire from="(650,640)" to="(820,640)"/> <wire from="(430,290)" to="(470,290)"/> <wire from="(250,1810)" to="(250,1900)"/> <wire from="(1000,640)" to="(1000,720)"/> <wire from="(220,90)" to="(250,90)"/> <wire from="(240,430)" to="(270,430)"/> <wire from="(850,300)" to="(850,340)"/> - <wire from="(1280,530)" to="(1290,530)"/> <wire from="(1110,680)" to="(1120,680)"/> - <wire from="(800,670)" to="(830,670)"/> + <wire from="(640,600)" to="(640,700)"/> <wire from="(440,330)" to="(450,330)"/> <wire from="(250,1740)" to="(260,1740)"/> + <wire from="(650,730)" to="(650,1110)"/> <wire from="(180,140)" to="(250,140)"/> <wire from="(920,1330)" to="(920,1380)"/> <wire from="(1180,1780)" to="(1180,1890)"/> @@ -2174,25 +2183,28 @@ <wire from="(720,1370)" to="(720,1980)"/> <wire from="(1160,1700)" to="(1160,1760)"/> <wire from="(400,420)" to="(410,420)"/> + <wire from="(940,1100)" to="(1070,1100)"/> <wire from="(360,60)" to="(370,60)"/> <wire from="(330,740)" to="(730,740)"/> - <wire from="(1310,670)" to="(1340,670)"/> <wire from="(920,300)" to="(930,300)"/> <wire from="(200,930)" to="(270,930)"/> + <wire from="(800,1140)" to="(810,1140)"/> <wire from="(680,60)" to="(690,60)"/> <wire from="(840,1060)" to="(840,1110)"/> <wire from="(930,960)" to="(930,970)"/> <wire from="(890,600)" to="(890,610)"/> - <wire from="(120,1890)" to="(240,1890)"/> + <wire from="(1290,770)" to="(1330,770)"/> <wire from="(230,980)" to="(280,980)"/> - <wire from="(430,1100)" to="(430,1110)"/> - <wire from="(290,640)" to="(290,650)"/> <wire from="(170,70)" to="(170,150)"/> + <wire from="(200,1380)" to="(200,1460)"/> <wire from="(660,1970)" to="(660,2000)"/> + <wire from="(770,920)" to="(770,1200)"/> <wire from="(870,670)" to="(910,670)"/> + <wire from="(340,1260)" to="(340,1470)"/> <wire from="(220,1080)" to="(220,1170)"/> <wire from="(180,1040)" to="(180,1130)"/> <wire from="(290,1650)" to="(900,1650)"/> + <wire from="(660,1870)" to="(830,1870)"/> <wire from="(1130,950)" to="(1130,1540)"/> <wire from="(1220,610)" to="(1220,660)"/> <wire from="(1170,680)" to="(1180,680)"/> @@ -2200,10 +2212,10 @@ <wire from="(850,1200)" to="(850,1240)"/> <wire from="(170,1410)" to="(170,1640)"/> <wire from="(330,470)" to="(350,470)"/> - <wire from="(1030,1700)" to="(1030,1760)"/> <wire from="(360,510)" to="(370,510)"/> <wire from="(610,960)" to="(610,1020)"/> <wire from="(920,430)" to="(930,430)"/> + <wire from="(760,1230)" to="(770,1230)"/> <wire from="(880,70)" to="(890,70)"/> <wire from="(880,390)" to="(890,390)"/> <wire from="(1010,900)" to="(1090,900)"/> @@ -2227,7 +2239,6 @@ <wire from="(840,480)" to="(850,480)"/> <wire from="(880,520)" to="(890,520)"/> <wire from="(490,330)" to="(490,390)"/> - <wire from="(1120,1400)" to="(1120,1700)"/> <wire from="(590,560)" to="(590,570)"/> <wire from="(330,1780)" to="(520,1780)"/> <wire from="(1100,1800)" to="(1140,1800)"/> @@ -2238,11 +2249,10 @@ <wire from="(230,710)" to="(230,800)"/> <wire from="(190,670)" to="(190,760)"/> <wire from="(900,550)" to="(900,570)"/> - <wire from="(330,1100)" to="(430,1100)"/> <wire from="(910,560)" to="(910,580)"/> <wire from="(940,910)" to="(940,930)"/> <wire from="(670,1190)" to="(1160,1190)"/> - <wire from="(200,1380)" to="(200,1600)"/> + <wire from="(940,1100)" to="(940,1180)"/> <wire from="(960,1760)" to="(960,1870)"/> <wire from="(150,1540)" to="(1130,1540)"/> <wire from="(1100,1810)" to="(1130,1810)"/> @@ -2254,9 +2264,9 @@ <wire from="(840,610)" to="(850,610)"/> <wire from="(880,1290)" to="(890,1290)"/> <wire from="(920,250)" to="(920,300)"/> + <wire from="(640,730)" to="(650,730)"/> <wire from="(560,330)" to="(570,330)"/> <wire from="(1220,660)" to="(1240,660)"/> - <wire from="(770,920)" to="(770,1380)"/> <wire from="(590,1010)" to="(590,1020)"/> <wire from="(330,1280)" to="(510,1280)"/> <wire from="(330,1790)" to="(380,1790)"/> @@ -2281,18 +2291,17 @@ <wire from="(180,770)" to="(270,770)"/> <wire from="(1100,810)" to="(1240,810)"/> <wire from="(930,390)" to="(930,430)"/> - <wire from="(1320,780)" to="(1320,840)"/> + <wire from="(310,1470)" to="(340,1470)"/> <wire from="(1120,1860)" to="(1120,1920)"/> + <wire from="(950,1110)" to="(950,1270)"/> <wire from="(480,60)" to="(490,60)"/> <wire from="(250,1900)" to="(700,1900)"/> <wire from="(240,1890)" to="(690,1890)"/> <wire from="(840,1060)" to="(850,1060)"/> <wire from="(840,1380)" to="(850,1380)"/> - <wire from="(760,660)" to="(770,660)"/> <wire from="(520,420)" to="(530,420)"/> <wire from="(880,340)" to="(880,390)"/> - <wire from="(600,1460)" to="(610,1460)"/> - <wire from="(680,1230)" to="(680,1240)"/> + <wire from="(1120,1400)" to="(1120,1830)"/> <wire from="(190,490)" to="(250,490)"/> <wire from="(210,190)" to="(270,190)"/> <wire from="(1070,750)" to="(1110,750)"/> @@ -2301,6 +2310,7 @@ <wire from="(470,380)" to="(470,390)"/> <wire from="(220,1170)" to="(270,1170)"/> <wire from="(1000,1870)" to="(1000,1900)"/> + <wire from="(750,1180)" to="(940,1180)"/> <wire from="(170,870)" to="(280,870)"/> <wire from="(850,760)" to="(850,790)"/> <wire from="(830,830)" to="(870,830)"/> @@ -2312,16 +2322,18 @@ <wire from="(240,880)" to="(280,880)"/> <wire from="(600,1790)" to="(600,1810)"/> <wire from="(470,470)" to="(510,470)"/> + <wire from="(340,1080)" to="(340,1170)"/> <wire from="(850,120)" to="(850,160)"/> <wire from="(180,1220)" to="(270,1220)"/> <wire from="(890,480)" to="(890,520)"/> - <wire from="(1280,670)" to="(1290,670)"/> <wire from="(510,1370)" to="(720,1370)"/> + <wire from="(1330,600)" to="(1330,650)"/> <wire from="(550,380)" to="(1030,380)"/> <wire from="(480,510)" to="(490,510)"/> + <wire from="(1300,740)" to="(1390,740)"/> <wire from="(1020,1670)" to="(1050,1670)"/> - <wire from="(1100,1750)" to="(1130,1750)"/> <wire from="(480,1410)" to="(480,1590)"/> + <wire from="(1100,1750)" to="(1130,1750)"/> <wire from="(100,70)" to="(100,250)"/> <wire from="(740,1800)" to="(810,1800)"/> <wire from="(210,1270)" to="(280,1270)"/> @@ -2329,8 +2341,8 @@ <wire from="(840,430)" to="(840,480)"/> <wire from="(880,790)" to="(880,840)"/> <wire from="(570,510)" to="(570,1670)"/> + <wire from="(650,690)" to="(650,700)"/> <wire from="(510,1190)" to="(510,1200)"/> - <wire from="(790,830)" to="(790,840)"/> <wire from="(230,350)" to="(280,350)"/> <wire from="(830,1570)" to="(830,1700)"/> <wire from="(170,1320)" to="(280,1320)"/> @@ -2340,21 +2352,27 @@ <wire from="(1130,1810)" to="(1130,1820)"/> <wire from="(240,1330)" to="(280,1330)"/> <wire from="(950,820)" to="(1060,820)"/> + <wire from="(590,1270)" to="(590,1290)"/> + <wire from="(980,630)" to="(980,840)"/> <wire from="(240,790)" to="(240,880)"/> <wire from="(170,690)" to="(270,690)"/> <wire from="(1070,650)" to="(1150,650)"/> <wire from="(220,360)" to="(250,360)"/> <wire from="(930,1290)" to="(930,1330)"/> <wire from="(710,1820)" to="(730,1820)"/> + <wire from="(590,1180)" to="(750,1180)"/> <wire from="(1130,950)" to="(1160,950)"/> <wire from="(610,60)" to="(610,570)"/> <wire from="(180,410)" to="(250,410)"/> <wire from="(880,1680)" to="(890,1680)"/> <wire from="(200,750)" to="(270,750)"/> <wire from="(920,120)" to="(930,120)"/> + <wire from="(1400,800)" to="(1400,840)"/> <wire from="(520,1320)" to="(530,1320)"/> + <wire from="(790,830)" to="(790,880)"/> <wire from="(880,1240)" to="(880,1290)"/> <wire from="(840,880)" to="(840,930)"/> + <wire from="(810,910)" to="(810,1110)"/> <wire from="(850,60)" to="(850,70)"/> <wire from="(1180,710)" to="(1180,730)"/> <wire from="(210,1090)" to="(270,1090)"/> @@ -2363,6 +2381,7 @@ <wire from="(1100,1680)" to="(1140,1680)"/> <wire from="(230,800)" to="(280,800)"/> <wire from="(690,60)" to="(690,1110)"/> + <wire from="(660,1660)" to="(660,1750)"/> <wire from="(220,70)" to="(220,90)"/> <wire from="(200,1200)" to="(200,1290)"/> <wire from="(180,860)" to="(180,950)"/> @@ -2377,56 +2396,63 @@ <wire from="(210,1910)" to="(350,1910)"/> <wire from="(330,110)" to="(470,110)"/> <wire from="(360,330)" to="(370,330)"/> + <wire from="(330,1260)" to="(340,1260)"/> <wire from="(1100,1690)" to="(1130,1690)"/> <wire from="(530,60)" to="(530,120)"/> <wire from="(570,420)" to="(570,480)"/> <wire from="(230,1860)" to="(310,1860)"/> - <wire from="(430,1100)" to="(510,1100)"/> <wire from="(920,250)" to="(930,250)"/> <wire from="(880,210)" to="(890,210)"/> <wire from="(840,1330)" to="(840,1380)"/> <wire from="(330,380)" to="(390,380)"/> - <wire from="(820,800)" to="(820,810)"/> <wire from="(890,870)" to="(890,880)"/> <wire from="(1240,900)" to="(1240,920)"/> <wire from="(230,1250)" to="(280,1250)"/> <wire from="(410,60)" to="(410,390)"/> <wire from="(350,470)" to="(470,470)"/> - <wire from="(800,780)" to="(800,800)"/> + <wire from="(790,1090)" to="(790,1110)"/> <wire from="(180,1310)" to="(180,1400)"/> <wire from="(230,80)" to="(230,170)"/> <wire from="(210,280)" to="(250,280)"/> + <wire from="(360,1270)" to="(590,1270)"/> <wire from="(1010,730)" to="(1010,900)"/> <wire from="(1120,1860)" to="(1130,1860)"/> <wire from="(300,1690)" to="(960,1690)"/> <wire from="(1130,1750)" to="(1130,1810)"/> - <wire from="(1120,520)" to="(1120,680)"/> + <wire from="(800,780)" to="(800,840)"/> <wire from="(1000,720)" to="(1000,910)"/> <wire from="(170,330)" to="(250,330)"/> <wire from="(1130,890)" to="(1160,890)"/> + <wire from="(610,1230)" to="(610,1290)"/> <wire from="(920,700)" to="(930,700)"/> <wire from="(840,300)" to="(850,300)"/> <wire from="(880,340)" to="(890,340)"/> + <wire from="(1060,520)" to="(1060,820)"/> + <wire from="(820,800)" to="(820,850)"/> <wire from="(600,60)" to="(610,60)"/> <wire from="(670,1100)" to="(670,1110)"/> <wire from="(1100,890)" to="(1100,910)"/> <wire from="(850,960)" to="(850,970)"/> <wire from="(200,390)" to="(250,390)"/> + <wire from="(90,70)" to="(90,150)"/> <wire from="(1020,1840)" to="(1080,1840)"/> <wire from="(170,150)" to="(170,240)"/> - <wire from="(660,1660)" to="(660,1870)"/> <wire from="(230,530)" to="(230,620)"/> <wire from="(190,490)" to="(190,580)"/> <wire from="(210,190)" to="(210,280)"/> <wire from="(930,1680)" to="(930,1700)"/> <wire from="(300,1690)" to="(300,1720)"/> <wire from="(900,1840)" to="(900,1920)"/> + <wire from="(750,1180)" to="(750,1200)"/> <wire from="(490,510)" to="(490,1380)"/> <wire from="(1180,1410)" to="(1190,1410)"/> - <wire from="(1280,550)" to="(1290,550)"/> + <wire from="(70,100)" to="(70,650)"/> + <wire from="(630,650)" to="(790,650)"/> + <wire from="(1330,670)" to="(1330,770)"/> <wire from="(1090,730)" to="(1180,730)"/> <wire from="(1110,750)" to="(1200,750)"/> <wire from="(920,1150)" to="(930,1150)"/> + <wire from="(200,1460)" to="(270,1460)"/> <wire from="(840,430)" to="(850,430)"/> <wire from="(880,790)" to="(890,790)"/> <wire from="(880,1110)" to="(890,1110)"/> @@ -2436,10 +2462,12 @@ <wire from="(920,70)" to="(920,120)"/> <wire from="(550,470)" to="(550,480)"/> <wire from="(1100,700)" to="(1100,720)"/> + <wire from="(330,1100)" to="(510,1100)"/> <wire from="(120,40)" to="(120,50)"/> + <wire from="(290,630)" to="(980,630)"/> <wire from="(510,110)" to="(510,120)"/> <wire from="(430,1950)" to="(430,1960)"/> - <wire from="(90,1760)" to="(200,1760)"/> + <wire from="(200,1460)" to="(200,1600)"/> <wire from="(490,150)" to="(490,300)"/> <wire from="(220,1350)" to="(220,1560)"/> <wire from="(1010,900)" to="(1010,1890)"/> @@ -2460,9 +2488,9 @@ <wire from="(630,1420)" to="(790,1420)"/> <wire from="(1130,1690)" to="(1130,1750)"/> <wire from="(350,1870)" to="(350,1910)"/> + <wire from="(770,1320)" to="(770,1700)"/> <wire from="(330,830)" to="(790,830)"/> <wire from="(890,1380)" to="(890,1630)"/> - <wire from="(1030,1760)" to="(1120,1760)"/> <wire from="(880,1240)" to="(890,1240)"/> <wire from="(840,880)" to="(850,880)"/> <wire from="(840,1200)" to="(850,1200)"/> @@ -2476,6 +2504,7 @@ <wire from="(200,1290)" to="(250,1290)"/> <wire from="(220,990)" to="(270,990)"/> <wire from="(210,1620)" to="(260,1620)"/> + <wire from="(90,150)" to="(90,1890)"/> <wire from="(1040,740)" to="(1040,1730)"/> <wire from="(160,1550)" to="(160,1690)"/> <wire from="(870,1010)" to="(910,1010)"/> @@ -2485,8 +2514,8 @@ <wire from="(210,1090)" to="(210,1180)"/> <wire from="(240,160)" to="(240,250)"/> <wire from="(860,910)" to="(860,930)"/> + <wire from="(190,1390)" to="(190,1480)"/> <wire from="(240,700)" to="(280,700)"/> - <wire from="(1330,740)" to="(1330,750)"/> <wire from="(470,290)" to="(510,290)"/> <wire from="(530,1770)" to="(1020,1770)"/> <wire from="(240,70)" to="(270,70)"/> @@ -2496,16 +2525,19 @@ <wire from="(920,1610)" to="(920,1650)"/> <wire from="(650,1140)" to="(650,1430)"/> <wire from="(270,1590)" to="(480,1590)"/> - <wire from="(760,680)" to="(760,780)"/> <wire from="(480,330)" to="(490,330)"/> <wire from="(910,1790)" to="(980,1790)"/> <wire from="(140,70)" to="(140,1920)"/> + <wire from="(1060,520)" to="(1340,520)"/> <wire from="(840,1330)" to="(850,1330)"/> <wire from="(920,970)" to="(920,1020)"/> <wire from="(840,250)" to="(840,300)"/> <wire from="(880,610)" to="(880,660)"/> + <wire from="(1200,890)" to="(1310,890)"/> <wire from="(1040,1860)" to="(1040,1880)"/> + <wire from="(790,650)" to="(790,660)"/> <wire from="(210,460)" to="(270,460)"/> + <wire from="(1320,540)" to="(1320,570)"/> <wire from="(430,290)" to="(430,300)"/> <wire from="(330,1790)" to="(330,1800)"/> <wire from="(170,1140)" to="(280,1140)"/> @@ -2525,16 +2557,15 @@ <wire from="(930,1110)" to="(930,1150)"/> <wire from="(1030,1850)" to="(1030,1910)"/> <wire from="(1130,1630)" to="(1130,1690)"/> - <wire from="(650,690)" to="(650,1110)"/> <wire from="(400,60)" to="(410,60)"/> <wire from="(440,420)" to="(450,420)"/> <wire from="(1130,580)" to="(1290,580)"/> + <wire from="(750,800)" to="(820,800)"/> <wire from="(1120,1400)" to="(1150,1400)"/> - <wire from="(1030,1700)" to="(1120,1700)"/> <wire from="(200,120)" to="(200,300)"/> <wire from="(700,1840)" to="(700,1900)"/> <wire from="(180,230)" to="(250,230)"/> - <wire from="(760,1380)" to="(770,1380)"/> + <wire from="(760,1700)" to="(770,1700)"/> <wire from="(520,1140)" to="(530,1140)"/> <wire from="(880,1060)" to="(880,1110)"/> <wire from="(1010,730)" to="(1090,730)"/> @@ -2543,13 +2574,12 @@ <wire from="(790,1420)" to="(790,1430)"/> <wire from="(190,1210)" to="(250,1210)"/> <wire from="(210,910)" to="(270,910)"/> - <wire from="(80,70)" to="(80,80)"/> + <wire from="(1300,650)" to="(1300,670)"/> + <wire from="(70,60)" to="(70,70)"/> + <wire from="(1390,740)" to="(1390,770)"/> <wire from="(390,380)" to="(390,390)"/> - <wire from="(760,1380)" to="(760,1700)"/> <wire from="(230,620)" to="(280,620)"/> <wire from="(440,1710)" to="(440,1720)"/> - <wire from="(190,1390)" to="(190,1600)"/> - <wire from="(1320,540)" to="(1320,610)"/> <wire from="(1040,1730)" to="(1040,1860)"/> <wire from="(180,680)" to="(180,770)"/> <wire from="(220,720)" to="(220,810)"/> @@ -2558,25 +2588,27 @@ <wire from="(220,1580)" to="(260,1580)"/> <wire from="(380,1840)" to="(380,1930)"/> <wire from="(240,1060)" to="(240,1150)"/> - <wire from="(650,640)" to="(650,660)"/> <wire from="(220,630)" to="(250,630)"/> <wire from="(890,1200)" to="(890,1240)"/> <wire from="(1130,600)" to="(1140,600)"/> - <wire from="(450,420)" to="(450,1110)"/> + <wire from="(330,1080)" to="(340,1080)"/> <wire from="(330,200)" to="(1050,200)"/> <wire from="(920,390)" to="(930,390)"/> <wire from="(930,1680)" to="(940,1680)"/> <wire from="(880,1630)" to="(890,1630)"/> + <wire from="(800,910)" to="(810,910)"/> <wire from="(920,70)" to="(930,70)"/> <wire from="(1110,1850)" to="(1130,1850)"/> <wire from="(730,1800)" to="(740,1800)"/> <wire from="(840,1150)" to="(840,1200)"/> + <wire from="(1280,740)" to="(1300,740)"/> <wire from="(930,1050)" to="(930,1060)"/> <wire from="(590,920)" to="(770,920)"/> <wire from="(1150,630)" to="(1150,650)"/> <wire from="(890,690)" to="(890,700)"/> <wire from="(250,370)" to="(250,380)"/> <wire from="(230,1070)" to="(280,1070)"/> + <wire from="(800,1750)" to="(800,1820)"/> <wire from="(50,250)" to="(100,250)"/> <wire from="(350,470)" to="(350,480)"/> <wire from="(220,1170)" to="(220,1260)"/> @@ -2587,6 +2619,7 @@ <wire from="(200,1700)" to="(230,1700)"/> <wire from="(850,1290)" to="(850,1330)"/> <wire from="(1200,1760)" to="(1210,1760)"/> + <wire from="(600,1460)" to="(630,1460)"/> <wire from="(1030,1790)" to="(1030,1850)"/> <wire from="(170,150)" to="(250,150)"/> <wire from="(1110,1650)" to="(1140,1650)"/> @@ -2595,19 +2628,20 @@ <wire from="(120,40)" to="(130,40)"/> <wire from="(920,520)" to="(930,520)"/> <wire from="(840,120)" to="(850,120)"/> + <wire from="(760,1320)" to="(770,1320)"/> <wire from="(880,160)" to="(890,160)"/> <wire from="(880,480)" to="(890,480)"/> - <wire from="(760,680)" to="(770,680)"/> <wire from="(630,560)" to="(630,570)"/> <wire from="(1200,900)" to="(1240,900)"/> <wire from="(1090,700)" to="(1090,730)"/> - <wire from="(760,780)" to="(800,780)"/> <wire from="(680,1980)" to="(720,1980)"/> + <wire from="(360,1090)" to="(790,1090)"/> <wire from="(190,310)" to="(190,400)"/> <wire from="(230,350)" to="(230,440)"/> <wire from="(940,550)" to="(940,570)"/> <wire from="(210,550)" to="(250,550)"/> - <wire from="(290,640)" to="(650,640)"/> + <wire from="(1170,540)" to="(1220,540)"/> + <wire from="(790,1090)" to="(1070,1090)"/> <wire from="(1040,1730)" to="(1050,1730)"/> <wire from="(1130,1820)" to="(1140,1820)"/> <wire from="(1100,830)" to="(1110,830)"/> @@ -2619,13 +2653,12 @@ <wire from="(490,420)" to="(490,480)"/> <wire from="(880,610)" to="(890,610)"/> <wire from="(1290,580)" to="(1290,620)"/> - <wire from="(640,690)" to="(650,690)"/> <wire from="(1390,680)" to="(1390,720)"/> <wire from="(550,290)" to="(550,300)"/> <wire from="(200,660)" to="(250,660)"/> <wire from="(460,1800)" to="(460,1810)"/> - <wire from="(630,1100)" to="(670,1100)"/> <wire from="(1000,1900)" to="(1190,1900)"/> + <wire from="(630,1100)" to="(670,1100)"/> <wire from="(1070,680)" to="(1070,750)"/> <wire from="(170,420)" to="(170,510)"/> <wire from="(190,760)" to="(190,850)"/> @@ -2633,12 +2666,11 @@ <wire from="(210,460)" to="(210,550)"/> <wire from="(940,1000)" to="(940,1020)"/> <wire from="(150,1810)" to="(150,1840)"/> - <wire from="(980,840)" to="(1320,840)"/> + <wire from="(610,1050)" to="(610,1200)"/> <wire from="(800,780)" to="(950,780)"/> <wire from="(940,1640)" to="(940,1680)"/> <wire from="(520,60)" to="(530,60)"/> <wire from="(530,1230)" to="(530,1290)"/> - <wire from="(1120,520)" to="(1340,520)"/> <wire from="(880,1060)" to="(890,1060)"/> <wire from="(880,1380)" to="(890,1380)"/> <wire from="(840,700)" to="(850,700)"/> @@ -2646,8 +2678,6 @@ <wire from="(920,340)" to="(920,390)"/> <wire from="(560,420)" to="(570,420)"/> <wire from="(260,1790)" to="(330,1790)"/> - <wire from="(800,1820)" to="(800,1870)"/> - <wire from="(760,650)" to="(1070,650)"/> <wire from="(590,1420)" to="(590,1430)"/> <wire from="(190,130)" to="(250,130)"/> <wire from="(190,1660)" to="(190,1670)"/> @@ -2670,14 +2700,17 @@ <wire from="(470,110)" to="(510,110)"/> <wire from="(510,470)" to="(550,470)"/> <wire from="(870,1810)" to="(890,1810)"/> - <wire from="(1330,740)" to="(1410,740)"/> + <wire from="(630,1460)" to="(630,1500)"/> + <wire from="(1210,560)" to="(1220,560)"/> <wire from="(180,860)" to="(270,860)"/> <wire from="(890,120)" to="(890,160)"/> + <wire from="(1300,650)" to="(1310,650)"/> <wire from="(930,480)" to="(930,520)"/> + <wire from="(1110,1100)" to="(1110,1410)"/> <wire from="(200,70)" to="(200,120)"/> <wire from="(480,150)" to="(490,150)"/> <wire from="(1110,1720)" to="(1140,1720)"/> - <wire from="(80,70)" to="(90,70)"/> + <wire from="(70,60)" to="(80,60)"/> <wire from="(690,1840)" to="(690,1890)"/> <wire from="(840,1150)" to="(850,1150)"/> <wire from="(920,790)" to="(920,840)"/> @@ -2685,370 +2718,397 @@ <wire from="(840,70)" to="(840,120)"/> <wire from="(520,510)" to="(530,510)"/> <wire from="(880,430)" to="(880,480)"/> - <comp lib="0" loc="(280,220)" name="Constant"/> - <comp lib="0" loc="(660,2000)" 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="0" loc="(280,1210)" name="Constant"/> - <comp lib="1" loc="(520,150)" name="OR Gate"> + <wire from="(600,1230)" to="(610,1230)"/> + <comp lib="1" loc="(1210,790)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(930,760)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="disabled" val="0"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(920,1730)" 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="1" loc="(480,330)" name="OR Gate"> + <comp lib="0" loc="(280,1300)" name="Constant"/> + <comp lib="1" loc="(600,1320)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(360,510)" name="OR Gate"> + <comp lib="0" loc="(280,240)" name="Constant"/> + <comp lib="4" loc="(1110,680)" name="Register"> + <a name="width" val="1"/> + </comp> + <comp lib="0" loc="(640,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="(530,2000)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="label" val="Address MUX"/> - <a name="labelloc" val="south"/> + <comp lib="0" loc="(1160,910)" name="Constant"> + <a name="width" val="4"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(180,1660)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="center"/> + <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="(1190,1410)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> + <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="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="0" loc="(280,570)" name="Constant"/> + <comp lib="0" loc="(50,250)" name="Pin"> <a name="tristate" val="false"/> - <a name="label" val="GPR Forward Input"/> - <a name="labelloc" val="east"/> + <a name="label" val="RST"/> </comp> - <comp lib="0" loc="(1160,1360)" name="Pin"> - <a name="facing" val="west"/> + <comp lib="0" loc="(860,730)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + </comp> + <comp lib="0" loc="(280,270)" name="Constant"/> + <comp lib="0" loc="(330,1800)" name="Pin"> + <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="label" val="ALU State"/> - <a name="labelloc" val="east"/> + <a name="width" val="8"/> + <a name="label" val="MEM POINTER"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(820,1980)" name="AND Gate"> + <comp lib="1" loc="(560,150)" 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="0" loc="(130,60)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0x0"/> + <comp lib="1" loc="(330,1010)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="PEEK"/> + <a name="negate2" val="true"/> + <a name="negate3" val="true"/> + <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(380,1950)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xf0"/> + <comp lib="3" loc="(1260,940)" name="Adder"> + <a name="width" val="5"/> </comp> - <comp lib="2" loc="(320,1740)" name="Multiplexer"> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(280,550)" name="Constant"/> + <comp lib="1" loc="(1300,670)" name="NOT Gate"> + <a name="size" val="20"/> </comp> - <comp lib="0" loc="(1210,1760)" 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 lib="2" loc="(290,1650)" name="Multiplexer"> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(930,60)" name="Constant"> - <a name="facing" val="south"/> + <comp lib="0" loc="(260,1600)" name="Constant"> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(280,370)" name="OR Gate"> + <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="1" loc="(1310,540)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(200,1620)" name="Splitter"> + <comp lib="0" loc="(1240,680)" name="Constant"> + <a name="width" val="5"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(280,280)" name="Constant"/> + <comp lib="1" loc="(70,70)" name="NOT Gate"> <a name="facing" val="north"/> - <a name="appear" val="center"/> </comp> - <comp lib="1" loc="(810,840)" name="AND Gate"> - <a name="facing" val="south"/> + <comp lib="0" loc="(280,580)" name="Constant"/> + <comp lib="1" loc="(1190,650)" name="OR Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate0" val="true"/> - </comp> - <comp lib="0" loc="(620,1520)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="center"/> </comp> - <comp lib="0" loc="(900,910)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> + <comp lib="0" loc="(130,60)" name="Constant"> + <a name="width" val="8"/> <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(280,1290)" name="Constant"/> - <comp lib="0" loc="(280,210)" name="Constant"/> - <comp lib="0" loc="(440,60)" name="Constant"> + <comp lib="0" loc="(280,1110)" name="Constant"/> + <comp lib="0" loc="(280,1380)" name="Constant"/> + <comp lib="1" loc="(330,830)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="PUSH"/> + <a name="negate2" val="true"/> + <a name="negate3" val="true"/> + <a name="negate5" val="true"/> + <a name="negate6" val="true"/> + </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> + <comp lib="1" loc="(640,600)" name="OR Gate"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(930,1050)" name="Multiplexer"> + <comp lib="1" loc="(1240,760)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate1" val="true"/> + </comp> + <comp lib="1" loc="(840,1730)" 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="(640,60)" name="Constant"> + <comp lib="0" loc="(280,420)" name="Constant"/> + <comp lib="1" loc="(520,420)" name="OR Gate"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(840,1730)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="A (R)"/> + <comp lib="4" loc="(1110,870)" name="Register"> + <a name="width" val="1"/> + </comp> + <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="(80,1760)" 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="1" loc="(80,80)" name="AND Gate"> - <a name="facing" val="north"/> + <comp lib="1" loc="(520,1230)" 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="0" loc="(280,510)" name="Constant"/> - <comp lib="0" loc="(900,820)" name="Constant"> + <comp lib="1" loc="(830,670)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(520,330)" 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,540)" name="Constant"/> - <comp lib="0" loc="(520,60)" name="Constant"> + <comp lib="3" loc="(1260,550)" name="Comparator"> + <a name="width" val="5"/> + </comp> + <comp lib="0" loc="(560,60)" name="Constant"> <a name="facing" val="south"/> <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(890,1050)" name="Multiplexer"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <comp lib="6" loc="(233,1954)" name="Text"> + <a name="text" val="This input defines the range of MMIO --&gt;"/> </comp> - <comp lib="0" loc="(940,910)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> + <comp lib="4" loc="(110,50)" name="Register"> + <a name="trigger" val="falling"/> </comp> - <comp lib="2" loc="(850,690)" name="Multiplexer"> + <comp lib="0" loc="(280,210)" name="Constant"/> + <comp lib="0" loc="(280,320)" name="Constant"/> + <comp lib="2" loc="(930,690)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(280,100)" name="OR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(900,1000)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="value" val="0x0"/> + <comp lib="0" loc="(280,510)" name="Constant"/> + <comp lib="4" loc="(870,1810)" name="Register"> + <a name="width" val="1"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="2" loc="(850,760)" name="Multiplexer"> + <comp lib="2" loc="(890,690)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(280,240)" name="Constant"/> - <comp lib="0" loc="(280,550)" name="Constant"/> - <comp lib="0" loc="(1240,630)" name="Constant"> - <a name="width" val="5"/> - </comp> - <comp lib="3" loc="(1280,550)" name="Comparator"> - <a name="width" val="5"/> + <comp lib="2" loc="(160,50)" name="Multiplexer"> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(520,330)" name="OR Gate"> + <comp lib="1" loc="(440,1990)" name="AND Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(890,760)" name="Multiplexer"> + <comp lib="1" loc="(1050,1730)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="label" val="go"/> + <a name="negate1" val="true"/> + <a name="negate2" val="true"/> + </comp> + <comp lib="2" loc="(930,760)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(1210,610)" name="Register"> - <a name="width" val="5"/> - </comp> - <comp lib="2" loc="(890,870)" name="Multiplexer"> + <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="0" loc="(460,1810)" 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="6" loc="(233,1954)" name="Text"> - <a name="text" val="This input defines the range of MMIO --&gt;"/> - </comp> - <comp lib="0" loc="(50,150)" name="Pin"> - <a name="tristate" val="false"/> - <a name="label" val="CLK"/> + <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="(1160,1640)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="4"/> - <a name="incoming" val="4"/> + <comp lib="4" loc="(710,1820)" name="Register"> + <a name="width" val="1"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="1" loc="(800,870)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(360,1270)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(260,1560)" name="Constant"> + <comp lib="0" loc="(860,910)" name="Constant"> + <a name="facing" val="south"/> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(640,1460)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="3" loc="(420,1940)" name="Comparator"> + <a name="mode" val="unsigned"/> </comp> - <comp lib="1" loc="(360,330)" name="OR Gate"> + <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="1" loc="(520,1320)" name="OR Gate"> + <comp lib="0" loc="(280,1200)" name="Constant"/> + <comp lib="0" loc="(400,60)" name="Constant"> <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="2" loc="(1170,610)" name="Multiplexer"> - <a name="width" val="5"/> - <a name="enable" val="false"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(880,1730)" name="OR Gate"> + <comp lib="0" loc="(240,1700)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="width" val="4"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(560,510)" name="OR Gate"> + <comp lib="1" loc="(760,1320)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(930,960)" name="Multiplexer"> + <comp lib="0" loc="(280,1350)" name="Constant"/> + <comp lib="0" loc="(240,1750)" 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="2" loc="(850,960)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(800,1460)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="1" loc="(600,1050)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(310,1860)" name="OR Gate"> + <a name="facing" val="west"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(940,820)" name="Constant"> + <comp lib="0" loc="(900,910)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="4" loc="(870,1810)" name="Register"> - <a name="width" val="1"/> - <a name="trigger" val="falling"/> - </comp> - <comp lib="0" loc="(280,130)" name="Constant"/> - <comp lib="1" loc="(770,1810)" name="AND Gate"> + <comp lib="1" loc="(310,1470)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate0" val="true"/> <a name="negate1" val="true"/> </comp> - <comp lib="0" loc="(280,1110)" name="Constant"/> - <comp lib="0" loc="(280,280)" name="Constant"/> - <comp lib="0" loc="(280,360)" name="Constant"/> - <comp lib="1" loc="(1210,790)" name="OR Gate"> + <comp lib="1" loc="(480,1410)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(1170,680)" name="AND Gate"> - <a name="facing" val="north"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(280,410)" name="Constant"/> - <comp lib="0" loc="(220,1580)" name="Splitter"> + <comp lib="0" loc="(600,1810)" name="Pin"> <a name="facing" val="north"/> - <a name="appear" val="center"/> + <a name="output" val="true"/> + <a name="width" val="8"/> + <a name="label" val="IMM VALUE"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(940,1000)" name="Constant"> + <comp lib="0" loc="(900,660)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(280,570)" name="Constant"/> - <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 lib="0" loc="(1210,560)" name="Constant"> + <a name="width" val="5"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(1100,1360)" name="OR Gate"> + <comp lib="1" loc="(280,100)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(620,1700)" 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="labelloc" val="south"/> + <comp lib="0" loc="(1160,1640)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="4"/> + <a name="incoming" val="4"/> </comp> - <comp lib="2" loc="(850,960)" name="Multiplexer"> + <comp lib="2" loc="(850,760)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(440,1990)" name="AND Gate"> - <a name="facing" val="south"/> + <comp lib="0" loc="(660,2000)" 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="0" loc="(280,140)" name="Constant"/> + <comp lib="1" loc="(1340,660)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(670,1940)" name="AND Gate"> + <comp lib="0" loc="(530,2000)" name="Pin"> <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="label" val="Address MUX"/> + <a name="labelloc" val="south"/> + </comp> + <comp lib="1" loc="(290,1730)" name="OR Gate"> + <a name="width" val="8"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,650)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="LNI/LI"/> - <a name="negate7" val="true"/> + <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="1" loc="(480,510)" name="OR Gate"> + <comp lib="0" loc="(280,670)" name="Constant"/> + <comp lib="1" loc="(1210,680)" name="AND Gate"> + <a name="facing" val="north"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </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="(280,310)" name="Constant"/> - <comp lib="3" loc="(1260,940)" name="Adder"> - <a name="width" val="5"/> + <comp lib="1" loc="(1170,1840)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="4"/> + <a name="negate1" val="true"/> + <a name="negate2" val="true"/> + <a name="negate3" val="true"/> </comp> <comp lib="0" loc="(760,1700)" name="Pin"> <a name="facing" val="north"/> @@ -3056,498 +3116,531 @@ <a name="label" val="POP"/> <a name="labelloc" val="south"/> </comp> - <comp lib="1" loc="(520,510)" name="OR Gate"> + <comp lib="1" loc="(1330,600)" name="AND Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="4" loc="(1200,1760)" name="Register"> - <a name="width" val="4"/> - <a name="trigger" val="falling"/> + <comp lib="1" loc="(360,1090)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(290,1610)" name="Multiplexer"> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <comp lib="1" loc="(280,370)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(1050,1790)" name="AND Gate"> + <comp lib="1" loc="(800,1460)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </comp> + <comp lib="1" loc="(1070,820)" 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="0" loc="(940,660)" name="Constant"> + <comp lib="0" loc="(160,50)" name="Splitter"> <a name="facing" val="south"/> - <a name="width" val="2"/> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> </comp> - <comp lib="0" loc="(280,400)" name="Constant"/> - <comp lib="0" loc="(560,60)" name="Constant"> + <comp lib="0" loc="(280,130)" name="Constant"/> + <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="(280,90)" name="Constant"/> <comp lib="2" loc="(230,1790)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(900,550)" name="Constant"> + <comp lib="1" loc="(1400,800)" 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="1" loc="(330,200)" name="AND Gate"> - <a name="inputs" val="8"/> - <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"/> + <comp lib="0" loc="(160,1790)" name="Constant"> + <a name="width" val="8"/> </comp> - <comp lib="2" loc="(290,1650)" name="Multiplexer"> - <a name="width" val="2"/> - <a name="enable" val="false"/> + <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="0" loc="(200,1700)" 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 lib="1" loc="(600,960)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(860,550)" name="Constant"> + <comp lib="0" loc="(280,660)" name="Constant"/> + <comp lib="2" loc="(850,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="0" loc="(180,1690)" 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 lib="0" loc="(280,220)" name="Constant"/> + <comp lib="1" loc="(1050,1670)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="label" val="gtr"/> + <a name="negate0" val="true"/> + <a name="negate2" val="true"/> </comp> - <comp lib="0" loc="(280,120)" name="Constant"/> - <comp lib="2" loc="(930,600)" name="Multiplexer"> + <comp lib="0" loc="(280,640)" name="Constant"/> + <comp lib="0" loc="(1160,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> + <comp lib="1" loc="(600,1460)" 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="(1320,780)" name="OR Gate"> + <comp lib="1" loc="(820,1980)" name="AND Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate0" val="true"/> </comp> - <comp lib="0" loc="(280,500)" name="Constant"/> - <comp lib="0" loc="(900,730)" name="Constant"> + <comp lib="0" loc="(1190,1410)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="tristate" val="false"/> + <a name="label" val="GPR Forward Input"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="2" loc="(890,1050)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="enable" val="false"/> + </comp> + <comp lib="0" loc="(1220,930)" name="Constant"> + <a name="width" val="5"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(330,1010)" name="AND Gate"> + <comp lib="0" loc="(280,230)" name="Constant"/> + <comp lib="0" loc="(440,1740)" 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="(330,470)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="PEEK"/> + <a name="label" val="CIN"/> + <a name="negate0" val="true"/> <a name="negate2" val="true"/> <a name="negate3" val="true"/> - <a name="negate6" val="true"/> - </comp> - <comp lib="0" loc="(1160,910)" name="Constant"> - <a name="width" val="4"/> - <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(850,870)" name="Multiplexer"> + <comp lib="2" loc="(850,690)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(860,1000)" name="Constant"> - <a name="facing" val="south"/> + <comp lib="0" loc="(760,2000)" 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="BRANCH"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="2" loc="(290,1570)" name="Multiplexer"> + <comp lib="0" loc="(940,660)" name="Constant"> + <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(1310,670)" name="NOT Gate"> - <a name="size" val="20"/> - </comp> - <comp lib="1" loc="(480,1410)" name="OR Gate"> + <comp lib="0" loc="(280,540)" name="Constant"/> + <comp lib="1" loc="(640,730)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="inputs" val="3"/> </comp> - <comp lib="1" loc="(1240,760)" name="AND Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(480,420)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> - <a name="negate1" val="true"/> </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> - <comp lib="4" loc="(110,50)" name="Register"> - <a name="trigger" val="falling"/> - </comp> - <comp lib="4" loc="(1110,870)" name="Register"> - <a name="width" val="1"/> - </comp> - <comp lib="0" loc="(280,390)" name="Constant"/> - <comp lib="0" loc="(280,1300)" name="Constant"/> - <comp lib="0" loc="(280,330)" name="Constant"/> - <comp lib="1" loc="(640,690)" name="OR Gate"> + <comp lib="1" loc="(520,1140)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> - <a name="inputs" val="3"/> - </comp> - <comp lib="1" loc="(800,670)" name="AND Gate"> - <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(400,420)" name="OR Gate"> + <comp lib="0" loc="(220,1580)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="center"/> + </comp> + <comp lib="0" loc="(600,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="(1160,1760)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="4"/> + <comp lib="0" loc="(200,1700)" 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="0" loc="(280,230)" name="Constant"/> - <comp lib="0" loc="(1240,560)" name="Constant"> - <a name="width" val="5"/> + <comp lib="0" loc="(180,1660)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="center"/> + </comp> + <comp lib="0" loc="(280,1390)" name="Constant"/> + <comp lib="0" loc="(620,1700)" 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="labelloc" val="south"/> + </comp> + <comp lib="2" loc="(290,1570)" name="Multiplexer"> + <a name="width" val="2"/> + <a name="enable" val="false"/> + </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="(160,50)" name="Multiplexer"> - <a name="width" val="8"/> + <comp lib="2" loc="(930,870)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(800,1700)" name="Pin"> + <comp lib="0" loc="(280,1360)" name="Constant"/> + <comp lib="3" loc="(1280,620)" name="Subtractor"> + <a name="width" val="5"/> + </comp> + <comp lib="0" loc="(840,1730)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> - <a name="label" val="PUSH"/> + <a name="width" val="2"/> + <a name="label" val="A (R)"/> <a name="labelloc" val="south"/> </comp> - <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 lib="0" loc="(200,1620)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="center"/> </comp> - <comp lib="1" loc="(1070,820)" name="AND Gate"> - <a name="facing" val="west"/> + <comp lib="0" loc="(380,1950)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfc"/> + </comp> + <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> - <comp lib="0" loc="(330,1800)" name="Pin"> + <comp lib="0" loc="(280,1120)" name="Constant"/> + <comp lib="0" loc="(440,1740)" 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="width" val="3"/> + <a name="label" val="ALU OP"/> <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(280,490)" name="Constant"/> - <comp lib="0" loc="(280,90)" name="Constant"/> - <comp lib="0" loc="(260,1600)" 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="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="0" loc="(360,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(560,150)" name="OR Gate"> + <comp lib="0" loc="(280,1290)" name="Constant"/> + <comp lib="1" loc="(900,1840)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(220,1730)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="4"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="1" loc="(330,1100)" name="AND Gate"> + <comp lib="1" loc="(330,1370)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="LB"/> - <a name="negate3" val="true"/> - <a name="negate6" val="true"/> + <a name="label" val="CMP"/> </comp> - <comp lib="0" loc="(240,1700)" name="Constant"> + <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="(330,920)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="POP"/> + <comp lib="1" loc="(1370,660)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="3"/> <a name="negate2" val="true"/> - <a name="negate3" val="true"/> - <a name="negate4" val="true"/> - <a name="negate6" val="true"/> </comp> - <comp lib="1" loc="(640,600)" name="OR Gate"> + <comp lib="0" loc="(440,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="(1160,1700)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="4"/> - <a name="incoming" val="4"/> + <comp lib="0" loc="(860,820)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> </comp> - <comp lib="1" loc="(310,1860)" name="OR Gate"> - <a name="facing" val="west"/> + <comp lib="1" loc="(670,1940)" name="AND Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,1370)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="CMP"/> + <comp lib="0" loc="(920,1730)" 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="0" loc="(280,140)" name="Constant"/> - <comp lib="1" loc="(480,420)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(1170,680)" name="AND Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(160,50)" name="Splitter"> + <comp lib="1" loc="(1180,1410)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="3"/> + </comp> + <comp lib="0" loc="(860,660)" name="Constant"> <a name="facing" val="south"/> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(680,1140)" 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="(90,1760)" name="Pin"> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="ALU OUTPUT"/> - <a name="labelloc" val="south"/> + <comp lib="0" loc="(830,2010)" 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="(330,1280)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="SP"/> - <a name="negate6" val="true"/> + <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="(1180,1410)" name="OR Gate"> + <comp lib="0" loc="(280,480)" name="Constant"/> + <comp lib="1" loc="(520,150)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="3" loc="(420,1940)" name="Comparator"> - <a name="mode" val="unsigned"/> - </comp> - <comp lib="0" loc="(360,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="2" loc="(890,690)" name="Multiplexer"> - <a name="facing" val="south"/> + <comp lib="0" loc="(260,1560)" name="Constant"> <a name="width" val="2"/> - <a name="disabled" val="0"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(260,1640)" name="Constant"> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="4" loc="(260,1790)" name="Register"/> + <comp lib="2" loc="(550,1790)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(1370,660)" name="AND Gate"> + <comp lib="0" loc="(460,1810)" 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="0" loc="(480,60)" name="Constant"> + <a name="facing" val="south"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="0" loc="(620,1520)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="right"/> + </comp> + <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="(850,60)" name="Constant"> + <comp lib="2" loc="(890,600)" 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="(830,2010)" 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,1100)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="LB"/> + <a name="negate3" val="true"/> + <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(160,1790)" name="Constant"> - <a name="width" val="8"/> + <comp lib="4" loc="(1200,1760)" name="Register"> + <a name="width" val="4"/> + <a name="trigger" val="falling"/> </comp> - <comp lib="1" loc="(1050,1730)" name="AND Gate"> - <a name="facing" val="west"/> - <a name="label" val="go"/> - <a name="negate1" val="true"/> - <a name="negate2" val="true"/> + <comp lib="1" loc="(810,880)" name="AND Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate0" val="true"/> </comp> - <comp lib="2" loc="(930,690)" name="Multiplexer"> + <comp lib="2" loc="(930,600)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(1210,680)" name="AND Gate"> - <a name="facing" val="north"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(280,420)" name="Constant"/> <comp lib="0" loc="(1200,950)" name="Bit Extender"> <a name="in_width" val="4"/> <a name="out_width" val="5"/> </comp> - <comp lib="1" loc="(1330,640)" name="AND Gate"> + <comp lib="0" loc="(1240,630)" name="Constant"> + <a name="width" val="5"/> + </comp> + <comp lib="0" loc="(900,730)" name="Constant"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="value" val="0x0"/> + </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"/> - <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(560,330)" name="OR Gate"> + <comp lib="1" loc="(800,1140)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(550,1790)" name="Multiplexer"> - <a name="selloc" val="tr"/> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="0" loc="(280,300)" name="Constant"/> + <comp lib="1" loc="(800,910)" name="OR Gate"> + <a name="facing" val="south"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(330,1190)" name="AND Gate"> + <comp lib="0" loc="(280,330)" name="Constant"/> + <comp lib="1" loc="(330,920)" name="AND Gate"> <a name="inputs" val="8"/> - <a name="label" val="SB"/> + <a name="label" val="POP"/> <a name="negate2" val="true"/> + <a name="negate3" val="true"/> + <a name="negate4" val="true"/> <a name="negate6" val="true"/> </comp> - <comp lib="0" loc="(280,300)" name="Constant"/> + <comp lib="1" loc="(480,330)" 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"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="3" loc="(200,1800)" name="Adder"/> - <comp lib="3" loc="(1200,900)" name="Comparator"> - <a name="width" val="4"/> + <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="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 lib="1" loc="(840,1810)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="2" loc="(850,1050)" name="Multiplexer"> + <comp lib="1" loc="(1100,1100)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="3"/> + </comp> + <comp lib="1" loc="(520,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="2" loc="(930,870)" name="Multiplexer"> + <comp lib="0" loc="(50,150)" name="Pin"> + <a name="tristate" val="false"/> + <a name="label" val="CLK"/> + </comp> + <comp lib="3" loc="(1280,670)" name="Comparator"> + <a name="width" val="5"/> + </comp> + <comp lib="2" loc="(890,870)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(280,1350)" name="Constant"/> - <comp lib="0" loc="(600,1810)" name="Pin"> + <comp lib="0" loc="(760,1980)" name="Splitter"> <a name="facing" val="north"/> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="label" val="IMM VALUE"/> - <a name="labelloc" val="south"/> - </comp> - <comp lib="4" loc="(1110,680)" name="Register"> - <a name="width" val="1"/> + <a name="appear" val="right"/> </comp> - <comp lib="0" loc="(280,660)" name="Constant"/> - <comp lib="0" loc="(280,1390)" name="Constant"/> - <comp lib="0" loc="(440,2000)" 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="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="2" loc="(890,960)" name="Multiplexer"> + <comp lib="0" loc="(940,910)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="0" loc="(240,1750)" 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="(280,150)" name="Constant"/> - <comp lib="0" loc="(280,1120)" name="Constant"/> - <comp lib="1" loc="(440,330)" name="OR Gate"> + <comp lib="1" loc="(640,1460)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,1200)" name="Constant"/> - <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="1" loc="(330,650)" name="AND Gate"> + <a name="inputs" val="8"/> + <a name="label" val="LNI/LI"/> + <a name="negate7" val="true"/> </comp> - <comp lib="1" loc="(290,1730)" name="OR Gate"> - <a name="width" val="8"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="4" loc="(1210,610)" name="Register"> + <a name="width" val="5"/> </comp> - <comp lib="1" loc="(440,420)" name="OR Gate"> + <comp lib="1" loc="(560,510)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(860,820)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> + <comp lib="0" loc="(280,390)" name="Constant"/> + <comp lib="0" loc="(440,2000)" name="Pin"> + <a name="facing" val="north"/> + <a name="output" val="true"/> + <a name="label" val="Memory Select"/> + <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(900,660)" name="Constant"> - <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="value" val="0x0"/> + <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="0" loc="(600,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <comp lib="1" loc="(1050,1790)" name="AND Gate"> + <a name="facing" val="west"/> + <a name="label" val="ptrinc"/> </comp> - <comp lib="0" loc="(860,910)" name="Constant"> + <comp lib="0" loc="(280,630)" name="Constant"/> + <comp lib="0" loc="(280,490)" name="Constant"/> + <comp lib="0" loc="(220,1730)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="2"/> + <a name="width" val="4"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(600,1460)" name="OR Gate"> - <a name="facing" val="south"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </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="3" loc="(1280,620)" name="Subtractor"> + <comp lib="2" loc="(1170,610)" name="Multiplexer"> <a name="width" val="5"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(600,960)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(1100,1360)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,640)" name="Constant"/> - <comp lib="0" loc="(280,1380)" name="Constant"/> - <comp lib="2" loc="(890,600)" name="Multiplexer"> + <comp lib="0" loc="(940,730)" name="Constant"> <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"> - <a name="inputs" val="8"/> - <a name="label" val="LLI"/> - <a name="negate6" val="true"/> - <a name="negate7" val="true"/> + <a name="value" val="0x0"/> </comp> - <comp lib="0" loc="(480,60)" 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="2" loc="(910,1680)" name="Multiplexer"> @@ -3555,223 +3648,208 @@ <a name="width" val="2"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(920,1730)" name="OR Gate"> + <comp lib="2" loc="(890,760)" name="Multiplexer"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="disabled" val="0"/> + <a name="enable" val="false"/> + </comp> + <comp lib="1" loc="(760,1230)" name="OR Gate"> + <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,270)" name="Constant"/> - <comp lib="1" loc="(900,1840)" name="OR Gate"> + <comp lib="0" loc="(280,1210)" name="Constant"/> + <comp lib="0" loc="(1160,1760)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="4"/> + <a name="incoming" val="4"/> + </comp> + <comp lib="0" loc="(250,1720)" 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="1" loc="(880,1730)" 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="(520,420)" name="OR Gate"> + <comp lib="0" loc="(280,150)" name="Constant"/> + <comp lib="0" loc="(280,310)" name="Constant"/> + <comp lib="1" loc="(330,200)" name="AND Gate"> + <a name="inputs" val="8"/> + <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"/> + </comp> + <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="0" loc="(260,1640)" name="Constant"> + <comp lib="2" loc="(850,600)" name="Multiplexer"> + <a name="facing" val="south"/> <a name="width" val="2"/> - <a name="value" val="0x0"/> - </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"/> + <a name="enable" val="false"/> </comp> - <comp lib="3" loc="(1280,670)" name="Comparator"> - <a name="width" val="5"/> + <comp lib="0" loc="(1160,1700)" name="Splitter"> + <a name="facing" val="west"/> + <a name="fanout" val="4"/> + <a name="incoming" val="4"/> </comp> - <comp lib="0" loc="(50,250)" name="Pin"> + <comp lib="0" loc="(280,400)" name="Constant"/> + <comp lib="0" loc="(80,50)" name="Pin"> + <a name="width" val="8"/> <a name="tristate" val="false"/> - <a name="label" val="RST"/> + <a name="label" val="DATA"/> + <a name="labelloc" val="north"/> </comp> - <comp lib="0" loc="(400,60)" name="Constant"> + <comp lib="0" loc="(940,1000)" name="Constant"> <a name="facing" val="south"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(760,1980)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="right"/> - </comp> - <comp lib="0" loc="(760,2000)" name="Pin"> - <a name="facing" val="north"/> - <a name="output" val="true"/> <a name="width" val="2"/> - <a name="label" val="BRANCH"/> - <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(860,660)" 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="0" loc="(680,60)" name="Constant"> + <a name="facing" val="south"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(1110,1850)" name="OR Gate"> + <comp lib="1" loc="(360,1180)" name="AND Gate"> <a name="size" val="30"/> - <a name="inputs" val="3"/> + <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(440,1740)" name="Pin"> + <comp lib="0" loc="(800,1700)" 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="label" val="PUSH"/> <a name="labelloc" val="south"/> </comp> - <comp lib="0" loc="(880,1730)" name="Pin"> - <a name="facing" val="north"/> + <comp lib="0" loc="(280,410)" name="Constant"/> + <comp lib="0" loc="(1210,1760)" name="Pin"> + <a name="facing" val="west"/> <a name="output" val="true"/> - <a name="width" val="2"/> - <a name="label" val="B (R)"/> - <a name="labelloc" val="south"/> + <a name="width" val="4"/> + <a name="label" val="Dynamic OP"/> + <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(940,730)" name="Constant"> + <comp lib="0" loc="(520,60)" name="Constant"> <a name="facing" val="south"/> - <a name="width" val="2"/> <a name="value" val="0x0"/> </comp> - <comp lib="1" loc="(680,1230)" name="OR Gate"> + <comp lib="0" loc="(280,360)" name="Constant"/> + <comp lib="2" loc="(930,960)" name="Multiplexer"> + <a name="facing" val="south"/> + <a name="width" val="2"/> + <a name="enable" val="false"/> + </comp> + <comp lib="1" loc="(600,1230)" name="OR Gate"> <a name="facing" val="south"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,630)" name="Constant"/> - <comp lib="0" loc="(1160,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> - <comp lib="4" loc="(260,1790)" name="Register"/> - <comp lib="0" loc="(1240,680)" name="Constant"> - <a name="width" val="5"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="1" loc="(330,740)" name="AND Gate"> + <comp lib="1" loc="(330,560)" 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="label" val="LLI"/> <a name="negate6" val="true"/> + <a name="negate7" val="true"/> </comp> - <comp lib="0" loc="(280,320)" name="Constant"/> - <comp lib="1" loc="(1050,1670)" name="AND Gate"> - <a name="facing" val="west"/> - <a name="label" val="gtr"/> - <a name="negate0" val="true"/> - <a name="negate2" val="true"/> - </comp> - <comp lib="0" loc="(860,730)" name="Constant"> + <comp lib="0" loc="(280,120)" name="Constant"/> + <comp lib="1" loc="(920,1730)" 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="(440,1740)" 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="0" loc="(940,550)" name="Constant"> + <comp lib="0" loc="(930,60)" name="Constant"> <a name="facing" val="south"/> <a name="width" val="2"/> + <a name="value" val="0x0"/> </comp> - <comp lib="2" loc="(850,600)" name="Multiplexer"> + <comp lib="1" loc="(680,1230)" name="OR Gate"> <a name="facing" val="south"/> - <a name="width" val="2"/> - <a name="enable" val="false"/> - </comp> - <comp lib="1" loc="(840,1810)" name="OR Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="0" loc="(280,1360)" name="Constant"/> - <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 lib="4" loc="(1400,660)" name="Register"> + <a name="width" val="1"/> </comp> - <comp lib="0" loc="(680,60)" name="Constant"> - <a name="facing" val="south"/> - <a name="value" val="0x0"/> + <comp lib="2" loc="(290,1610)" name="Multiplexer"> + <a name="width" val="2"/> + <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(1190,650)" name="OR Gate"> - <a name="facing" val="north"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="0" loc="(1160,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="1" loc="(840,1730)" name="OR Gate"> + <comp lib="3" loc="(1200,900)" name="Comparator"> + <a name="width" val="4"/> + </comp> + <comp lib="1" loc="(400,420)" 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="(250,1720)" 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="1" loc="(330,830)" name="AND Gate"> - <a name="inputs" val="8"/> - <a name="label" val="PUSH"/> - <a name="negate2" val="true"/> - <a name="negate3" val="true"/> - <a name="negate5" val="true"/> - <a name="negate6" val="true"/> + <comp lib="2" loc="(320,1740)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="width" val="8"/> + <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(890,60)" name="Constant"> + <comp lib="3" loc="(200,1800)" name="Adder"/> + <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="(1220,930)" name="Constant"> - <a name="width" val="5"/> - <a name="value" val="0x0"/> - </comp> - <comp lib="0" loc="(280,480)" name="Constant"/> - <comp lib="1" loc="(1320,540)" name="OR Gate"> + <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="4" loc="(1400,660)" name="Register"> - <a name="width" val="1"/> - </comp> - <comp lib="1" loc="(440,1140)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="1" loc="(770,1810)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> + <a name="negate1" val="true"/> </comp> - <comp lib="1" loc="(520,1410)" name="OR Gate"> - <a name="facing" val="south"/> + <comp lib="0" loc="(880,1730)" 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="(280,500)" name="Constant"/> + <comp lib="1" loc="(1110,1850)" name="OR Gate"> <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="inputs" val="3"/> </comp> - <comp lib="0" loc="(280,580)" name="Constant"/> - <comp lib="4" loc="(710,1820)" name="Register"> - <a name="width" val="1"/> - <a name="trigger" val="falling"/> + <comp lib="0" loc="(180,1690)" 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="0" loc="(280,670)" name="Constant"/> - <comp lib="1" loc="(520,1140)" name="OR 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"/> </comp> - <comp lib="1" loc="(1170,1840)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="4"/> - <a name="negate1" val="true"/> - <a name="negate2" val="true"/> - <a name="negate3" val="true"/> - </comp> </circuit> <circuit name="STK"> <a name="circuit" val="STK"/> @@ -4343,161 +4421,148 @@ <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="(470,270)" name="Register"/> - <comp lib="4" loc="(3000,270)" name="Register"/> - <comp lib="4" loc="(800,270)" name="Register"/> - <comp lib="4" loc="(2230,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> - <comp lib="4" loc="(360,270)" name="Register"/> - <comp lib="2" loc="(750,260)" name="Multiplexer"> + <comp lib="4" loc="(2560,270)" name="Register"/> + <comp lib="2" loc="(3280,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(150,220)" name="Pin"> - <a name="output" val="true"/> + <comp lib="2" loc="(3610,260)" name="Multiplexer"> <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="labelloc" val="east"/> + <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(2780,270)" name="Register"/> - <comp lib="0" loc="(150,270)" name="Pin"> + <comp lib="2" loc="(1190,260)" name="Multiplexer"> <a name="width" val="8"/> - <a name="tristate" val="false"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2070,260)" name="Multiplexer"> + <comp lib="2" loc="(310,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(3220,270)" name="Register"/> - <comp lib="2" loc="(3060,260)" name="Multiplexer"> + <comp lib="4" loc="(3000,270)" name="Register"/> + <comp lib="4" loc="(250,270)" name="Register"/> + <comp lib="4" loc="(2780,270)" name="Register"/> + <comp lib="0" loc="(180,320)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="4" loc="(1350,270)" name="Register"/> + <comp lib="4" loc="(1130,270)" name="Register"/> + <comp lib="4" loc="(2890,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="(1520,260)" name="Multiplexer"> + <comp lib="4" loc="(470,270)" name="Register"/> + <comp lib="4" loc="(1790,270)" name="Register"/> + <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="2" loc="(2620,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="(690,270)" name="Register"/> - <comp lib="1" loc="(130,340)" name="OR Gate"> - <a name="size" val="30"/> - <a name="inputs" val="2"/> - </comp> - <comp lib="0" loc="(90,360)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="2" loc="(970,260)" name="Multiplexer"> + <comp lib="2" loc="(1520,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(1410,260)" name="Multiplexer"> + <comp lib="2" loc="(3060,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> <comp lib="4" loc="(3660,270)" name="Register"/> - <comp lib="2" loc="(1190,260)" name="Multiplexer"> + <comp lib="2" loc="(750,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="(1630,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(3390,260)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> + <comp lib="4" loc="(2120,270)" name="Register"/> + <comp lib="4" loc="(910,270)" name="Register"/> + <comp lib="1" loc="(130,340)" name="OR Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="4" loc="(1790,270)" name="Register"/> - <comp lib="2" loc="(2290,260)" name="Multiplexer"> + <comp lib="4" loc="(2230,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="(1570,270)" name="Register"/> - <comp lib="4" loc="(3440,270)" name="Register"/> - <comp lib="4" loc="(2670,270)" name="Register"/> - <comp lib="4" loc="(2010,270)" name="Register"/> - <comp lib="2" loc="(420,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="(910,270)" name="Register"/> - <comp lib="4" loc="(2890,270)" name="Register"/> - <comp lib="4" loc="(3110,270)" name="Register"/> - <comp lib="2" loc="(2950,260)" name="Multiplexer"> + <comp lib="4" loc="(580,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="(360,270)" name="Register"/> + <comp lib="4" loc="(1900,270)" name="Register"/> <comp lib="2" loc="(1850,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="(1350,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="(640,260)" name="Multiplexer"> - <a name="width" val="8"/> - <a name="enable" val="false"/> - </comp> - <comp lib="4" loc="(250,270)" name="Register"/> - <comp lib="4" loc="(1020,270)" name="Register"/> - <comp lib="2" loc="(3170,260)" name="Multiplexer"> + <comp lib="2" loc="(2070,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(3280,260)" name="Multiplexer"> + <comp lib="2" loc="(1960,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> + <comp lib="4" loc="(1460,270)" name="Register"/> <comp lib="2" loc="(530,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(2340,270)" name="Register"/> - <comp lib="4" loc="(3550,270)" name="Register"/> + <comp lib="4" loc="(800,270)" name="Register"/> <comp lib="2" loc="(2400,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(90,300)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="4" loc="(3330,270)" name="Register"/> - <comp lib="2" loc="(2180,260)" name="Multiplexer"> + <comp lib="2" loc="(2620,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(2730,260)" name="Multiplexer"> + <comp lib="4" loc="(2010,270)" name="Register"/> + <comp lib="2" loc="(3500,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(90,330)" name="Pin"> - <a name="tristate" val="false"/> - </comp> - <comp lib="4" loc="(2560,270)" name="Register"/> + <comp lib="4" loc="(1570,270)" name="Register"/> <comp lib="2" loc="(1080,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(1130,270)" name="Register"/> - <comp lib="4" loc="(2120,270)" name="Register"/> - <comp lib="0" loc="(180,320)" name="Pin"> - <a name="tristate" val="false"/> - </comp> <comp lib="4" loc="(1680,270)" name="Register"/> - <comp lib="2" loc="(2840,260)" name="Multiplexer"> + <comp lib="4" loc="(3220,270)" name="Register"/> + <comp lib="2" loc="(3390,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(1300,260)" name="Multiplexer"> + <comp lib="0" loc="(3670,220)" name="Constant"> + <a name="facing" val="west"/> + <a name="width" val="8"/> + <a name="value" val="0x0"/> + </comp> + <comp lib="2" loc="(970,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="(1740,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> @@ -4505,35 +4570,48 @@ <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(1900,270)" name="Register"/> - <comp lib="2" loc="(3610,260)" name="Multiplexer"> + <comp lib="2" loc="(640,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(3500,260)" name="Multiplexer"> + <comp lib="0" loc="(90,330)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="4" loc="(3110,270)" name="Register"/> + <comp lib="4" loc="(2450,270)" name="Register"/> + <comp lib="2" loc="(2840,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="(3550,270)" name="Register"/> + <comp lib="0" loc="(90,300)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="2" loc="(200,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> <comp lib="4" loc="(1240,270)" name="Register"/> - <comp lib="2" loc="(200,260)" name="Multiplexer"> + <comp lib="2" loc="(420,260)" name="Multiplexer"> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="4" loc="(580,270)" name="Register"/> - <comp lib="0" loc="(3670,220)" name="Constant"> - <a name="facing" val="west"/> + <comp lib="4" loc="(3440,270)" name="Register"/> + <comp lib="2" loc="(3170,260)" name="Multiplexer"> <a name="width" val="8"/> - <a name="value" val="0x0"/> + <a name="enable" val="false"/> </comp> - <comp lib="2" loc="(1740,260)" name="Multiplexer"> + <comp lib="4" loc="(3330,270)" name="Register"/> + <comp lib="4" loc="(1020,270)" name="Register"/> + <comp lib="4" loc="(690,270)" name="Register"/> + <comp lib="4" loc="(2670,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="(1460,270)" name="Register"/> + <comp lib="0" loc="(90,360)" name="Pin"> + <a name="tristate" val="false"/> + </comp> </circuit> <circuit name="PC"> <a name="circuit" val="PC"/> @@ -4583,38 +4661,40 @@ <wire from="(370,270)" to="(370,320)"/> <wire from="(140,470)" to="(270,470)"/> <wire from="(200,310)" to="(200,370)"/> - <comp lib="3" loc="(360,320)" name="Adder"/> - <comp lib="0" loc="(320,430)" name="Splitter"> - <a name="facing" val="north"/> - <a name="appear" val="right"/> + <comp lib="3" loc="(420,330)" name="Adder"/> + <comp lib="0" loc="(140,500)" name="Pin"> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(360,390)" 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="(150,380)" name="Constant"> + <a name="width" val="8"/> </comp> <comp lib="2" loc="(250,310)" name="Multiplexer"> <a name="select" val="2"/> <a name="width" val="8"/> <a name="enable" val="false"/> </comp> - <comp lib="1" loc="(260,450)" name="NOT Gate"> - <a name="size" val="20"/> - </comp> - <comp lib="4" loc="(290,310)" name="Register"> - <a name="trigger" val="falling"/> + <comp lib="0" loc="(140,450)" name="Pin"> + <a name="tristate" val="false"/> </comp> - <comp lib="0" loc="(320,330)" name="Constant"> + <comp lib="0" loc="(380,340)" name="Constant"> <a name="width" val="8"/> </comp> - <comp lib="0" loc="(140,430)" name="Pin"> - <a name="width" val="2"/> - <a name="tristate" val="false"/> - <a name="label" val="Jump Enable"/> - </comp> - <comp lib="3" loc="(190,370)" name="Adder"/> - <comp lib="3" loc="(420,330)" name="Adder"/> <comp lib="2" loc="(350,390)" name="Multiplexer"> <a name="width" val="8"/> <a name="disabled" val="0"/> <a name="enable" val="false"/> </comp> - <comp lib="0" loc="(140,450)" name="Pin"> + <comp lib="0" loc="(320,430)" name="Splitter"> + <a name="facing" val="north"/> + <a name="appear" val="right"/> + </comp> + <comp lib="0" loc="(140,470)" name="Pin"> <a name="tristate" val="false"/> </comp> <comp lib="0" loc="(190,300)" name="Pin"> @@ -4622,19 +4702,19 @@ <a name="tristate" val="false"/> <a name="label" val="DATA"/> </comp> - <comp lib="0" loc="(360,390)" name="Pin"> - <a name="facing" val="west"/> - <a name="output" val="true"/> - <a name="width" val="8"/> - <a name="labelloc" val="east"/> + <comp lib="4" loc="(290,310)" name="Register"> + <a name="trigger" val="falling"/> </comp> - <comp lib="0" loc="(140,500)" name="Pin"> + <comp lib="0" loc="(140,430)" name="Pin"> + <a name="width" val="2"/> <a name="tristate" val="false"/> + <a name="label" val="Jump Enable"/> </comp> - <comp lib="0" loc="(130,360)" name="Pin"> + <comp lib="0" loc="(320,330)" name="Constant"> <a name="width" val="8"/> - <a name="tristate" val="false"/> - <a name="label" val="ALU"/> + </comp> + <comp lib="1" loc="(260,450)" name="NOT Gate"> + <a name="size" val="20"/> </comp> <comp lib="0" loc="(430,330)" name="Pin"> <a name="facing" val="west"/> @@ -4642,15 +4722,13 @@ <a name="width" val="8"/> <a name="labelloc" val="east"/> </comp> - <comp lib="0" loc="(380,340)" name="Constant"> - <a name="width" val="8"/> - </comp> - <comp lib="0" loc="(150,380)" name="Constant"> + <comp lib="3" loc="(360,320)" name="Adder"/> + <comp lib="0" loc="(130,360)" name="Pin"> <a name="width" val="8"/> - </comp> - <comp lib="0" loc="(140,470)" name="Pin"> <a name="tristate" val="false"/> + <a name="label" val="ALU"/> </comp> + <comp lib="3" loc="(190,370)" name="Adder"/> </circuit> <circuit name="ExampleConfigurationROM"> <a name="circuit" val="ExampleConfigurationROM"/> @@ -4661,20 +4739,16 @@ <wire from="(470,210)" to="(470,350)"/> <wire from="(480,420)" to="(790,420)"/> <wire from="(320,880)" to="(420,880)"/> - <wire from="(590,660)" to="(700,660)"/> - <wire from="(650,730)" to="(650,770)"/> <wire from="(680,360)" to="(680,400)"/> + <wire from="(650,730)" to="(650,770)"/> <wire from="(710,710)" to="(710,750)"/> - <wire from="(520,710)" to="(540,710)"/> <wire from="(540,10)" to="(560,10)"/> <wire from="(470,490)" to="(500,490)"/> - <wire from="(640,750)" to="(660,750)"/> <wire from="(610,80)" to="(610,190)"/> <wire from="(350,510)" to="(500,510)"/> <wire from="(410,10)" to="(410,60)"/> <wire from="(590,20)" to="(850,20)"/> <wire from="(410,400)" to="(670,400)"/> - <wire from="(650,770)" to="(660,770)"/> <wire from="(680,400)" to="(690,400)"/> <wire from="(480,170)" to="(480,420)"/> <wire from="(640,360)" to="(650,360)"/> @@ -4684,11 +4758,12 @@ <wire from="(460,470)" to="(460,730)"/> <wire from="(460,330)" to="(460,470)"/> <wire from="(410,800)" to="(720,800)"/> - <wire from="(620,760)" to="(660,760)"/> + <wire from="(700,760)" to="(740,760)"/> <wire from="(550,520)" to="(550,550)"/> - <wire from="(590,630)" to="(700,630)"/> <wire from="(370,450)" to="(370,550)"/> + <wire from="(660,710)" to="(660,750)"/> <wire from="(320,860)" to="(410,860)"/> + <wire from="(650,730)" to="(670,730)"/> <wire from="(710,710)" to="(730,710)"/> <wire from="(710,380)" to="(740,380)"/> <wire from="(460,190)" to="(610,190)"/> @@ -4697,12 +4772,14 @@ <wire from="(360,290)" to="(370,290)"/> <wire from="(430,180)" to="(560,180)"/> <wire from="(460,730)" to="(460,920)"/> + <wire from="(660,750)" to="(670,750)"/> <wire from="(480,170)" to="(870,170)"/> <wire from="(600,770)" to="(610,770)"/> <wire from="(370,590)" to="(370,840)"/> <wire from="(660,520)" to="(660,530)"/> <wire from="(430,570)" to="(430,830)"/> <wire from="(480,820)" to="(860,820)"/> + <wire from="(680,700)" to="(730,700)"/> <wire from="(470,50)" to="(660,50)"/> <wire from="(370,130)" to="(370,260)"/> <wire from="(370,290)" to="(370,420)"/> @@ -4710,11 +4787,9 @@ <wire from="(600,810)" to="(850,810)"/> <wire from="(410,250)" to="(410,400)"/> <wire from="(640,100)" to="(640,130)"/> - <wire from="(590,680)" to="(700,680)"/> <wire from="(420,790)" to="(420,880)"/> - <wire from="(620,720)" to="(620,740)"/> <wire from="(850,20)" to="(850,130)"/> - <wire from="(550,760)" to="(570,760)"/> + <wire from="(430,830)" to="(650,830)"/> <wire from="(470,350)" to="(500,350)"/> <wire from="(470,750)" to="(500,750)"/> <wire from="(470,30)" to="(500,30)"/> @@ -4727,20 +4802,15 @@ <wire from="(480,820)" to="(480,860)"/> <wire from="(480,860)" to="(490,860)"/> <wire from="(680,60)" to="(680,120)"/> - <wire from="(640,780)" to="(650,780)"/> - <wire from="(720,700)" to="(730,700)"/> - <wire from="(540,760)" to="(550,760)"/> <wire from="(600,500)" to="(610,500)"/> <wire from="(700,370)" to="(700,380)"/> <wire from="(220,250)" to="(410,250)"/> <wire from="(440,550)" to="(440,810)"/> <wire from="(420,530)" to="(420,790)"/> - <wire from="(690,760)" to="(740,760)"/> <wire from="(810,560)" to="(810,570)"/> <wire from="(440,410)" to="(440,550)"/> <wire from="(420,390)" to="(420,530)"/> <wire from="(460,190)" to="(460,330)"/> - <wire from="(560,740)" to="(560,830)"/> <wire from="(870,140)" to="(870,170)"/> <wire from="(550,780)" to="(550,810)"/> <wire from="(550,380)" to="(550,410)"/> @@ -4748,12 +4818,11 @@ <wire from="(640,470)" to="(640,500)"/> <wire from="(440,110)" to="(440,140)"/> <wire from="(560,100)" to="(560,180)"/> - <wire from="(590,650)" to="(700,650)"/> <wire from="(410,130)" to="(640,130)"/> + <wire from="(640,710)" to="(640,730)"/> <wire from="(410,10)" to="(500,10)"/> <wire from="(790,570)" to="(810,570)"/> <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="(420,230)" to="(420,390)"/> @@ -4768,32 +4837,29 @@ <wire from="(610,520)" to="(610,570)"/> <wire from="(640,510)" to="(650,510)"/> <wire from="(610,80)" to="(620,80)"/> - <wire from="(650,770)" to="(650,780)"/> <wire from="(660,380)" to="(660,390)"/> + <wire from="(660,700)" to="(660,710)"/> <wire from="(820,60)" to="(870,60)"/> - <wire from="(460,730)" to="(520,730)"/> <wire from="(480,560)" to="(480,820)"/> <wire from="(220,210)" to="(470,210)"/> <wire from="(480,420)" to="(480,560)"/> <wire from="(460,470)" to="(640,470)"/> - <wire from="(470,30)" to="(470,50)"/> <wire from="(850,810)" to="(850,840)"/> + <wire from="(470,30)" to="(470,50)"/> <wire from="(440,550)" to="(550,550)"/> <wire from="(710,750)" to="(710,780)"/> <wire from="(430,150)" to="(430,180)"/> - <wire from="(620,740)" to="(620,760)"/> <wire from="(660,60)" to="(660,80)"/> - <wire from="(550,780)" to="(570,780)"/> <wire from="(460,920)" to="(490,920)"/> - <wire from="(850,130)" to="(860,130)"/> + <wire from="(650,770)" to="(650,830)"/> <wire from="(550,30)" to="(550,80)"/> + <wire from="(850,130)" to="(860,130)"/> <wire from="(860,780)" to="(870,780)"/> <wire from="(320,940)" to="(450,940)"/> - <wire from="(650,730)" to="(660,730)"/> <wire from="(430,100)" to="(500,100)"/> <wire from="(590,510)" to="(600,510)"/> - <wire from="(220,170)" to="(480,170)"/> <wire from="(600,360)" to="(610,360)"/> + <wire from="(220,170)" to="(480,170)"/> <wire from="(740,510)" to="(740,520)"/> <wire from="(410,540)" to="(410,800)"/> <wire from="(420,790)" to="(610,790)"/> @@ -4801,20 +4867,19 @@ <wire from="(810,420)" to="(810,430)"/> <wire from="(410,400)" to="(410,540)"/> <wire from="(430,570)" to="(610,570)"/> - <wire from="(620,720)" to="(660,720)"/> <wire from="(780,550)" to="(780,580)"/> + <wire from="(700,720)" to="(740,720)"/> <wire from="(220,190)" to="(460,190)"/> <wire from="(420,390)" to="(660,390)"/> <wire from="(640,330)" to="(640,360)"/> - <wire from="(590,670)" to="(700,670)"/> <wire from="(670,520)" to="(670,540)"/> - <wire from="(550,720)" to="(550,760)"/> <wire from="(790,430)" to="(810,430)"/> <wire from="(600,770)" to="(600,810)"/> <wire from="(600,370)" to="(600,410)"/> <wire from="(750,760)" to="(750,800)"/> <wire from="(540,500)" to="(560,500)"/> <wire from="(800,410)" to="(800,450)"/> + <wire from="(650,770)" to="(670,770)"/> <wire from="(710,750)" to="(730,750)"/> <wire from="(540,90)" to="(570,90)"/> <wire from="(550,80)" to="(550,140)"/> @@ -4824,7 +4889,6 @@ <wire from="(550,520)" to="(560,520)"/> <wire from="(410,130)" to="(410,250)"/> <wire from="(640,370)" to="(650,370)"/> - <wire from="(640,700)" to="(640,710)"/> <wire from="(470,490)" to="(470,750)"/> <wire from="(600,500)" to="(600,510)"/> <wire from="(600,550)" to="(780,550)"/> @@ -4832,74 +4896,52 @@ <wire from="(470,350)" to="(470,490)"/> <wire from="(460,330)" to="(640,330)"/> <wire from="(470,750)" to="(470,890)"/> + <wire from="(460,730)" to="(640,730)"/> <wire from="(480,560)" to="(790,560)"/> <wire from="(720,730)" to="(720,800)"/> <wire from="(320,920)" to="(440,920)"/> - <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="(380,450)" to="(800,450)"/> - <wire from="(590,640)" to="(700,640)"/> <wire from="(780,550)" to="(800,550)"/> <wire from="(680,500)" to="(680,540)"/> <wire from="(550,80)" to="(570,80)"/> <wire from="(720,800)" to="(750,800)"/> <wire from="(380,290)" to="(850,290)"/> - <wire from="(430,830)" to="(560,830)"/> <wire from="(410,540)" to="(670,540)"/> <wire from="(680,540)" to="(690,540)"/> <wire from="(430,180)" to="(430,430)"/> <wire from="(560,100)" to="(570,100)"/> <wire from="(590,370)" to="(600,370)"/> <wire from="(640,500)" to="(650,500)"/> + <wire from="(590,770)" to="(600,770)"/> <wire from="(740,370)" to="(740,380)"/> - <wire from="(690,720)" to="(740,720)"/> <wire from="(470,80)" to="(470,210)"/> <wire from="(790,420)" to="(790,430)"/> - <wire from="(590,700)" to="(640,700)"/> <wire from="(430,430)" to="(610,430)"/> - <wire from="(560,740)" to="(620,740)"/> <wire from="(440,140)" to="(550,140)"/> <wire from="(320,900)" to="(430,900)"/> - <wire from="(590,690)" to="(700,690)"/> - <wire from="(520,710)" to="(520,730)"/> <wire from="(630,100)" to="(630,120)"/> <wire from="(670,380)" to="(670,400)"/> <wire from="(540,360)" to="(560,360)"/> + <wire from="(540,760)" to="(560,760)"/> <wire from="(420,120)" to="(630,120)"/> <wire from="(710,520)" to="(740,520)"/> <wire from="(430,60)" to="(430,100)"/> + <wire from="(640,780)" to="(710,780)"/> <wire from="(360,590)" to="(370,590)"/> <wire from="(370,260)" to="(450,260)"/> - <wire from="(640,710)" to="(650,710)"/> - <wire from="(560,710)" to="(570,710)"/> <wire from="(550,380)" to="(560,380)"/> + <wire from="(550,780)" to="(560,780)"/> <wire from="(650,80)" to="(660,80)"/> - <comp lib="0" loc="(720,700)" name="Splitter"> - <a name="facing" val="west"/> - <a name="fanout" val="7"/> - <a name="incoming" val="7"/> - <a name="appear" val="right"/> + <comp lib="1" loc="(370,550)" name="OR Gate"> + <a name="facing" val="north"/> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> <comp lib="5" loc="(740,370)" name="Hex Digit Display"/> - <comp lib="1" loc="(870,140)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - </comp> - <comp lib="0" loc="(320,860)" name="Pin"> - <a name="tristate" val="false"/> - <a name="label" val="RESET"/> - </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="(410,60)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xfc"/> - </comp> <comp lib="0" loc="(680,60)" name="Splitter"> <a name="facing" val="west"/> <a name="incoming" val="16"/> @@ -4920,79 +4962,70 @@ <a name="bit14" val="1"/> <a name="bit15" val="1"/> </comp> - <comp lib="0" loc="(350,770)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xfc"/> - </comp> - <comp lib="4" loc="(820,60)" name="ROM"> - <a name="addrWidth" val="16"/> - <a name="contents">addr/data: 16 8 -4f 0 a 30 2e 7b 31 20 -74 73 65 74 5f 6c 61 6e -69 6d 72 65 74 a0 83 e8 -4b 0 20 24 a0 83 e8 43 -20 c4 30 43 fc 9f 43 80 -a7 db 83 28 9b 23 e7 83 -40 ab bf ab f2 43 6e f7 -83 18 2b db 83 4b 83 22 -43 20 f7 83 22 ab 7 10 -de 83 22 7 9f bb 57 a -67 6e 69 70 5 a0 83 c0 -20 eb 83 68 57 0 a 67 -6e 6f 70 a0 83 e8 83 18 -6f a 33 32 31 67 6e 69 -74 73 65 74 b a0 83 c0 -20 eb 83 90 77 0 a 65 -76 69 6c 61 20 65 72 61 -20 65 77 a0 83 e8 83 18 -53 a 6f 6f 66 4 a0 83 -c0 20 eb 83 a8 53 0 a -72 61 62 a0 83 e8 83 18 -5b a 72 61 65 6c 63 6 -a0 83 c0 20 eb 83 18 47 -c fc a3 9f a3 9b 83 18 -7 9f b7 3 9f a3 9b 43 -20 9f 10 de a3 df 83 dd -10 7 de df 83 e2 a3 a7 -f0 30 db 83 d0 3 84 9f -97 90 7 84 3 9f 97 90 -a3 84 20 43 fc 9f a3 d7 -83 f5 9b 83 ee 48 90 -</a> - </comp> - <comp lib="4" loc="(680,500)" name="Register"/> - <comp lib="1" loc="(370,550)" name="OR Gate"> - <a name="facing" val="north"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="1" loc="(860,780)" name="NOT Gate"> + <a name="facing" val="south"/> + <a name="size" val="20"/> </comp> - <comp lib="0" loc="(350,510)" name="Constant"> + <comp lib="0" loc="(430,60)" name="Constant"> <a name="width" val="8"/> - <a name="value" val="0xfd"/> - </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="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="3" loc="(540,20)" name="Comparator"> - <a name="mode" val="unsigned"/> + <a name="value" val="0xff"/> </comp> - <comp lib="3" loc="(540,360)" name="Comparator"> - <a name="mode" val="unsigned"/> + <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="0" loc="(810,540)" name="Pin"> + <comp lib="1" loc="(810,420)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> - <a name="tristate" val="false"/> </comp> - <comp lib="1" loc="(640,780)" name="AND Gate"> + <comp lib="1" loc="(600,90)" name="AND Gate"> <a name="size" val="30"/> - <a name="inputs" val="2"/> + <a name="inputs" val="3"/> + </comp> + <comp lib="6" loc="(382,57)" name="Text"> + <a name="halign" val="right"/> + </comp> + <comp lib="4" loc="(820,60)" name="ROM"> + <a name="addrWidth" val="16"/> + <a name="contents">addr/data: 16 8 +67 0 a 21 65 6d 6f 63 +6c 65 57 a0 83 e4 4b 0 +20 24 a0 83 e4 43 20 c4 +30 47 80 fc 8f a3 a7 db +83 1e 9b 23 e7 83 36 ab +bf ab f2 43 6e f7 83 e +2b db 83 41 83 18 43 20 +f7 83 18 ab 7 10 de 83 +18 43 20 93 10 de 7 9f +bb f0 8b 5b 0 a 67 6e +69 70 5 a0 83 bf 20 eb +83 66 57 0 a 67 6e 6f +70 a0 83 e4 83 e 73 0 +a 33 32 31 67 6e 69 74 +73 65 74 b a0 83 bf 20 +eb 83 8f 77 0 a 65 76 +69 6c 61 20 65 72 61 20 +65 77 a0 83 e4 83 e 57 +0 a 6f 6f 66 4 a0 83 +bf 20 eb 83 a8 53 0 a +72 61 62 a0 83 e4 83 e +5f 0 a 72 61 65 6c 63 +6 a0 83 bf 20 eb 83 e +47 c fc 8f 8b 83 e 3 +9f 8b 7 9f b7 f0 a7 af +a3 30 df 83 cf 83 d8 a3 +c7 83 de a7 f0 db 83 cf +a3 c7 83 df 83 d8 7 84 +3 9f 97 90 a3 84 20 43 +fc 9f a3 d7 83 f1 9b 83 +ea 48 90 +</a> + </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="(690,540)" name="Splitter"> <a name="facing" val="north"/> @@ -5006,101 +5039,61 @@ a3 84 20 43 fc 9f a3 d7 <a name="bit6" val="1"/> <a name="bit7" val="1"/> </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 lib="6" loc="(329,514)" name="Text"> + <a name="text" val="Memory Mapped I/O Port Address"/> + <a name="halign" val="right"/> </comp> - <comp loc="(220,130)" name="MCU"/> - <comp lib="0" loc="(490,860)" name="Probe"> + <comp lib="0" loc="(490,920)" name="Probe"> <a name="facing" val="west"/> <a name="radix" val="16"/> - <a name="label" val="Input"/> + <a name="label" val="Output"/> <a name="labelloc" val="east"/> <a name="labelfont" val="SansSerif bold 12"/> </comp> - <comp lib="0" loc="(430,60)" name="Constant"> - <a name="width" val="8"/> - <a name="value" val="0xff"/> + <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="0" loc="(320,880)" name="Clock"> - <a name="label" val="CLOCK"/> + <comp lib="1" loc="(640,370)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(590,370)" name="AND Gate"> + <comp lib="1" loc="(640,780)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(860,820)" name="Controlled Buffer"> + <comp lib="5" loc="(700,370)" name="Hex Digit Display"/> + <comp lib="1" loc="(870,140)" name="Controlled Buffer"> <a name="facing" val="south"/> <a name="width" val="8"/> </comp> - <comp lib="0" loc="(490,920)" name="Probe"> - <a name="facing" val="west"/> - <a name="radix" val="16"/> - <a name="label" val="Output"/> - <a name="labelloc" val="east"/> - <a name="labelfont" val="SansSerif bold 12"/> - </comp> - <comp lib="1" loc="(600,770)" name="AND Gate"> + <comp lib="1" loc="(590,370)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </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 lib="3" loc="(540,20)" name="Comparator"> + <a name="mode" val="unsigned"/> </comp> - <comp lib="5" loc="(740,510)" name="Hex Digit Display"/> - <comp lib="6" loc="(382,57)" name="Text"> + <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="4" loc="(680,360)" name="Register"/> + <comp lib="3" loc="(540,360)" name="Comparator"> + <a name="mode" val="unsigned"/> + </comp> + <comp loc="(220,130)" name="MCU"/> <comp lib="0" loc="(320,900)" name="Pin"> <a name="output" val="true"/> <a name="label" val="WRITE ACTIVE"/> </comp> - <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="1" loc="(600,90)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="3"/> - </comp> - <comp lib="3" loc="(540,760)" name="Comparator"> - <a name="mode" val="unsigned"/> + <comp lib="5" loc="(730,710)" name="TTY"> + <a name="cols" val="80"/> </comp> - <comp lib="3" loc="(540,500)" name="Comparator"> + <comp lib="3" loc="(540,90)" name="Comparator"> <a name="mode" val="unsigned"/> </comp> - <comp lib="1" loc="(690,720)" name="AND Gate"> - <a name="size" val="30"/> - <a name="inputs" val="3"/> - <a name="negate0" val="true"/> - </comp> - <comp lib="4" loc="(650,80)" name="Register"/> - <comp lib="0" loc="(690,400)" 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="0" loc="(810,400)" name="Pin"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - <a name="tristate" val="false"/> - </comp> - <comp lib="5" loc="(730,750)" name="Keyboard"> - <a name="buflen" val="80"/> - <a name="trigger" val="falling"/> - </comp> <comp lib="0" loc="(320,940)" name="Pin"> <a name="output" val="true"/> <a name="label" val="IO ENABLE"/> @@ -5109,79 +5102,136 @@ a3 84 20 43 fc 9f a3 d7 <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(640,510)" name="AND Gate"> + <comp lib="1" loc="(370,260)" name="OR Gate"> + <a name="facing" val="north"/> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> - <comp lib="1" loc="(810,560)" name="Controlled Buffer"> - <a name="facing" val="south"/> - <a name="width" val="8"/> - </comp> - <comp lib="1" loc="(690,760)" name="AND Gate"> + <comp lib="1" loc="(700,760)" name="AND Gate"> <a name="size" val="30"/> - <a name="inputs" val="3"/> - </comp> - <comp lib="1" loc="(560,710)" name="Controlled Buffer"> - <a name="width" val="8"/> + <a name="inputs" val="2"/> </comp> - <comp lib="6" loc="(656,608)" name="Text"> - <a name="text" val="Output:"/> - <a name="font" val="SansSerif bold 16"/> + <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="0" loc="(350,370)" name="Constant"> + <comp lib="0" loc="(410,60)" name="Constant"> <a name="width" val="8"/> - <a name="value" val="0xfe"/> + <a name="value" val="0xfc"/> </comp> - <comp lib="6" loc="(329,514)" name="Text"> - <a name="text" val="Memory Mapped I/O Port Address"/> - <a name="halign" val="right"/> + <comp lib="0" loc="(810,540)" name="Pin"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> </comp> - <comp lib="5" loc="(730,710)" name="TTY"> - <a name="cols" val="80"/> - <a name="trigger" val="falling"/> + <comp lib="0" loc="(680,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="3" loc="(540,90)" name="Comparator"> + <comp lib="3" loc="(540,500)" name="Comparator"> <a name="mode" val="unsigned"/> </comp> - <comp lib="0" loc="(570,710)" name="Splitter"> - <a name="fanout" val="8"/> - <a name="incoming" val="8"/> - </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,370)" name="AND Gate"> + <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="(810,400)" name="Pin"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + <a name="tristate" val="false"/> + </comp> + <comp lib="0" loc="(640,710)" name="Splitter"> + <a name="fanout" val="8"/> + <a name="incoming" val="8"/> + </comp> + <comp lib="5" loc="(740,510)" name="Hex Digit Display"/> + <comp lib="0" loc="(350,770)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfc"/> + </comp> + <comp lib="1" loc="(590,770)" name="AND Gate"> <a name="size" val="30"/> <a name="inputs" val="2"/> </comp> + <comp lib="0" loc="(690,400)" 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="0" loc="(320,860)" name="Pin"> + <a name="tristate" val="false"/> + <a name="label" val="RESET"/> + </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="0" loc="(350,370)" name="Constant"> + <a name="width" val="8"/> + <a name="value" val="0xfe"/> + </comp> + <comp lib="4" loc="(650,80)" name="Register"/> <comp lib="0" loc="(320,920)" name="Pin"> <a name="output" val="true"/> <a name="label" val="IO ACTIVE"/> </comp> - <comp lib="5" loc="(700,370)" name="Hex Digit Display"/> - <comp lib="1" loc="(810,420)" name="Controlled Buffer"> - <a name="facing" val="south"/> + <comp lib="5" loc="(730,750)" name="Keyboard"> + <a name="buflen" val="80"/> + <a name="trigger" val="falling"/> + </comp> + <comp lib="0" loc="(350,510)" name="Constant"> <a name="width" val="8"/> + <a name="value" val="0xfd"/> </comp> - <comp lib="4" loc="(680,360)" name="Register"/> - <comp lib="0" loc="(870,760)" name="Splitter"> + <comp lib="0" loc="(490,860)" name="Probe"> + <a name="facing" val="west"/> + <a name="radix" val="16"/> + <a name="label" val="Input"/> + <a name="labelloc" val="east"/> + <a name="labelfont" val="SansSerif bold 12"/> + </comp> + <comp lib="1" loc="(860,820)" name="Controlled Buffer"> <a name="facing" val="south"/> - <a name="fanout" val="7"/> - <a name="incoming" val="7"/> + <a name="width" val="8"/> </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 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="5" loc="(700,510)" name="Hex Digit Display"/> - <comp lib="6" loc="(330,373)" name="Text"> - <a name="text" val="Memory Mapped I/O Port Address"/> + <comp lib="1" loc="(700,720)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + <a name="negate0" val="true"/> + </comp> + <comp lib="4" loc="(680,500)" name="Register"/> + <comp lib="1" loc="(640,510)" name="AND Gate"> + <a name="size" val="30"/> + <a name="inputs" val="2"/> + </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="5" loc="(700,510)" name="Hex Digit Display"/> <comp lib="6" loc="(330,773)" name="Text"> <a name="text" val="Memory Mapped I/O Port Address"/> <a name="halign" val="right"/> @@ -5193,10 +5243,15 @@ a3 84 20 43 fc 9f a3 d7 <a name="labelloc" val="east"/> <a name="labelfont" val="SansSerif bold 12"/> </comp> - <comp lib="1" loc="(370,260)" name="OR Gate"> - <a name="facing" val="north"/> - <a name="size" val="30"/> - <a name="inputs" val="2"/> + <comp lib="1" loc="(810,560)" name="Controlled Buffer"> + <a name="facing" val="south"/> + <a name="width" val="8"/> + </comp> + <comp lib="3" loc="(540,760)" name="Comparator"> + <a name="mode" val="unsigned"/> + </comp> + <comp lib="0" loc="(320,880)" name="Clock"> + <a name="label" val="CLOCK"/> </comp> </circuit> </project> diff --git a/ExamplePrograms/README.md b/ExamplePrograms/README.md @@ -4,7 +4,6 @@ TODO: Implement some kind of variables / defines TODO: Hardcoded string constant meta-instruction - ### Structure Each assembly line must start with either a comment, @@ -44,11 +43,7 @@ Please refer to the examples as reference. ## 0 Argument Instructions -Do nothing and reset the set operation to ADD - - nop - -Push GRA to the stack +Push `GRA` to the stack push @@ -60,6 +55,18 @@ Peek the stack to `GRA` peek +Pushes a byte from memory into stack. Uses the memory pointer + + lbs + +Pops from the stack into memory. Uses the memory pointer + + sbs + +Pops from the stack to use as the memory pointer + + sps + Set ADD Operation for `cmp` and `op` instructions. `cmp` will flag if there is an overflow. `op` will perform addition. @@ -114,6 +121,11 @@ Increment memory pointer (set with the `sp` instruction) by `1` ## 1 Argument Instructions +Meta-instruction that is identical to `li` that gets the assigned address of +the label to use as an immediate + + getlabel A<label> + Load Lower Immediate to `GRA`, Least Significant 4 bits of a byte lli A<0-15> @@ -141,7 +153,7 @@ Stores a byte from the specified register into memory. Uses the memory pointer sb A<GR> -Set the memory pointer to specify a specific address in RAM from the specified register +Set the memory pointer from the specified register sp A<GR> @@ -169,6 +181,15 @@ Logical NAND the contents of `A` and `B`, store the result in `C` nand A<GR> B<GR> C<GR> -Perform the operation configured with the `sco_*` opcode, with `A` and `B`, store the result in `C` +Perform the operation set with the `sop_*` opcode, with `A` and `B`, store the result in `C` op A<GR> B<GR> C<GR> + +# Assembler Instructions + +> These instructions are meta-instructions that configure a parameter within the +assembler + +Set the program address of the next instruction to the specified address in memory + + segment A<0-255> diff --git a/ExamplePrograms/fibb_test.tac b/ExamplePrograms/fibb_test.tac @@ -1,4 +1,4 @@ -# This program computes the classic Fibbonacci sequence +# fibb_test - This program computes the classic Fibbonacci sequence ###################### Set our memory pointer li 254 sp GRA diff --git a/ExamplePrograms/routine_test.tac b/ExamplePrograms/routine_test.tac @@ -1,4 +1,5 @@ -# routine call test +# routine_test - Demonstrates how to jump with `pcr` instructions to return to +# the original calling instruction. # load a string on the stack lni 0x0,0xa,0x21,0x65,0x6e,0x6f,0x20,0x67,0x6e,0x69,0x72,0x74,0x73 # get the return address and push to stack @@ -9,17 +10,20 @@ lni 0x0,0xa,0x21,0x67,0x6e,0x69,0x72,0x74,0x73,0x20,0x64,0x6e,0x6f,0x63,0x65,0x73 pcr jmp print +# spin forever once we're done printing strings complete: jmp complete -# Print function! +# expect a string on the stack and our return address at the top of stack print: pop mov GRA GRB sop_and li 252 sp GRA +# loop until we reach a null byte print_loop: pop cmp GRA GRA jmp print_done sb GRA jmp print_loop +# return to sender print_done: mov GRB GRA goto diff --git a/ExamplePrograms/terminal_test.tac b/ExamplePrograms/terminal_test.tac @@ -1,24 +1,22 @@ -# 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 compares the -# buffer with 3 unique commands with unique responses -###################### print the welcome string - lni 0x0,0xa,0x30,0x2e - lni 0x31,0x20,0x74,0x73,0x65,0x74,0x5f,0x6c,0x61,0x6e,0x69,0x6d,0x72,0x65,0x74 +# terminal_test - Interactive terminal program allowing you to type commands to +# call specific methods. +# Uses the ExampleConfigurationROM circuit +###################### Print the welcome string + lni 0x0,0xa,0x21,0x65,0x6d,0x6f,0x63,0x6c,0x65,0x57 pcr jmp print -###################### print the terminal character '$ ' +###################### Print the terminal character '$ ' setup: lni 0x0,0x20,0x24 pcr jmp print ###################### Set up our buffer pointer to live in GRC - li 32 + li 32 # buffer pointer mov GRA GRC -###################### Set up our polling address +###################### Set up our polling loop poll: sop_xor - li 252 - sp GRA -###################### Load the bitmask for available data - li 128 + lni 128,252 # Load the bitmask for available data + the polling address + sps # Set the polling address + pop # Get the bitmask for available data ###################### Poll until data is available p_loop: lb GRB cmp GRB GRA @@ -27,7 +25,7 @@ p_loop: lb GRB ###################### Clears the byte out of the buffer in the keyboard sb GRA ###################### Did we read a backspace character? If so, handle that - lli 8 + lli 8 # ascii BS cmp GRA GRB jmp bcksp ###################### Echo the byte @@ -38,22 +36,22 @@ p_loop: lb GRB ###################### Increment the buffer pointer cin GRC GRC ###################### If we have reached the end of the buffer, restart - li 110 + li 110 # max buffer size = 78, 32 + 78 = 110 cmp GRA GRC jmp setup ###################### If the user pressed the enter key, output the buffer - lli 10 + lli 10 # ascii LF cmp GRB GRA jmp cmpr jmp poll ###################### Handle backspaces -bcksp: li 32 -###################### Are we at the start of the buffer? If so, we can return +bcksp: li 32 # buffer pointer +###################### Are we at the start of the buffer? If so, we can return cmp GRA GRC jmp poll ###################### Echo the byte - sb GRB -###################### Decrement the buffer pointer + sb GRB +###################### Decrement the buffer pointer and start polling again lli 1 sop_sub op GRC GRA GRC @@ -64,12 +62,18 @@ bcksp: li 32 ###################### the stack. The last byte is the first byte out. ###################### The last byte is the length of the string. ##### first off, store our buffer end pointer in RAM -cmpr: lli 0x01 +cmpr: li 32 # buffer pointer + push + sop_sub + op GRC GRA GRC + lli 0x01 sp GRA sb GRC + ptrinc + sbs ############ Respond to 'ping' with 'pong' -# "ping\n", length 5 - lni 0x0a,0x67,0x6e,0x69,0x70,5 +# "ping\n\0", length 5 + lni 0x0,0x0a,0x67,0x6e,0x69,0x70,5 pcr jmp cmpr_f sop_and @@ -83,8 +87,8 @@ cmpr: lli 0x01 jmp print jmp setup ############ Respond to 'testing123' with 'we are alive' -# "testing123\n", length 11 -n0: lni 0x0a,0x33,0x32,0x31,0x67,0x6e,0x69,0x74,0x73,0x65,0x74,11 +# "testing123\n\0", length 11 +n0: lni 0x0,0x0a,0x33,0x32,0x31,0x67,0x6e,0x69,0x74,0x73,0x65,0x74,11 pcr jmp cmpr_f sop_and @@ -99,7 +103,7 @@ n0: lni 0x0a,0x33,0x32,0x31,0x67,0x6e,0x69,0x74,0x73,0x65,0x74,11 jmp setup ############ Respond to 'foo' with 'bar' # "foo\n", length 4 -n1: lni 0x0a,0x6f,0x6f,0x66,4 +n1: lni 0x0,0x0a,0x6f,0x6f,0x66,4 pcr jmp cmpr_f sop_and @@ -114,75 +118,76 @@ n1: lni 0x0a,0x6f,0x6f,0x66,4 jmp setup ############ Respond to 'clear' by clearing the TTY # "clear\n", length 6 -n2: lni 0xa,0x72,0x61,0x65,0x6c,0x63,6 +n2: lni 0x0,0xa,0x72,0x61,0x65,0x6c,0x63,6 pcr jmp cmpr_f sop_and cmp GRB GRB jmp setup - lni 12,252 - pop - sp GRA - pop - sb GRA +########## clear the TTY + lni 12,252 # Load acii FF and our TTY MMIO address + sps + sbs jmp setup -######### compare function -cmpr_f: lli 0x01 - sp GRA -######## Get the buffer length - lb GRC - lli 0x0 +######### compare function, compares the null-terminated string on the stack to +# the contents of the buffer and returns a boolean in GRB. +# Expects: +# Stack: return address, size of compare string, null-terminated compare string +# Memory: +# 0x0 - used for the return pointer address +# 0x1 - buffer length +# 0x2 - buffer pointer +cmpr_f: lli 0x0 # return pointer memory address sp GRA ######## Store the return pointer - pop - sb GRA - li 32 + sbs + lli 0x01 # buffer length / pointer sp GRA -######## Compute the length of our stored buffer - sop_sub - op GRC GRA GRC -######## If the length of our string is greater than the buffer, +######## Get the buffer length + start address + lb GRC + ptrinc + lb GRB + sp GRB +######## If the length of our string does not match our buffer, ######## just exit immediately. pop + sop_xor cmp GRC GRA + jmp c_loop jmp c_fail -c_loop: sop_sub +c_loop: pop ######## Test if we've reached the end of our comparision buffer. - lli 1 - op GRC GRA GRC - cmp GRC GRA ######## If we've reached the end and haven't branched out, then ######## it is a match! + cmp GRA NIL # test for a null byte jmp c_match -######## Pop the comparision string and get the buffer byte - pop lb GRB ######## Increment our buffer pointer ptrinc ######## If the bytes match, continue looping - sop_xor cmp GRB GRA jmp c_loop -######## If the bytes don't match, we quit -c_fail: lli 0x00 - mov GRA GRB +# Return false +c_fail: pop # Flush the stack until we get the null byte + cmp GRA NIL # test for a null byte + jmp c_r # if null, return + jmp c_fail # else continue flushing +# Return true +c_match: lli 0x01 +c_r: mov GRA GRB + lli 0x0 sp GRA lb GRA goto -c_match: lli 0x01 - move GRA GRB - lli 0x00 - sp GRA - lb GRA - goto +############ Print routine that expects a null-terminated string on the stack print: pop mov GRA GRB sop_and - li 252 + li 252 # MMIO TTY address sp GRA print_loop: pop - cmp GRA GRA - jmp print_done + cmp GRA GRA # test for a null byte + jmp print_done # if we get a null byte, return sb GRA jmp print_loop print_done: mov GRB GRA diff --git a/ExamplePrograms/test_segments.tac b/ExamplePrograms/test_segments.tac @@ -0,0 +1,46 @@ +# test_segment - This file demonstrates how to call and return between segments +# of memory that expands the program memory size limit to 0xFFFF +# +#-------------------------------------------------0x00 SEGMENT START------------ +#-------------------------------------------------0x00 SEGMENT INDEX START------ +# Segment index, responsible for "routing" calls to other segments +# Expects: +# GRA = jump address in new segment +# GRB = new segment address +index@00: nand NIL NIL GRC + sp GRC # the segment address location is 0xFF on MMIO + lbs # push our current segment to the stack + sb GRB # set the segment address we should be in +# the next instruction will be at the same PC address but in +# the segment we set. e.g. 0x0004 -> 0xFF04 if GRB = 0xFF +# +# Since this is in segment 0x00, we must test if we are just starting + sop_and + cmp GRA GRA # test if the jump pointer is + jmp begin@00 # jump to the actual beginning of the program + goto # jump to the pointer if it isn't 0 +#-------------------------------------------------0x00 SEGMENT INDEX END-------- +# +begin@00: lli 0x1 # segment address + mov GRA GRB + getlabel test@01 # get the address of our target function in 0x01 + pcr + jmp index@00 +loop@00: jmp loop@00 +#-------------------------------------------------0x00 SEGMENT END-------------- +#-------------------------------------------------0x01 SEGMENT START------------ +#-------------------------------------------------0x01 SEGMENT INDEX START------ +segment 0x0100 +index@01: nand NIL NIL GRC + sp GRC + lbs + sb GRB + goto +#-------------------------------------------------0x01 SEGMENT INDEX END-------- +# set this bit of code in a random spot of memory within the 0x01 segment +segment 0x019F +test@01: pop # pop the segment address + mov GRA GRB + pop # pop the return address + jmp index@01 +#-------------------------------------------------0x01 SEGMENT END-------------- diff --git a/ExamplePrograms/typing_test.tac b/ExamplePrograms/typing_test.tac @@ -1,6 +1,8 @@ -# 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. +# typing_test.tac - test program that reads from the keyboard component, echoes +# input and records the buffer in RAM. Once the user returns, +# it plays back the buffer. Handles backspaces and typing +# beyond the buffer limit. +# Uses the ExampleConfigurationROM circuit ###################### Set up our buffer pointer to live in GRC setup: li 32 mov GRA GRC diff --git a/ExamplePrograms/weird_loop_test.tac b/ExamplePrograms/weird_loop_test.tac @@ -1,19 +1,23 @@ -# This program is a fun test that will write the address of the jmp statement -# on line number 15 if we're running this bit of code from the internal RAM -# It can only run from the internal RAM as it doesn't write out to the Program -# Memory, only the Internal RAM which can also execute code if set up correctly -start: nop - nop - nop - nop - nop - nop - pcr - lli 5 - mov GRA GRC - pop - op GRA GRC GRA - cin GRA GRB - sp GRB - sb GRA - jmp start +# weird_loop_test - exemplifies the ability to modify executing memory when the +# program is running from the internal RAM instead of an +# external ROM. The program will calculate two addresses that +# are used to write out to memory, overwriting the jmp address +start: jmp weird +loop: jmp loop +# offset this bit of code + segment 0x42 +# push the return address +weird: pcr +# calculate the memory address, and the jump address we will use + lli 5 + mov GRA GRC +# these instructions calculate the jump address + pop + op GRA GRC GRA +# this instruction calculates the memory address (+1 from the jump address) + cin GRA GRB +# write out to memory now that we know our memory address + jump address + sp GRB + sb GRA +# after the last two instructions, this instruction will jump to itself. + jmp loop diff --git a/INSTRUCTION_SET b/INSTRUCTION_SET @@ -1,4 +1,4 @@ -TISCv2.0 (c) Paul Longtine <paul@nanner.co> +TISCv2.3 (c) Paul Longtine <paul@nanner.co> Tiny Instruction Set Computer __________ ___ ________ ________ @@ -7,7 +7,7 @@ Tiny Instruction Set Computer \ \ \ \ \ \ \ \_____ \ \ \ \ \ \ \ \ \ \ \|____|\ \ \ \ \____ \ \__\ \ \__\ ____\_\ \ \ \_______\ - \|__| \|__| |\_________\ \|_______| v2.2 + \|__| \|__| |\_________\ \|_______| v2.3 \|_________| -----------------------------------------------------------------------<-------- @@ -35,9 +35,12 @@ C B 0010 - CIN ----- C = ++B 10010011 - PSH ----- Push GRA to stack 10100011 - POP ----- Pop stack to reg GRA 10110011 - PEEK ----- Peek stack to reg GRA +10000111 - LBS ----- Load word from mem pointer to stack 10B 0111 - LB ----- Load word from mem pointer to ARGB GPR +10001011 - SBS ----- Pop stack and store to mem pointer 10B 1011 - SB ----- Store contents of ARGB GPR to mem pointer -10B 1111 - SP ----- Set pointer ARGB GPR +10001111 - SPS ----- Pop stack and set mem pointer +10B 1111 - SP ----- Set pointer ARGB GPR 11B A 11 - CMP ----- Computes flag on set operation -----------------------------------------------------------------------<-------- @@ -47,4 +50,4 @@ A = Arguement A / ARGA GRA = General Purpose Register A = 0b01 GRB = General Purpose Register B = 0b10 -GRC = General Purpose Register C = 0b11 +GRC = General Purpose Register C = 0b11 +\ No newline at end of file diff --git a/README.md b/README.md @@ -3,17 +3,17 @@ 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 v2.2](Screenshots/tiscv2_2.png) +![TISC v2.3](Screenshots/tiscv2_3.png) ## Want to play with it too? The default program loaded in the ExampleConfigurationROM circuit is the `ExamplePrograms/terminal_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 tests -the buffer once the user inputs a line feed (enter key) against a target string. +to the TTY component. In addition, the program buffers 32 characters tests for +command strings with routines to execute if the buffer contains a command string. -![TISC Example configuration](Screenshots/tiscv2_2_example.png) +![TISC Example configuration](Screenshots/tiscv2_3_example.png) ## Compiling the assembler diff --git a/Screenshots/tiscv2_2.png b/Screenshots/tiscv2_2.png Binary files differ. diff --git a/Screenshots/tiscv2_2_example.png b/Screenshots/tiscv2_2_example.png Binary files differ. diff --git a/Screenshots/tiscv2_3.png b/Screenshots/tiscv2_3.png Binary files differ. diff --git a/Screenshots/tiscv2_3_example.png b/Screenshots/tiscv2_3_example.png Binary files differ. diff --git a/tisc.c b/tisc.c @@ -3,13 +3,13 @@ #include <stdint.h> #include <string.h> -#define TOT_INSTRUCTIONS 28 +#define TOT_INSTRUCTIONS 33 #define MAX_SYMBOLS 1000 #define MAX_SYMBOL_LEN 100 #define MAX_LINE_LEN 100 -#define MAX_INSTYPES 4 -#define MAX_PGR_SIZE 0xFF +#define MAX_PGR_SIZE 0xFFFF #define MAX_LNI_SIZE 17 + #define NR 0x0 #define NR_STRING "NIL" #define GR_A 0x1 @@ -29,7 +29,7 @@ typedef struct InstructionDefintion int arguements; int instructionLength; uint8_t opcode_mask; - int (*assemble)(struct InstructionDefintion*, char* arg[3], uint8_t*); + int (*assemble)(struct InstructionDefintion*, char* arg[3], uint8_t*, int); } InstructionDefinition_t; /* Checks if instruction is valid @@ -46,7 +46,7 @@ int validins(InstructionDefinition_t *ins, const char *opcode, char *arg[]) for (supp_args = 0; supp_args < 3; supp_args++) { - if (arg[supp_args] == NULL) + if (arg[supp_args] == NULL || arg[supp_args][0] == '#') { break; } @@ -113,7 +113,7 @@ void update_label(const char* label, int address) { if (strcmp(symbols[i], label) == 0) { - addresses[i] = address; + addresses[i] = address & 0xFF; break; } } @@ -200,9 +200,30 @@ uint8_t getRegisterEnumeration(char* string) return 0xFF; } +int stringToInteger(char* str) +{ + int return_value = -1; + + if (strncmp("0x", str, 2) == 0) + { + return_value = (int)strtol(str+2, NULL, 16); + } + else if (strncmp("0b", str, 2) == 0) + { + return_value = (int)strtol(str+2, NULL, 2); + } + else + { + return_value = atoi(str); + } + + return return_value; +} + int assemble_0arg( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { write_buffer[0] = definition->opcode_mask; @@ -211,7 +232,8 @@ int assemble_0arg( int assemble_1arg( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { uint8_t argB = getRegisterEnumeration(arg[0]); @@ -222,7 +244,8 @@ int assemble_1arg( int assemble_2arg( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { uint8_t argA, argB; @@ -238,7 +261,8 @@ int assemble_2arg( int assemble_cin( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { uint8_t argB, argC; @@ -254,7 +278,8 @@ int assemble_cin( int assemble_mov( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { uint8_t argA, argC; @@ -270,7 +295,8 @@ int assemble_mov( int assemble_3arg( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { uint8_t argA, argB, argC; @@ -285,29 +311,10 @@ int assemble_3arg( return 1; } -int stringToInteger(char* str) -{ - int return_value = -1; - - if (strncmp("0x", str, 2) == 0) - { - return_value = (int)strtol(str+2, NULL, 16); - } - else if (strncmp("0b", str, 2) == 0) - { - return_value = (int)strtol(str+2, NULL, 2); - } - else - { - return_value = atoi(str); - } - - return return_value; -} - int assemble_lli( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { int return_value = 0; @@ -330,7 +337,8 @@ int assemble_lli( int assemble_li( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { int return_value = 0; @@ -354,13 +362,13 @@ int assemble_li( int assemble_lni( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { int return_value = 0; int byte_len = 0; int bytes[MAX_LNI_SIZE]; - char* byte_str = strtok(arg[0], ","); while (byte_str != NULL) @@ -411,16 +419,62 @@ int assemble_lni( int assemble_jmp( InstructionDefinition_t *definition, - char* arg[3], uint8_t* write_buffer) + char* arg[3], uint8_t* write_buffer, + int address) { int return_value = 0; - int address = label_address(arg[0]); + int jump_address = label_address(arg[0]); - if (address != -1) + if (jump_address != -1) { write_buffer[0] = definition->opcode_mask; - write_buffer[1] = address; + write_buffer[1] = jump_address; + + return_value = 1; + } + else + { + printf("Could not find label %s\n", arg[0]); + } + + return return_value; +} + +int segment( + InstructionDefinition_t *definition, + char* arg[3], uint8_t* write_buffer, + int address) +{ + int return_value = 0; + int target_address = stringToInteger(arg[0]); + + if (target_address < MAX_PGR_SIZE && (target_address > address)) + { + definition->instructionLength = target_address - address; + return_value = 1; + } + else + { + printf("Segment address must be less than %i\n", MAX_PGR_SIZE); + } + + return return_value; +} + +int getlabel( + InstructionDefinition_t *definition, + char* arg[3], uint8_t* write_buffer, + int address) +{ + int return_value = 0; + + int label = label_address(arg[0]); + + if (label != -1) + { + write_buffer[0] = definition->opcode_mask; + write_buffer[1] = label; return_value = 1; } @@ -434,10 +488,16 @@ int assemble_jmp( InstructionDefinition_t definitions[TOT_INSTRUCTIONS] = { + //opcode,args,size,byte,func + { "getlabel", 1, 2, 0x43, getlabel }, + { "segment", 1, 0, 0x00, segment }, { "nop", 0, 1, 0x00, assemble_0arg }, { "push", 0, 1, 0x93, assemble_0arg }, { "pop", 0, 1, 0xA3, assemble_0arg }, { "peek", 0, 1, 0xB3, assemble_0arg }, + { "lbs", 0, 1, 0x87, assemble_0arg }, + { "sbs", 0, 1, 0x8B, assemble_0arg }, + { "sps", 0, 1, 0x8F, assemble_0arg }, { "sop_add", 0, 1, 0x00, assemble_0arg }, { "sop_sub", 0, 1, 0x10, assemble_0arg }, { "sop_and", 0, 1, 0x20, assemble_0arg }, @@ -449,15 +509,15 @@ InstructionDefinition_t definitions[TOT_INSTRUCTIONS] = { "goto", 0, 1, 0x90, assemble_0arg }, { "pcr", 0, 1, 0xA0, assemble_0arg }, { "ptrinc", 0, 1, 0xF0, assemble_0arg }, - { "lli", 1, 1, 0x03, assemble_lli }, - { "lni", 1, 1, 0x43, assemble_lni }, - { "li", 1, 2, 0x43, assemble_li }, - { "jmp", 1, 2, 0x83, assemble_jmp }, + { "lli", 1, 1, 0x03, assemble_lli }, + { "lni", 1, 1, 0x43, assemble_lni }, + { "li", 1, 2, 0x43, assemble_li }, + { "jmp", 1, 2, 0x83, assemble_jmp }, { "lb", 1, 1, 0x87, assemble_1arg }, { "sb", 1, 1, 0x8B, assemble_1arg }, { "sp", 1, 1, 0x8F, assemble_1arg }, - { "cin", 2, 1, 0x02, assemble_cin }, - { "mov", 2, 1, 0x00, assemble_mov }, + { "cin", 2, 1, 0x02, assemble_cin }, + { "mov", 2, 1, 0x00, assemble_mov }, { "cmp", 2, 1, 0xC3, assemble_2arg }, { "or", 3, 1, 0x00, assemble_3arg }, { "nand", 3, 1, 0x01, assemble_3arg }, @@ -471,7 +531,8 @@ InstructionDefinition_t* getInstructionFromOpcode(const char *opcode) int i; for (i = 0; i < TOT_INSTRUCTIONS; i++) { - if (strncmp(definitions[i].instructionLabel, opcode, strlen(definitions[i].instructionLabel)) == 0) + if (strlen(definitions[i].instructionLabel) == strlen(opcode) && + strncmp(definitions[i].instructionLabel, opcode, strlen(definitions[i].instructionLabel)) == 0) { return_value = &definitions[i]; break; @@ -483,8 +544,7 @@ InstructionDefinition_t* getInstructionFromOpcode(const char *opcode) /* char *parse -> parses file and sets label, opcode, and args accordingly */ -int parse(int* line_number, FILE *file, char *line, char **label, char **opcode, - char *arg[3]) +int parse(int* line_number, FILE *file, char *line, char **label, char **opcode, char *arg[3]) { int success = 0; @@ -504,7 +564,10 @@ int parse(int* line_number, FILE *file, char *line, char **label, char **opcode, { *label = first; *opcode = strtok(NULL, " \t\n"); - first[strlen(first) - 1] = '\0'; + if (*opcode != NULL) + { + first[strlen(first) - 1] = '\0'; + } success = 1; } @@ -531,8 +594,7 @@ int parse(int* line_number, FILE *file, char *line, char **label, char **opcode, /* int labelprocess -> 1st pass over file, defines all labels */ -int labelprocess(int line, int *address, char *label, char *opcode, - char *arg[3]) +int labelprocess(int line, int *address, char *label, char *opcode, char *arg[3]) { int status = 1; @@ -551,61 +613,68 @@ int labelprocess(int line, int *address, char *label, char *opcode, /* int preprocess -> 2nd pass over file, links symbols to address and reports syntax errors, fails if returns -1 */ -int preprocess(int line, int *address, char *label, char *opcode, - char *arg[3]) +int preprocess(int line, int *address, char *label, char *opcode, char *arg[3]) { int status = 0; - InstructionDefinition_t* ins = getInstructionFromOpcode(opcode); - - if (ins != NULL) + if (opcode != NULL) { - switch (validins(ins, opcode, arg)) + InstructionDefinition_t* ins = getInstructionFromOpcode(opcode); + + if (ins != NULL) { - case -1: - printf("Error:%i: too few arguements for '%s'\n", - line, opcode); - status = 0; - break; - case 1: - printf("Error:%i: too many arguements for '%s'\n", - line, opcode); - status = 0; - break; - case 0: - status = 1; - break; - default: + switch (validins(ins, opcode, arg)) + { + case -1: + printf("Error:%i: too few arguements for '%s'\n", + line, opcode); + status = 0; + break; + case 1: + printf("Error:%i: too many arguements for '%s'\n", + line, opcode); + status = 0; + break; + case 0: + status = 1; + break; + default: + status = 0; + printf("Something Weird!\n"); + break; + } + } + else + { + printf("Error:%i: instruction '%s' does not exist\n", + line, opcode); status = 0; - printf("Something Weird!\n"); - break; + } + + process_label_final(label, *address); + + if (status) + { + uint8_t test_buffer[32]; + status = ins->assemble(ins, arg, test_buffer, *address); + + *address = *address + ins->instructionLength; } } else { - printf("Error:%i: instruction '%s' does not exist\n", - line, opcode); + printf("Error:%i: Unspecified opcode\n", line); status = 0; } - process_label_final(label, *address); - - if (status) - { - uint8_t test_buffer[32]; - status = ins->assemble(ins, arg, test_buffer); - - *address = *address + ins->instructionLength; - } - return status; } /* int process -> 3rd pass over file, instructions are turned into machine code with symbols filled in as adresses, fails if returns -1 */ -int process(int line, int* address, uint8_t *buffer, char *label, char *opcode, - char *arg[3]) +int process( + int line, int* address, uint8_t *buffer, char *label, char *opcode, char *arg[3]) { int status = 0; @@ -613,7 +682,7 @@ int process(int line, int* address, uint8_t *buffer, char *label, char *opcode, if (ins != NULL && ins->assemble != NULL) { - status = ins->assemble(ins, arg, buffer + *address); + status = ins->assemble(ins, arg, buffer + *address, *address); } if (status) @@ -659,8 +728,12 @@ void print_instruction(int line, int* address, char *label, char *opcode, char * arg_str[i] = '\0'; } - for (int i = 0; arg[i] != NULL && i < 3; i++) + for (int i = 0; i < 3; i++) { + if (arg[i] == NULL || arg[i][0] == '#') + { + break; + } sprintf(arg_str, "%s%s\t", arg_str, arg[i]); } } @@ -677,7 +750,7 @@ void print_instruction(int line, int* address, char *label, char *opcode, char * strncpy(label_str, label, strlen(label)); } - printf("%03i [0x%02x]:%s %s\t%s\n", line, *address, label_str, opcode, arg_str); + printf("%03i [0x%04x]:%s %s\t%s\n", line, *address, label_str, opcode, arg_str); free(label_str); if (strlen(arg_str) != 0) { @@ -764,6 +837,7 @@ int main(int argc, char *argv[]) if (full_size > MAX_PGR_SIZE) { printf("FATAL: Program exceeds maximum size!\n"); + printf("FATAL: program size=%i max=%i\n", full_size, MAX_PGR_SIZE); goto CLOSEFILES; }