自作”CPU”キット「TTM8」を動かしてみた
本体が完成してから時間があいてしまいましたが、今回は自作CPU「TTM8」のサンプルプログラムを動かしてみます。 流れるLEDが作れるようです。
プログラム書き込み手順
大まかな流れは以下の通りです。
- CPU停止
- プログラム書き込み
- 書き込んだプログラムのチェック
- 実行
順番にやってみます。
CPU停止
CPU停止はプログラムボードにある2つのスイッチで制御します。
- START/STOPトグルスイッチ
CPUの実行・停止を切り替える - RAMのRead・Write切り替えスイッチ
RAM内容を参照するか書き込むかを切り替える
このトグルスイッチで3パターンの状態を作れます。
各状態とスイッチの操作はそれぞれ以下のようになります。
状態 | START/STOPスイッチ | WRITE/READスイッチ |
---|---|---|
1. CPU実行 | START | どちらでもOK |
2. CPU停止(RAMの内容参照) | STOP | READ |
3. CPU停止(RAMへ書込み) | STOP | WRITE |
プログラム書き込み時は3の状態に設定します。
プログラム書き込み
こちらのプログラムボードを使って書き込みます。写真はケーブルがつながってません。。
プログラムはアセンブラ風で1命令のフォーマットは「オペコード、値1、値2」 です。
サンプルプログラムで最初に書き込む命令は「MVID 1 -」で、意味はDレジスタに「1」を書き込む命令です。 MIVDは値2がない命令で、ない場合は0を書き込めばよいようです。
以下はサンプルの先頭3命令です。
命令には番号が割り当てられてるのでその番号を書き込みます。
命令は全16種類でそれぞれ0からFまで割り当てられてます。
マニュアルによるとMVIDは「2」なので「2 1 0」を書き込みます。
書き込む順序はフォーマットとは逆で「値2、値1、オペコード」の順になります。 なので「0 1 2」ように書き込みます。1アドレスには1つの値しか書き込めません。1命令で3アドレス使用しますので2つ目の命令は3番地から書き込みます。
上の表のIMは即値 (Immediate)、DRはDレジスタです。 TTM8ではC3番地を参照するとDレジスタの値が取得できます。
ADD命令は加算、JNC命令はキャリーフラグがたってなければ値1のアドレスに移動する処理です。表のプログラムだとADD命令に戻ります。
書込み方法
トグルスイッチが「RAMへ書込み」状態になってることを確認します。
7セグは左2桁がアドレス、右2桁がデータです。
写真は4桁すべて0ですが、前回組み立て時の問題で一部表示されていません。
入力するのはアドレスとデータの値です。それぞれ00からFFまでで8ビットの16進数を入力します。
アドレス入力
まずアドレスを入力します。数値キーを押すと7セグ右側のデータ部に入力値が表示されます。 5番地を指定する場合は5を入力して「AS」キーを押すとアドレス部が5になります。
電源投入後は0番地から読み込まれるので0番地から書き込みます。
データ入力
0番地に書き込むデータは0なのでアドレス、データを0にした状態で「WI」キーを押します。
すると入力された値が書き込まれて、アドレスが1つ進みます。
アドレスが自動でインクリメントされるので、データだけサクサク入力できます。
1番地には1を書き込むので、1を入力してWIキーを押します。
こんな感じでサンプルプログラムをすべて入力します。
プログラムのチェック
トグルスイッチを「RAM内容参照」状態にすると書き込んだ内容を参照できます。
数値キーを入力するとアドレスが変わり、リアルタイムに書き込まれてるデータが表示されます。 例えば1番地を表示するには01を入力します。
また、「RI」「RD」キーを押すと次のアドレス、前のアドレスに移動できます。 マニュアル通りに書き込まれているかをチェックします。
実行
確認できたら実行します。
プログラムが中途半端なアドレスから実行されるとまずいので、実行前にリセットをかけるか電源を一度落とします。 ボタン電池を入れておかないとメモリが消えてしまうので要注意です。
実行すると、
動きました!ボード下部のLEDが流れます。
時間かけて作ったものがしっかり動くのは感動ですね。ずっと眺めてたくなります。
速度変更
TTM8はクロック周波数を変更できるので試してみます。
クロックは高周波、低周波、手動クロックの3種類があります。
2つのスライドスイッチで切り替えます。
状態 | 高周波・低周波スイッチ | 手動・自動クロックスイッチ |
---|---|---|
1. 手動 | どちらでもOK | Manual(手前) |
2. 低周波 | Auto(手前) | Low(奥) |
3. 高周波 | Auto(奥) | High(奥) |
手動クロック
手動クロックにすると、ボタンを押すごとに1クロック進みます。 7クロックで1命令を実行する作りになってるようです。プログラムのデバッグやCPUの動きを追うのに重宝します。
低周波クロック
低周波にするとボリュームでクロックを調整できます。
速度が早くなると、ボリュームの調整がシビアになります。 手でも回せますがマイナスドライバを使った方が微調整がしやすいです。
高周波クロック
高周波ではジャンパーで速度を切り替えられます。
ある程度クロックを上げると常時点灯状態になります。
LEDの明るさ
基板上のLEDは結構明るく光ってくれます。なので真上から覗くと目がやられます。 スモークフィルムを貼るとよさそうです。
組み立ての不具合について
前回の記事で組み立てた本体ですが、いくつか問題がありました。 こちらの記事をTTM8作者の電子ライダーさんにもご覧いただき、ご丁寧に問題の考察までいただくことができました。心より感謝いたします。
ICの故障やはんだミスなどいくつか問題になりそうな箇所をご教示いただきました。 こちらの情報をもとにして、以下のように7セグを直接通電させて点灯チェックをしてみました。
試したところ点灯しない部分は直接通電しても点灯されないことがわかりました。 なので一旦7セグを新しいものに交換してみようと思います。
部品は秋月電子さんで調達できたので、進展があったらまた報告します。
最後に
サンプルプログラムを動かしてみましたが、1度試すと書込み方法や操作方法が理解できるようになりました。 別パターンの流れるLEDを試してるので完成したらまた紹介します。
ちょうど昨日からMaker Faire Tokyo 2022 がやってて、電子ライダーさんも出店されてるとのことなので行きたかったんですが、予定が合わずでした。。次は行ってみたいっすね。