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

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

今回はPIC18F14K50のテストプログラムについて書く予定だったのですが。
申し訳ありません。
またしても予定変更です。
なにしろHID送受信プログラムが出来てしまったものですから、そうしますといろいろやりたいことがでてきてしまいます。

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

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

そこでまずさわってみたいと思ったのがREMOTE.EXEです。
REMOTE.EXEについては[第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チェッカーとして使ったためです([第463回])。
このZ80版TK80ボードの側のプログラムは[第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でも実現できたことによって、これは相当応用範囲が広まりそうです。

2010.5.23upload

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