先日、ZK-80 なるマイコンボードを購入しました。
ZK-80とは
このボードは TK-80 というマイコンボードの互換品です。TK-80 とは、大昔に NEC が販売した Intel 8080 マイコン互換 IC 用のトレーニングキットです。
つまり、TK-80 互換ボードを買ったというわけですね。この TK-80 についてはあまりにも有名なので説明は控えておきます。
なぜこのマイコンボードを欲しがったかというと、機械語をパチパチ入力して実行できる現実の環境が手に入るからなんですね。これまで Z80 CPU のパチパチマイコンボードを作った例を見ていて、「これ僕も作りたいな〜〜。でも面倒くさいな〜」と思っていたんです。今回のボードは PIC32MX マイコンによるエミュレーションですが、それでもパチパチ開発できるということで、十分に魅力があるのです。
ちなみに、Z80 CPU によるパチパチマイコンボードの例は以下に列挙しておきます。 特に3番目のリンクは古き良きマイコン時代が伝わってきてとてもいいですよね。
ZK-80 は 上のような Z80 ではなくて、Intel 8080 を搭載したマイコンボードです。ですのでこのリンクとはちょっと違います。
販売は picosoft (作者は別)で、Yahoo! ショッピングや aitendo で販売されています。どちらも人気なようで、すぐに売り切れてしまいます。
aitendo ではちょくちょく入荷しているようなので、こちらの販売サイトのリンクも示します。現在でも入荷して2日経つと売り切れてしまうようです。
買った
ということで、Twitter のあいそくが飲み会中に「入荷したぞ」と言うので、飲みの席でしたがスマホを広げて注文してしまいました。その後色々触ったので軽くご紹介です。
商品到着後はボタンのラベルをカットしたり、はんだ付けをしたりとキット製作を行いました。付属のマイコンには動作用のプログラムが書き込まれていますので、そのまま IC ソケットにはめ込むだけで OK です。製作時には必ず付属の説明書を読んでください。7セグLED の注意等がありますから、くれぐれもお間違えのないように。
プログラミング資料
最初は何がなんだかよくわからないので、ネットに上がっている各種ボードの説明書を参考にしました。
- TK-80
- TK-80 ボードの紹介です。わかりやすい説明で参考になります。
- MYCPU80(TK80回路)操作説明書
- こちらは TK-80 の互換ボードのようです。3章まで参考にどうぞ。
- 初心者はまずこれ。
- ND8080 TK80モニタプログラム操作説明書
- こちらも(多分上と同一作者の) TK-80 の互換ボードのようです。8章のモニタサブルーチンが参考になります。
- 4〜7章は ZK-80 には対応していませんので注意。
- 8080 命令セット
- コンパクトな命令セット一覧(英語)。これを主に参考にします。
- 8080命令説明書
- 図式的な説明がある命令セットの説明書。日本語での説明がとても見やすいです。
プログラム組んでみたぞ
以上を参考にしながら簡単なプログラムを入力しました。
Aレジスタをインクリメント
基本的ですが、取り敢えず慣れる為にやってみました。
8000: MVI A, 00H ; Aレジスタに00hを代入
8002: INR A ; Aレジスタの値をインクリメント
8003: RST 7 ; 以上のプログラム実行後に停止
これをハンドアセンブル(ほとんどコピペですが)をしたのが以下です。
8000: 3E 00 ; MVI A, 00H
8002: 3C ; INR A
8003: FF ; RST 7
あとはパチパチと書き込んで、RESET、8000h
にアドレスをセット、RUN をすれば以下のように Aレジスタが 01h
になっていることが分かると思います。
なるほど、テンションが上がってきました。
7セグLEDにデータを出力
続いてやや下品ですが、「Unco.」と表示させるプログラムを組んでみました。あ、そうそう。8080 では、機械語において 2バイト以上のデータ(即値やアドレス)はリトルエンディアン風に記述するのが必要なようです。
8000: LXI HL, 543EH 21 3E 54
8003: SHLD HL, 83F8H 22 F8 83 ; 83F8hからは7セグLEDの表示に直結している
8006: LXI HL, 5C58H 21 58 5C
8009: SHLD HL, 83FAH 22 FA 83
800C: LXI HL, 0080H 21 80 00
800F: SHLD HL, 83FCH 22 FC 83
8012: MVI L, 00H 2E 00
8014: SHLD HL, 83FEH 22 FE 83
8017: HLT 76
動作はこんな感じです。
「Unco.」と表示させるプログラム pic.twitter.com/iAxeORJ9fL
— しまじゃき (@obknt) 2019年2月12日
入力したキーをそのまま7セグLEDに表示
インタラクティブなプログラムです。ボードの中には押されているキーを取得するサブルーチンと数字を7セグ表示用にエンコードするサブルーチンがあるんですね。なんとも便利。
8000: LXI H:L, 0000H 21 00 00
8003: SHLD 83F4H 22 F4 83
8006: SHLD 83F6H 22 F6 83
8009: CALL 0216H CD 16 02
800C: STA 83F4H 32 F4 83
800F: CALL 01C0H CD C0 01
8012: JMP 8000H C3 00 80
8015: HLT 76
数字キー以外も、対応したキーコードが表示されます。
色々遊んだ感想
いやぁ、すっごく楽しいです。今の時代は C コンパイラを使って、シリアル通信によってプログラムを書き込むことが主流です。ですが、それではマイコンの気持ちになれませんよね。そんな不満をパチパチとハンドアセンブルした機械語を打ち込むことによって打ち砕くことができます。いいですね〜〜〜〜〜〜
また、やっぱり8bitマイコンはアセンブルするのが楽ですね。暗算でできますよ。色々と計算をしているうちに、覚えてしまった機械語がありました。たとえば CD
が 関数コール、3E
が Aレジスタに即値をロード、FF
がプログラム終了、76
が Halt、とかですねwww
また、ファームウェアのソースコードが公開されていて自由に書き換え可能ということなので、時間があれば今後挑戦したいと思います。現状では SAVE/LOAD 命令がないので、そのへんも実装したいです。
あ、そういえば、電源投入直後に記憶されているプログラムを実行するとこんな動作になるようです。