ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.30
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB接続 リモートプログラム
ND80ZVはその昔のTK80と同じ動作をします。CPUはZ80ですがTK80モニタプログラムとほとんど同じプログラムが搭載されています。
しかしそれだけではありません。ND80ZVにはTK80のイメージからは想像できないほどいろいろな機能を満載しています。
そのうちの1つがUSB接続です。
ND80ZVはボード上のPIC18F14K50のUSBインターフェースを介してUSBでWindowsパソコンと接続してデータの送受信を行なうことができます。
その機能の応用の1つとして、リモートプログラムを紹介します。

[第41回]

●USB(HID)応用 リモートプログラム

以前MYCPU80のTK80回路のキーが小さくて押しにくいのをカバーするためにリモートキー入力プログラムを作りました(CPUをつくろう![第366回])。
このときはUSBインタフェース部分にFTDI社のFT232RLを使いましたから、ホスト側のプログラムはRS232Cに対する送信、受信として扱いました。

今回のZ80版TK80ボードの試作の過程でも、このときに作ったリモートプログラムと同じ動作をするプログラムをPIC18F14K50でのUSB(HID)インターフェース上で動作するように作ってみました([第38回])。
この時点までのリモートプログラムの機能は、[0]〜[F]のデータ入力キーと、[ADRSSET][READ INC][READ DEC][WRITE INC]の各キーをDOSVパソコンのキーボードから遠隔入力できる、というだけのものでした(キー入力と同時に、LEDに表示された値と同じものがDOSプロンプト画面にも表示されます)。

オリジナルのTK80のキー入力機能はそのほかには、[RUN][RET][SAVE][LOAD]があるだけですから、さらなる機能追加を行うとしても、それほど大した追加にはならないのですが、TK80モニタプログラムと一緒に搭載してしまうつもりのND80Zモニタプログラム(当社オリジナル)には、そのほかにもいろいろユニークな機能がキーに割り当てられています。

これを全部リモート操作できるようにすれば、なかなかに便利になるのでは?
で、この間からその作業にかかっておりました。
結構ホネな作業でした。

それと平行して、もうひとつ、当社の現行機種であるND80Kには、応用プログラムとしてTK80用のゲームプログラム集「マイコンゲーム21」から勝手にアイデアをいただいてND80K上で動作させるようにした、「応用プログラム集」を附属でつけています。
こいつもなんとか新しいZ80版TK80ボード上で動くように作り直したい、と考えて、その作業も行いました。

この応用プログラムのデバッグ作業では、DOSVパソコン上でアセンブルしては試作ボードにLOADしてデバッグする、ということを何回も繰り返さなくてはなりませんでしたから、USB(HID)で接続してプログラムのLOADやデバッグ作業がパソコンを通して行えるということは、実際にかなり役に立つ有難い機能であることを自分自身の作業を通じて確認することができました。

ええ。なかなかに、便利なのですよ。
たとえば、プログラムのLOADひとつをとってみても、普通の操作でしたら、まずTK80ボードの[LOAD]キーを押しておいてから、パソコンの前に戻り、そこで送信プログラムを起動させる、という動作になります。
もしも、[LOAD]キーがパソコン上で遠隔操作できれば、いちいちTK80ボードに手を伸ばして[LOAD]キーを押す手間が省けます。

なんだ、それぐらいのこと、とお思いかもしれませんが、デバッグのために日に何十回もそれをしなければならないか、しなくても済むか、という差は無視できません(なにしろトシですから)。
あ。キーの遠隔操作といいましても、あくまで比喩的な表現です。
実際に遠隔操作でキーの押下げを行うわけではありません。

ちっともHIDの実際のプログラムの説明に入れませんので、お読みになってみえる方も、もどかしくお思いかもしれませんが、まま、いずれ少しずつ書いて行きますので、辛抱強くおつきあいいただきますようお願いいたします。
まずは、今回作りました、リモートプログラムの実際の操作例を通じて、PIC18F14K50を使ったUSB(HID)インタフェースでこれだけのことができる、ということを皆様にお見せしていきたいと思っております。

DOSVパソコンの側は例によりまして、Borland C++で作成いたしました。
PIC18F14K50のプログラムは、データの中身には全くタッチしておりません。
それこそFT232RLと同じレベルで、Z80CPUとDOS/Vパソコンとの間で単にデータの送受信のパイプになっているだけです。

