提交 da55accb 创建 作者: 赵鹏翀's avatar 赵鹏翀

make template

上级 f1d5ef01
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="9f9ed1d6-0d0e-4f81-9f67-979cbbbdb80a" name="DM1000" version="1">
<files>
<filefolder id="a9f57fc8-c239-4574-a5da-f8fa2760024b" name="子模块">
<file relativepath="ALU.dlsche"/>
<file relativepath="PC.dlsche"/>
<file relativepath="REG.dlsche"/>
<file relativepath="MEM.dlsche"/>
<file relativepath="CU.dlsche"/>
<file relativepath="uPC_NEXT.dlsche"/>
</filefolder>
<filefolder id="80f1035e-e898-408b-bb0c-e69c72ad13b4" name="汇编源程序">
<file relativepath="ram.asm"/>
<file relativepath="ram.bat"/>
</filefolder>
<filefolder id="03f70f98-2bea-4829-91ee-a9e5f6ee0c87" name="微指令源程序">
<file relativepath="rom.masm"/>
<file relativepath="rom.bat"/>
</filefolder>
<filefolder id="be71b6f0-d920-4758-8b3a-3a343b490c2e" name="存储器映射文件">
<file relativepath="ram.rxm"/>
<file relativepath="rom.rxm"/>
</filefolder>
<file relativepath="DM1000.dlsche"/>
<file relativepath="README.md"/>
</files>
</project>
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="4520" version="1.1" width="8454" xmlns="http://www.w3.org/2000/svg">
<polyline fill="none" points="1841 1474, 1771 1474, 1711 1474" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1711" y="1474">RIN_GATE_EN</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1204" y2="1154"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1234" y2="1184"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1264" y2="1214"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1294" y2="1244"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1324" y2="1274"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1354" y2="1304"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1384" y2="1334"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2241" x2="2291" y1="1414" y2="1364"/>
<polyline fill="none" points="2091 1204, 2241 1204" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1234, 2241 1234" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1264, 2241 1264" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1294, 2241 1294" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1324, 2241 1324" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1354, 2241 1354" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1384, 2241 1384" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2091 1414, 2241 1414" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1204">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1234">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1264">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1294">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1324">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1354">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1384">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2121" y="1414">DBUS7</text>
<polyline fill="none" points="2781 1474, 2691 1474, 2601 1474" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2601" y="1474">ROUT_REG_EN</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1464" y2="1414"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1434" y2="1384"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1404" y2="1354"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1374" y2="1324"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1344" y2="1294"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1314" y2="1264"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1284" y2="1234"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2561" x2="2611" y1="1254" y2="1204"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1204">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1234">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1264">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1294">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1324">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1354">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1384">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2661" y="1414">DBUS7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="90" font-weight="400" text-anchor="start" x="441" y="1954">DBUS[7..0]</text>
<rect fill="#80ff80" height="1200" stroke="#800000" stroke-width="1" width="640" x="5781" y="344"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="700" text-anchor="start" x="5781" y="304">ALU</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5781" y="344">ALU.dlsche</text>
<polygon fill="#ffff80" points="5781 864, 5806 839, 5856 839, 5881 864, 5856 889, 5806 889, 5781 864" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="864">CN</text>
<polygon fill="#ffff80" points="5781 934, 5806 909, 5856 909, 5881 934, 5856 959, 5806 959, 5781 934" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="934">FLAG_REG_EN</text>
<polygon fill="#ffff80" points="5781 444, 5806 419, 5856 419, 5881 444, 5856 469, 5806 469, 5781 444" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="444">S0</text>
<polygon fill="#ffff80" points="5781 514, 5806 489, 5856 489, 5881 514, 5856 539, 5806 539, 5781 514" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="514">S1</text>
<polygon fill="#ffff80" points="5781 584, 5806 559, 5856 559, 5881 584, 5856 609, 5806 609, 5781 584" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="584">S2</text>
<polygon fill="#ffff80" points="5781 1004, 5806 979, 5856 979, 5881 1004, 5856 1029, 5806 1029, 5781 1004" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1004">W_REG_EN</text>
<polygon fill="#ffff80" points="5781 1074, 5806 1049, 5856 1049, 5881 1074, 5856 1099, 5806 1099, 5781 1074" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1074">A_REG_EN</text>
<polygon fill="#ffff80" points="5781 1454, 5806 1429, 5856 1429, 5881 1454, 5856 1479, 5806 1479, 5781 1454" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1454">CLK</text>
<polygon fill="#ffff80" points="5781 1154, 5806 1129, 5856 1129, 5881 1154, 5856 1179, 5806 1179, 5781 1154" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1154">L_GATE_EN</text>
<polygon fill="#ffff80" points="5781 1234, 5806 1209, 5856 1209, 5881 1234, 5856 1259, 5806 1259, 5781 1234" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1234">D_GATE_EN</text>
<polygon fill="#ffff80" points="5781 1314, 5806 1289, 5856 1289, 5881 1314, 5856 1339, 5806 1339, 5781 1314" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="1314">R_GATE_EN</text>
<polygon fill="#ffff80" points="6421 944, 6396 919, 6346 919, 6321 944, 6346 969, 6396 969, 6421 944" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6292" y="944">ZF</text>
<polygon fill="#ffff80" points="6421 1064, 6396 1039, 6346 1039, 6321 1064, 6346 1089, 6396 1089, 6421 1064" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6292" y="1064">CF</text>
<polygon fill="#ffff80" points="5781 724, 5806 699, 5856 699, 5881 724, 5856 749, 5806 749, 5781 724" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="724">C</text>
<polygon fill="#ffff80" points="5781 654, 5806 629, 5856 629, 5881 654, 5856 679, 5806 679, 5781 654" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="654">S3</text>
<polygon fill="#ffff80" points="5781 794, 5806 769, 5856 769, 5881 794, 5856 819, 5806 819, 5781 794" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5893" y="794">M</text>
<polygon fill="#ffff80" points="6091 1544, 6066 1519, 6066 1469, 6091 1444, 6116 1469, 6116 1519, 6091 1544" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6043" y="1414">DBUS[7..0]</text>
<rect fill="#80ff80" height="1250" stroke="#800000" stroke-width="1" width="640" x="7001" y="304"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="700" text-anchor="start" x="7001" y="244">REG</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7001" y="294">REG.dlsche</text>
<polygon fill="#ffff80" points="7001 404, 7026 379, 7076 379, 7101 404, 7076 429, 7026 429, 7001 404" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="404">IR0</text>
<polygon fill="#ffff80" points="7001 484, 7026 459, 7076 459, 7101 484, 7076 509, 7026 509, 7001 484" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="484">IR1</text>
<polygon fill="#ffff80" points="7001 564, 7026 539, 7076 539, 7101 564, 7076 589, 7026 589, 7001 564" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="564">REG_WR</text>
<polygon fill="#ffff80" points="7001 654, 7026 629, 7076 629, 7101 654, 7076 679, 7026 679, 7001 654" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="654">REG_READ</text>
<polygon fill="#ffff80" points="7341 1554, 7316 1529, 7316 1479, 7341 1454, 7366 1479, 7366 1529, 7341 1554" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7273" y="1434">DBUS[7..0]</text>
<polygon fill="#ffff80" points="7001 1454, 7026 1429, 7076 1429, 7101 1454, 7076 1479, 7026 1479, 7001 1454" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1454">CLK</text>
<polygon fill="#ffff80" points="7001 744, 7026 719, 7076 719, 7101 744, 7076 769, 7026 769, 7001 744" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="744">ST_REG_EN</text>
<polygon fill="#ffff80" points="7001 824, 7026 799, 7076 799, 7101 824, 7076 849, 7026 849, 7001 824" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="824">ASR_REG_EN</text>
<polygon fill="#ffff80" points="7001 894, 7026 869, 7076 869, 7101 894, 7076 919, 7026 919, 7001 894" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="894">IA_REG_EN</text>
<polygon fill="#ffff80" points="7001 964, 7026 939, 7076 939, 7101 964, 7076 989, 7026 989, 7001 964" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="964">ST_GATE_EN</text>
<polygon fill="#ffff80" points="7001 1034, 7026 1009, 7076 1009, 7101 1034, 7076 1059, 7026 1059, 7001 1034" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1034">ASR_GATE_EN</text>
<polygon fill="#ffff80" points="7001 1104, 7026 1079, 7076 1079, 7101 1104, 7076 1129, 7026 1129, 7001 1104" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1104">IA_GATE_EN</text>
<polygon fill="#ffff80" points="7001 1264, 7026 1239, 7076 1239, 7101 1264, 7076 1289, 7026 1289, 7001 1264" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1264">CST_LOAD</text>
<polygon fill="#ffff80" points="7001 1344, 7026 1319, 7076 1319, 7101 1344, 7076 1369, 7026 1369, 7001 1344" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1344">CST_U\D</text>
<polygon fill="#ffff80" points="7001 1174, 7026 1149, 7076 1149, 7101 1174, 7076 1199, 7026 1199, 7001 1174" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7113" y="1174">CST_GATE_EN</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="2904" y2="2954"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="2934" y2="2984"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="2964" y2="3014"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="2994" y2="3044"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="3024" y2="3074"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="3054" y2="3104"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="3084" y2="3134"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="4371" x2="4421" y1="3114" y2="3164"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4291" y="3224">MAR_REG_EN</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="2954">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="2984">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3014">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3044">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3074">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3104">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3134">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4421" y="3164">DBUS7</text>
<rect fill="#80ff80" height="1100" stroke="#800000" stroke-width="1" width="740" x="4171" y="444"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="700" text-anchor="start" x="4171" y="394">PC</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4171" y="444">PC.dlsche</text>
<polygon fill="#ffff80" points="4171 534, 4196 509, 4246 509, 4271 534, 4246 559, 4196 559, 4171 534" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="534">CF</text>
<polygon fill="#ffff80" points="4171 604, 4196 579, 4246 579, 4271 604, 4246 629, 4196 629, 4171 604" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="604">ZF</text>
<polygon fill="#ffff80" points="4171 774, 4196 749, 4246 749, 4271 774, 4246 799, 4196 799, 4171 774" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="774">IR2</text>
<polygon fill="#ffff80" points="4171 874, 4196 849, 4246 849, 4271 874, 4246 899, 4196 899, 4171 874" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="874">IR3</text>
<polygon fill="#ffff80" points="4171 974, 4196 949, 4246 949, 4271 974, 4246 999, 4196 999, 4171 974" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="974">PC_LOAD_EN</text>
<polygon fill="#ffff80" points="4171 1074, 4196 1049, 4246 1049, 4271 1074, 4246 1099, 4196 1099, 4171 1074" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="1074">RESET</text>
<polygon fill="#ffff80" points="4171 1174, 4196 1149, 4246 1149, 4271 1174, 4246 1199, 4196 1199, 4171 1174" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="1174">PC_A_GATE_EN</text>
<polygon fill="#ffff80" points="4171 1434, 4196 1409, 4246 1409, 4271 1434, 4246 1459, 4196 1459, 4171 1434" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="1434">CLK</text>
<polygon fill="#ffff80" points="4171 1274, 4196 1249, 4246 1249, 4271 1274, 4246 1299, 4196 1299, 4171 1274" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="1274">PC_D_GATE_EN</text>
<polygon fill="#ffff80" points="4531 1544, 4506 1519, 4506 1469, 4531 1444, 4556 1469, 4556 1519, 4531 1544" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4463" y="1414">DBUS[7..0]</text>
<polygon fill="#ffff80" points="4911 944, 4886 919, 4836 919, 4811 944, 4836 969, 4886 969, 4911 944" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4662" y="944">ABUS[7..0]</text>
<polygon fill="#ffff80" points="4171 694, 4196 669, 4246 669, 4271 694, 4246 719, 4196 719, 4171 694" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4283" y="694">PC_ADD</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="2954" y2="2904"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="2984" y2="2934"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3014" y2="2964"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3044" y2="2994"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3074" y2="3024"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3104" y2="3054"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3134" y2="3084"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="5361" x2="5411" y1="3164" y2="3114"/>
<rect fill="#80ff80" height="890" stroke="#800000" stroke-width="1" width="940" x="2181" y="3364"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="700" text-anchor="start" x="2161" y="3334">MEM</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2181" y="3364">MEM.dlsche</text>
<polygon fill="#ffff80" points="2181 3514, 2206 3489, 2256 3489, 2281 3514, 2256 3539, 2206 3539, 2181 3514" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2293" y="3514">ABUS[7..0]</text>
<polygon fill="#ffff80" points="2181 3604, 2206 3579, 2256 3579, 2281 3604, 2256 3629, 2206 3629, 2181 3604" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2293" y="3604">MEM_WR</text>
<polygon fill="#ffff80" points="2181 3694, 2206 3669, 2256 3669, 2281 3694, 2256 3719, 2206 3719, 2181 3694" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2293" y="3694">MEM_GATE_EN</text>
<polygon fill="#ffff80" points="2181 3894, 2206 3869, 2256 3869, 2281 3894, 2256 3919, 2206 3919, 2181 3894" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2293" y="3894">CLK</text>
<polygon fill="#ffff80" points="2841 3364, 2816 3389, 2816 3439, 2841 3464, 2866 3439, 2866 3389, 2841 3364" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2772" y="3484">DBUS[7..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="90" font-weight="400" text-anchor="start" x="431" y="2444">ABUS[7..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4811" y="3224">MAR_GATE_EN</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2691" y="1504">CLK</text>
<polyline fill="none" points="2781 1504, 2691 1504" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1291" x2="1391" y1="1504" y2="1504"/>
<rect fill="#ffffb0" height="100" stroke="#800000" stroke-width="5" width="100" x="1191" y="1454"/>
<polyline fill="none" points="1201 1404, 1281 1404" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1241 1404, 1241 1454" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1211 1534, 1241 1534, 1241 1474, 1271 1474" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1231" y="1391">C2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1101" y="1514">SCLK</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1191" y="1604">Key = A</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1111" y="4024">CLK</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="4291" y="3254">CLK</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1011" x2="1111" y1="4024" y2="4024"/>
<rect fill="#ffffb0" height="100" stroke="#800000" stroke-width="5" width="100" x="911" y="3974"/>
<polyline fill="none" points="921 3924, 1001 3924" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="961 3924, 961 3974" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="931 4054, 961 4054, 961 3994, 991 3994" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="180" font-weight="700" text-anchor="start" x="531" y="3911">CLOCK</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="821" y="4034">SCLK</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="400" text-anchor="start" x="581" y="4344">Key = C</text>
<polyline fill="none" points="4811 3224, 4961 3224" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1181" x2="1281" y1="1154" y2="1154"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="30" font-weight="400" text-anchor="start" x="1121" y="1175">0</text>
<rect fill="#ffffff" fill-opacity="0.5" height="60" stroke="#800000" stroke-width="5" width="100" x="1081" y="1124"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1125" y="1115">1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1012" y="1176">DCT</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1082" y="1227">Key = 2</text>
<polyline fill="none" points="1281 1154, 1391 1154, 1391 1294" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1021" y="3104">RESET</text>
<polyline fill="none" points="2781 1204, 2611 1204" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2611 1234, 2781 1234" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2781 1264, 2611 1264" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2611 1294, 2781 1294" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2781 1324, 2611 1324" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2611 1354, 2781 1354" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2781 1384, 2611 1384" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2781 1414, 2611 1414" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4471 2954, 4421 2954" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4471 2984, 4421 2984" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4471 3014, 4421 3014" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4421 3044, 4471 3044" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4421 3074, 4471 3074" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4421 3104, 4471 3104" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4421 3134, 4471 3134" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4471 3164, 4421 3164" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1204">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1234">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1264">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1294">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1324">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1354">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1384">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1474" y="1414">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1204">Q0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1234">Q1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1264">Q2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1294">Q3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1324">Q4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1354">Q5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1384">Q6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1691" x2="1741" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1658" y="1414">Q7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1431" x2="1391" y1="1474" y2="1474"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1494" y="1474">^EN</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1441" x2="1391" y1="1504" y2="1504"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1494" y="1504">CLK</text>
<rect fill="#c0dcc0" fill-opacity="0.5" height="400" stroke="#000000" stroke-width="5" width="250" x="1441" y="1154"/>
<polyline fill="none" points="1441 1494, 1451 1504, 1441 1514" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<circle cx="1436" cy="1474" fill="#ffffff" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="1471" y="1144">RIN</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1531" y="1594">REG8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1204">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1234">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1264">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1294">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1324">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1354">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1384">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2864" y="1414">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1204">Q0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1234">Q1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1264">Q2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1294">Q3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1324">Q4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1354">Q5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1384">Q6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="3081" x2="3131" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="3048" y="1414">Q7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2821" x2="2781" y1="1474" y2="1474"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2884" y="1474">^EN</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2831" x2="2781" y1="1504" y2="1504"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2884" y="1504">CLK</text>
<rect fill="#c0dcc0" fill-opacity="0.5" height="400" stroke="#000000" stroke-width="5" width="250" x="2831" y="1154"/>
<polyline fill="none" points="2831 1494, 2841 1504, 2831 1514" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<circle cx="2826" cy="1474" fill="#ffffff" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="2811" y="1144">ROUT</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="2921" y="1594">REG8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="2954" y2="2954"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="2954">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="2984" y2="2984"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="2984">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3014" y2="3014"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3014">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3044" y2="3044"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3044">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3074" y2="3074"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3074">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3104" y2="3104"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3104">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3134" y2="3134"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3134">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3164" y2="3164"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4554" y="3164">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="2954" y2="2954"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="2954">Q0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="2984" y2="2984"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="2984">Q1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3014" y2="3014"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3014">Q2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3044" y2="3044"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3044">Q3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3074" y2="3074"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3074">Q4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3104" y2="3104"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3104">Q5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3134" y2="3134"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3134">Q6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4771" x2="4821" y1="3164" y2="3164"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="4738" y="3164">Q7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4511" x2="4471" y1="3224" y2="3224"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4574" y="3224">^EN</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="4521" x2="4471" y1="3254" y2="3254"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="4574" y="3254">CLK</text>
<rect fill="#c0dcc0" fill-opacity="0.5" height="400" stroke="#000000" stroke-width="5" width="250" x="4521" y="2904"/>
<polyline fill="none" points="4521 3244, 4531 3254, 4521 3264" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<circle cx="4516" cy="3224" fill="#ffffff" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="4521" y="2874">MAR</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="4611" y="3344">REG8</text>
<polyline fill="none" points="1841 1204, 1741 1204" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1741 1234, 1841 1234" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1841 1264, 1741 1264" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1741 1294, 1841 1294" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1841 1324, 1741 1324" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1741 1354, 1841 1354" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1841 1384, 1741 1384" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1741 1414, 1841 1414" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4371 3154, 4371 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="5211 2954, 5361 2954" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 2984, 5361 2984" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3014, 5361 3014" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3044, 5361 3044" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3074, 5361 3074" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3104, 5361 3104" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3134, 5361 3134" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="5211 3164, 5361 3164" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="2954">ABUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="2984">ABUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3014">ABUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3044">ABUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3074">ABUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3104">ABUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3134">ABUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="5231" y="3164">ABUS7</text>
<polyline fill="none" points="8171 2444, 1331 2444, 921 2444, 231 2444, 31 2444" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="1021" y1="3104" y2="3104"/>
<rect fill="#ffffb0" height="100" stroke="#800000" stroke-width="5" width="100" x="821" y="3054"/>
<polyline fill="none" points="831 3004, 911 3004" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 3004, 871 3054" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="841 3134, 871 3134, 871 3074, 901 3074" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="180" font-weight="700" text-anchor="start" x="601" y="2981">RESET</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="731" y="3114">SCLK</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="400" text-anchor="start" x="571" y="3404">Key = R</text>
<polyline fill="none" points="2291 1104, 2291 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="2561 1104, 2561 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="5411 3154, 5411 2444" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="4821 2954, 4961 2954" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4821 2984, 4961 2984" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4961 3014, 4821 3014" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4821 3044, 4961 3044" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4821 3074, 4961 3074" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4821 3104, 4961 3104" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4821 3134, 4961 3134" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4961 3164, 4821 3164" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<rect fill="#80ff80" height="1400" stroke="#800000" stroke-width="1" width="2400" x="6031" y="2854"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="180" font-weight="700" text-anchor="start" x="6031" y="2804">CU</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6031" y="2854">CU.dlsche</text>
<polygon fill="#ffff80" points="6031 2954, 6056 2929, 6106 2929, 6131 2954, 6106 2979, 6056 2979, 6031 2954" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6143" y="2954">DBUS[7..0]</text>
<polygon fill="#ffff80" points="6431 2854, 6406 2879, 6406 2929, 6431 2954, 6456 2929, 6456 2879, 6431 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6412" y="2994">IR0</text>
<polygon fill="#ffff80" points="6531 2854, 6506 2879, 6506 2929, 6531 2954, 6556 2929, 6556 2879, 6531 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6512" y="2994">IR1</text>
<polygon fill="#ffff80" points="6631 2854, 6606 2879, 6606 2929, 6631 2954, 6656 2929, 6656 2879, 6631 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6612" y="2994">IR2</text>
<polygon fill="#ffff80" points="6731 2854, 6706 2879, 6706 2929, 6731 2954, 6756 2929, 6756 2879, 6731 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6712" y="2994">IR3</text>
<polygon fill="#ffff80" points="6931 2854, 6906 2879, 6906 2929, 6931 2954, 6956 2929, 6956 2879, 6931 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6912" y="2994">S0</text>
<polygon fill="#ffff80" points="7031 2854, 7006 2879, 7006 2929, 7031 2954, 7056 2929, 7056 2879, 7031 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7012" y="2994">S1</text>
<polygon fill="#ffff80" points="7131 2854, 7106 2879, 7106 2929, 7131 2954, 7156 2929, 7156 2879, 7131 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7112" y="2994">S2</text>
<polygon fill="#ffff80" points="7531 2854, 7506 2879, 7506 2929, 7531 2954, 7556 2929, 7556 2879, 7531 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(90 7531 2975)" x="7531" y="2975">A_REG_EN</text>
<polygon fill="#ffff80" points="7631 2854, 7606 2879, 7606 2929, 7631 2954, 7656 2929, 7656 2879, 7631 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(90 7631 2977)" x="7631" y="2977">W_REG_EN</text>
<polygon fill="#ffff80" points="7731 2854, 7706 2879, 7706 2929, 7731 2954, 7756 2929, 7756 2879, 7731 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(90 7731 2977)" x="7731" y="2977">FLAG_REG_EN</text>
<polygon fill="#ffff80" points="7831 2854, 7806 2879, 7806 2929, 7831 2954, 7856 2929, 7856 2879, 7831 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(90 7831 2977)" x="7831" y="2977">CN</text>
<polygon fill="#ffff80" points="7331 4254, 7306 4229, 7306 4179, 7331 4154, 7356 4179, 7356 4229, 7331 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7321 4132)" x="7321" y="4132">ASR_GATE_EN</text>
<polygon fill="#ffff80" points="7231 4254, 7206 4229, 7206 4179, 7231 4154, 7256 4179, 7256 4229, 7231 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7231 4132)" x="7231" y="4132">L_GATE_EN</text>
<polygon fill="#ffff80" points="7131 4254, 7106 4229, 7106 4179, 7131 4154, 7156 4179, 7156 4229, 7131 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7131 4132)" x="7131" y="4132">R_GATE_EN</text>
<polygon fill="#ffff80" points="7031 4254, 7006 4229, 7006 4179, 7031 4154, 7056 4179, 7056 4229, 7031 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7031 4132)" x="7031" y="4132">D_GATE_EN</text>
<polygon fill="#ffff80" points="6931 4254, 6906 4229, 6906 4179, 6931 4154, 6956 4179, 6956 4229, 6931 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 6931 4142)" x="6931" y="4142">PC_D_GATE_EN</text>
<polygon fill="#ffff80" points="6831 4254, 6806 4229, 6806 4179, 6831 4154, 6856 4179, 6856 4229, 6831 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 6831 4142)" x="6831" y="4142">ST_GATE_EN</text>
<polygon fill="#ffff80" points="6731 4254, 6706 4229, 6706 4179, 6731 4154, 6756 4179, 6756 4229, 6731 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 6721 4132)" x="6721" y="4132">IA_GATE_EN</text>
<polygon fill="#ffff80" points="6631 4254, 6606 4229, 6606 4179, 6631 4154, 6656 4179, 6656 4229, 6631 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 6631 4142)" x="6631" y="4142">RIN_GATE_EN</text>
<polygon fill="#ffff80" points="8431 3154, 8406 3129, 8356 3129, 8331 3154, 8356 3179, 8406 3179, 8431 3154" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3154">ST_REG_EN</text>
<polygon fill="#ffff80" points="8431 3754, 8406 3729, 8356 3729, 8331 3754, 8356 3779, 8406 3779, 8431 3754" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3754">ROUT_REG_EN</text>
<polygon fill="#ffff80" points="8431 3354, 8406 3329, 8356 3329, 8331 3354, 8356 3379, 8406 3379, 8431 3354" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3354">MAR_GATE_EN</text>
<polygon fill="#ffff80" points="8431 3454, 8406 3429, 8356 3429, 8331 3454, 8356 3479, 8406 3479, 8431 3454" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3454">MAR_REG_EN</text>
<polygon fill="#ffff80" points="8431 3554, 8406 3529, 8356 3529, 8331 3554, 8356 3579, 8406 3579, 8431 3554" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3554">PC_LOAD_EN</text>
<polygon fill="#ffff80" points="8431 3654, 8406 3629, 8356 3629, 8331 3654, 8356 3679, 8406 3679, 8431 3654" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8094" y="3654">PC_A_GATE_EN</text>
<polygon fill="#ffff80" points="7431 4254, 7406 4229, 7406 4179, 7431 4154, 7456 4179, 7456 4229, 7431 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7431 4132)" x="7431" y="4132">CST_GATE_EN</text>
<polygon fill="#ffff80" points="7931 2854, 7906 2879, 7906 2929, 7931 2954, 7956 2929, 7956 2879, 7931 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(90 7931 2975)" x="7931" y="2975">REG_WR</text>
<polygon fill="#ffff80" points="8431 3254, 8406 3229, 8356 3229, 8331 3254, 8356 3279, 8406 3279, 8431 3254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8092" y="3254">ASR_REG_EN</text>
<polygon fill="#ffff80" points="8431 3854, 8406 3829, 8356 3829, 8331 3854, 8356 3879, 8406 3879, 8431 3854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8102" y="3844">MEM_WR</text>
<polygon fill="#ffff80" points="7531 4254, 7506 4229, 7506 4179, 7531 4154, 7556 4179, 7556 4229, 7531 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7531 4132)" x="7531" y="4132">MEM_GATE_EN</text>
<polygon fill="#ffff80" points="8431 3954, 8406 3929, 8356 3929, 8331 3954, 8356 3979, 8406 3979, 8431 3954" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8102" y="3954">IA_REG_EN</text>
<polygon fill="#ffff80" points="7231 2854, 7206 2879, 7206 2929, 7231 2954, 7256 2929, 7256 2879, 7231 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7212" y="2994">S3</text>
<polygon fill="#ffff80" points="7331 2854, 7306 2879, 7306 2929, 7331 2954, 7356 2929, 7356 2879, 7331 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7322" y="2994">C</text>
<polygon fill="#ffff80" points="7431 2854, 7406 2879, 7406 2929, 7431 2954, 7456 2929, 7456 2879, 7431 2854" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="7422" y="2994">M</text>
<polygon fill="#ffff80" points="7631 4254, 7606 4229, 7606 4179, 7631 4154, 7656 4179, 7656 4229, 7631 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7631 4132)" x="7631" y="4132">REG_READ</text>
<polygon fill="#ffff80" points="8431 3054, 8406 3029, 8356 3029, 8331 3054, 8356 3079, 8406 3079, 8431 3054" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8092" y="3054">CST_LOAD</text>
<polygon fill="#ffff80" points="6031 3224, 6056 3199, 6106 3199, 6131 3224, 6106 3249, 6056 3249, 6031 3224" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6143" y="3224">CLK</text>
<polygon fill="#ffff80" points="6031 3054, 6056 3029, 6106 3029, 6131 3054, 6106 3079, 6056 3079, 6031 3054" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="6143" y="3054">RESET</text>
<polygon fill="#ffff80" points="7931 4254, 7906 4229, 7906 4179, 7931 4154, 7956 4179, 7956 4229, 7931 4254" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" transform="rotate(-90 7931 4142)" x="7931" y="4142">PC_ADD</text>
<polygon fill="#ffff80" points="8431 4054, 8406 4029, 8356 4029, 8331 4054, 8356 4079, 8406 4079, 8431 4054" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="8102" y="4054">CST_U\D</text>
<polyline fill="none" points="6031 2954, 5831 2954, 5831 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="6091 1544, 6091 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="7341 1554, 7341 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="4531 1544, 4531 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="2841 1954, 2841 2964, 2841 3364" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="2181 3514, 1781 3514, 1781 2444" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="3601 44, 3601 4474" stroke="#000000" stroke-dasharray="200,100" stroke-linecap="round" stroke-linejoin="round" stroke-width="50"/>
<polyline fill="none" points="4911 944, 5131 944, 5131 2444" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="微软雅黑" font-size="400" font-weight="700" text-anchor="start" x="961" y="614">DM1000</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="微软雅黑" font-size="60" font-weight="700" text-anchor="start" x="991" y="684">(C) 2008-2018 北京英真时代科技有限公司。保留所有权利。</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1204">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1234">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1264">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1294">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1324">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1354">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1384">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2041" x2="2091" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2008" y="1414">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1204" y2="1204"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1204">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1234" y2="1234"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1234">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1264" y2="1264"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1264">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1294" y2="1294"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1294">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1324" y2="1324"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1324">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1354" y2="1354"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1354">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1384" y2="1384"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1384">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1891" x2="1841" y1="1414" y2="1414"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1924" y="1414">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1881" x2="1841" y1="1474" y2="1474"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1935" y="1473">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="350" stroke="#000000" stroke-width="5" width="150" x="1891" y="1164"/>
<circle cx="1886" cy="1474" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="1831" y="1134">RIN_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1891" y="1564">BUS_TRANS8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="2954" y2="2954"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="2954">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="2984" y2="2984"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="2984">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3014" y2="3014"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3014">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3044" y2="3044"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3044">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3074" y2="3074"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3074">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3104" y2="3104"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3104">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3134" y2="3134"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3134">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5161" x2="5211" y1="3164" y2="3164"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="5128" y="3164">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="2954" y2="2954"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="2954">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="2984" y2="2984"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="2984">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3014" y2="3014"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3014">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3044" y2="3044"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3044">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3074" y2="3074"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3074">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3104" y2="3104"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3104">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3134" y2="3134"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3134">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5011" x2="4961" y1="3164" y2="3164"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5044" y="3164">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="5001" x2="4961" y1="3224" y2="3224"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="5055" y="3223">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="350" stroke="#000000" stroke-width="5" width="150" x="5011" y="2914"/>
<circle cx="5006" cy="3224" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="4851" y="2874">MAR_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="5011" y="3314">BUS_TRANS8</text>
<polyline fill="none" points="8171 1954, 31 1954" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="4471 3224, 4291 3224" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="4471 3254, 4291 3254" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<circle cx="5411" cy="2444" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="1391" cy="1204" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="1234" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="1264" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1781" cy="2444" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="5131" cy="2444" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="2841" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="4531" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="7341" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="6091" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="5831" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="2561" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="2291" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="4371" cy="1954" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
</svg>
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="1334" version="1.1" width="2043" xmlns="http://www.w3.org/2000/svg">
<polygon fill="#ffff80" points="120 426, 120 401, 245 401, 270 426, 245 451, 120 451, 120 426" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="120" y="426">ABUS[7..0]</text>
<polyline fill="none" points="270 426, 320 426, 320 656" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="446" y2="496"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="466" y2="516"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="486" y2="536"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="506" y2="556"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="526" y2="576"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="546" y2="596"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="566" y2="616"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="586" y2="636"/>
<polyline fill="none" points="370 496, 640 496" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 516, 640 516" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 536, 640 536" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 556, 640 556" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 576, 640 576" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 596, 640 596" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 616, 640 616" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 636, 640 636" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="496">ABUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="516">ABUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="536">ABUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="556">ABUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="576">ABUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="596">ABUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="616">ABUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="440" y="636">ABUS7</text>
<polygon fill="#ffff80" points="120 706, 120 681, 245 681, 270 706, 245 731, 120 731, 120 706" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="120" y="706">DBUS[7..0]</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="886" y2="836"/>
<polyline fill="none" points="640 836, 370 836" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="866" y2="816"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="846" y2="796"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="826" y2="776"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="806" y2="756"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="786" y2="736"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="766" y2="716"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="320" x2="370" y1="746" y2="696"/>
<polyline fill="none" points="370 816, 640 816" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 796, 640 796" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 776, 640 776" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 756, 640 756" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 736, 640 736" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 716, 640 716" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="370 696, 640 696" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="696">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="716">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="736">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="756">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="776">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="796">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="816">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="12" font-weight="400" text-anchor="start" x="410" y="836">DBUS7</text>
<polygon fill="#ffff80" points="120 996, 120 971, 245 971, 270 996, 245 1021, 120 1021, 120 996" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="120" y="996">MEM_WR</text>
<polygon fill="#ffff80" points="120 1106, 120 1081, 245 1081, 270 1106, 245 1131, 120 1131, 120 1106" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="120" y="1106">CLK</text>
<polyline fill="none" points="270 1106, 640 1106, 640 916" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="270 996, 610 996, 610 896, 640 896" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polygon fill="#ffff80" points="20 1286, 20 1261, 245 1261, 270 1286, 245 1311, 20 1311, 20 1286" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="20" y="1286">MEM_GATE_EN</text>
<polyline fill="none" points="270 706, 320 706, 320 906" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="496">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="526">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="556">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="586">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="616">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="646">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="676">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="22" font-weight="400" text-anchor="start" x="1580" y="706">DBUS7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="496">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="516" y2="516"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="516">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="536" y2="536"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="536">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="556" y2="556"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="556">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="576" y2="576"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="576">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="596" y2="596"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="596">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="616" y2="616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="616">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="636" y2="636"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="636">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="696" y2="696"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="696">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="716" y2="716"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="716">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="736" y2="736"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="736">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="756" y2="756"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="756">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="776" y2="776"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="776">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="796" y2="796"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="796">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="816" y2="816"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="816">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="836" y2="836"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="723" y="836">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="496">Q0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="516" y2="516"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="516">Q1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="536" y2="536"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="536">Q2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="556" y2="556"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="556">Q3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="576" y2="576"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="576">Q4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="596" y2="596"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="596">Q5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="616" y2="616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="616">Q6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="840" x2="890" y1="636" y2="636"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="807" y="636">Q7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="896" y2="896"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="743" y="896">W^R</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="690" x2="640" y1="916" y2="916"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="743" y="916">CLK</text>
<rect fill="#ff8057" fill-opacity="0.5" height="490" stroke="#000000" stroke-width="5" width="150" x="690" y="466"/>
<polyline fill="none" points="690 906, 700 916, 690 926" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="640" y="456">RAM</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="710" y="1006">256RAM</text>
<polyline fill="none" points="1530 496, 1730 496" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 526, 1730 526" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 556, 1730 556" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 586, 1730 586" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 616, 1730 616" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 646, 1730 646" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 676, 1730 676" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1530 706, 1730 706" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="496" y2="446"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="526" y2="476"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="556" y2="506"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="586" y2="536"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="616" y2="566"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="646" y2="596"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="676" y2="626"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1730" x2="1780" y1="706" y2="656"/>
<polyline fill="none" points="1780 696, 1780 396, 1870 396" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="1870 396, 1870 371, 1995 371, 2020 396, 1995 421, 1870 421, 1870 396" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1870" y="396">DBUS[7..0]</text>
<polyline fill="none" points="890 496, 1280 496" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 516, 1180 516, 1180 526, 1280 526" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 536, 1160 536, 1160 556, 1280 556" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 556, 1140 556, 1140 586, 1280 586" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 576, 1110 576, 1110 616, 1280 616" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 596, 1080 596, 1080 646, 1280 646" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 616, 1050 616, 1050 676, 1280 676" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="890 636, 1020 636, 1020 706, 1280 706" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="270 1286, 1180 1286, 1180 766, 1280 766" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="496">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="526" y2="526"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="526">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="556" y2="556"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="556">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="586" y2="586"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="586">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="616" y2="616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="616">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="646" y2="646"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="646">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="676" y2="676"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="676">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1480" x2="1530" y1="706" y2="706"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1447" y="706">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="496">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="526" y2="526"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="526">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="556" y2="556"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="556">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="586" y2="586"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="586">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="616" y2="616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="616">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="646" y2="646"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="646">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="676" y2="676"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="676">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1330" x2="1280" y1="706" y2="706"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1363" y="706">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1320" x2="1280" y1="766" y2="766"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1374" y="765">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="350" stroke="#000000" stroke-width="5" width="150" x="1330" y="456"/>
<circle cx="1325" cy="766" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="60" font-weight="700" text-anchor="start" x="1230" y="436">MEM_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1330" y="856">BUS_TRANS8</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="150" font-weight="700" text-anchor="start" x="650" y="226">MEM模块</text>
</svg>
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="1885" version="1.1" width="3120" xmlns="http://www.w3.org/2000/svg">
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1690" y2="1690"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1011" y="1690">A</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1690">11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1720" y2="1720"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1011" y="1720">B</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1720">10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1750" y2="1750"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1011" y="1750">C</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="949" y="1750">9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="968" x2="928" y1="1780" y2="1780"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1780">^G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="949" y="1780">7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1420" y2="1420"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1420">D0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="950" y="1419">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1450" y2="1450"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1450">D1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="950" y="1449">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1480" y2="1480"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1480">D2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="950" y="1479">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1510" y2="1510"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1510">D3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="950" y="1509">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1540" y2="1540"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1540">D4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1540">15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1570" y2="1570"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1570">D5</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1570">14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1600" y2="1600"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1600">D6</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1600">13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="978" x2="928" y1="1630" y2="1630"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1021" y="1630">D7</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="963" y="1630">12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1128" x2="1178" y1="1420" y2="1420"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1095" y="1420">Y</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1159" y="1420">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1128" x2="1178" y1="1480" y2="1480"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1095" y="1480">W</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1159" y="1480">6</text>
<circle cx="974" cy="1780" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="430" stroke="#000000" stroke-width="5" width="150" x="978" y="1390"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1043" y="1377">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="986" y="1869">74LS151D</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="358" x2="408" y1="1510" y2="1510"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="358 1510, 308 1460, 308 1560, 358 1510" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Times New Roman" font-size="30" font-weight="700" text-anchor="start" transform="rotate(-90 348 1520)" x="348" y="1520">1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 278 1520)" x="278" y="1520">U2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 308 1600)" x="308" y="1600">CONSTANT1</text>
<polygon fill="#ffff80" points="438 1380, 438 1355, 563 1355, 588 1380, 563 1405, 438 1405, 438 1380" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="438" y="1380">CF</text>
<polygon fill="#ffff80" points="438 1450, 438 1425, 563 1425, 588 1450, 563 1475, 438 1475, 438 1450" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="438" y="1450">ZF</text>
<polygon fill="#ffff80" points="438 1620, 438 1595, 563 1595, 588 1620, 563 1645, 438 1645, 438 1620" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="438" y="1620">IR2</text>
<polygon fill="#ffff80" points="438 1690, 438 1665, 563 1665, 588 1690, 563 1715, 438 1715, 438 1690" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="438" y="1690">IR3</text>
<polygon fill="#ffff80" points="338 1760, 338 1735, 563 1735, 588 1760, 563 1785, 338 1785, 338 1760" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="338" y="1760">PC_LOAD_EN</text>
<polygon fill="#ffff80" points="428 1010, 428 985, 553 985, 578 1010, 553 1035, 428 1035, 428 1010" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="428" y="1010">RESET</text>
<polygon fill="#ffff80" points="428 1090, 428 1065, 553 1065, 578 1090, 553 1115, 428 1115, 428 1090" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="428" y="1090">CLK</text>
<polygon fill="#ffff80" points="408 650, 408 625, 533 625, 558 650, 533 675, 408 675, 408 650" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="408" y="650">DBUS[7..0]</text>
<polyline fill="none" points="558 650, 598 650, 598 840" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="598 650, 598 480" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="550" y2="500"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="590" y2="540"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="620" y2="570"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="660" y2="610"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="700" y2="650"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="730" y2="680"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="770" y2="720"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="598" x2="648" y1="810" y2="760"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="500">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="540">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="570">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="610">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="650">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="680">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="720">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="20" font-weight="400" text-anchor="start" x="758" y="760">DBUS7</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="700" y2="650"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="730" y2="680"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="760" y2="710"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="790" y2="740"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="820" y2="770"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="850" y2="800"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="880" y2="830"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2798" x2="2848" y1="910" y2="860"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="700">ABUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="730">ABUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="760">ABUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="790">ABUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="820">ABUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="850">ABUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="880">ABUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="910">ABUS7</text>
<polygon fill="#ffff80" points="328 1190, 328 1165, 553 1165, 578 1190, 553 1215, 328 1215, 328 1190" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="328" y="1190">PC_A_GATE_EN</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="248" y="1650">指令第3位</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="248" y="1700">指令第4位</text>
<polyline fill="none" points="2798 700, 2508 700" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 730, 2798 730" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 760, 2798 760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 790, 2798 790" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 820, 2798 820" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 850, 2798 850" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 880, 2798 880" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 910, 2798 910" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 540, 998 540, 998 720, 1018 720, 1358 720" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 570, 988 570, 988 740, 1018 740, 1358 740" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 610, 978 610, 978 760, 1018 760, 1358 760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 650, 968 650, 968 780, 1018 780, 1358 780" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 680, 958 680, 958 800, 1018 800, 1358 800" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 720, 948 720, 948 820, 1018 820, 1358 820" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 760, 938 760, 938 840, 1018 840, 1358 840" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="648 500, 1018 500, 1018 700, 1358 700" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="700" y2="700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="700">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="720" y2="720"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="720">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="740" y2="740"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="740">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="760" y2="760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="760">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="780" y2="780"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="780">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="800" y2="800"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="800">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="820" y2="820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="820">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="840" y2="840"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1441" y="840">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="700" y2="700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="700">Q0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="720" y2="720"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="720">Q1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="740" y2="740"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="740">Q2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="760" y2="760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="760">Q3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="780" y2="780"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="780">Q4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="800" y2="800"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="800">Q5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="820" y2="820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="820">Q6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="840" y2="840"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1625" y="840">Q7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="900" y2="900"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1456" y="900">EN</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1398" x2="1358" y1="920" y2="920"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1494" y="920">^LOAD</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1398" x2="1358" y1="940" y2="940"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1481" y="940">^CLR</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1658" x2="1708" y1="900" y2="900"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1615" y="900">RCO</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1408" x2="1358" y1="960" y2="960"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1469" y="960">CLK</text>
<rect fill="#c0dcc0" fill-opacity="0.5" height="370" stroke="#000000" stroke-width="5" width="250" x="1408" y="650"/>
<polyline fill="none" points="1408 950, 1418 960, 1408 970" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<circle cx="1403" cy="920" fill="#ffffff" r="6" stroke="#000000" stroke-width="5"/>
<circle cx="1403" cy="940" fill="#ffffff" r="6" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="90" font-weight="700" text-anchor="start" x="1458" y="650">PC</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1448" y="1060">COUNTER8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="700" y2="700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="700">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="730" y2="730"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="730">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="760" y2="760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="760">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="790" y2="790"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="790">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="820" y2="820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="820">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="850" y2="850"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="850">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="880" y2="880"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="880">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="910" y2="910"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="910">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="700" y2="700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="700">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="730" y2="730"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="730">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="760" y2="760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="760">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="790" y2="790"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="790">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="820" y2="820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="820">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="850" y2="850"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="850">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="880" y2="880"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="880">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="910" y2="910"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="910">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2298" x2="2258" y1="970" y2="970"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2352" y="969">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="350" stroke="#000000" stroke-width="5" width="150" x="2308" y="660"/>
<circle cx="2303" cy="970" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="65" font-weight="700" text-anchor="start" x="2218" y="650">PC_A_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="2308" y="1060">BUS_TRANS8</text>
<polygon fill="#ffff80" points="308 440, 308 415, 533 415, 558 440, 533 465, 308 465, 308 440" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="308" y="440">PC_D_GATE_EN</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="170" y2="170"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="170">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="200" y2="200"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="200">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="230" y2="230"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="230">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="260" y2="260"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="260">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="290" y2="290"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="290">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="320" y2="320"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="320">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="350" y2="350"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="350">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2458" x2="2508" y1="380" y2="380"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="2425" y="380">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="170" y2="170"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="170">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="200" y2="200"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="200">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="230" y2="230"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="230">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="260" y2="260"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="260">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="290" y2="290"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="290">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="320" y2="320"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="320">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="350" y2="350"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="350">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2308" x2="2258" y1="380" y2="380"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2341" y="380">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="2298" x2="2258" y1="440" y2="440"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="2352" y="439">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="350" stroke="#000000" stroke-width="5" width="150" x="2308" y="130"/>
<circle cx="2303" cy="440" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="65" font-weight="700" text-anchor="start" x="2208" y="120">PC_D_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="2308" y="530">BUS_TRANS8</text>
<polyline fill="none" points="2258 380, 2208 380, 2208 840, 2208 910" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 290, 2148 290, 2148 780, 2148 820" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 230, 2108 230, 2108 740, 2108 760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 200, 2088 200, 2088 720, 2088 730" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 170, 2068 170, 2068 700" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="170">DBUS0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="200">DBUS1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="230">DBUS2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="260">DBUS3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="290">DBUS4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="320">DBUS5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="350">DBUS6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2608" y="380">DBUS7</text>
<polyline fill="none" points="408 1510, 928 1510" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="928 1480, 848 1480, 848 1510" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="928 1450, 598 1450, 588 1450" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="588 1380, 928 1380, 928 1420" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="588 1620, 848 1620, 848 1690, 928 1690" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="588 1690, 818 1690, 818 1720, 928 1720" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="588 1760, 818 1760, 818 1750, 928 1750" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 440, 688 440, 558 440" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 170, 2788 170" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 200, 2788 200" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 230, 2788 230" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 260, 2788 260" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 290, 2788 290" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 320, 2788 320" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 350, 2788 350" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2508 380, 2788 380" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="170" y2="120"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="200" y2="150"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="230" y2="180"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="260" y2="210"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="290" y2="240"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="320" y2="270"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="350" y2="300"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2788" x2="2838" y1="380" y2="330"/>
<polyline fill="none" points="2838 350, 2838 100, 2938 100" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="2938 100, 2938 75, 3063 75, 3088 100, 3063 125, 2938 125, 2938 100" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2938" y="100">DBUS[7..0]</text>
<polyline fill="none" points="2848 890, 2848 650, 2848 600, 2948 600" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="2948 600, 2948 575, 3073 575, 3098 600, 3073 625, 2948 625, 2948 600" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2948" y="600">ABUS[7..0]</text>
<polyline fill="none" points="2258 700, 1708 700" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 730, 1858 730, 1858 720, 1708 720" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 760, 1848 760, 1848 740, 1708 740" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 790, 1838 790, 1838 760, 1708 760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 820, 1828 820, 1828 780, 1708 780" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 850, 1818 850, 1818 800, 1708 800" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 880, 1808 880, 1808 820, 1708 820" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 910, 1798 910, 1798 840, 1708 840" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 260, 2128 260, 2128 790" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 320, 2168 320, 2168 850" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="2258 350, 2188 350, 2188 880" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="348" y="1020">复位</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="208" y="1200">取指</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="18" y="1570">跳转</text>
<polyline fill="none" points="198 1340, 148 1370, 148 1510, 148 1540, 118 1550, 148 1570, 148 1770, 198 1790" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="578 1190, 2258 1190, 2258 970" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polygon fill="#ffff80" points="428 930, 428 905, 553 905, 578 930, 553 955, 428 955, 428 930" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="428" y="930">PC_ADD</text>
<polyline fill="none" points="578 1090, 1258 1090, 1258 960, 1358 960" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="578 1010, 1208 1010, 1208 940, 1358 940" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="578 930, 1158 930, 1158 900, 1358 900" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1178 1480, 1308 1480, 1308 920, 1358 920" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="150" font-weight="700" text-anchor="start" x="1198" y="230">PC模块</text>
<circle cx="598" cy="650" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="2068" cy="700" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2088" cy="730" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2108" cy="760" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2148" cy="820" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2208" cy="910" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2128" cy="790" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2168" cy="850" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2188" cy="880" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="848" cy="1510" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
# 说明
空白项目
# 使用方法
可根据需要自行添加原理图等文件。
# 说明
DM1000 八位模型机
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
/*******************************************************************************
Copyright (c) 2008 - 2018 北京英真时代科技有限公司。保留所有权利。
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef unsigned char BYTE;
typedef long BOOL;
#define FALSE 0
#define TRUE 1
#define MAX_LINE_LENGTH 256 // 一行代码最多可以有多少个字符
#define MAX_LINE_COUNT 1024 // 源代码文件最多可以有多少行
#define MAX_SYMBOL_LENGTH 64 // 一个符号最多可以包含多少个字符
#define MAX_SYMBOL_COUNT 256 // 源代码文件中最多可以包含多少个符号
#ifndef MAX_PATH
#define MAX_PATH 256 // 文件路径最多可以包含多少个字符
#endif
// 代码行数据库。记录源代码文件中所有代码行的信息(包括注释行、空行)
struct LINE_RECORD
{
char line_string[MAX_LINE_LENGTH]; // 代码行的内容
unsigned long line_num; // 行号
unsigned long address; // 此行代码转换的机器码在映像文件中的地址(偏移)
int machine_code_count; // 此行代码转换的机器码的字节数量
unsigned long flag; // 代码行标志位,32位
};
struct LINE_RECORD line_database[MAX_LINE_COUNT] = {0};
int line_count = 0;
int machine_code_line_count = 0; // 记录产生了机器码的代码行的数量
// 在此定义所有的代码行标志位。注意,代码行标志位是按位或的关系。
#define LF_INSTRUCTION 0x00000001 // 代码行标志位的最低位是1,表示此行是一条指令,否则表示此行是数据
// 重定位表。如果指令中使用了标号、变量名等符号,在第一次扫描时无法确定他们的地址,需要
// 在第二次扫描时进行重定位。
struct REALLOCATE
{
unsigned long address; // 第一次扫描时,在这里记录了需要重定位的机器码的地址(偏移),
// 第二次扫描时,根据符号的地址进行重定位。
char symbol_name[MAX_SYMBOL_LENGTH]; // 需要重定位的符号名称。
int line_num; // 行号。
};
struct REALLOCATE reallocate_table[MAX_LINE_COUNT] = {0};
int reallocate_count = 0;
// 符号表。符号包括源代码中的标号、变量名。
struct SYMBOL
{
char name[MAX_SYMBOL_LENGTH]; // 符号名称
unsigned long address; // 符号表示的地址。重定位时需要用到。
int machine_code_count; // 符号生成的机器码的数量(以字节为单位)。
int line_num; // 行号
int ref_count; // 引用计数
};
struct SYMBOL symbol_table[MAX_SYMBOL_COUNT] = {0};
int symbol_count = 0;
// 汇编过程的状态
enum
{
AS_BEGIN // 起始状态。在遇到代码段名称前,处于此状态
,AS_TEXT // 正在处理代码段。遇到代码段名称后,遇到数据的名称前,处于此状态
,AS_DATA // 正在处理数据段。遇到数据段名称后,处于此状态
};
unsigned long assembler_state = AS_BEGIN;
//
// 在下面定义所有的关键字
//
// 段名称
const char* code_section_keyword = ".text"; // 代码段标志
char const* data_section_keyword = ".data"; // 数据段标志
// 指令名称
const char* mov_instruction_keyword = "mov";
const char* jmp_instruction_keyword = "jmp";
const char* add_instruction_keyword = "add";
const char* adc_instruction_keyword = "adc";
const char* sub_instruction_keyword = "sub";
const char* sbb_instruction_keyword = "sbb";
const char* and_instruction_keyword = "and";
const char* or_instruction_keyword = "or";
const char* read_instruction_keyword = "read";
const char* write_instruction_keyword = "write";
const char* jc_instruction_keyword = "jc";
const char* jz_instruction_keyword = "jz";
const char* call_instruction_keyword = "call";
const char* in_instruction_keyword = "in";
const char* out_instruction_keyword = "out";
const char* ret_instruction_keyword = "ret";
const char* shr_instruction_keyword = "shr";
const char* shl_instruction_keyword = "shl";
const char* rcr_instruction_keyword = "rcr";
const char* rcl_instruction_keyword = "rcl";
const char* not_instruction_keyword = "not";
const char* iret_instruction_keyword = "iret";
const char* nop_instruction_keyword = "nop";
const char* int_instruction_keyword = "int";
const char* lea_instruction_keyword = "lea";
// 通用寄存器名称
const char* r0_register_keyword = "r0";
const char* r1_register_keyword = "r1";
const char* r2_register_keyword = "r2";
const char* r3_register_keyword = "r3";
const char* r0_register_indirect_keyword = "[r0]";
const char* r1_register_indirect_keyword = "[r1]";
const char* r2_register_indirect_keyword = "[r2]";
const char* r3_register_indirect_keyword = "[r3]";
const char* a_register_keyword = "a";
const char* st_register_keyword = "st";
const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符
const char* delimit_char_comma = "\n\t\r, "; // 需要忽略的空白字符,包括英文逗号
// 汇编产生的机器码
#define MAX_MACHINE_CODE 1024
BYTE machine_code[MAX_MACHINE_CODE];
unsigned long machine_code_address = 0;
unsigned long machine_code_old_address = 0;
const char* assembly_file_name = NULL; // 汇编文件路径
const char* target_file_name = NULL; // 目标文件路径
const char* list_file_name = NULL; // 列表文件路径
const char* dbg_file_name = NULL; // 调试信息文件路径
const unsigned long dbg_file_magic = 58;
const unsigned long dbg_file_version = 1;
// 输出汇编过程中发现的语法错误信息
void error_msg(const char* error_msg, int line_num)
{
if(line_num >= 1)
{
printf("%s:%d: error: %s\n", assembly_file_name, line_num, error_msg);
}
else
{
printf("%s: error: %s\n", assembly_file_name, error_msg);
}
exit(1);
}
char formated_msg[1024]; // 将格式化后的错误信息放在此字符串中。
void error_msg_miss_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令缺少操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_wrong_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令不支持这样的操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_same_symbol(const char* symbol, int line_num, int ref_line_num)
{
sprintf(formated_msg, "符号 %s 重复定义。参见第 %d 行。", symbol, ref_line_num);
error_msg(formated_msg, line_num);
}
void error_msg_keyword_symbol(const char* symbol, int line_num)
{
sprintf(formated_msg, "不能使用保留的关键字 %s 作为符号名称。", symbol);
error_msg(formated_msg, line_num);
}
void error_msg_wrong_data(const char* data, int line_num)
{
sprintf(formated_msg, "%s 不是有效的数据。", data);
error_msg(formated_msg, line_num);
}
// 输出汇编过程中发现的警告信息
void warning_msg(const char* warning_msg, int line_num)
{
if(line_num >= 1)
{
printf("%s:%d: warning: %s\n", assembly_file_name, line_num, warning_msg);
}
else
{
printf("%s: warning: %s\n", assembly_file_name, warning_msg);
}
}
void warning_msg_invalid_line(int line_num)
{
warning_msg("忽略无效的代码行。", line_num);
}
void warning_msg_unref_symbol(const char* symbol, int line_num)
{
sprintf(formated_msg, "符号 %s 未被引用。", symbol);
warning_msg(formated_msg, line_num);
}
// 判断是否是立即数。如果是数字开头,或者是负号开头的,就认为是立即数。
int is_immediate(const char* token)
{
return (isdigit(token[0]) || '-' == token[0]) ? 1 : 0;
}
// 判断是否是主存数据
int is_main_memory(const char* token)
{
return (isdigit(token[0]) || '@' == token[0]) ? 1 : 0;
}
// 指令操作数类型
enum
{
OT_REGISTER_A // 累加器
,OT_REGISTER_R0 // r0
,OT_REGISTER_R1 // r1
,OT_REGISTER_R2 // r2
,OT_REGISTER_R3 // r3
,OT_REGISTER_R0_INDIRECT // [r0]
,OT_REGISTER_R1_INDIRECT // [r1]
,OT_REGISTER_R2_INDIRECT // [r2]
,OT_REGISTER_R3_INDIRECT // [r3]
,OT_IMMEDIATE // 立即数
,OT_SYMBOL // 符号
,OT_REGISTER_ST // 堆栈寄存器
};
// 得到指令操作数的类型
unsigned long get_operand_type(const char* op)
{
unsigned long op_type;
if(stricmp(op, a_register_keyword) == 0)
{
op_type = OT_REGISTER_A;
}
else if(stricmp(op, r0_register_keyword) == 0)
{
op_type = OT_REGISTER_R0;
}
else if(stricmp(op, r1_register_keyword) == 0)
{
op_type = OT_REGISTER_R1;
}
else if(stricmp(op, r2_register_keyword) == 0)
{
op_type = OT_REGISTER_R2;
}
else if(stricmp(op, r3_register_keyword) == 0)
{
op_type = OT_REGISTER_R3;
}
else if(stricmp(op, r0_register_indirect_keyword) == 0)
{
op_type = OT_REGISTER_R0_INDIRECT;
}
else if(stricmp(op, r1_register_indirect_keyword) == 0)
{
op_type = OT_REGISTER_R1_INDIRECT;
}
else if(stricmp(op, r2_register_indirect_keyword) == 0)
{
op_type = OT_REGISTER_R2_INDIRECT;
}
else if(stricmp(op, r3_register_indirect_keyword) == 0)
{
op_type = OT_REGISTER_R3_INDIRECT;
}
else if (stricmp(op, st_register_keyword) == 0)
{
op_type = OT_REGISTER_ST;
}
else if(is_immediate(op))
{
op_type = OT_IMMEDIATE;
}
else
{
op_type = OT_SYMBOL;
}
return op_type;
}
// 根据 r? 寄存器和机器码的基础值,得到一个机器码
char get_machine_code_from_r(unsigned long op_type, char code_base)
{
return code_base + (char)(op_type - OT_REGISTER_R0);
}
// 根据 [r?] 寄存器和机器码的基础值,得到一个机器码
char get_machine_code_from_r_indirect(unsigned long op_type, char code_base)
{
return code_base + (char)(op_type - OT_REGISTER_R0_INDIRECT);
}
// 根据立即数得到一个机器码。注意,允许使用负数,所以返回值是带符号的 8 位 char。
char get_machine_code_from_immediate(const char* immediate)
{
char* end;
int start_index = (immediate[0] == '-' ? 1 : 0);
int base = (immediate[start_index] == '0' && (immediate[start_index + 1] == 'x' || immediate[start_index + 1] == 'X')) ? 16 : 10;
return (char)strtol(immediate, &end, base);
}
// 向重定位表中添加一个重定位信息
void add_reallocate(const char* symbol, int line_num)
{
reallocate_table[reallocate_count].address = machine_code_address;
strcpy(reallocate_table[reallocate_count].symbol_name, symbol);
reallocate_table[reallocate_count].line_num = line_num;
reallocate_count++;
}
// mov op1, op2
void parse_mov(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(mov_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// mov a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x70);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// mov a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x74);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// mov a, symbol
machine_code[machine_code_address] = 0x78;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// mov a, immediate
machine_code[machine_code_address] = 0x7c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else if((op1_type >= OT_REGISTER_R0 && op1_type <= OT_REGISTER_R3)
&& OT_REGISTER_A == op2_type)
{
// mov r?, a
machine_code[machine_code_address] = get_machine_code_from_r(op1_type, 0x80);
machine_code_address++;
}
else if((op1_type >= OT_REGISTER_R0_INDIRECT && op1_type <= OT_REGISTER_R3_INDIRECT)
&& OT_REGISTER_A == op2_type)
{
// mov [r?], a
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op1_type, 0x84);
machine_code_address++;
}
else if(OT_SYMBOL == op1_type && OT_REGISTER_A == op2_type)
{
// mov symbol, a
machine_code[machine_code_address] = 0x88;
machine_code_address++;
// 重定位
add_reallocate(op1, line_num);
machine_code_address++;
}
else if((op1_type >= OT_REGISTER_R0 && op1_type <= OT_REGISTER_R3)
&& OT_IMMEDIATE == op2_type)
{
// mov r?, immediate
machine_code[machine_code_address] = get_machine_code_from_r(op1_type, 0x8c);
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else if (OT_REGISTER_ST == op1_type && OT_IMMEDIATE == op2_type)
{
// mov st, immediate
machine_code[machine_code_address] = 0x9c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(mov_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jmp symbol
void parse_jmp(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(jmp_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// jmp symbol
machine_code[machine_code_address] = 0xAC;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(jmp_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// add op1, op2
void parse_add(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(add_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// add a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x10);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// add a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x14);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// add a, symbol
machine_code[machine_code_address] = 0x18;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// add a, immediate
machine_code[machine_code_address] = 0x1c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(add_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// adc op1, op2
void parse_adc(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(adc_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// adc a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x20);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// adc a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x24);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// adc a, symbol
machine_code[machine_code_address] = 0x28;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// adc a, immediate
machine_code[machine_code_address] = 0x2c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(adc_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sub op1, op2
void parse_sub(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(sub_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// sub a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x30);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// sub a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x34);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// sub a, symbol
machine_code[machine_code_address] = 0x38;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// sub a, immediate
machine_code[machine_code_address] = 0x3c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(sub_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sbb op1, op2
void parse_sbb(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(sbb_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// sbb a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x40);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// sbb a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x44);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// sbb a, symbol
machine_code[machine_code_address] = 0x48;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// sbb a, immediate
machine_code[machine_code_address] = 0x4c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(sbb_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// and op1, op2
void parse_and(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(and_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// and a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x50);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// and a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x54);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// and a, symbol
machine_code[machine_code_address] = 0x58;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// and a, immediate
machine_code[machine_code_address] = 0x5c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(and_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// or op1, op2
void parse_or(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(or_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0 && op2_type <= OT_REGISTER_R3))
{
// or a, r?
machine_code[machine_code_address] = get_machine_code_from_r(op2_type, 0x60);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type
&& (op2_type >= OT_REGISTER_R0_INDIRECT && op2_type <= OT_REGISTER_R3_INDIRECT))
{
// or a, [r?]
machine_code[machine_code_address] = get_machine_code_from_r_indirect(op2_type, 0x64);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// or a, symbol
machine_code[machine_code_address] = 0x68;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else if(OT_REGISTER_A == op1_type && OT_IMMEDIATE == op2_type)
{
// or a, immediate
machine_code[machine_code_address] = 0x6c;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(or_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// lea a, symbol
void parse_lea(int line_num)
{
char *op1, *op2;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(lea_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(OT_REGISTER_A == op1_type && OT_SYMBOL == op2_type)
{
// lea a, symbol
machine_code[machine_code_address] = 0x98;
machine_code_address++;
// 重定位
add_reallocate(op2, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(lea_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// read symbol
void parse_read(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(read_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// read symbol
machine_code[machine_code_address] = 0x90;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(read_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// write symbol
void parse_write(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(write_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// write symbol
machine_code[machine_code_address] = 0x94;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(write_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jc symbol
void parse_jc(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(jc_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// jc symbol
machine_code[machine_code_address] = 0xA0;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(jc_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jz symbol
void parse_jz(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(jz_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// jz symbol
machine_code[machine_code_address] = 0xA4;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(jz_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// call symbol
void parse_call(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(call_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// call symbol
machine_code[machine_code_address] = 0xE8;
machine_code_address++;
// 重定位
add_reallocate(op, line_num);
machine_code_address++;
}
else
{
error_msg_wrong_op(call_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// int immediate
void parse_int(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(int_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_IMMEDIATE == op_type)
{
// int immediate
machine_code[machine_code_address] = 0xB8;
machine_code_address++;
machine_code[machine_code_address] = get_machine_code_from_immediate(op);
machine_code_address++;
}
else
{
error_msg_wrong_op(int_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// in
void parse_in(int line_num)
{
machine_code[machine_code_address] = 0xB0;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// out
void parse_out(int line_num)
{
machine_code[machine_code_address] = 0xB4;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// ret
void parse_ret(int line_num)
{
machine_code[machine_code_address] = 0xC8;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// shr a
void parse_shr(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(shr_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_REGISTER_A == op_type)
{
machine_code[machine_code_address] = 0xD0;
machine_code_address++;
}
else
{
error_msg_wrong_op(shr_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// shl a
void parse_shl(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(shl_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_REGISTER_A == op_type)
{
machine_code[machine_code_address] = 0xD4;
machine_code_address++;
}
else
{
error_msg_wrong_op(shl_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// rcr a
void parse_rcr(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(rcr_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_REGISTER_A == op_type)
{
machine_code[machine_code_address] = 0xD8;
machine_code_address++;
}
else
{
error_msg_wrong_op(rcr_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// rcl a
void parse_rcl(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(rcl_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_REGISTER_A == op_type)
{
machine_code[machine_code_address] = 0xDC;
machine_code_address++;
}
else
{
error_msg_wrong_op(rcl_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// not a
void parse_not(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(not_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_REGISTER_A == op_type)
{
machine_code[machine_code_address] = 0xE4;
machine_code_address++;
}
else
{
error_msg_wrong_op(not_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// iret
void parse_iret(int line_num)
{
machine_code[machine_code_address] = 0xF8;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// nop
void parse_nop(int line_num)
{
machine_code[machine_code_address] = 0xE0;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// 向符号表中添加一个符号
void add_symbol(const char* symbol, int line_num)
{
int i;
// 符号名称不能重复
for(i=0; i<symbol_count; i++)
{
if(stricmp(symbol, symbol_table[i].name) == 0)
{
error_msg_same_symbol(symbol, line_num, symbol_table[i].line_num);
}
}
// 符号数量有限
if(symbol_count == MAX_SYMBOL_COUNT)
{
sprintf(formated_msg, "定义了太多的符号。最多可以定义 %d 个符号。", MAX_SYMBOL_COUNT);
error_msg(formated_msg, line_num);
}
// 添加符号
strcpy(symbol_table[symbol_count].name, symbol);
symbol_table[symbol_count].address = machine_code_address;
symbol_table[symbol_count].line_num = line_num;
symbol_count++;
}
// 解析符号
void parse_symbol(const char* symbol_with_colon, int line_num)
{
char symbol[MAX_SYMBOL_LENGTH];
char* token;
// 删除符号末尾的冒号
strcpy(symbol, symbol_with_colon);
symbol[strlen(symbol) - 1] = 0;
if(AS_TEXT == assembler_state)
{
// 代码段中的标号作为符号。记录到符号表中,不产生机器码。
add_symbol(symbol, line_num);
// 标号必须单独占一行,否则报错
if (strtok(NULL, delimit_char) != NULL)
{
error_msg("标号必须单独占用一行。", line_num);
}
}
else if(AS_DATA == assembler_state)
{
// 数据段中的变量作为符号。一个变量可以包含多个字节数据。记录到符号表中,产生机器码。
add_symbol(symbol, line_num);
while((token = strtok(NULL, delimit_char)) != NULL)
{
if(!is_immediate(token))
{
error_msg_wrong_data(token, line_num);
}
machine_code[machine_code_address] = get_machine_code_from_immediate(token);
machine_code_address++;
symbol_table[symbol_count - 1].machine_code_count++;
}
}
else
{
warning_msg_invalid_line(line_num);
}
}
// 解析代码段开始标志
void parse_code_section_keyword(int line_num)
{
// 代码段标志
if(AS_DATA == assembler_state)
{
error_msg("代码段不能定义在数据段的后面。", line_num);
}
else if(AS_TEXT == assembler_state)
{
error_msg("定义了重复的代码段。", line_num);
}
assembler_state = AS_TEXT;
}
// 解析数据段开始标志
void parse_data_section_keyword(int line_num)
{
// 数据段标志
if(AS_DATA == assembler_state)
{
error_msg("定义了重复的数据段。", line_num);
}
else if(AS_BEGIN == assembler_state)
{
error_msg("数据段不能定义在代码段的前面。", line_num);
}
assembler_state = AS_DATA;
}
// 定义关键字和解析函数的对应关系
typedef void (*PARSE_FUNCTION)(int line_num);
struct KEYWORD_FUNCTION_ENTRY
{
const char** keyword;
PARSE_FUNCTION parse_function;
};
//
// 必须将关键字及其解析函数放在下面的表中。从而可以使用“表驱动”的编程模式。
//
struct KEYWORD_FUNCTION_ENTRY keyword_function_table[] =
{
{ NULL, NULL } // 未用
,{ &code_section_keyword, parse_code_section_keyword }
,{ &data_section_keyword, parse_data_section_keyword }
,{ &mov_instruction_keyword, parse_mov }
,{ &jmp_instruction_keyword, parse_jmp }
,{ &add_instruction_keyword, parse_add }
,{ &adc_instruction_keyword, parse_adc }
,{ &sub_instruction_keyword, parse_sub }
,{ &sbb_instruction_keyword, parse_sbb }
,{ &and_instruction_keyword, parse_and }
,{ &or_instruction_keyword, parse_or }
,{ &read_instruction_keyword, parse_read }
,{ &write_instruction_keyword, parse_write }
,{ &jc_instruction_keyword, parse_jc }
,{ &jz_instruction_keyword, parse_jz }
,{ &call_instruction_keyword, parse_call }
,{ &in_instruction_keyword, parse_in }
,{ &out_instruction_keyword, parse_out }
,{ &ret_instruction_keyword, parse_ret }
,{ &shr_instruction_keyword, parse_shr }
,{ &shl_instruction_keyword, parse_shl }
,{ &rcr_instruction_keyword, parse_rcr }
,{ &rcl_instruction_keyword, parse_rcl }
,{ &not_instruction_keyword, parse_not }
,{ &iret_instruction_keyword, parse_iret }
,{ &nop_instruction_keyword, parse_nop }
,{ &int_instruction_keyword, parse_int }
,{ &lea_instruction_keyword, parse_lea }
,{ &r0_register_keyword, NULL }
,{ &r1_register_keyword, NULL }
,{ &r2_register_keyword, NULL }
,{ &r3_register_keyword, NULL }
,{ &r0_register_indirect_keyword, NULL }
,{ &r1_register_indirect_keyword, NULL }
,{ &r2_register_indirect_keyword, NULL }
,{ &r3_register_indirect_keyword, NULL }
,{ &a_register_keyword, NULL }
,{ &st_register_keyword, NULL }
};
// 判断是否是一个关键字。返回0,不是关键字;返回非0,是关键字,并且返回值就是关键字在表中的下标。
int match_keyword(const char* token)
{
int i;
for(i=1; i<sizeof(keyword_function_table)/sizeof(keyword_function_table[0]); i++)
{
if(stricmp(token, *keyword_function_table[i].keyword) == 0)
{
return i;
}
}
return 0;
}
// 判断是否是一个符号
int is_symbol(const char* token, int line_num)
{
int i;
char symbol_name[MAX_SYMBOL_LENGTH];
// 最后一个字符必须是冒号
if(token[strlen(token) - 1] != ':')
{
return 0;
}
// 第一个字符必须是字母或者下划线
if(token[0] != '_' && !isalpha(token[0]))
{
return 0;
}
// 后面的字符必须是字母、数字、下划线
for(i=0; i<(int)strlen(token)-2; i++)
{
if(token[i] != '_' && !isalpha(token[i]) && !isdigit(token[i]))
{
return 0;
}
}
// 不能与关键字相同
strcpy(symbol_name, token);
symbol_name[strlen(symbol_name) - 1] = 0;
if(match_keyword(symbol_name) != 0)
{
error_msg_keyword_symbol(symbol_name, line_num);
}
return 1;
}
// 输出版本信息
void version_msg()
{
printf(
"Engintime DM1000 8位模型机汇编器 [版本 2.0]\n"
"版权所有 (c) 2008-2018 北京英真时代科技有限公司。保留所有权利。\n"
);
}
// 输出帮助信息
void help_msg()
{
printf(
"Engintime DM1000 8位模型机汇编器。\n\n"
"用法:\n\n"
" dmasm.exe assembly_file_name [options]\n\n"
"选项:\n\n"
" -g debug_file_name\t指定生成的调试信息文件路径。\n"
" -h\t\t\t打印此帮助信息。\n"
" -l list_file_name\t指定生成的列表文件路径。\n"
" -o target_file_name\t指定生成的目标文件路径。若未指定,默认生成 a.obj 文件。\n"
" -v\t\t\t打印版本信息。\n"
);
printf("\n");
version_msg();
exit(1);
}
void argument_error_msg()
{
printf("命令行参数错误。\n\n");
help_msg();
}
// 处理器用户输入的命令行参数
void process_argument(int argc, char* argv[])
{
int i;
// argv[0] 是 "easm.exe",所以可以忽略。
for(i=1; i<argc; i++)
{
if(strcmp(argv[i], "-v") == 0)
{
version_msg();
exit(1);
}
else if(strcmp(argv[i], "-h") == 0)
{
help_msg();
}
else if(strcmp(argv[i], "-o") == 0)
{
if(i + 1 < argc)
{
i++;
target_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-l") == 0)
{
if(i + 1 < argc)
{
i++;
list_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-g") == 0)
{
if(i + 1 < argc)
{
i++;
dbg_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(NULL == assembly_file_name && argv[i][0] != '-')
{
// 输入的汇编源代码文件路径。
assembly_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
//
// 如果命令行参数中没有指定输入的汇编文件,就打印错误信息后退出
//
if(NULL == assembly_file_name)
{
printf("命令行参数错误。没有指定汇编源代码文件的路径。\n");
help_msg();
}
}
// 将一个字符串写入二进制文件中。先将字符串长度写入文件,然后将字符串中的
// 每个字符依次写入文件,不包括字符串末尾的 0.
void write_string_to_binary_file(const char* str, FILE* fp)
{
int str_length;
if(str != NULL)
{
str_length = strlen(str);
fwrite(&str_length, 1, sizeof(str_length), fp);
fwrite(str, 1, str_length, fp);
}
else
{
str_length = 0;
fwrite(&str_length, 1, sizeof(str_length), fp);
}
}
int main(int argc, char* argv[])
{
FILE* fp;
char* token;
char line[MAX_LINE_LENGTH];
int i, j;
int line_num = 1; // 行号从第一行开始计数
int keyword_index;
//
// 处理命令行参数
//
process_argument(argc, argv);
//
// 打开汇编源代码文件
//
fp = fopen(assembly_file_name, "r");
if(NULL == fp)
{
printf("无法打开源代码文件 %s\n", assembly_file_name);
return 1;
}
//////////////////////////////////////////////////////////////////////////
// 第一遍扫描
version_msg();
printf("\n正在汇编 %s...\n", assembly_file_name);
//
// 一次读取一行文本,同时记录所有的代码行信息
//
while(fgets(line, sizeof(line), fp) != NULL)
{
//
// 将一行代码的信息记录到代码行数据库中
//
strcpy(line_database[line_count].line_string, line);
line_database[line_count].line_num = line_num;
line_database[line_count].address = machine_code_address;
//
// 将代码行中的注释剥离
//
line[strcspn(line, ";")] = 0;
//
// 开始解析代码行
//
token = strtok(line, delimit_char);
if(NULL == token)
{
// 如果是空行,不做任何处理
}
else if((keyword_index = match_keyword(token)) != 0
&& keyword_function_table[keyword_index].parse_function != NULL)
{
// 根据关键字进行相应的处理
keyword_function_table[keyword_index].parse_function(line_num);
}
else if(is_symbol(token, line_num))
{
// 处理符号
parse_symbol(token, line_num);
}
else
{
error_msg("无法识别的代码行。", line_num);
}
//
// 补充代码行数据库信息
//
line_database[line_count].machine_code_count = machine_code_address - machine_code_old_address;
machine_code_old_address = machine_code_address;
//
// 记录产生了机器码的代码行数量
//
if(line_database[line_count].machine_code_count != 0)
{
machine_code_line_count++;
}
//
// 增加行号
//
line_count++;
line_num++;
if(line_count == MAX_LINE_COUNT)
{
sprintf(formated_msg, "汇编文件中的代码行过多,最多只能有 %d 行代码。", MAX_LINE_COUNT);
error_msg(formated_msg, -1);
}
}
fclose(fp);
//////////////////////////////////////////////////////////////////////////
// 第二遍扫描
//
// 根据符号表更新重定位表
//
for(i=0; i<reallocate_count; i++)
{
for(j=0; j<symbol_count; j++)
{
if(stricmp(symbol_table[j].name, reallocate_table[i].symbol_name) == 0)
{
machine_code[reallocate_table[i].address] = (BYTE)symbol_table[j].address;
symbol_table[j].ref_count++;
break;
}
}
if(j == symbol_count)
{
// 重定位表中使用的符号在符号表中未定义,报错
sprintf(formated_msg, "使用了未定义的符号 %s。", reallocate_table[i].symbol_name);
error_msg(formated_msg, reallocate_table[i].line_num);
}
}
//
// 如果存在未引用的符号,输出警告信息。
//
for(i=0; i<symbol_count; i++)
{
if(0 == symbol_table[i].ref_count)
{
warning_msg_unref_symbol(symbol_table[i].name, symbol_table[i].line_num);
}
}
//////////////////////////////////////////////////////////////////////////
// 产生各种输出文件
//
// 将机器码写入二进制文件
//
if(NULL == target_file_name)
{
target_file_name = "a.obj";
}
fp = fopen(target_file_name, "wb");
if(NULL == fp)
{
printf("无法打开输出文件 %s\n", target_file_name);
return 1;
}
fwrite(machine_code, 1, machine_code_address, fp);
fclose(fp);
printf("\n生成目标文件 %s\n", target_file_name);
//
// 将代码行数据库中的信息写入列表文件
//
if(list_file_name != NULL)
{
fp = fopen(list_file_name, "w");
if(NULL == fp)
{
printf("无法打开列表文件 %s\n", list_file_name);
return 1;
}
for(i=0; i<line_count; i++)
{
// 行号
fprintf(fp, "%04d ", line_database[i].line_num);
// 地址和机器码
if(line_database[i].machine_code_count > 0)
{
fprintf(fp, "%02X ", line_database[i].address);
for(j=0; j<line_database[i].machine_code_count; j++)
{
// 确保每行最多写两个字节的机器码
if(j != 0 && j % 2 == 0)
{
if(2 == j)
{
fprintf(fp, " ");
}
else
{
fprintf(fp, "\n ");
}
}
fprintf(fp, "%02X ", machine_code[line_database[i].address + j]);
if(1 == j)
{
fprintf(fp, " ");
fprintf(fp, line_database[i].line_string);
}
}
if(1 == j)
{
fprintf(fp, " ");
fprintf(fp, line_database[i].line_string);
}
else if(j > 2)
{
fprintf(fp, "\n");
}
}
else
{
fprintf(fp, " ");
// 源代码
fprintf(fp, line_database[i].line_string);
}
}
fclose(fp);
printf("生成列表文件 %s\n", list_file_name);
}
//
// 将代码行数据库中的信息写入二进制的调试信息文件。
//
// 调试信息的基本格式为:
// 魔数(4字节),固定不可改变
// 版本号(4字节),固定不可改变
// 源代码文件绝对路径字符串长度(4字节)
// 源代码文件绝对路径字符串(不包括字符串结尾的0)
// 列表文件绝对路径字符串长度(4字节)
// 列表文件绝对路径字符串(不包括字符串结尾的0)
//
// 代码行数据库中元素的数量(4字节)
// 代码行数据库中的所有元素
//
// 符号表元素的数量(4字节)
// 符号表中的所有元素
//
if(dbg_file_name != NULL)
{
fp = fopen(dbg_file_name, "wb");
if(NULL == fp)
{
printf("无法打开调试信息文件 %s\n", dbg_file_name);
return 1;
}
// 魔数
fwrite(&dbg_file_magic, 1, sizeof(dbg_file_magic), fp);
// 版本号
fwrite(&dbg_file_version, 1, sizeof(dbg_file_version), fp);
// 源代码文件路径
write_string_to_binary_file(assembly_file_name, fp);
// 列表文件路径
write_string_to_binary_file(list_file_name, fp);
// 代码行数据库中的所有元素
fwrite(&machine_code_line_count, 1, sizeof(machine_code_line_count), fp);
for(i=0; i<line_count; i++)
{
// 跳过没有产生机器码的代码行
if(0 == line_database[i].machine_code_count)
{
continue;
}
fwrite(&line_database[i].line_num, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].address, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].machine_code_count, 1, sizeof(int), fp);
fwrite(&line_database[i].flag, 1, sizeof(unsigned long), fp);
}
// 符号表中的所有元素
fwrite(&symbol_count, 1, sizeof(symbol_count), fp);
for(i=0; i<symbol_count; i++)
{
write_string_to_binary_file(symbol_table[i].name, fp);
fwrite(&symbol_table[i].address, 1, sizeof(unsigned long), fp);
fwrite(&symbol_table[i].machine_code_count, 1, sizeof(int), fp);
fwrite(&symbol_table[i].line_num, 1, sizeof(int), fp);
}
fclose(fp);
printf("生成调试信息文件 %s\n", dbg_file_name);
}
return 0;
}
添加文件
/*******************************************************************************
Copyright (c) 2008 - 2018 北京英真时代科技有限公司。保留所有权利。
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef unsigned char BYTE;
typedef long BOOL;
#define FALSE 0
#define TRUE 1
#define MAX_LINE_LENGTH 256 // 一行代码最多可以有多少个字符
#define MAX_LINE_COUNT 1024 // 源代码文件最多可以有多少行
#define MAX_SYMBOL_LENGTH 64 // 一个符号最多可以包含多少个字符
#define MAX_SYMBOL_COUNT 256 // 源代码文件中最多可以包含多少个符号
#ifndef MAX_PATH
#define MAX_PATH 256 // 文件路径最多可以包含多少了字符
#endif
// 代码行数据库。记录源代码文件中所有代码行的信息(包括注释行、空行)
struct LINE_RECORD
{
char line_string[MAX_LINE_LENGTH]; // 代码行的内容
unsigned long line_num; // 行号
unsigned long address; // 此行代码转换的机器码在映像文件中的地址(偏移)。注意,对于 DM1000 来说,微指令的一个地址对应 4 个字节。
int machine_code_count; // 此行代码转换的机器码的字节数量
unsigned long flag; // 代码行标志位,32位
};
struct LINE_RECORD line_database[MAX_LINE_COUNT] = {0};
int line_count = 0;
int machine_code_line_count = 0; // 记录产生了机器码的代码行的数量
// 在此定义所有的代码行标志位。注意,代码行标志位是按位或的关系。
#define LF_INSTRUCTION 0x00000001 // 代码行标志位的最低位是1,表示此行是一条指令,否则表示此行是数据
//
// 在下面定义所有的关键字
//
// 寄存器名称
const char* rx_register_keyword = "rx";
const char* mar_register_keyword = "mar";
const char* rin_register_keyword = "rin";
const char* rout_register_keyword = "rout";
const char* st_register_keyword = "st";
const char* ia_register_keyword = "ia";
const char* ir_register_keyword = "ir";
const char* flag_register_keyword = "flag";
const char* pc_register_keyword = "pc";
const char* a_register_keyword = "a";
const char* w_register_keyword = "w";
const char* asr_register_keyword = "asr";
const char* upc_register_keyword = "upc";
// 堆栈计数器
const char* cst_counter_keyword = "cst";
//
// alu 操作码
const char* alu_add_keyword = "alu_add";
const char* alu_adc_keyword = "alu_adc";
const char* alu_sub_keyword = "alu_sub";
const char* alu_sbb_keyword = "alu_sbb";
const char* alu_and_keyword = "alu_and";
const char* alu_or_keyword = "alu_or";
const char* alu_aout_keyword = "alu_aout";
const char* alu_shr_keyword = "alu_shr";
const char* alu_shl_keyword = "alu_shl";
const char* alu_rcr_keyword = "alu_rcr";
const char* alu_rcl_keyword = "alu_rcl";
const char* alu_not_keyword = "alu_not";
const char* st_add_keyword = "st_add";
const char* st_minus_keyword = "st_minus";
const char* int_number_keyword = "int_number"; // 中断号
const char* int_ia_keyword = "int_ia";
const char* int_pc_keyword = "int_pc";
// 访问主存或外设的操作数
const char* pc_main_memory_keyword = "[pc]";
const char* pc_inc_main_memory_keyword = "[pc+]"; // 读出PC指向内存单元的值,同时允许PC加1
const char* mar_main_memory_keyword = "[mar]";
const char* mar_extern_memory_keyword = "<mar>";
const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符
const char* delimit_char_comma = "\n\t\r, "; // 需要忽略的空白字符,包括英文逗号
// 单操作数微指令
struct ONE_OPERAND_INSTRUCTION_ENTRY
{
const char** op;
unsigned long micro_machine_code;
};
struct ONE_OPERAND_INSTRUCTION_ENTRY one_operand_table[] =
{
{ NULL, 0x0 } // 未用
,{ &pc_register_keyword, 0xffffffff } // inc pc
,{ &upc_register_keyword, 0xffffffcf } // reset upc
};
// 查表,操作数是否匹配。返回0,操作数不匹配;返回非0,操作数匹配,并且返回值就是操作数在表中的下标。
int match_one_operand(const char* op)
{
int i;
for(i=1; i<sizeof(one_operand_table)/sizeof(one_operand_table[0]); i++)
{
if((stricmp(op, *one_operand_table[i].op) == 0))
{
return i;
}
}
return 0;
}
// 双操作数微指令
struct PATH_INSTRUCTION_OPERAND_ENTRY
{
const char** op1;
const char** op2;
unsigned long micro_machine_code;
};
//////////////////////////////////////////////////////////////////////////
//
struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
{
{ NULL, NULL, 0x0 } // 未用
,{ &pc_main_memory_keyword, &ir_register_keyword, 0xfff93fef } // path [pc], ir ff e3 ff ff
,{ &alu_add_keyword, &a_register_keyword, 0x99e4ffef } // path alu_add, a ff ff fe 90
,{ &alu_sub_keyword, &a_register_keyword, 0x86e4ffef } // path alu_sub, a ff ff fe 91
,{ &alu_or_keyword, &a_register_keyword, 0xbee4ffef } // path alu_or, a
,{ &alu_and_keyword, &a_register_keyword, 0xbbe4ffef } // path alu_and, a
,{ &alu_adc_keyword, &a_register_keyword, 0x89e4ffef } // path alu_adc, a
,{ &alu_sbb_keyword, &a_register_keyword, 0x96e4ffef } // path alu_sbb, a
,{ &alu_shr_keyword, &a_register_keyword, 0x90d5ffef } // path alu_shr, a ff ff fc b7
,{ &alu_shl_keyword, &a_register_keyword, 0x90d6ffef } // path alu_shl, a
,{ &alu_rcr_keyword, &a_register_keyword, 0x90e5ffef } // path alu_rcr, a
,{ &alu_rcl_keyword, &a_register_keyword, 0x90e6ffef } // path alu_rcl, a
,{ &alu_not_keyword, &a_register_keyword, 0xb0f4ffef } // path alu_not, a
,{ &rx_register_keyword, &w_register_keyword, 0x7ffaffef } // path rx, w
,{ &rx_register_keyword, &mar_register_keyword, 0xfffaf7ef } // path rx, mar
,{ &mar_main_memory_keyword, &w_register_keyword, 0x7ff9fbef } // path [mar], w
,{ &pc_main_memory_keyword, &mar_register_keyword, 0xfff977ef } // path [pc], mar
,{ &pc_main_memory_keyword, &w_register_keyword, 0x7ff97fef } // path [pc], w
,{ &rx_register_keyword, &a_register_keyword, 0xbffaffef } // path rx, a
,{ &mar_main_memory_keyword, &a_register_keyword, 0xbff9fbef } // path [mar], a 从地址寄存器指定的内存单元读数据到a寄存器
,{ &pc_main_memory_keyword, &a_register_keyword, 0xbff97fef } // path [pc], a
,{ &a_register_keyword, &rx_register_keyword, 0xd0b4ffef } // path a, rx
,{ &a_register_keyword, &mar_main_memory_keyword, 0xd0f4fbed } // path a, [mar] 将a寄存器数据写入地址寄存器指向的内存
,{ &pc_main_memory_keyword, &rx_register_keyword, 0xffb97fef } // path [pc], rx
,{ &mar_extern_memory_keyword, &a_register_keyword, 0xbff97fef } // path <mar>, a 从地址寄存器指定的外部设备读数据到a寄存器
,{ &alu_aout_keyword, &mar_main_memory_keyword, 0xd0f4fbec } // path alu_aout, [mar]
,{ &pc_main_memory_keyword, &pc_register_keyword, 0xfff96fef } // path [pc], pc
,{ &pc_inc_main_memory_keyword, &pc_register_keyword, 0xfff96fff } // path [+pc], pc 读出PC指向主存单元的内容,同时允许PC加1,主要用在jz和jc指令中
,{ &pc_register_keyword, &st_register_keyword, 0xfff3feef } // path pc, st
,{ &ia_register_keyword, &mar_register_keyword, 0xfff1f7ef } // path ia, mar
,{ &pc_register_keyword, &mar_register_keyword, 0xfff3f7ef } // path pc, mar
,{ &rin_register_keyword, &a_register_keyword, 0xbff0ffef } // path rin, a
,{ &a_register_keyword, &rout_register_keyword, 0xd0f4ffee } // path a, rout
,{ &mar_main_memory_keyword, &pc_register_keyword, 0xfff9ebef } // 从地址寄存器指定的内存单元读数据到程序计数器pc
,{ &pc_main_memory_keyword, &st_register_keyword, 0xfff97eef } // path [pc], st 执行后pc应加1指向下一条指令
,{ &st_register_keyword, &mar_register_keyword, 0xfff2f7ef } // path st, mar
,{ &st_register_keyword, &cst_counter_keyword, 0xff72ffef } // path st, cst
,{ &pc_main_memory_keyword, &ia_register_keyword, 0xfff97feb } // path [pc], ia 执行后pc应加1指向下一条指令
,{ &pc_main_memory_keyword, &asr_register_keyword, 0xfff97def } // path [pc], asr
,{ &cst_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path cst, mar
,{ &cst_counter_keyword, &st_register_keyword, 0xfff8feef } // path cst, st
,{ &st_add_keyword, &cst_counter_keyword, 0xffffffe7 } // path st_add, cst
,{ &st_minus_keyword, &cst_counter_keyword, 0xffffffef } // path st_minus, cst
,{ &pc_register_keyword, &mar_main_memory_keyword, 0xfff3fbed } // path pc, [mar] 将pc值写入mar指向的内存
,{ &asr_register_keyword, &pc_register_keyword, 0xfff7efef } // path asr, pc
,{ &st_register_keyword, &asr_register_keyword, 0xfff2fdef } // path st, asr
,{ &int_number_keyword, &ia_register_keyword, 0xfffbffeb } // path int_number, ia 将中断号给ia寄存器
,{ &int_ia_keyword, &pc_register_keyword, 0xfff1dfef } // path int_ia, pc
,{ &int_pc_keyword, &pc_register_keyword, 0xfff95fef } // path int_pc, pc
};
// 查表,判断两个操作数是否匹配。返回0,操作数不完全匹配;返回非0,操作数完全匹配,并且返回值就是操作数在表中的下标。
int match_ops(const char* op1, const char* op2)
{
int i;
for(i=1; i<sizeof(path_operand_table)/sizeof(path_operand_table[0]); i++)
{
if((stricmp(op1, *path_operand_table[i].op1) == 0)
&& (stricmp(op2, *path_operand_table[i].op2) == 0))
{
return i;
}
}
return 0;
}
// 汇编产生的机器码
#define MAX_MACHINE_CODE 1024
BYTE machine_code[MAX_MACHINE_CODE];
unsigned long machine_code_address = 0; // 一个地址对应一个字节
unsigned long machine_code_old_address = 0;
const char* micro_file_name = NULL; // 微指令文件路径
const char* target_file_name = NULL; // 目标文件路径
const char* list_file_name = NULL; // 列表文件路径
const char* dbg_file_name = NULL; // 调试信息文件路径
const unsigned long dbg_file_magic = 58;
const unsigned long dbg_file_version = 1;
// 输出汇编过程中发现的语法错误信息
void error_msg(const char* error_msg, int line_num)
{
if(line_num >= 1)
{
printf("%s:%d: error: %s\n", micro_file_name, line_num, error_msg);
}
else
{
printf("%s: error: %s\n", micro_file_name, error_msg);
}
exit(1);
}
char formated_msg[1024]; // 将格式化后的错误信息放在此字符串中。
void error_msg_miss_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令缺少操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_wrong_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令不支持这样的操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
// 定义关键字和解析函数的对应关系
typedef void (*PARSE_FUNCTION)(int line_num);
struct KEYWORD_FUNCTION_ENTRY
{
const char** keyword;
PARSE_FUNCTION parse_function;
};
// 指令名称
const char* dup_instruction_keyword = "dup";
const char* null_instruction_keyword = "null";
const char* path_instruction_keyword = "path";
const char* inc_instruction_keyword = "inc"; // pc+1
const char* reset_instruction_keyword = "reset"; // 复位
// 判断是否是立即数。不支持负数。
int is_immediate(const char* token)
{
return isdigit(token[0]);
}
// 根据立即数得到值。不支持负数。
unsigned long get_value_from_immediate(const char* immediate)
{
char* end;
int base = (immediate[0] == '0' && (immediate[1] == 'x' || immediate[1] == 'X')) ? 16 : 10;
return strtoul(immediate, &end, base);
}
// dup n, null
void parse_dup(int line_num)
{
char *op1, *op2;
int i;
unsigned long micro_instruction_count; // 微指令个数
unsigned long micro_code; // 微指令编码
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(dup_instruction_keyword, line_num);
}
// dup微指令的第一个操作数必须是立即数(十进制或十六进制)
if (!is_immediate(op1))
{
error_msg_wrong_op(dup_instruction_keyword, line_num);
}
// 得到微指令个数
micro_instruction_count = get_value_from_immediate(op1);
// 解析第二个操作数
if (is_immediate(op2))
{
micro_code = get_value_from_immediate(op2);
}
else if(0 == stricmp(op2, null_instruction_keyword))
{
micro_code = 0xffffffff;
}
else
{
error_msg_wrong_op(dup_instruction_keyword, line_num);
}
for (i = 0; i < (int)micro_instruction_count; i++)
{
memcpy(&machine_code[machine_code_address], &micro_code, 4);
machine_code_address += 4;
}
}
// null
void parse_null(int line_num)
{
unsigned long ul = 0xffffffff;
memcpy(&machine_code[machine_code_address], &ul, 4);
machine_code_address += 4;
}
// path op1, op2
void parse_path(int line_num)
{
char *op1, *op2;
int index;
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(path_instruction_keyword, line_num);
}
index = match_ops(op1, op2);
if (0 == index)
{
error_msg_wrong_op(path_instruction_keyword, line_num);
}
memcpy(&machine_code[machine_code_address], &path_operand_table[index].micro_machine_code, 4);
machine_code_address += 4;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// inc
void parse_inc(int line_num)
{
char *op;
int index;
op = strtok(NULL, delimit_char_comma);
if(NULL == op)
{
error_msg_miss_op(inc_instruction_keyword, line_num);
}
index = match_one_operand(op);
if (0 == index)
{
error_msg_wrong_op(inc_instruction_keyword, line_num);
}
memcpy(&machine_code[machine_code_address], &one_operand_table[index].micro_machine_code, 4);
machine_code_address += 4;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// reset
void parse_reset(int line_num)
{
char *op;
int index;
op = strtok(NULL, delimit_char_comma);
if(NULL == op)
{
error_msg_miss_op(reset_instruction_keyword, line_num);
}
index = match_one_operand(op);
if (0 == index)
{
error_msg_wrong_op(reset_instruction_keyword, line_num);
}
memcpy(&machine_code[machine_code_address], &one_operand_table[index].micro_machine_code, 4);
machine_code_address += 4;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//
// 必须将关键字及其解析函数放在下面的表中。从而可以使用“表驱动”的编程模式。
//
struct KEYWORD_FUNCTION_ENTRY keyword_function_table[] =
{
{ NULL, NULL } // 未用
,{ &dup_instruction_keyword, parse_dup }
,{ &null_instruction_keyword, parse_null }
,{ &path_instruction_keyword, parse_path }
,{ &inc_instruction_keyword, parse_inc }
,{ &reset_instruction_keyword, parse_reset }
};
// 判断是否是一个关键字。返回0,不是关键字;返回非0,是关键字,并且返回值就是关键字在表中的下标。
int match_keyword(const char* token)
{
int i;
for(i=1; i<sizeof(keyword_function_table)/sizeof(keyword_function_table[0]); i++)
{
if(stricmp(token, *keyword_function_table[i].keyword) == 0)
{
return i;
}
}
return 0;
}
// 输出版本信息
void version_msg()
{
printf(
"Engintime DM1000 8位模型机微指令汇编器 [版本 2.0]\n"
"版权所有 (c) 2008-2018 北京英真时代科技有限公司。保留所有权利。\n"
);
}
// 输出帮助信息
void help_msg()
{
printf(
"Engintime DM1000 8位模型机微指令汇编器。\n\n"
"用法:\n\n"
" microasm.exe micro_file_name [options]\n\n"
"选项:\n\n"
" -g debug_file_name\t指定生成的调试信息文件路径。\n"
" -h\t\t\t打印此帮助信息。\n"
" -l list_file_name\t指定生成的列表文件路径。\n"
" -o target_file_name\t指定生成的目标文件路径。若未指定,默认生成 micro.obj 文件。\n"
" -v\t\t\t打印版本信息。\n"
);
printf("\n");
version_msg();
exit(1);
}
void argument_error_msg()
{
printf("命令行参数错误。\n\n");
help_msg();
}
// 处理器用户输入的命令行参数
void process_argument(int argc, char* argv[])
{
int i;
// argv[0] 是 "easm.exe",所以可以忽略。
for(i=1; i<argc; i++)
{
if(strcmp(argv[i], "-v") == 0)
{
version_msg();
exit(1);
}
else if(strcmp(argv[i], "-h") == 0)
{
help_msg();
}
else if(strcmp(argv[i], "-o") == 0)
{
if(i + 1 < argc)
{
i++;
target_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-l") == 0)
{
if(i + 1 < argc)
{
i++;
list_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-g") == 0)
{
if(i + 1 < argc)
{
i++;
dbg_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(NULL == micro_file_name && argv[i][0] != '-')
{
// 输入的汇编源代码文件路径。
micro_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
//
// 如果命令行参数中没有指定输入的汇编文件,就打印错误信息后退出
//
if(NULL == micro_file_name)
{
printf("命令行参数错误。没有指定微指令源代码文件的路径。\n");
help_msg();
}
}
// 将一个字符串写入二进制文件中。先将字符串长度写入文件,然后将字符串中的
// 每个字符依次写入文件,不包括字符串末尾的 0.
void write_string_to_binary_file(const char* str, FILE* fp)
{
int str_length;
if(str != NULL)
{
str_length = strlen(str);
fwrite(&str_length, 1, sizeof(str_length), fp);
fwrite(str, 1, str_length, fp);
}
else
{
str_length = 0;
fwrite(&str_length, 1, sizeof(str_length), fp);
}
}
int main(int argc, char* argv[])
{
FILE* fp;
char* token;
char line[MAX_LINE_LENGTH];
int i, j;
int line_num = 1; // 行号从第一行开始计数
int keyword_index;
unsigned long micro_code;
//
// 处理命令行参数
//
process_argument(argc, argv);
//
// 打开汇编源代码文件
//
fp = fopen(micro_file_name, "r");
if(NULL == fp)
{
printf("无法打开微指令源代码文件 %s\n", micro_file_name);
return 1;
}
////////////////////////////////////////////////////////////////////////////
//// 扫描
version_msg();
printf("\n正在汇编 %s...\n", micro_file_name);
//
// 一次读取一行文本,同时记录所有的代码行信息
//
while(fgets(line, sizeof(line), fp) != NULL)
{
//
// 将一行代码的信息记录到代码行数据库中
//
strcpy(line_database[line_count].line_string, line);
line_database[line_count].line_num = line_num;
line_database[line_count].address = machine_code_address;
//
// 将代码行中的注释剥离
//
line[strcspn(line, ";")] = 0;
//
// 开始解析代码行
//
token = strtok(line, delimit_char);
if(NULL == token)
{
// 如果是空行,不做任何处理
}
else if((keyword_index = match_keyword(token)) != 0)
{
// 根据关键字进行相应的处理
keyword_function_table[keyword_index].parse_function(line_num);
}
else if(is_immediate(token))
{
// 将立即数直接作为微指令
micro_code = get_value_from_immediate(token);
memcpy(&machine_code[machine_code_address], &micro_code, 4);
machine_code_address += 4;
}
else
{
error_msg("无法识别的代码行。", line_num);
}
//
// 补充代码行数据库信息
//
line_database[line_count].machine_code_count = machine_code_address - machine_code_old_address;
machine_code_old_address = machine_code_address;
//
// 记录产生了机器码的代码行数量
//
if(line_database[line_count].machine_code_count != 0)
{
machine_code_line_count++;
}
//
// 增加行号
//
line_count++;
line_num++;
if(line_count == MAX_LINE_COUNT)
{
sprintf(formated_msg, "微指令文件中的代码行过多,最多只能有 %d 行代码。", MAX_LINE_COUNT);
error_msg(formated_msg, -1);
}
}
fclose(fp);
////////////////////////////////////////////////////////////////////////////
//// 产生各种输出文件
//
// 将机器码写入二进制文件
//
if(NULL == target_file_name)
{
target_file_name = "micro.obj";
}
fp = fopen(target_file_name, "wb");
if(NULL == fp)
{
printf("无法打开目标文件 %s\n", target_file_name);
return 1;
}
fwrite(machine_code, 1, machine_code_address, fp);
fclose(fp);
printf("\n生成目标文件 %s\n", target_file_name);
//
// 将代码行数据库中的信息写入列表文件
//
if(list_file_name != NULL)
{
fp = fopen(list_file_name, "w");
if(NULL == fp)
{
printf("无法打开列表文件 %s\n", list_file_name);
return 1;
}
for(i=0; i<line_count; i++)
{
// 行号
fprintf(fp, "%04d ", line_database[i].line_num);
// 地址和机器码
if(line_database[i].machine_code_count > 0)
{
fprintf(fp, "%02X ", line_database[i].address);
for(j=0; j<4; j++)
{
fprintf(fp, "%02X ", machine_code[line_database[i].address + j]);
}
fprintf(fp, " ");
}
else
{
fprintf(fp, " ");
}
// 源代码
fprintf(fp, line_database[i].line_string);
}
fclose(fp);
printf("生成列表文件 %s\n", list_file_name);
}
//
// 将代码行数据库中的信息写入二进制的调试信息文件。
//
// 调试信息的基本格式为:
// 魔数(4字节),固定不可改变
// 版本号(4字节),固定不可改变
// 源代码文件绝对路径字符串长度(4字节)
// 源代码文件绝对路径字符串(不包括字符串结尾的0)
// 列表文件绝对路径字符串长度(4字节)
// 列表文件绝对路径字符串(不包括字符串结尾的0)
//
// 代码行数据库中元素的数量(4字节)
// 代码行数据库中的所有元素
//
// 符号表元素的数量(4字节)
// 符号表中的所有元素
//
if(dbg_file_name != NULL)
{
fp = fopen(dbg_file_name, "wb");
if(NULL == fp)
{
printf("无法打开调试信息文件 %s\n", dbg_file_name);
return 1;
}
// 魔数
fwrite(&dbg_file_magic, 1, sizeof(dbg_file_magic), fp);
// 版本号
fwrite(&dbg_file_version, 1, sizeof(dbg_file_version), fp);
// 源代码文件路径
write_string_to_binary_file(micro_file_name, fp);
// 列表文件路径
write_string_to_binary_file(list_file_name, fp);
// 代码行数据库中的所有元素
fwrite(&machine_code_line_count, 1, sizeof(machine_code_line_count), fp);
for(i=0; i<line_count; i++)
{
// 跳过没有产生机器码的代码行
if(0 == line_database[i].machine_code_count)
{
continue;
}
fwrite(&line_database[i].line_num, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].address, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].machine_code_count, 1, sizeof(int), fp);
fwrite(&line_database[i].flag, 1, sizeof(unsigned long), fp);
}
// 没有符号表。但是为了确保调试信息的格式能够被正确读取,必须写入符号表数量为 0
i = 0;
fwrite(&i, 1, sizeof(i), fp);
fclose(fp);
printf("生成调试信息文件 %s\n", dbg_file_name);
}
return 0;
}
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="cc76dfb5-389b-4822-9a8a-ef2eed053645" name="project" version="1">
<files>
<file relativepath="README.md"/>
</files>
</project>
; ʾ
.text
mov r0, 16
mov a, num
add a, r0
Endless_Loop:
jmp Endless_Loop
.data
num: -1
@echo off
dmasm.exe ram.asm -o ram.rxm -l ram.lst -g ram.dbg
pause
添加文件
0001 ; ʾ
0002
0003 .text
0004
0005 00 8C 10 mov r0, 16
0006 02 78 07 mov a, num
0007 04 10 add a, r0
0008
0009 Endless_Loop:
0010 05 AC 05 jmp Endless_Loop ;ѭ
0011
0012 .data
0013
0014 07 FF num: -1
添加文件
@echo off
microasm.exe rom.masm -o rom.rxm -l rom.lst -g rom.dbg
pause
\ No newline at end of file
添加文件
0001 ; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。
0002
0003 ; 所有指令的第一条微指令地址必须是8的倍数
0004 ; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令
0005 00 EF 3F F9 FF path [pc], ir
0006
0007 ; 填充空白指令 01-1f
0008 04 FF FF FF FF dup 31, null
0009
0010 ; add a, rx
0011 80 EF FF FA 7F path rx, w
0012 84 EF FF E4 99 path alu_add, a
0013 88 FF FF FF FF inc pc
0014 8C CF FF FF FF reset upc
0015
0016 90 FF FF FF FF dup 4, null
0017
0018 ; add a, [rx]
0019 A0 EF F7 FA FF path rx, mar
0020 A4 EF FB F9 7F path [mar], w
0021 A8 EF FF E4 99 path alu_add, a
0022 AC FF FF FF FF inc pc
0023 B0 CF FF FF FF reset upc
0024
0025 B4 FF FF FF FF dup 3, null
0026
0027 ; add a, symbol
0028 C0 FF FF FF FF inc pc
0029 C4 EF 77 F9 FF path [pc], mar
0030 C8 EF FB F9 7F path [mar], w
0031 CC EF FF E4 99 path alu_add, a
0032 D0 FF FF FF FF inc pc
0033 D4 CF FF FF FF reset upc
0034
0035 D8 FF FF FF FF dup 2, null
0036
0037 ; add a, immediate
0038 E0 FF FF FF FF inc pc
0039 E4 EF 7F F9 7F path [pc], w
0040 E8 EF FF E4 99 path alu_add, a
0041 EC FF FF FF FF inc pc
0042 F0 CF FF FF FF reset upc
0043
0044 F4 FF FF FF FF dup 3, null
0045
0046 ; adc a, rx
0047 100 EF FF FA 7F path rx, w
0048 104 EF FF E4 89 path alu_adc, a
0049 108 FF FF FF FF inc pc
0050 10C CF FF FF FF reset upc
0051
0052 110 FF FF FF FF dup 4, null
0053
0054 ; adc a, [rx]
0055 120 EF F7 FA FF path rx, mar
0056 124 EF FB F9 7F path [mar], w
0057 128 EF FF E4 89 path alu_adc, a
0058 12C FF FF FF FF inc pc
0059 130 CF FF FF FF reset upc
0060
0061 134 FF FF FF FF dup 3, null
0062
0063 ; adc a, symbol
0064 140 FF FF FF FF inc pc
0065 144 EF 77 F9 FF path [pc], mar
0066 148 EF FB F9 7F path [mar], w
0067 14C EF FF E4 89 path alu_adc, a
0068 150 FF FF FF FF inc pc
0069 154 CF FF FF FF reset upc
0070
0071 158 FF FF FF FF dup 2, null
0072
0073 ; adc a, immediate
0074 160 FF FF FF FF inc pc
0075 164 EF 7F F9 7F path [pc], w
0076 168 EF FF E4 89 path alu_adc, a
0077 16C FF FF FF FF inc pc
0078 170 CF FF FF FF reset upc
0079
0080 174 FF FF FF FF dup 3, null
0081
0082 ; sub a, rx
0083 180 EF FF FA 7F path rx, w
0084 184 EF FF E4 86 path alu_sub, a
0085 188 FF FF FF FF inc pc
0086 18C CF FF FF FF reset upc
0087
0088 190 FF FF FF FF dup 4, null
0089
0090 ; sub a, [rx]
0091 1A0 EF F7 FA FF path rx, mar
0092 1A4 EF FB F9 7F path [mar], w
0093 1A8 EF FF E4 86 path alu_sub, a
0094 1AC FF FF FF FF inc pc
0095 1B0 CF FF FF FF reset upc
0096
0097 1B4 FF FF FF FF dup 3, null
0098
0099 ; sub a, symbol
0100 1C0 FF FF FF FF inc pc
0101 1C4 EF 77 F9 FF path [pc], mar
0102 1C8 EF FB F9 7F path [mar], w
0103 1CC EF FF E4 86 path alu_sub, a
0104 1D0 FF FF FF FF inc pc
0105 1D4 CF FF FF FF reset upc
0106
0107 1D8 FF FF FF FF dup 2, null
0108
0109 ; sub a, immediate
0110 1E0 FF FF FF FF inc pc
0111 1E4 EF 7F F9 7F path [pc], w
0112 1E8 EF FF E4 86 path alu_sub, a
0113 1EC FF FF FF FF inc pc
0114 1F0 CF FF FF FF reset upc
0115
0116 1F4 FF FF FF FF dup 3, null
0117
0118 ; sbb a, rx
0119 200 EF FF FA 7F path rx, w
0120 204 EF FF E4 96 path alu_sbb, a
0121 208 FF FF FF FF inc pc
0122 20C CF FF FF FF reset upc
0123
0124 210 FF FF FF FF dup 4, null
0125
0126 ; sbb a, [rx]
0127 220 EF F7 FA FF path rx, mar
0128 224 EF FB F9 7F path [mar], w
0129 228 EF FF E4 96 path alu_sbb, a
0130 22C FF FF FF FF inc pc
0131 230 CF FF FF FF reset upc
0132
0133 234 FF FF FF FF dup 3, null
0134
0135 ; sbb a, symbol
0136 240 FF FF FF FF inc pc
0137 244 EF 77 F9 FF path [pc], mar
0138 248 EF FB F9 7F path [mar], w
0139 24C EF FF E4 96 path alu_sbb, a
0140 250 FF FF FF FF inc pc
0141 254 CF FF FF FF reset upc
0142
0143 258 FF FF FF FF dup 2, null
0144
0145 ; sbb a, immediate
0146 260 FF FF FF FF inc pc
0147 264 EF 7F F9 7F path [pc], w
0148 268 EF FF E4 96 path alu_sbb, a
0149 26C FF FF FF FF inc pc
0150 270 CF FF FF FF reset upc
0151
0152 274 FF FF FF FF dup 3, null
0153
0154 ; and a, rx
0155 280 EF FF FA 7F path rx, w
0156 284 EF FF E4 BB path alu_and a
0157 288 FF FF FF FF inc pc
0158 28C CF FF FF FF reset upc
0159
0160 290 FF FF FF FF dup 4, null
0161
0162 ; and a, [rx]
0163 2A0 EF F7 FA FF path rx, mar
0164 2A4 EF FB F9 7F path [mar], w
0165 2A8 EF FF E4 BB path alu_and, a
0166 2AC FF FF FF FF inc pc
0167 2B0 CF FF FF FF reset upc
0168
0169 2B4 FF FF FF FF dup 3, null
0170
0171 ; and a, symbol
0172 2C0 FF FF FF FF inc pc
0173 2C4 EF 77 F9 FF path [pc], mar
0174 2C8 EF FB F9 7F path [mar], w
0175 2CC EF FF E4 BB path alu_and, a
0176 2D0 FF FF FF FF inc pc
0177 2D4 CF FF FF FF reset upc
0178
0179 2D8 FF FF FF FF dup 2, null
0180
0181 ; and a, immediate
0182 2E0 FF FF FF FF inc pc
0183 2E4 EF 7F F9 7F path [pc], w
0184 2E8 EF FF E4 BB path alu_and, a
0185 2EC FF FF FF FF inc pc
0186 2F0 CF FF FF FF reset upc
0187
0188 2F4 FF FF FF FF dup 3, null
0189
0190 ; or a, rx
0191 300 EF FF FA 7F path rx, w
0192 304 EF FF E4 BE path alu_or a
0193 308 FF FF FF FF inc pc
0194 30C CF FF FF FF reset upc
0195
0196 310 FF FF FF FF dup 4, null
0197
0198 ; or a, [rx]
0199 320 EF F7 FA FF path rx, mar
0200 324 EF FB F9 7F path [mar], w
0201 328 EF FF E4 BE path alu_or, a
0202 32C FF FF FF FF inc pc
0203 330 CF FF FF FF reset upc
0204
0205 334 FF FF FF FF dup 3, null
0206
0207 ; or a, symbol
0208 340 FF FF FF FF inc pc
0209 344 EF 77 F9 FF path [pc], mar
0210 348 EF FB F9 7F path [mar], w
0211 34C EF FF E4 BE path alu_or, a
0212 350 FF FF FF FF inc pc
0213 354 CF FF FF FF reset upc
0214
0215 358 FF FF FF FF dup 2, null
0216
0217 ; or a, immediate
0218 360 FF FF FF FF inc pc
0219 364 EF 7F F9 7F path [pc], w
0220 368 EF FF E4 BE path alu_or, a
0221 36C FF FF FF FF inc pc
0222 370 CF FF FF FF reset upc
0223
0224 374 FF FF FF FF dup 3, null
0225
0226 ; mov a, rx
0227 380 EF FF FA BF path rx, a
0228 384 FF FF FF FF inc pc
0229 388 CF FF FF FF reset upc
0230
0231 38C FF FF FF FF dup 5, null
0232
0233 ; mov a, [rx]
0234 3A0 EF F7 FA FF path rx, mar
0235 3A4 EF FB F9 BF path [mar], a
0236 3A8 FF FF FF FF inc pc
0237 3AC CF FF FF FF reset upc
0238
0239 3B0 FF FF FF FF dup 4, null
0240
0241 ; mov a, symbol
0242 3C0 FF FF FF FF inc pc
0243 3C4 EF 77 F9 FF path [pc], mar
0244 3C8 EF FB F9 BF path [mar], a
0245 3CC FF FF FF FF inc pc
0246 3D0 CF FF FF FF reset upc
0247
0248 3D4 FF FF FF FF dup 3, null
0249
0250 ; mov a, immediate
0251 3E0 FF FF FF FF inc pc
0252 3E4 EF 7F F9 BF path [pc], a
0253 3E8 FF FF FF FF inc pc
0254 3EC CF FF FF FF reset upc
0255
0256 3F0 FF FF FF FF dup 4, null
0257
0258 ; mov rx, a
0259 400 EF FF B4 D0 path a, rx
0260 404 FF FF FF FF inc pc
0261 408 CF FF FF FF reset upc
0262
0263 40C FF FF FF FF dup 5, null
0264
0265 ; mov [rx], a
0266 420 EF F7 FA FF path rx, mar
0267 424 ED FB F4 D0 path a, [mar]
0268 428 FF FF FF FF inc pc
0269 42C CF FF FF FF reset upc
0270
0271 430 FF FF FF FF dup 4, null
0272
0273 ; mov symbol, a
0274 440 FF FF FF FF inc pc
0275 444 EF 77 F9 FF path [pc], mar
0276 448 ED FB F4 D0 path a, [mar]
0277 44C FF FF FF FF inc pc
0278 450 CF FF FF FF reset upc
0279
0280 454 FF FF FF FF dup 3, null
0281
0282 ; mov rx, immediate
0283 460 FF FF FF FF inc pc
0284 464 EF 7F B9 FF path [pc], rx
0285 468 FF FF FF FF inc pc
0286 46C CF FF FF FF reset upc
0287
0288 470 FF FF FF FF dup 4, null
0289
0290 ; read a, symbol
0291 480 FF FF FF FF inc pc
0292 484 EF 77 F9 FF path [pc], mar
0293 488 EF 7F F9 BF path <mar>, a
0294 48C FF FF FF FF inc pc
0295 490 CF FF FF FF reset upc
0296
0297 494 FF FF FF FF dup 3, null
0298
0299 ; write symbol, a
0300 4A0 FF FF FF FF inc pc
0301 4A4 EF 77 F9 FF path [pc], mar
0302 4A8 EC FB F4 D0 path alu_aout, [mar]
0303 4AC FF FF FF FF inc pc
0304 4B0 CF FF FF FF reset upc
0305
0306 4B4 FF FF FF FF dup 3, null
0307
0308 ; lea a, symbol
0309 4C0 FF FF FF FF inc pc
0310 4C4 EF 7F F9 BF path [pc], a
0311 4C8 FF FF FF FF inc pc
0312 4CC CF FF FF FF reset upc
0313
0314 4D0 FF FF FF FF dup 4, null
0315
0316 ;mov st, immediate
0317 4E0 FF FF FF FF inc pc
0318 4E4 EF 7E F9 FF path [pc], st
0319 4E8 FF FF FF FF inc pc
0320 4EC CF FF FF FF reset upc
0321
0322 4F0 FF FF FF FF dup 4, null
0323
0324 ; jc symbol
0325 500 FF FF FF FF inc pc
0326 504 EF 6F F9 FF path [pc], pc
0327 508 CF FF FF FF reset upc
0328
0329 50C FF FF FF FF dup 5, null
0330
0331 ; jz symbol
0332 520 FF FF FF FF inc pc
0333 524 EF 6F F9 FF path [pc], pc
0334 528 CF FF FF FF reset upc
0335
0336 52C FF FF FF FF dup 5, null
0337
0338 ; 填充空白指令
0339 540 FF FF FF FF dup 8, null
0340
0341 ; jmp symbol
0342 560 FF FF FF FF inc pc
0343 564 EF 6F F9 FF path [pc], pc
0344 568 CF FF FF FF reset upc
0345
0346 56C FF FF FF FF dup 5, null
0347
0348 ; in
0349 580 EF FF F0 BF path rin, a
0350 584 FF FF FF FF inc pc
0351 588 CF FF FF FF reset upc
0352
0353 58C FF FF FF FF dup 5, null
0354
0355 ; out
0356 5A0 EE FF F4 D0 path a, rout
0357 5A4 FF FF FF FF inc pc
0358 5A8 CF FF FF FF reset upc
0359
0360 5AC FF FF FF FF dup 5, null
0361
0362 ; int immediate
0363 5C0 FF FF FF FF inc pc
0364 5C4 EB 7F F9 FF path [pc], ia
0365 5C8 EF FF 72 FF path st, cst
0366 5CC EF FF FF FF path st_minus, cst
0367 5D0 EF FE F8 FF path cst, st
0368 5D4 EF F7 F2 FF path st, mar
0369 5D8 FF FF FF FF inc pc
0370 5DC ED FB F3 FF path pc, [mar]
0371 5E0 EF F7 F1 FF path ia, mar
0372 5E4 EF EB F9 FF path [mar], pc
0373 5E8 CF FF FF FF reset upc
0374
0375 5EC FF FF FF FF dup 5, null
0376
0377 ;
0378 600 FF FF FF FF dup 16, null
0379
0380 ; ret
0381 640 EF F7 F2 FF path st, mar
0382 644 EF FF 72 FF path st, cst
0383 648 E7 FF FF FF path st_add, cst
0384 64C EF FE F8 FF path cst, st
0385 650 EF EB F9 FF path [mar], pc
0386 654 CF FF FF FF reset upc
0387
0388 658 FF FF FF FF dup 2, null
0389
0390 ; 填充空白指令
0391 660 FF FF FF FF dup 8, null
0392
0393 ; shr a
0394 680 EF FF D5 90 path alu_shr, a
0395 684 FF FF FF FF inc pc
0396 688 CF FF FF FF reset upc
0397
0398 68C FF FF FF FF dup 5, null
0399
0400 ; shl a
0401 6A0 EF FF D6 90 path alu_shl, a
0402 6A4 FF FF FF FF inc pc
0403 6A8 CF FF FF FF reset upc
0404
0405 6AC FF FF FF FF dup 5, null
0406
0407 ; rcr a
0408 6C0 EF FF E5 90 path alu_rcr, a
0409 6C4 FF FF FF FF inc pc
0410 6C8 CF FF FF FF reset upc
0411
0412 6CC FF FF FF FF dup 5, null
0413
0414 ; rcl a
0415 6E0 EF FF E6 90 path alu_rcl, a
0416 6E4 FF FF FF FF inc pc
0417 6E8 CF FF FF FF reset upc
0418 6EC FF FF FF FF dup 5, null
0419
0420 ; nop
0421 700 FF FF FF FF inc pc
0422 704 CF FF FF FF reset upc
0423
0424 708 FF FF FF FF dup 6, null
0425
0426 ; not a
0427 720 EF FF F4 B0 path alu_not, a
0428 724 FF FF FF FF inc pc
0429 728 CF FF FF FF reset upc
0430
0431 72C FF FF FF FF dup 5, null
0432
0433 ; call symbol
0434 740 FF FF FF FF inc pc
0435 744 EF 7D F9 FF path [pc], asr
0436 748 EF FF 72 FF path st, cst
0437 74C EF FF FF FF path st_minus, cst
0438 750 EF FE F8 FF path cst, st
0439 754 EF F7 F2 FF path st, mar
0440 758 FF FF FF FF inc pc
0441 75C ED FB F3 FF path pc, [mar]
0442 760 EF EF F7 FF path asr, pc
0443 764 CF FF FF FF reset upc
0444
0445 768 FF FF FF FF dup 6, null
0446
0447 ; 填充空白指令
0448 780 FF FF FF FF dup 16, null
0449
0450 ; iret
0451 7C0 EF F7 F2 FF path st, mar
0452 7C4 EF FF 72 FF path st, cst
0453 7C8 E7 FF FF FF path st_add, cst
0454 7CC EF FE F8 FF path cst, st
0455 7D0 EF EB F9 FF path [mar], pc
0456 7D4 CF FF FF FF reset upc
0457
0458 7D8 FF FF FF FF dup 2, null
0459
0460
0461
; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。
; 所有指令的第一条微指令地址必须是8的倍数
; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令
path [pc], ir
; 填充空白指令 01-1f
dup 31, null
; add a, rx
path rx, w
path alu_add, a
inc pc
reset upc
dup 4, null
; add a, [rx]
path rx, mar
path [mar], w
path alu_add, a
inc pc
reset upc
dup 3, null
; add a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_add, a
inc pc
reset upc
dup 2, null
; add a, immediate
inc pc
path [pc], w
path alu_add, a
inc pc
reset upc
dup 3, null
; adc a, rx
path rx, w
path alu_adc, a
inc pc
reset upc
dup 4, null
; adc a, [rx]
path rx, mar
path [mar], w
path alu_adc, a
inc pc
reset upc
dup 3, null
; adc a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_adc, a
inc pc
reset upc
dup 2, null
; adc a, immediate
inc pc
path [pc], w
path alu_adc, a
inc pc
reset upc
dup 3, null
; sub a, rx
path rx, w
path alu_sub, a
inc pc
reset upc
dup 4, null
; sub a, [rx]
path rx, mar
path [mar], w
path alu_sub, a
inc pc
reset upc
dup 3, null
; sub a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_sub, a
inc pc
reset upc
dup 2, null
; sub a, immediate
inc pc
path [pc], w
path alu_sub, a
inc pc
reset upc
dup 3, null
; sbb a, rx
path rx, w
path alu_sbb, a
inc pc
reset upc
dup 4, null
; sbb a, [rx]
path rx, mar
path [mar], w
path alu_sbb, a
inc pc
reset upc
dup 3, null
; sbb a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_sbb, a
inc pc
reset upc
dup 2, null
; sbb a, immediate
inc pc
path [pc], w
path alu_sbb, a
inc pc
reset upc
dup 3, null
; and a, rx
path rx, w
path alu_and a
inc pc
reset upc
dup 4, null
; and a, [rx]
path rx, mar
path [mar], w
path alu_and, a
inc pc
reset upc
dup 3, null
; and a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_and, a
inc pc
reset upc
dup 2, null
; and a, immediate
inc pc
path [pc], w
path alu_and, a
inc pc
reset upc
dup 3, null
; or a, rx
path rx, w
path alu_or a
inc pc
reset upc
dup 4, null
; or a, [rx]
path rx, mar
path [mar], w
path alu_or, a
inc pc
reset upc
dup 3, null
; or a, symbol
inc pc
path [pc], mar
path [mar], w
path alu_or, a
inc pc
reset upc
dup 2, null
; or a, immediate
inc pc
path [pc], w
path alu_or, a
inc pc
reset upc
dup 3, null
; mov a, rx
path rx, a
inc pc
reset upc
dup 5, null
; mov a, [rx]
path rx, mar
path [mar], a
inc pc
reset upc
dup 4, null
; mov a, symbol
inc pc
path [pc], mar
path [mar], a
inc pc
reset upc
dup 3, null
; mov a, immediate
inc pc
path [pc], a
inc pc
reset upc
dup 4, null
; mov rx, a
path a, rx
inc pc
reset upc
dup 5, null
; mov [rx], a
path rx, mar
path a, [mar]
inc pc
reset upc
dup 4, null
; mov symbol, a
inc pc
path [pc], mar
path a, [mar]
inc pc
reset upc
dup 3, null
; mov rx, immediate
inc pc
path [pc], rx
inc pc
reset upc
dup 4, null
; read a, symbol
inc pc
path [pc], mar
path <mar>, a
inc pc
reset upc
dup 3, null
; write symbol, a
inc pc
path [pc], mar
path alu_aout, [mar]
inc pc
reset upc
dup 3, null
; lea a, symbol
inc pc
path [pc], a
inc pc
reset upc
dup 4, null
;mov st, immediate
inc pc
path [pc], st
inc pc
reset upc
dup 4, null
; jc symbol
inc pc
path [pc], pc
reset upc
dup 5, null
; jz symbol
inc pc
path [pc], pc
reset upc
dup 5, null
; 填充空白指令
dup 8, null
; jmp symbol
inc pc
path [pc], pc
reset upc
dup 5, null
; in
path rin, a
inc pc
reset upc
dup 5, null
; out
path a, rout
inc pc
reset upc
dup 5, null
; int immediate
inc pc
path [pc], ia
path st, cst
path st_minus, cst
path cst, st
path st, mar
inc pc
path pc, [mar]
path ia, mar
path [mar], pc
reset upc
dup 5, null
;
dup 16, null
; ret
path st, mar
path st, cst
path st_add, cst
path cst, st
path [mar], pc
reset upc
dup 2, null
; 填充空白指令
dup 8, null
; shr a
path alu_shr, a
inc pc
reset upc
dup 5, null
; shl a
path alu_shl, a
inc pc
reset upc
dup 5, null
; rcr a
path alu_rcr, a
inc pc
reset upc
dup 5, null
; rcl a
path alu_rcl, a
inc pc
reset upc
dup 5, null
; nop
inc pc
reset upc
dup 6, null
; not a
path alu_not, a
inc pc
reset upc
dup 5, null
; call symbol
inc pc
path [pc], asr
path st, cst
path st_minus, cst
path cst, st
path st, mar
inc pc
path pc, [mar]
path asr, pc
reset upc
dup 6, null
; 填充空白指令
dup 16, null
; iret
path st, mar
path st, cst
path st_add, cst
path cst, st
path [mar], pc
reset upc
dup 2, null
添加文件
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="4111" version="1.1" width="3119" xmlns="http://www.w3.org/2000/svg">
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="970" y2="970"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="970">^A0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="970">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1000" y2="1000"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1000">^A1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1000">23</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1030" y2="1030"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1030">^A2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1030">21</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1060" y2="1060"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1060">^A3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1060">19</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1120" y2="1120"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1120">^B0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="1118">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1150" y2="1150"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1150">^B1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1149">22</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1180" y2="1180"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1180">^B2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1179">20</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1210" y2="1210"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1210">^B3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1209">18</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1280" y2="1280"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1280">S0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1278">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1310" y2="1310"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1310">S1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1309">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1340" y2="1340"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1340">S2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1339">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1370" y2="1370"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1370">S3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1369">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1430" y2="1430"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1430">CN</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1431">7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1460" y2="1460"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1572" y="1460">M</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1461">8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1240" y2="1240"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1240">^G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1240">17</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1210" y2="1210"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1210">^P</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1210">15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="1150" y2="1150"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1150">AEQB</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1150">14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="1120" y2="1120"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1120">CN4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1120">16</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1060" y2="1060"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1060">^F3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1060">13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1030" y2="1030"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1030">^F2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1030">11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1000" y2="1000"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1000">^F1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1000">10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="970" y2="970"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="970">^F0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1717" y="969">9</text>
<circle cx="1534" cy="1210" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1030" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1120" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1060" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="999" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="1180" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="970" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1150" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="971" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="1001" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="1030" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1060" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1210" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1241" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="550" stroke="#000000" stroke-width="5" width="150" x="1539" y="930"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1606" y="910">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1549" y="1526">74LS181</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1670" y2="1670"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1670">^A0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="1670">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1700" y2="1700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1700">^A1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1700">23</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1730" y2="1730"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1730">^A2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1730">21</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1760" y2="1760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1760">^A3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="1760">19</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1820" y2="1820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1820">^B0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="1818">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1850" y2="1850"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1850">^B1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1849">22</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1880" y2="1880"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1880">^B2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1879">20</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="1910" y2="1910"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="1910">^B3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="1909">18</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="1980" y2="1980"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="1980">S0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="1978">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2010" y2="2010"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2010">S1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2009">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2040" y2="2040"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2040">S2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2039">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2070" y2="2070"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2070">S3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2069">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2130" y2="2130"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2130">CN</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2131">7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2160" y2="2160"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1572" y="2160">M</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2161">8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1940" y2="1940"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1940">^G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1940">17</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1910" y2="1910"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1910">^P</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1910">15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="1850" y2="1850"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1850">AEQB</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1850">14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="1820" y2="1820"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1820">CN4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1820">16</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1760" y2="1760"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1760">^F3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1760">13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1730" y2="1730"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1730">^F2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1730">11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1700" y2="1700"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1700">^F1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="1700">10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="1670" y2="1670"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="1670">^F0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1717" y="1669">9</text>
<circle cx="1534" cy="1910" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1730" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1820" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1760" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1699" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="1880" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="1670" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="1850" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1671" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="1701" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="1730" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1760" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1910" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="1941" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="550" stroke="#000000" stroke-width="5" width="150" x="1539" y="1630"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1606" y="1610">U2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1549" y="2226">74LS181</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2410" y2="2410"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2410">^A0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="2410">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2440" y2="2440"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2440">^A1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="2440">23</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2470" y2="2470"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2470">^A2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="2470">21</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2500" y2="2500"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2500">^A3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="2500">19</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2560" y2="2560"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2560">^B0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="2558">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2590" y2="2590"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2590">^B1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="2589">22</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2620" y2="2620"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2620">^B2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="2619">20</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="2650" y2="2650"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="2650">^B3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="2649">18</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2720" y2="2720"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2720">S0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2718">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2750" y2="2750"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2750">S1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2749">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2780" y2="2780"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2780">S2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2779">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2810" y2="2810"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2810">S3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2809">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2870" y2="2870"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="2870">CN</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2871">7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="2900" y2="2900"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1572" y="2900">M</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="2901">8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2680" y2="2680"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2680">^G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2680">17</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2650" y2="2650"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2650">^P</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2650">15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="2590" y2="2590"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2590">AEQB</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2590">14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="2560" y2="2560"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2560">CN4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2560">16</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2500" y2="2500"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2500">^F3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2500">13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2470" y2="2470"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2470">^F2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2470">11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2440" y2="2440"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2440">^F1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="2440">10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="2410" y2="2410"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="2410">^F0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1717" y="2409">9</text>
<circle cx="1534" cy="2650" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="2470" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="2560" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="2500" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="2439" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="2620" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="2410" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="2590" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="2411" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="2441" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="2470" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="2500" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="2650" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="2681" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="550" stroke="#000000" stroke-width="5" width="150" x="1539" y="2370"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1606" y="2350">U3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1549" y="2966">74LS181</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3200" y2="3200"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3200">^A0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="3200">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3230" y2="3230"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3230">^A1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="3230">23</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3260" y2="3260"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3260">^A2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="3260">21</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3290" y2="3290"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3290">^A3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1521" y="3290">19</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3350" y2="3350"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3350">^B0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1508" y="3348">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3380" y2="3380"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3380">^B1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="3379">22</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3410" y2="3410"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3410">^B2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="3409">20</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1529" x2="1489" y1="3440" y2="3440"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1592" y="3440">^B3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1522" y="3439">18</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3510" y2="3510"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="3510">S0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3508">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3540" y2="3540"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="3540">S1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3539">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3570" y2="3570"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="3570">S2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3569">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3600" y2="3600"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="3600">S3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3599">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3660" y2="3660"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1582" y="3660">CN</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3661">7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1539" x2="1489" y1="3690" y2="3690"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1572" y="3690">M</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1509" y="3691">8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3470" y2="3470"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3470">^G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3470">17</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3440" y2="3440"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3440">^P</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3440">15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="3380" y2="3380"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3380">AEQB</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3380">14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1689" x2="1739" y1="3350" y2="3350"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3350">CN4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3350">16</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3290" y2="3290"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3290">^F3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3290">13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3260" y2="3260"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3260">^F2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3260">11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3230" y2="3230"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3230">^F1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1704" y="3230">10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1699" x2="1739" y1="3200" y2="3200"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="1656" y="3200">^F0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1717" y="3199">9</text>
<circle cx="1534" cy="3440" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="3260" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="3350" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="3290" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="3229" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="3410" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1534" cy="3200" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1533" cy="3380" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="3201" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="3231" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1694" cy="3260" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="3290" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="3440" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="1693" cy="3471" fill="#ffffff" fill-opacity="0.5" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="550" stroke="#000000" stroke-width="5" width="150" x="1539" y="3160"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1606" y="3140">U4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1549" y="3756">74LS181</text>
<polyline fill="none" points="1489 970, 1389 970, 1389 930, 1389 580, 439 580" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1000, 1369 1000, 1369 930, 1369 600, 439 600" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1030, 1349 1030, 1349 930, 1349 620, 439 620" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1060, 1329 1060, 1329 930, 1329 640, 439 640" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1670, 1309 1670, 1309 930, 1309 660, 439 660" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1700, 1289 1700, 1289 930, 1289 680, 439 680" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1730, 1269 1730, 1269 930, 1269 700, 439 700" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1760, 1249 1760, 1249 930, 1249 720, 439 720" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2410, 1229 2410, 1229 930, 1229 740, 439 740" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2440, 1209 2440, 1209 930, 1209 760, 439 760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2470, 1189 2470, 1189 930, 1189 780, 439 780" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2500, 1169 2500, 1169 930, 1169 800, 439 800" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3200, 1149 3200, 1149 930, 1149 820, 439 820" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3230, 1129 3230, 1129 930, 1129 840, 439 840" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3260, 1109 3260, 1109 930, 1109 860, 439 860" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3290, 1089 3290, 1089 930, 1089 880, 439 880" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3440, 1149 3440, 1149 3780, 1149 4080, 439 4080" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3410, 1129 3410, 1129 3780, 1129 4060, 439 4060" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3380, 1109 3380, 1109 3780, 1109 4040, 439 4040" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3350, 1089 3350, 1089 3780, 1089 4020, 439 4020" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2650, 1069 2650, 1069 3780, 1069 4000, 439 4000" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2620, 1049 2620, 1049 3780, 1049 3980, 439 3980" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2590, 1029 2590, 1029 3780, 1029 3960, 439 3960" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2560, 1009 2560, 1009 3780, 1009 3940, 439 3940" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1910, 989 1910, 989 3780, 989 3920, 439 3920" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1880, 969 1880, 969 3780, 969 3900, 439 3900" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1850, 949 1850, 949 3780, 949 3880, 439 3880" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1820, 929 1820, 929 3780, 929 3860, 439 3860" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1210, 909 1210, 909 3780, 909 3840, 439 3840" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1150, 869 1150, 869 3780, 869 3800, 439 3800" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1120, 849 1120, 849 3780, 439 3780" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="930" y2="880"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="910" y2="860"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="890" y2="840"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="870" y2="820"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="850" y2="800"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="830" y2="780"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="810" y2="760"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="790" y2="740"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="770" y2="720"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="750" y2="700"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="730" y2="680"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="710" y2="660"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="690" y2="640"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="670" y2="620"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="650" y2="600"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="389" x2="439" y1="630" y2="580"/>
<polygon fill="#ffff80" points="39 580, 39 555, 214 555, 239 580, 214 605, 39 605, 39 580" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="39" y="580">uPC[15..0]</text>
<polyline fill="none" points="1739 1120, 1789 1120, 1789 1570, 1439 1570, 1439 2130, 1489 2130" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1820, 1789 1820, 1789 2300, 1439 2300, 1439 2870, 1489 2870" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 2560, 1789 2560, 1789 3050, 1439 3050, 1439 3660, 1489 3660" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="109" x2="109" y1="1220" y2="1270"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="109 1220, 159 1170, 59 1170, 109 1220" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Times New Roman" font-size="30" font-weight="700" text-anchor="start" x="99" y="1210">1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="99" y="1140">U5</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="19" y="1170">CONSTANT1</text>
<polyline fill="none" points="1489 1280, 1399 1280, 1399 3600, 1489 3600" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 3510, 1399 3510" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2810, 1399 2810" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2720, 1399 2720" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 2070, 1399 2070" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1980, 1399 1980" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1370, 1399 1370" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1760, 2039 1760, 2039 2180, 2639 2180" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1730, 2059 1730, 2059 2160, 2639 2160" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1700, 2079 1700, 2079 2140, 2639 2140" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1670, 2099 1670, 2099 2120, 2629 2120, 2639 2120" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1060, 2119 1060, 2119 2100, 2639 2100" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1030, 2139 1030, 2139 2080, 2639 2080" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 1000, 2159 1000, 2159 2060, 2639 2060" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 970, 2179 970, 2179 2040, 2639 2040" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 2410, 2039 2410, 2039 2200, 2639 2200" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 2440, 2059 2440, 2059 2220, 2639 2220" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 2470, 2079 2470, 2079 2240, 2639 2240" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 2500, 2099 2500, 2099 2260, 2639 2260" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 3200, 2119 3200, 2119 2280, 2639 2280" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 3230, 2139 3230, 2139 2300, 2639 2300" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 3260, 2159 3260, 2159 2320, 2639 2320" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1739 3290, 2179 3290, 2179 2340, 2639 2340" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2040" y2="1990"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2060" y2="2010"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2080" y2="2030"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2100" y2="2050"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2120" y2="2070"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2140" y2="2090"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2160" y2="2110"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2180" y2="2130"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2200" y2="2150"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2220" y2="2170"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2240" y2="2190"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2260" y2="2210"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2280" y2="2230"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2300" y2="2250"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2320" y2="2270"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="2639" x2="2689" y1="2340" y2="2290"/>
<polyline fill="none" points="239 580, 389 580, 389 930" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="2789 1930, 2689 1930, 2689 2290" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="580">uPC0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="600">uPC1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="620">uPC2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="640">uPC3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="660">uPC4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="680">uPC5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="700">uPC6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="720">uPC7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="740">uPC8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="760">uPC9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="780">uPC10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="800">uPC11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="820">uPC12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="840">uPC13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="860">uPC14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="709" y="880">uPC15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3780">B0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3800">B1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3820">B2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3840">B3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3860">B4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3880">B5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3900">B6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3920">B7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3940">B8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3960">B9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="3980">B10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="4000">B11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="4020">B12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="4040">B13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="4060">B14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="609" y="4080">B15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2040">uPC_Next0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2060">uPC_Next1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2080">uPC_Next2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2100">uPC_Next3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2120">uPC_Next4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2140">uPC_Next5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2160">uPC_Next6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2180">uPC_Next7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2200">uPC_Next8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2220">uPC_Next9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2240">uPC_Next10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2260">uPC_Next11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2280">uPC_Next12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2300">uPC_Next13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2320">uPC_Next14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="2309" y="2340">uPC_Next15</text>
<polygon fill="#ffff80" points="2789 1930, 2789 1905, 3014 1905, 3039 1930, 3014 1955, 2789 1955, 2789 1930" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2789" y="1930">uPC_Next[15..0]</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="90" font-weight="400" text-anchor="start" x="69" y="3980">加数4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="250" font-weight="700" text-anchor="start" x="399" y="360">uPC_NEXT模块</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="90" font-weight="400" text-anchor="start" x="1769" y="770">uPC+4指向下一条微指令</text>
<polyline fill="none" points="1489 1430, 1399 1430" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1399 1280, 609 1280, 109 1280, 109 1270" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1489 1180, 889 1180, 889 3820, 439 3820, 159 3820, 159 3760" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="159" x2="159" y1="3710" y2="3760"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="159 3710, 209 3660, 109 3660, 159 3710" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Times New Roman" font-size="30" font-weight="700" text-anchor="start" x="149" y="3700">1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="149" y="3630">U6</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="69" y="3660">CONSTANT1</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="35" font-weight="400" text-anchor="start" x="149" y="1250">运算方式控制信号:无进位加法</text>
<circle cx="1399" cy="1280" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="1430" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="1370" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="1980" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="2070" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="2720" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="2810" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1399" cy="3510" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论