レトロマイコン86ボードの構想 [8086]
「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)」と「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事でPICを使ったZ80と68Kのワンボードマイコンについて書きましたが、同様にPICを使った8086のワンボードマイコンを作ってみたいと思います。
今回も今までと同様に少ないチップ数で単独で動作するワンボードマイコンの実現を目指します。
そのための構想は次のとおりです。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
今回も今までと同様に少ないチップ数で単独で動作するワンボードマイコンの実現を目指します。
そのための構想は次のとおりです。
- データバス幅
PICと連携するためにPIC側とのインターフェースとしてPIC側が一時的にバスマスターになりメモリ操作する想定でデータバス幅は次の理由で8bit幅の8088系を採用することにします。
[理由]
PIC24FJ64GA004を使うのでI/O数的に16bitのデータバスの対応は難しい、かつチップ数削減のためにメモリチップも8bit幅のものを1個(512KB予定)使用した方がいい。
- アドレスとデータ
8086/8088はデータバスがアドレスピンに多重化されているので分離するためにアドレスをラッチする必要があります。
PICからメモリをアクセスする場合、分離後のバスを使用することも可能ですが、PICのパラレルマスターポート(PMP)機能はアドレスとデータの多重化にも対応しているのでPIC側の使用ピン数を削減する意味でも半多重化アドレッシングモードを使用し、ラッチで分離前のバスにPICが介入する予定です。
PICのPMP機能の半多重化アドレッシングモード
- クロック
インテル8086はクロックのデューティ比が1:2で専用のクロックジェネレータであるi8284を使用するケースが多いですが、デューティ比1:1のクロックにも対応しているNEC製のV20(uPD70708H)を採用することにします(eBayで300円弱で購入可能)。
PICで1:2のクロックを生成する方法も考えられますが、V20(8088相当品)を16MHzで動作させたいのでCPU側でハード対応することにしました。
NEC製Vシリーズのクロック規格(抜粋)
- PICとのインターフェース
最も重要な検討事項の一つであるV20とPICとのインターフェースについてはZ80版検討時に考えた(結果としてはreset方式を採用)「レトロマイコンZ80ボードの構想(その17)HALT以外の方法」の記事にも書いたI/O命令によるWAIT方式を拡張したもので実現する予定です。
実現方法としてはIO/M、INTA/、A15が全てHighの場合にV20がwaitするようにします。
INTA/を条件に追加することでインターラプト受付時に反応することがなくなります。
また8086はI/O命令でのアドレス指定として、DXレジスタまたは即値で指定可能ですが、即値の場合、上位アドレス(A8-A15)はゼロになるのでハード的にもI/Oアドレスとしては前半32Kにマッピングするケースが多いと推測されることからwaitする条件としてA15=highという条件も加えました。
このためには3入力のNANDゲートが必要となりますが、チップ数削減策としてダイオードでORします。
★2019/07/27 追記
PIC内でPullUp設定することでプルアップ抵抗を省略します。
★2019/08/27 追記 {
PIC内の弱いプルアップではコンパレータ出力に80nsのディレーが発生し、V20が16MHzではREADYのインアクティブが間に合いませんでした。
10Kプルアップでディレーが70nsになり、16MHz動作でもREADYの変化が間に合う状態だったのでプルアップ抵抗を復活します。
但し、ブレッドボード上では今だに不安定要素があり、8MHzでは問題ないのですが16MHzクロックではプログラムが正常に動作していません^^;
}
★2020/12/18 追記 {
16MHzでも安定に動作するようにクロック部分の回路を見直し、「レトロマイコン86ボードの構想(その25)回路図アップデート」の記事に改版後の回路図とパターン図などを掲載しました。
}
Wait信号生成
V20のREADYピンに入力するためには上図の右上の信号を反転する必要がありますが、チップ数を削減したいのでトランジスタを使う・・いや、PIC内のコンパレータ機能を使って反転します。
V20側ではPICと連携する場合は必要な情報をメモリに格納した後に上位アドレス(A15=1)に対するI/O命令を実行し、wait状態に入ります。
PIC側ではWAIT信号を見張っていて(実際には上記のコンパレータ結果を監視)、WAIT状態になった場合にはバスリクエストし、処理結果をメモリに格納後、バスを開放し、READYをhighにしてwaitを抜けるようにします。
参考としてV20のメモリリードタイミングを示します。
メモリリードタイミング
READY信号のサンプリングは下図に示すようにT2の立下りです。
WAITサンプルタイミング
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0