先日紹介したKM-Z80の回路について、少し説明します。KM-Z80は、ICとして以下のものを用いています。CPLDについてはPLCCパッケージのものが、その他のICについてはDIPパッケージのものが、Digi-Keyあたりで手に入ると思います。Mhzで使用しています。MZ-80Kでは、コプロセッサとしてI/O用に8255、タイマー用に8253を用いていますが、これらの代わりに、PIC18F14K22と82C54を用いました。PIC18F14K22の中で、8255の動作をエミュレートしています。82C54は8253のアッパーコンパチブルなので、そのまま用いています。キャラクターディスプレイは、汎用ロジックやCPLDなどで構築すると複雑なので、代わりにPIC18F25K22で実装しました。ミソと言っても良いでしょう。これの開発途中で試作品として出来たのが、以前紹介した、PIC18F14K50を用いたキャラクターディスプレイです。順に説明していきます。回路図は、クリックすれば拡大表示されると思いますが、もしされない場合、右クリックで「画像を表示」などしてください。見難ければ、ダウンロードファイルの中のschematic.pdfを参照してください。電源とクロック電源は、特に説明は要らないでしょう。mAほどにしかならないため、気にする必要はありません。クロック作成用には、PIC12F683を用いました。hzのクロックを作成して、出力しています。Ωの抵抗は、ダンピング抵抗です。これを入れておいたほうが、クロックが安定します。この、水晶による発振ですが、色々と難しい問題があるらしく、ちょっとしたことで発振したり、安定しなかったりするようです。Mhzの発振器を用いて、そのクロックをPIC18F683の2番ピンに入れるような形になりそうです。CPUとRAM主にTTLを用いて作成されていた昔のマイコンでは、CPUのすぐ外に、74LS245などのバッファーを取り付けるのが常套手段でしたが、CMOSで構築しているので、省略しています。リフレッシュラインは、使用するからではなく使用しないから、CPLD用に出力しています。具体的には、CPLD内部で、RFSHがアクティブのときはMREQを無視するようにしています。CPUとRAMの間は、ほとんどの部分でアドレスラインとデーターラインを直結しているだけですが、A13だけは、CPLDからのシグナルがRAMに入っています。アドレス0xD000からのキャラクターディスプレイ用に割り当てているためです。Kbytesの部分をROMとして扱うため、その部分の書き込みを禁止しているためです。CPLDとPIC18F14K50CPLDの主な役割は、アドレスデコーダーで、それぞれのアドレスごとに、RAM/PIC18F25K22/PIC18F14K22/82C54への選択信号を作成しています。PIC18F14K50が付属していますが、これはsa89_aさんのUSB-Blasterもどきを利用したCPLD書き込み機能のためと、PS/2キーボードとの連絡のためです。CPLDへの書き込みが終了すればそちらは必要ありませんから、KM-Z80完成品の中では、PS/2キーボードからの信号を受け取って、それを、8255をエミュレートするPIC18F14K22にシリアル通信で送るのが仕事です。それと、CPLDは3.3Vで動かしています。このため、5Vから3.3Vに変換するためのレギュレーターを入れています。このCPLDは入出力が5Vトレラントなので、Z80その他の5V駆動のICと直接接続することが出来ます。CPLDの内部は、次のような回路になっています。本来はVHDLかVerilogで記述すればすっきりするのでしょうが、今回は汎用ロジックの代替として使用しているので、このような回路として構築しました。上のほうがアドレスデコーダー。下が、サウンド作成用のフリップフロップです。その少し上、A10とA11を出力している部分ですが、ここは、リセット時にモニターROMの内容をRAMに書き込むために用いています。その更に上のフリップフロップは、KM-Z80内部アドレス0xE008のI/Oポートです。サウンドのON/OFFに利用されます。キャラクターディスプレイPIC18F25K22で構築しています。1.0Vの信号を作成することで行っています。NTSCビデオ信号タイミング規格の概要」と、後閑さんのサイトの「ビデオ出力のオシロスコープ」が非常に参考になりました。Windowsのものを使わせていただいています。PIC18F25K22とZ80との連絡は、パラレルインターフェースで行い、書き込みだけを認識しています(Z80への読み出しは、RAMから行われます)。Z80からアドレス0xD000-0xDFFFへの書き込み信号が来ると、割り込みがかかって、アドレスラインとデーターラインを読み取り、PIC内部の該当部分のRAMを書き換えるという仕組みです。MhzのZ80からのシグナルの処理が間に合っている感じです。割り込み処理の間、ビデオ信号の作成が出来ませんので画像が乱れますが、同様のことはオリジナルのMZ-80Kでも起こります。それを再現しようとしたわけではありませんが、期せずして、このようになりました。タイマーと8255相当部分82C54周りは、ほとんどそのままです。8255の代わりにPIC18F14K22を用いています。40ピンもある8255の代替として、20ピンしかないPIC18F14K22で足りたのは、キーボードにPS/2キーボードを用いたため、MZ-80Kでは12本もあったキーボードとの連絡線が、2本で済んだためです。実際にはPS/2キーボードとの間にPIC18F14K50(CPLD部分の回路図に記載)を介していますが、そのPIC18F14K50との連絡も2本のポートしか使っていません。Z80とPIC18F14K22の間は、キャラクターディスプレイと同じように、パラレルインターフェースです。interruptの2種類の割り込みを用いています。Mhzの実行速度をフルに用いることで、Z80との連絡が可能になっています。カセットテープインターフェース部分は、LOAD/SAVEのラインが共通で、ポートB4を用いています。LOADの際はA/Dコンバーターを用い、マイクロフォン用の微弱な電圧変化を読み取っています。SAVEの際は、5Vから0.17Vに電圧を落としています。それから、82C54のOUT2にMOSFETが繋がっていますが、これは74HC04や74HC14などのインバーターで代替可能です。KΩのプルアップ抵抗が入っていることに注意してください。1.1のものに差し替えました。05:39:30)8254と14K22が手に入りません。後者はともかく前者のPIC18での代替版が欲しい。18:54:51)e.nakaさん、こんにちは。8254のPICでのエミュレーションはずいぶん考えたのですが、簡単ではないんですよ。部品の入手先ですが、ここではどうでしょうか?http://www.digikey.jp/product-detail/ja/CP82C54Z/CP82C54Z-ND/936155http://www.digikey.jp/product-detail/ja/PIC18F14K22-I%2FP/PIC18F14K22-I%2FP-ND/2125559あるいは、PIC32MX150F128Bを使ったバージョンを制作中なので、それが完成するまで待っていただくかですね。