「CPUの創りかた」の回路シミュレーション(4) --- p206, 211 加算器とフラグ

ブラウザで動作してインストール不要の下記の
https://www.falstad.com/circuit/circuitjs.html
回路シミュレータで、「CPUの創りかた」で紹介されていた回路の動作を確認してみました。

今回は p206, 211 の 「加算器とフラグ」を実際の回路に追加しました。
![[cpu206,211]加算器とフラグ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3549839/ee90b661-9a7f-0fa0-c5e5-b0dc2777f7f3.png)

◆回路シミュレータの簡単な使用法
- マウスホイールで回路図を拡大縮小できます。
- Altキー + ドラッグで回路図全体を移動できます。
- 回路図の緑色の部分は電圧が+Vcc ( 今回は 5V )、灰色の部分は GND 電位であることを示します。
- LOAD0 ～ LOAD3、RESET、SELECT A、SELECT B のデジタル入力をクリックするたびに H/L が切り替わります。
- 加算器の A0 ～ A1 のデジタル入力をクリックするたびに、1/0 が切り替わります。

◆回路の動作確認

以下の 3 つの命令の実行例を示します。

最初に右側サイドパネルの 「Reset」ボタンをクリックします。
1. MOV A, Im
① SELECT A/B のデジタル入力をクリックして、SELECT A = H, SELECT B = H に設定する。
② 加算器の A0 ～ A3 のデジタル入力クリックして、1001 ( Im = 9 ) に設定する。
③ LOAD0 のデジタル入力をクリックして L に切り替え、I0 ～ I3 が Q0 ～ Q3 にコピーされたら、もう一度クリックして H に切り替える。
2. ADD A, Im
① SELECT A/B のデジタル入力をクリックして、SELECT A = L, SELECT B = L に設定する。
② 加算器の A0 ～　A3 のデジタル入力クリックして、0110 ( Im = 6 ) に設定する。加算器の出力には 1111 (= 9 + 6 ) が出力される。
③ LOAD0 のデジタル入力をクリックして L に切り替え、I0 ～ I3 が Q0 ～ Q3 にコピーされたら、もう一度クリックして H に切り替える。
3. MOV A, B
① SELECT A/B のデジタル入力をクリックして、SELECT A = H, SELECT B = L に設定する。
② 加算器の A0 ～　A3 のデジタル入力クリックして、0000 ( Im = 9 ) に設定する。
③ LOAD0 のデジタル入力をクリックして L に切り替え、I0 ～ I3 が Q0 ～ Q3 にコピーされたら、もう一度クリックして H に切り替える。

2 項の ② で A0 ～ A3 を 1110 とすると桁上がりが発生して、キャリーフラグが 1 になることが分かります。

---

