ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.29
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆いよいよND80ZVの製作にとりかかります
特注品Z80ボードND80ZHも完成しいよいよ本番のND80ZVの製作にとりかかります。
もとの連載記事ではND80ZVのUSB/RS232Cインターフェース回路に実装するPICについての説明が入っていますが、その部分はまた別にまとめることとします。
その部分の開発に手間取ったこともあって完成予定が遅れてしまいましたが、それにしても、当初はあと2〜3ヶ月くらいもあればND80ZVを売り出すことができると思っていました。
まさか半年もかかってしまうなど予想もしていませんでした。
それというのもとんでもないことを思いついてしまったためでした。

[第38回]

●REMOTE.EXEをHID用に書き換えました

やっと作り上げたHID送受信プログラムは、その名の通り、送信と受信を行うためのもので、Z80版TK80ボードのSTORE(SAVE)キーに対応して、指定した範囲のメモリデータをUSB(HID)を通じてパソコンに送り、バイナリファイルとして保存するHID READプログラムと、それとは逆にLOADキーに対応して、パソコンに置いてあるバイナリファイルをZ80版TK80ボードに送って、RAMに書き込むHID WRITEプログラムでした。

[2011.6.29注記]前回の注記に書きましたように、この間にPICのUSBプログラム関係の記事があるのですが、それを省いてしまいましたので、上のような唐突な感じの書き出しになっています。[注記ここまで]

とりあえずはそこまでできれば、STORE(SAVE)、LOADの機能がサポートできますから、それでよいわけなのですが、そこまで出来るとやっぱり欲がでてきます。

そこでまずさわってみたいと思ったのがREMOTE.EXEです。
REMOTE.EXEについてはCPUをつくろう![第366回]で説明をいたしました。
MYCPU80(TK80モニタ)のために作ったプログラムです。
パソコンとMYCPU80とをUSBで接続して、パソコンのDOSプロンプト画面でキー操作すると、MYCPU80(TK80モニタ)のキーボードから入力したのと同じように7セグメントLEDにアドレスやメモリのデータが表示されると同時に、そのアドレスやデータがパソコンに送られて、DOSプロンプト画面に表示される、というものです。

MYCPU80のために作ったREMOTE.EXEはUSB通信の部分は仮想COMポートを使った見かけ上はRS232Cのプログラムです。
MYCPU80の側のPIC16F88はRS232C(ただし信号レベルはTTL)で送受信をしています。
その間にあってUSBとRS232Cの変換をしているのはFTDI社のFT232Rです。

もともとのREMOTE.EXEプログラムがCOMポートに対してのreadfile()、writefile()だったところを、USB(HID)に対するreadfile()、writefile()に書き換えてみよう、というわけです。
もちろん、単純にreadfile、writefileの構文を書き換えただけではだめで、そこはそれなりに工夫が必要になります。
本日は朝からその作業にトライしておりました。

ええ。うまくいきましたよ。
なので、予定を変更して、さっそくご報告、というわけです。

●HID用に書き換えたremote.exeを実行中の画面です

以前作ったMYCPU80用のremote.exeと区別するために、今回のプログラムはndremote.exeという名前にしました。
左側に見えているのがそのプログラムリストの一部で、ちょうどhidread()サブルーチンのところが見えています。
右のDOSプロンプトがそのndremote.exeを実行中の画面です。

こちらがUSB(HID)で接続してリモート動作中のZ80版TK80ボード(ND80ZHの試作版)の写真です。

右端の7セグメントLEDに遮光フィルムが貼ってないのは、前にもお話ししましたように、このボードを7セグメントLEDチェッカーとして使ったためです([第31回])。
このZ80版TK80ボードの側のプログラムはCPUをつくろう![第367回]でお見せしていますMYCPU80用のプログラムと同じです(ほんのすこしだけ違っているところがありますが、基本的には同じです)。

●Z80版TK80ボードの側のremoteプログラムです

2010/5/23  14:16  ndz3rmt.txt
END=F064
              ;;;remote for nd80z3
              ;; 10/5/22
              ;
                ORG $F000
              ;
                RGDSP=$01A1
                SOUT=$027C
                SIN=$02A0
                SOUTEND=$02B3
                D2=$02EA
                DATA=$FFEC
                ADRES=$FFEE
              ;
F000 3EFF     LOOP:MVI A,FF
F002 47         MOV B,A
F003 D398       OUT 98
F005 CDA002   LDDATA:CALL SIN
F008 FE41       CPI 41;A
F00A CA22F0     JZ ADRSSET
F00D 2AEEFF     LHLD ADRES
F010 FE57       CPI 57;W
F012 CA56F0     JZ WRINC
F015 FE49       CPI 49;I
F017 CA5DF0     JZ RDINC
F01A FE44       CPI 44;D
F01C CA61F0     JZ RDDEC
F01F C305F0     JMP LDDATA
              ;
F022 CDA002   ADRSSET:CALL SIN
F025 67         MOV H,A
F026 CDA002     CALL SIN
F029 6F         MOV L,A
              ;wait
F02A CDEA02   DTOUT:CALL D2
F02D 3EFB       MVI A,FB
F02F 47         MOV B,A
F030 D398       OUT 98
              ;
F032 22EEFF     SHLD ADRES
F035 7C         MOV A,H
F036 CD7C02     CALL SOUT
F039 7D         MOV A,L
F03A CD7C02     CALL SOUT
F03D 3AECFF     LDA DATA
F040 57         MOV D,A
F041 7E         MOV A,M
F042 5F         MOV E,A
F043 D5         PUSH D
F044 CD7C02     CALL SOUT
F047 CDB302     CALL SOUTEND
F04A D1         POP D
F04B EB         XCHG
F04C 22ECFF     SHLD DATA
F04F EB         XCHG
F050 CDA101     CALL RGDSP
F053 C300F0     JMP LOOP
              ;
F056 CDA002   WRINC:CALL SIN
F059 77         MOV M,A
F05A 32ECFF     STA DATA
F05D 23       RDINC:INX H
F05E C32AF0     JMP DTOUT
              ;
F061 2B       RDDEC:DCX H
F062 C32AF0     JMP DTOUT
              ;END
ADRES        =FFEE  ADRSSET      =F022  D2           =02EA  
DATA         =FFEC  DTOUT        =F02A  LDDATA       =F005  
LOOP         =F000  RDDEC        =F061  RDINC        =F05D  
RGDSP        =01A1  SIN          =02A0  SOUT         =027C  
SOUTEND      =02B3  WRINC        =F056  

HID通信のための何か特別のことは何もやっていません。
TK80モニタプログラムにあるシリアルOUTルーチンとシリアルINルーチンをCALLしているだけです。
HIDのための特別の部分は全てPIC18F14K50が受け持っています。
そしてパソコンの側のC++プログラムも、HIDについての部分はサブルーチンにしてしまっていますので、メインプログラムのレベルでは、RS232C(USB仮想COMポート)かHIDなのかは、ほとんど区別がつきません。

ということは、USB仮想COMポートを使ったプログラムはHIDを使ったプログラムに置き換えることができる、ということを実証した、ことになります。
remote.exeはごく簡単なプログラムですが、パソコンとZ80CPUとの間で通信によってデータのキャッチボールをしていますから、その動作がHIDでも実現できたことによって、これは相当応用範囲が広まりそうです。
CPUをつくろう!第506回(2010.5.23upload)を再編集


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

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