MYCPU80
CPUの中を見たことがあります。顕微鏡で見るICはまるで大都市の街並みです。それが活動しているところを観ることができたら・・・少し思ったことは有ります。でも本当にみられるなんてすごいことだと思います。
完成稼働
TK-80という日本で初めて個人で持てるコンピュータに使われていた8080というCPUをロジックICだけで作ろうという,壮大な計画が実現されました。
CPU内部のレジスタの一つ一つに8つのLEDを持たせてデータ内容を表示させています。プログラムカウンタも16bitのLEDがついていますし,OPコードを保管しているレジスタも8bitのLEDで表現されています。データが流れている様子が見えるんです。
中日電工さんが8080CPUをロジックICで作って,KIT販売しているMYCPU80。2009年9月14日発売,私は2014年8月8日注文9月10日到着10月28日完成しました。
LEDを取り付けると遅くなると思っていたんですが,そんなことはありませんでした。電力もさほど使わないようです。
見ているだけでプログラムの流れが「感じられる」作品です。
右半分はLEDもなく,静かに動作していますが,この部分が判断の中枢です。
各レジスタのLEDがけなげに動いて役目を果たそうとしているレジスタたちの姿は,見ているだけで感動します。
CPU顕微鏡写真で検索してみました。
多分左上の2つのブロックがRAMとROMだと思います。
下のほうがALUなどの頭脳に当たるところでしょうか?
この街並みが意思をもって光り輝いたらなんて素敵だと思いませんか。
組み立て始め
新しい工作を始めようとするとき,いつも期待と夢がいっぱいになります。幸せを感じます。
基盤
プリント基板の工作は数多く行ってきましたが,こんなに大きい基盤は初めてです。
基板寸法はヨコ480mm×タテ310mmです(A3より大きい、です)。(中日電工さん)
巨大
大きくて重いので慎重に扱わなくてはなりません。
修正されています
送られてきた基板は修正するべき個所の修正がされていて必要なところはICソケットも取り付けられています。とても良心的です。
電源部分とバスのコントロール部分を取り付けた後,アドレス入力用のdipSWとトグルSW,データ入力用トグルSWを取り付けました。クロックのタイミングに合わせてOPコードを受け取る部分を取り付けました。
更に,プログラムカウンターを付けてLEDたちが輝きはじめました。RAMをセットしてあるのでデータをかくことができます。
途中も楽しい
基盤や部品を傷めないようにプチプチの上で作業しました。熱からICを守ることと間違えて違うICを取り付けてしまわないようにするために,すべてのICにソケットを付けました。
IC,抵抗,LED,コンデンサを取り付け,各命令が実行できるかを確かめながら組み立てていきます。わくわくドキドキです。
ここでは省略しますが,レジスタのテストや命令の実行・確認をスナップSWをバチバチと倒して押しボタンSWを押してRAMにデータを書き込みながら作り上げるので楽しくてうれしくて,あっという間に組み立ててしまいます。
ラベル粘付け
完成しました。各レジスタにラベルを貼りました。基盤にもシルクで書いてありますが,表示を大きくして見やすくしました。
ラベルを2行で書いてはさみで切ったので少し曲がっています。
TK-80の機能は左上の方にある黄色で囲った,8つの7セグLEDと5x5のタクトSWの部分です。
アドレス4桁とデータ上位下位が表示される7セグLEDと16進数キー(緑1から9と青0,AからF),黄色のファンクションキーとリセットキーがTK-80の機能を持ちます。
黒いフィルターを付ければいいのですが,付けると7セグの形が見えないので付けていなかったら,どこかにしまい忘れてしまいました。光って見えずらいでしょうが,私はこれが好きです。欲を言えば,アドレス4桁とデータ4桁が少し分かれてくれると TK-80 ぽくていいのですが,残念です。
KEYボードです。緑が1から9青がAからFと0,黄色がファンクションキーとりセットキーになっています。
ADRS SETはアドレスのセット
RD INCは読んでインクリメント
RD DECは読んでディクリメント
WD INCは書いてインクリメント
RUNはプログラムを走らせます。
RETは戻ります。
STREはプログラムをしまいます。
LOADはプログラムを読み込みます。
RESETはモニタの最初に戻ります。
レジスタにデータ入力
move inputの略号だと思いますがMVI(ムブとかムビと読みますがムーブと呼んでもいいような気もします)。レジスタに8bitの数字を入力します。
準備
データを入力するためには準備が必要です。
SP1とDS3
Address設定用のdipSWの右側にSP1があります。電源入力コネクタの上にDS3があります。
SP1
DS3
TK-80はリセットすると0000h番地から3FFFhにはロムが割り当てられていて,モニタープログラムが走るようになっています。しかし,それではいろいろな実験をするのに不便です。工夫されていて,0000hからにもRAMを配置できるようにしてあるのが有難いところです。
SP1のジャンパを外すと00h番地にRAMが配置されます。
データを入力するためにはモニタが扱っているバスを入力用に開けてもらわなくてはなりません。
DS3の4をONにするとデータを入力できるようになります。
AddressとDATAの入力
Addressの下位4bitとDATAの8bitは左下にあるトグルSWで入力します。Addressが4bitしかないのはたくさん入力をすることがないだろうと考えているからだそうです。上がON,1h。下がOFF,0です。
バチバチとスナップSWを倒しボタンを押してデータ入力するのはとても爽快です。
テストプログラム
MYCPU80の組み立て説明書にあるプログラムです。各レジスタにデータを入力します。
行番号 機械語 命令
0000 0600 MVI B,00
0002 0E01 MVI C,01
0004 1602 MVI D,02
0006 1E03 MVI E,03
0008 2604 MVI H,04
000A 2E05 MVI L,05
000C 3E07 MVI A,07
000E 76 HLT
実際のキー操作(スナップSW操作)は下のようにして,1行ずつすぐ右にある四角い緑のMEMWR SWを押します。
01の並びはスナップSWの並び順,0は下,1は上にスナップSWを倒します。
Address DATA 機械語
0000 0000 0110 06
0001 0000 0000 00
0010 0000 1110 0E
0011 0000 0001 01
0100 0001 0110 16
0101 0000 0010 02
0110 0001 1110 1E
0111 0010 0110 26
1000 0000 0100 04
1001 0010 1110 2E
1010 0000 0101 05
1011 0011 1110 3E
1100 0000 0111 07
1101 0111 0110 76
これを入力して走らせる(電源を落としてSP3の4を上げて電源ON)と各レジスタにそれぞれの数字が入ります。
RESETキーを押しながらDS3の4をOFFにするとプログラムが走ります。
右上のAレジスタは7(○○○○○●●●)を表示していますね。BCDEHLの各レジスタもそれぞれの2進数を表示しています。
D E B C
○○○○○○●○ ○○○○○○●● ○○○○○○○○ ○○○○○○○●
2 3 0 1
H L SPH SPL
○○○○○●○○ ○○○○○●○● ●●●○●●●○ ●●●○●●●○
4 5 EE EE
WKH WKL PCH PCL
●●●●●●●● ●●●●●●●● ○○○○○○○○ ○○○○●●●○
FF FF 00 0E
プログラムカウンタも0Ehになっています。76のHALTでCPUは停止しています。
デコーダ
デコーダーの部分です。LEDの付いているレジスタは一時記憶装置です。OPCODEラッチともいい,命令を選別して実行させる,この部分がCPU(中央処理ユニット)の考える?部分にあたる所です。
識別された命令の内容に応じて右側1/3にあるLEDのない静かなICの群れに信号が手渡されてデータの流れを作っていきます。
LEDを備えたレジスタ群
レジスタ全体
フラグ
INC/DEC
SZ H P C
ROTATE
LEDを持ったレジスタたちの動きを追うことができます。画像の下の部分はクリックするとPopUPします。
BUS開放時のレジスタ
BUSを開放されると各レジスタはスタックポインタを除いてhiの状態が多くなっています。PC(プログラムカウンタ)はアドレス0番地を示しています。ALU XORはALUの反転なので00hです。INC/DECとROTATEは使用前のため00hになっています。
MVI
06 00 MVI B,00
MVI B 00を実行したときのレジスタの動きです。8つのLEDが点灯してFFhを表していたBレジスタのLEDが消えて00hを示しています。Addressが00 03hとなっています。右下の赤いLEDがClock数3(00011)を表しています。
クロック
CPUはどのようにしてBレジスタに00hを入れるのでしょう?ただ,00hをBレジスタに入れるといっても手順があるはずです。
手順を作るために一つ一つの動作を区切るクロックがあります。1クロックで一つの動作を行います。TK-80では1命令の区切りは1μ秒(100万分の1秒),CPUの速度は1MHzです。(2MHzかもしれません)
右下の部分を拡大してみるとたくさんのLEDが一列に並んでいます。右にある5つの赤いLEDがクロックの表示です。5bitですから,0から31クロックまで表せます。
左側にあるOP CODEと書いてあるICの下にあるLEDはOPコードを記憶しているレジスタのデータを表示します。
MRD
MWR
IOR
IOW
B
USAK
Eclk
InRD
HTRT
OP CODE
Clock
クロック毎の動作
ステップ動作をさせるときは、ディップスイッチDS3の右から3番目の3のみを、小型のマイナスドライバを使って図のようにON(下側)にセットします。中日328
流れを見るために画像は小さくしてあります。
A0000h CLC0
inner BUS 06h
A0000h CLC1
A0000h CLC2
A0000h CLC3
OP CODE 06h
OP CODE 06h
OP CODE 06h
inner BUS FFh
Address 0000hの
Clock 0では内部バス(inner BUS)にOPコードの06hが読み込まれます。
Clock 1ではOPコードラッチに06hが読み込まれます。
Clock 2ではOPコードの分析が行われているのでしょう。
(次に読み込まれたデータをBレジスタに転送)
Clock 3ではPC(プログラムカウンタ)に緑のLEDが点灯して,書き込み指示を出しています。
A0001h CLC4
A0001h CLC5
inner BUS 00h
B REG 00h
Clock 4ではAddressが0001hになっています。内部バスは0001hの内容00hが入っていて,それをBレジスタに転送しています。MVI B 00hが実行されました。
(*0001hの内容をA5hにしてみました。A5hを読込,転送されています。)
Clock 5ではPCに書き込み指示が出ています。PCをインクリメントして命令実行を終了します。(OPコードは06h)
HLTA
A0002h CLC0
OP CODE 06h
inner BUS 76h
A0002h CLC1
OP CODE 76h
A0002h CLC2
A0002h CLC3
OP CODE 76h
LED HLTA
OP CODE 76h
LED HLTA
Clock 0ではinnerBUSに76hが入っています。OPコードは以前のままです。
Clock 1でOPコードがラッチ(一時記憶)されます。
Clock 2でHLTAのLEDが点灯して停止状態を告げます。
Clock 3では変化は有りません。以降Clock0からClock3の繰り返しです。
やっと,このページの修復作業が終りました。2022/10/17
この下には何もありません。2022/10/17
アドレス4桁
データ上位
データ下位
キーボード