シミュレーションを実行するには下記の回路ファイルをコピーして、シミュレータの File → Import From Text... で開くパネルに貼り付けてください。
```
$ 1 0.000005 10.20027730826997 50 5 50 5e-11
421 48 720 96 720 2048 4 0 0 0 0 0
421 48 432 96 432 2048 4 0 0 0 0 0
421 48 144 96 144 2048 4 0 0 0 0 0
421 48 -144 96 -144 2048 4 0 0 0 0 0
w 48 48 32 48 0
w 32 48 32 336 0
w 32 336 32 624 0
w 32 624 32 912 0
w 32 912 48 912 0
w 32 624 48 624 0
w 32 336 48 336 0
w 176 -176 144 -176 0
w 16 -112 16 176 0
w 16 176 48 176 0
w 16 176 16 464 0
w 16 464 48 464 0
w 16 464 16 752 0
w 16 752 48 752 0
w 48 -144 48 -176 0
w 48 -176 144 -176 0
w 144 -176 144 -144 0
w 16 -112 48 -112 0
g 176 -176 176 -160 0 0
g 176 112 176 128 0 0
w 144 112 144 144 0
w 48 112 144 112 0
w 48 144 48 112 0
w 176 112 144 112 0
g 176 400 176 416 0 0
w 144 400 144 432 0
w 48 400 144 400 0
w 48 432 48 400 0
w 176 400 144 400 0
g 176 688 176 704 0 0
w 144 688 144 720 0
w 48 688 144 688 0
w 48 720 48 688 0
w 176 688 144 688 0
w 144 -112 192 -112 0
w 192 -112 192 -192 0
w 192 -192 -128 -192 0
w 192 96 -128 96 0
w 192 176 192 96 0
w 192 384 -128 384 0
w 192 464 192 384 0
w 192 672 -128 672 0
w 192 752 192 672 0
w 144 176 192 176 0
w 144 464 192 464 0
w 144 752 192 752 0
L -128 672 -176 672 0 1 false 5 0
L -128 384 -176 384 0 1 false 5 0
L -128 96 -176 96 0 1 false 5 0
L -128 -192 -176 -192 0 1 false 5 0
x -165 -199 -112 -196 6 16 LOAD0
x -161 88 -108 91 6 16 LOAD1
x -166 376 -113 379 6 16 LOAD2
x -164 665 -111 668 6 16 LOAD3
w 48 16 -16 16 0
w 48 -16 -32 -16 0
w 48 -48 -48 -48 0
w 48 -80 -64 -80 0
w 48 208 -64 208 0
w 48 240 -48 240 0
w 48 272 -32 272 0
w 48 304 -16 304 0
w 48 496 -64 496 0
w 48 528 -48 528 0
w 48 560 -32 560 0
w 48 592 -16 592 0
w 48 784 -64 784 0
w 48 816 -48 816 0
w 48 848 -32 848 0
w 48 880 -16 880 0
w -16 16 -16 304 0
w -16 304 -16 592 0
w -16 592 -16 880 0
w -32 -16 -32 272 0
w -32 272 -32 560 0
w -32 560 -32 848 0
w -48 -48 -48 240 0
w -48 240 -48 528 0
w -48 528 -48 816 0
w -64 -80 -64 208 0
w -64 208 -64 496 0
w -64 496 -64 784 0
w -16 16 0 -752 0
w -32 -16 -16 -768 0
w -48 -48 -32 -784 0
w -64 -80 -48 -800 0
w 144 -80 224 -80 0
w 144 -48 240 -48 0
w 144 -16 256 -16 0
w 144 16 544 16 0
w 144 304 336 304 0
w 144 272 320 272 0
w 144 240 304 240 0
w 144 208 288 208 0
w 144 592 400 592 0
w 144 560 384 560 0
w 144 528 368 528 0
w 144 496 352 496 0
184 544 -688 576 -688 0 2
184 544 -464 576 -464 0 2
184 544 -224 576 -224 0 2
184 544 16 576 16 0 2
w 224 -688 224 -80 0
w 608 -528 512 -528 0
w 640 -528 640 -512 0
w 640 -512 496 -512 0
w 640 -288 496 -288 0
w 608 -304 512 -304 0
w 640 -48 496 -48 0
w 608 -64 512 -64 0
w 640 192 496 192 0
w 608 176 512 176 0
w 640 -304 640 -288 0
w 640 -64 640 -48 0
w 640 176 640 192 0
w 512 -528 512 -304 0
w 512 -304 512 -64 0
w 512 -64 512 176 0
w 496 -512 496 -288 0
w 496 -288 496 -48 0
w 496 -48 496 192 0
w 496 192 496 976 0
w 512 944 -128 944 0
w 512 176 512 944 0
w 496 976 -128 976 0
L -128 944 -176 944 0 0 false 5 0
L -128 976 -176 976 0 0 false 5 0
x -166 936 -90 939 4 16 SELECT\sA
x -167 969 -92 972 4 16 SELECT\sB
w 544 -688 224 -688 0
w 288 208 288 -656 0
w 288 -656 544 -656 0
w 352 496 352 -624 0
w 352 -624 544 -624 0
w 416 -592 544 -592 0
w 544 -464 240 -464 0
w 240 -464 240 -48 0
w 304 240 304 -432 0
w 544 -432 304 -432 0
w 368 528 368 -400 0
w 544 -400 368 -400 0
w 416 -368 544 -368 0
w 256 -16 256 -224 0
w 256 -224 544 -224 0
w 320 272 320 -192 0
w 320 -192 544 -192 0
w 384 560 384 -160 0
w 384 -160 544 -160 0
w 416 -128 544 -128 0
w 336 304 336 48 0
w 336 48 544 48 0
w 400 592 400 80 0
w 400 80 544 80 0
w 416 112 544 112 0
w 0 -752 976 -752 0
w -16 -768 960 -768 0
w -32 -784 944 -784 0
w -48 -800 928 -800 0
x 162 54 236 57 4 16 Aレジスタ
x 158 339 232 342 4 16 Bレジスタ
x 158 631 232 634 4 16 Cレジスタ
x 160 917 235 920 4 16 Dレジスタ
196 816 -720 944 -720 2050 4
L 784 -416 784 -384 2 0 false 5 0
w 672 -688 816 -688 0
w 688 -464 688 -656 0
w 688 -656 816 -656 0
w 672 -224 704 -224 0
w 704 -224 704 -624 0
w 704 -624 816 -624 0
w 672 16 720 16 0
w 720 16 720 -592 0
w 720 -592 816 -592 0
w 672 -464 688 -464 0
w 816 -560 752 -560 0
w 752 -560 752 -416 0
w 816 -528 768 -528 0
w 768 -528 768 -416 0
w 816 -496 784 -496 0
w 784 -496 784 -416 0
w 816 -464 800 -464 0
w 800 -464 800 -416 0
g 816 -720 816 -704 0 0
L 752 -416 752 -384 2 0 false 5 0
L 768 -416 768 -384 2 0 false 5 0
L 800 -416 800 -384 2 0 false 5 0
w 912 -624 928 -624 0
w 928 -624 928 -800 0
w 912 -592 944 -592 0
w 944 -592 944 -784 0
w 912 -560 960 -560 0
w 960 -560 960 -768 0
w 912 -528 976 -528 0
w 976 -528 976 -752 0
155 1024 -464 1056 -464 10 0
w -128 -864 48 -864 0
R -128 -864 -176 -864 1 2 100 2.5 2.5 0 0.5
x -158 -840 -108 -837 6 16 RESET
L -128 -832 -176 -832 0 1 false 5 0
w 32 -832 -128 -832 0
w 32 48 48 -864 0
w 16 -112 32 -832 0
w 416 -592 416 -368 0
w 416 -368 416 -128 0
w 416 -128 416 112 0
g 416 112 416 128 0 0
w 912 -464 1024 -464 0
w 1024 -432 1008 -432 0
w 1008 -432 1008 -864 0
w 1024 -400 992 -400 0
w 992 -400 992 -832 0
w 48 -864 1008 -864 0
w 32 -832 992 -832 0
M 1120 -464 1168 -464 2 2.5
x 1069 -490 1181 -487 4 16 キャリーフラグ
x 829 -419 883 -416 4 18 加算器
```