標準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
前へ
次へ
ホームページトップへ戻る