ではZ80版TK80ボードの方はどうなっているのか、といいますと、こちらも、キー入力ルーチンに少し加工して、キーから入力する代わりにPIC18F14K50からキーデータを入力し、また7セグメントLED表示アドレスに表示データを書き込む代わりに(あるいは書き込むとともに)PIC18F14K50にそのデータを送る機能をつけ加えただけで、ほんの数十バイト追加しただけです。

MYCPU80のリモートプログラムはRAMに書き込んで使いましたが、今回のリモートプログラムはモニタROMに組み込んで、Z80版TK80ボード上のキー操作で起動するようにしました。

実際のリモートプログラムを操作している画面です。


今回試作中のZ80版TK80ボードの製品名はND80ZVにする予定です。
かってND80ZUというボードを出しておりましたので、その後継機種という意味です。
USB接続に成功すると、7セグメントLEDの表示と同じアドレス4桁データ4桁を表示して、キー入力待ちになります。

[0]〜[9]、[A]〜[F]はフルキーボードのそれぞれ該当するキーのほか、[NumLock]が利いていれば、フルキーボード右のテンキーからも入力できます。
また
[Delete]=[A]
[End]=[B]
[PageDown]=[C]
[Insert]=[D]
[Home]=[E]
[Pageup]=[F]
の各数値キーとしても働きます。
[ADRSSET]はフルキーおよびテンキーの[.](ピリオド)です。
[RD+](Read INC)はフルキーおよびテンキーの[+]です。
[RD−](Read DEC)はフルキーおよびテンキーの[−]です。
[WR+](Write INC)はフルキーおよびテンキーの[Enter]です。
そのほか英字キー、一部の記号キーが入力できます。

ここでは最初に8000[.]([ADRSSET])と入力しています。
するとND80ZVボード上のLEDに、アドレス8000と、そのアドレスのメモリ内容が表示されるとともに、DOS窓にも同じ内容が表示されます。
8000 003E と表示されています。
左の4桁はアドレス表示部です。
右の4桁がデータ表示部ですが、そのうち表示されているメモリアドレスのデータは右の2桁に表示されます。
画面の表示からは、アドレス8000のメモリの値は3Eであることがわかります。
データ表示部の左2桁は、この表示のひとつ前に右側2桁に表示されていた内容が左に2桁シフトして表示されます。

[RD+]でアドレスが+1され、[RD−]でアドレスが−1されます。
ここまではMYCPU80のリモートプログラムと同じです。
その次から、ちょいとすごいことになります。

/l music2.btk と入力して[Enter]を押したところです。
lはわかりにくいですね。数字の1ではありません。Lの小文字です。
/Lと入力しても構いません。file loadの意味です。

music2.btkというバイナリファイルをLOADして、これもUSB経由でND80ZVに送っています。
send data 229bytesはホストの側の表示ですが、その下の
8000 80E0
はND80ZVがデータ(プログラム)を8000〜80E0にLOADした結果の表示を送り返してきたものです。

もうひとつ、/l neko3.btk で同じ要領でデータファイルを送っています。
こちらは8100〜82F0にLOADされました。

そのあと r を入力しています。
r は[RUN]キー入力として働きます。
でもここで、[RUN]したのは間違いでした。
8100〜はデータなので、本当は8000から[RUN]するつもりでした。

たまたまND80ZVボード上のステップスイッチがONにしてありましたので、すぐ次のアドレスでブレイクして、レジスタダンプ表示になっています。
たまたまここで表示されたように、ブレイク、ステップ動作のときのレジスタの値もUSBを通じて送られてきます。

あらためて、8000[ADRSSET]と入力したあと、 r でプログラムを実行させました。

プログラムの実行後に再びモニタプログラムに戻りましたので、そのときのLED表示と同じ
8000 003Eが表示されました。

今度は、アドレス8000を表示している状態で、8030と入力したあと、/d と入力しました。
/d はmemory dumpです。
ND80Zモニタの機能で、ND80ZVボード上のキー操作で[*I/O]キーに続いて、[A]キーを押すと、そのときLEDに表示されていた範囲のメモリの値が16進数とASCII文字でパソコン側に送られてきて表示されます。

なお上記の表示で、[ADRSSET][RD+][RD−][LOAD][RUN][MEMORY DUMP]は、実際にこの通りの文字をキー入力したのではなくて、それぞれのキー操作の結果として画面にそのように表示されたものです。

今回は時間がなくなってしまいました。次回もこの続きを書くことにいたします
CPUをつくろう!第526回(2010.6.16upload)を再編集


ワンボードマイコンをつくろう![第41回]
2011.6.30upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る