ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
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 |