標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第527回]

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

前回、ちょいとすごいことをやっています、と書きましたが。
どこがすごいのさ?
と思われたかもしれません。

こういうことなのです。
以前に作りましたMYCPU80用のリモートプログラムは、TK80回路のLED表示データをUSB(RS232C)でホストに送信し、KEYから入力するところを、USB(RS232C)経由でホストから受信していました。
まあ、ごく当たり前のプログラムです。

ところで。
前回お見せしました/L(file load)ですが、それもUSBを使ってホストから送信しています。
前回は出てきませんでしたが、/Lと逆の機能も用意されています。
/S(file save)です。
たとえば
8000[ADRSSET]
8050
まで入力したあと、
/S filename.btk
とすると、アドレス8000〜8050のメモリデータが、先頭にアドレス情報の80008050をつけて、バイナリでsaveされます。
これもUSB経由で送られてきます。
このLOAD、SAVEはオリジナルのTK80ではカセットテープレコーダに対するシリアル送受信の機能でした。
キー入力、LED表示とは別のハードだったわけですが、今回のリモートプログラムでは、その別々のハードに対するデータの送信、受信を同じ1つのUSB送受信にまとめてしまっているのです。

さらに。
前回、レジスタダンプとメモリダンプの表示もお見せしましたが、ND80Zモニタプログラムでは、この2つの表示は、実はプリンタを接続したときに、プリンタに対して出力されるものだったのです。

先日特注品として作成しましたND80ZHでは、プリンタ接続ができるようになっていますので、レジスタダンプやメモリダンプはプリンタに対して行われます。

そうでした。
メモリダンプでプリンタに出力したものをお見せしておりました。こちらです([第444回])
レジスタダンプはこちら(第446回)にありました。

プリンタに対して出力しますから、出力データはプリントイメージです。
バイナリデータではなくて、ASCIIコードで出力し、行の終わりには、CRLFがつけられています。
これも今回はそのイメージのまま、USBでホストに送られます。

USBのデータ送受信では複数のパイプを使うことができます。
しかしそんな面倒なことはしておりません。
データの送信も受信も、同じエンドポイント(EP1)だけを使って行っています。
しかもHIDですから、一度に64バイトの固定長のデータしか送ることができません。
そのような制約があっても、ちょいと工夫すれば、いま説明しましたようないろいろ異なる性質のデータを同じ1本のパイプで送信、受信することができてしまう、というところに、ちょいとすごいなあ、と思っていただきたかったのでした。

ああ。USBでのデータの送受信に関しては、PIC18F14K50やZ80の側はそれほど大したプログラムではないのですけれど、ホストの側のC++のプログラムはなかなかに面倒なプログラムになっています。
必ずしも、高級言語ならば簡単、というものではないのです。
そのあたりにつきましても、いずれ順を追って説明をさせていただきますので、いましばらくお待ちください。

さて、前回の続きです。



前回はMEMORY DUMPの結果の表示までお見せしました。
アドレス8000〜8030(この指定の場合には803Fまでが表示される)のメモリデータがバイナリ(16進数)表示とASCII文字で表示されています。
これは、この範囲のメモリデータをバイナリでUSB受信して、それを加工して表示しているのではなくて、まったくこのままのプリントイメージで送信されてきたものをそのまま表示しているのです。
たとえば、最初の行の、8000  3E 03 …というところは、
38 30 30 30 20 20 33 45 20 30 33 20 …というデータとして送られてきたものです。
もちろん、なまのメモリデータはバイナリ数ですから、それをそのように加工しているのはND80Zモニタプログラムなのです。

ND80Zモニタにはこのメモリダンプのほかにもちょいとすごい機能があるのです。
それが上の画面で、メモリダンプの次に表示されている、逆アセンブラです。
メモリダンプと同じようにメモリアドレス範囲を指定してから、/a(または/A)と入力すると、ご覧いただきますようにその範囲の逆アセンブルリストが表示されます。
上ではアドレス表示部に8000が表示されていますから、それをそのまま開始アドレスとして利用して、終了アドレスの8020のみ入力しています。

この逆アセンブルリストも、もとはプリンタに出力されていたものですから、さきほどのメモリダンプと同じように、ASCIIコードのプリントイメージで送信されてきています。

逆アセンブルリストをプリンタ出力したものもお見せしておりました。こちらです([第448回])

また時間がなくなってしまいました。次回に続きます。
2010.6.17upload

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