RETROF-16 部品実装（その１）

[本記事に対応する最新回路図はこちらです](https://qiita.com/RETROF/items/08aec337163b24c49cff)

#使用したプリント基板

PCBのサイズは222×180mmです。KiCadで作成したデータを深センの基板製作メーカーに送付すると6日で届きました。費用は5枚で送料込みで8600円ほどです。
![PCB_MASK.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/b40100cf-0480-6f35-5852-8f8acdb9f109.jpeg)
今回の基板は全くの新規作成ではなく前作のマイナーチェンジとなります。一部回路を改良した部分もありますが、9割近くが前作と同じ回路のため「裏面がジャンパー線だらけの前作」のリファイン版と言った方が良いかもしれません。前作との区別を明確にするために基板の色は黒にしてみました。

【画像右：前作（動作確認済）】
【画像左：今回作り直した基板】
![DSC03090.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/82a54e7c-090f-8eef-d28b-42ca434fdc6e.jpeg)
#ゴム足と各種ソケットの装着
![DSC03095.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/bb9b4534-6573-b14c-0d81-102c1ef6f5b3.jpeg)
ゴム足と、ネジ止めが必要な部品を実装します。
ゴム足は作業机の天板に傷をつけない様にするという理由もありますが、それ以上に作業机の上の金属片等により（基板裏面の）短絡を防ぐためです。机にコーヒーを溢した時の被害を最小限に抑える目的もあります。
ネジ止めを要する部品を先に実装するのは、ネジ穴の位置がズレていないかを確認し、万一穴ズレ等の問題があった場合にドリルなどで修正可能かを早めにジャッジするためです。幸い今回はネジ穴に関しては大きなミスはありませんでした。

この後、部品を順次ハンダ付けしていくのですが、全部品を全て一気に実装してしまうと、万一不具合があった時にその原因箇所の特定が著しく困難になります。どういう順序で実装していくかを考えながら作業を薦めます。

#実行/停止の切替スイッチと入力ポートの実装
![R0010053 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/30c08cd2-6bd1-d665-30fc-fbf4c69dde8b.jpeg)

まず実行状態と停止状態を切替える2つの押しボタンスイッチ**SW17**・**SW20**と、**74LS279**、及び現在どちらの状態になっているかを区別するためのLED、**LED2**・**LED4**　を実装し、実行状態と停止状態の切替に問題が無いことを確認します。
　　　　　　
次に出力ポート**74ALS573**（<font color="Red">基板のシルクは誤って**74ALS564**となっている</font>）とその出力に接続される32個のLED（**LED21～52**）及び、入力ポート**74LS257**と**D1**・**D2**、16個のトグルスイッチ（**SW1～16**）を実装します。

更に**74LS00**を実装し、74LS139のICソケットのみを装着しブレッドボード用のワイヤ（画像の黄色の線）で12番ピンを強制的にGNDに接続します。これによりデータバスにはトグルスイッチの状態（0x000～0xffff）が常に放出されますので、トグルスイッチの状態を色々と変え、下段のLEDにその値が表示されることを確認します。

#ワーキングレジスタの実装
![R0010072.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/71be33e7-7ac4-e444-daec-fe18cb5d4d49.jpeg)

ワーキングレジスタ（**WR**）は、様々な役割を兼任する内部レジスタですが、ここではアドレスバスに放出する値を保持するレジスタとして扱います。

残りの押しボタンスイッチと、**74LS00**、**74LS569**、ダイオードマトリクスの**F43**(及び、関連するプルアップ抵抗やバイパスコンデンサ)を実装します。これによりプログラムの実行停止中は、任意の値をアドレスバスに放出できるようになります。この試験は基板上のスイッチで行います。（各スイッチの役割は本記事の末尾を参照）

#主メモリの実装

![R0010076.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/1f8ec87f-5c68-e88f-d199-72dcc331c893.jpeg)

主メモリは28ピン32kBのRAMを4つ使用します。このうち0x8000～0xffff番地は28ピン32kBのROMに置き換える事も出来ます。ROMとRAMはピンコンパチではないので、ROMとRAMを切り替える**SW24**の実装も必要です。
他には、**74LS139**、**74LS04**、ダイオードマトリクスの**F40～F42**(及び、関連するプルアップ抵抗やバイパスコンデンサ)を実装します。これにより以下に示すスイッチの操作が可能となります。但し当然の事ながらプログラムの実行はまだできません。
なおROMやRAMの換装は比較的頻繁に行う（OSの入替え等の為）ので、主メモリのICソケットはゼロプレッシャー型を用いました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/01f8caf9-bd1c-dac4-8770-c0d2753a606b.jpeg" width=75%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535901/ab7c983a-462c-69e1-bdac-a7d622148fed.jpeg" width=75%>


| 押し釦スイッチ|動作|
|:-----------|:------------|
| RUN/STEP   | プログラムの実行を開始（または継続）する。<br>STEP動作時（基板上の別のSWで指定）は、<br>CPUへのクロックを1発ずつ発生させる。|
| PSET       | トグルSWが示す値を実行開始番地とする。<br>（見かけ上は何も変わらない点に留意）|
| WSET       | 押しながらUP押下でトグルSWが示す値を、<br>アドレスバスにセットする。|
| MWR       | トグルSWが示す値を主メモリの<br>アドレスバスが保持する番地に書込む。|
| STOP      | プログラムの実行の強制終了。|
|UP|アドレスバスの値をインクリメント。<br>STOPを押しながらの押下でデクリメント。