MC6883と68系MPUでDRAMマイコン(1)〜 SBC6303にMC6803EPをのせる

SBC6303

電脳伝説さんのSBC6303ルーズキットに、MC6803EPという外部クロックを要求するMPUを載せてみました。なぜそんなことをしたかというと、SBC6809Eルーズキットに載っているMC6883を使ってDRAM装備な68系マイコンを作ってみたかったので、まずはMC6803EPの動作確認がしたかったのです。

SBC6809Eルーズキット組み立てと、MC6883の調査

SBC6809Eの組み立て

SBC6809Eを組み立てるため、MC6883(同期アドレスマルチプレクサ)というやつをゲットするため初eBayへ申し込み(深センのセラーから買いました)をしまして、無事2週間ほどでMC6883 LSIをゲットしました、国内だとゲットできないLSIでしたので感動であります。

このルーズキットでMC6883(同期アドレスマルチプレクサ)の入手が一番の難関なのであります。

SBC6809EはEPROM、GAL、PICと書き込みが必要なプログラマブルICが複数ありましたが、すべてTL866II Plusで書き込みできました。TL866II Plus万能じゃ。

MC6883の機能の調査など

SBC6809Eに部品を組み付けて稼働させるにあたり、MC6883の仕様をあれこれ調べてまして、MC6800とかの元祖68系CPUも動かしてみたくなりました。

MC6883はSBC6809Eルーズキットのページでも解説されていますが、68系CPUとペアで動作してDRAMコントローラとして動作する素敵なLSIです。また以前作ったVDGビデオLSIとVRAMの調停もしてくれるというイカすやつ。これは魅力。

以下のMC6883のデータシートからの抜粋ですが、クロックはMC6883で発振してE信号とかQ信号(MC6809E用)を作ってくれます。またDRAMアクセス用の行・桁選択信号(RAS#、CAS#信号)も作ってくれるという素敵さです。

MC6883 DataSheet

MC6883のデータシートによると以下のようにMC6809Eだけではなくて、元祖MC6800とかMC6801Eとかもサポートしている模様。これは動かしてみたい。

MC6883 DataSheet

MC6800の場合はE信号(φ2クロック)だけではダメで、E信号と逆位相のφ1信号が必要です。MC6883/6885データシートの付録に以下のような回路図が出てます。これでつながるらしいです。ちょっとめんどくさいです。

MC6883 DataSheet

最初はMC6883でDRAMをコントロールして、MC6802 MPUみたいな自分でクロック発振するMPUと組み合わせできないか?と無茶なことも考えましたが、それではうまく動かない模様。元祖68系MPUでDRAMシステムを簡便に作れないものか…

MC6801Eはなかったが、MC6803EはeBayにあり

MC6883のデータシートに出ているMC6801EというMPUがあればE信号だけで駆動できそうでラクチンそうな予感がしたのですが、国内の電子部品店には当然在庫はなく、eBayなどでも見かけません。

Twitterで嘆いていたところ、MC6803EPであればeBayでポーランドのセラーが出しているとのこと。喜び勇んで購入してみました。68系CPUって組み込み系で色々と使われていたと聞くので、そういった機器からの中古品かもです。

9/25に購入。ポーランドから投函が9/28。国際書留で到着が10/13でしたのでほぼ2週間で東欧から届きました。なんとUSEDですけど4個セット。ありがたい。

MC6803EP MPUをSBC6303ルーズキットで動かしてみる

DRAMマイコンをいきなりつくるのはハードルが高いので、MC6803Eの動作確認をまずは実施してみたいと思いました。

MC6803EPのデータシートをみていて、MC6803EPはSBC6803ルーズキットだっら 動作確認できるのでは?と思いまして研究して動かしてみました。

E信号とAS信号・・・SBC6800のPICでクロック生成

MC6803/6303系MPUはアドレスバス下位とデータバスの8bitデータ線が共用なので、AS(アドレスストローブ)信号を使ってアドレス信号のラッチが必要です。もともとの6803/6303系MPUは いい感じでMPUがAS信号を出してくれますが、MC6803EPは外部から与える必要があります。タイミングはこんな感じ。

MC6803E Datasheet

68系ではありがちですが、E信号がHレベルのときにMPUくんは働いてますんで、E信号LレベルのときにAS信号がHレベルになりアドレス8ビット分をラッチしておく感じみたいです。

SBC6303ルーズキットではAS信号を74HC573ラッチICに入れて下位アドレスを保持しています。

SBC6303技術資料

MC6803のデータシートでは、E信号とAS信号をつくるための例として8MHzのクロック源をD-FFで分周してE信号とAS信号を作り出す作例が出ていたりします。これはめんどくさい。

MC6803 Dtatsheet

上記のE信号とAS信号の波形を呆然と眺めていたところ、これはMC6800 MPUに与えているクロックのφ1信号とφ2信号(E信号)に似ているではないか! と気づきまして、SBC6800のクロック源となっているPIC12F1822が使えるのでは?! と思った次第です。(タイミングが微妙かもですけど)

SBC6800 技術資料

HD63A03RPとMC6803EPの信号線の違い

SBC6303ルーズキットで使われているMD63A03RPは自分で水晶発振回路をもっていてクロック発振します。よってMC6803EPとはちょっとだけ端子のアサインが違っています。以下の図はデータシートからの引用ですが、左がMC6803EP、右がHD63A03RPです。

2番、3番のピンがHD63A03RPだと水晶クロックなどの接続ピンとなってますが、MC6803EPでは外部からE信号などをもらうためHALT#信号とかBA信号用となってます。ここを対処が必要そうです。

信号線名機能対応
HALT#(入力)DMAなどでMPUを止めるプルアップ
BA(BUS AVAILABLE)(出力)アドレス・データバス使用可能信号対応なし

HALT#信号はMPUの動作を止める入力端子なので、今回は特に使わないのでプルアップすることにします。他の信号線は共通のようなので安心です。

SBC6303ルーズキットの部品実装と外部クロック基板の接続

SBC6303ルーズキットに水晶振動子やそれに付随するコンデンサ以外の各種部品をとりつけました。クロック発振するPIC12F1822は外付けにします。

SBC6303ルーズキットは、外部基板などをつなげるための40ピン端子を持ってます。ここに外部基板のPIC12F1822で発生させたφ1(AS信号)、φ2(E信号)をつなぐかたちにします。

以下のようにSBC6303の40P端子にE信号が出てますし、6303/6803系MPUが持っているパラレルI/O端子も8端子でています。AS信号はパラレルI/O端子P15につなぐことにしました。ちゃんと対処するならパターンカットが必要ですが、6803/6303 MPUのパラレルI/O端子のデフォルトは入力モードにしていると思うのでそこは手抜きでパターンカットはせず…

SBC6303 技術資料

以下の写真のような感じで、HALT#(2番ピン)のプルアップと、AS信号端子のジャンパを実施しました。この程度だったら、SBC6303として動かしたくなったときに、元に戻すのも簡単です。

LILBUGの動作確認

外部クロック基板を装着して、ROMにSBC6303データパックのLILBUGを焼きます。SBC6303では$E000番地からROMエリアとなってますので、27C64 EPROMへLILBUGを焼くときに、$E000→$0000へアドレス変更しながら焼き込みを指示しました。TL866II Plusの付属ソフトでインテルHEXロードの際にアドレス指定を実施しました。

シリアルポートにいつものUSBシリアル変換アダプタを接続してTeraTERMは9600bpsへ設定してスイッチONしてみました。

とりあえず、TeraTERMには文字列が出ましたがバケバケ。リセットボタンを押したり、キーボードから何かメッセージを送ったりすると反応があります。ちょっと期待できる動き。MPUが動いてLILBUGがメッセージを出していますが、シリアルスピードがあってない感じです。

MC6803EPのデータシートを見てみたところ、以下のような表がありまして、今回E信号はPIC12F1822で1MHzのはず。SBC6303では水晶振動子4.9152MHzを使ってまして、MPU内部で4分周されて1.2288MHzのE信号となってるはず。

以下の、1MHzのE信号のときの表によると、7812.5bpsにするとつながりそうです。TeraTERMのシリアルスピードは手入力できますので、7812としてみます。(0.5bps分はTeraTERMが頑張ってくれるはず。)

TeraTERMを設定してスイッチON!したところ無事LILBUGの起動メッセージが出ました。SBC6303データパックに入っているHELLO.Sをロードして起動したところ無事「ハロワ」メッセージが出ましたのでちゃんと稼働しているようです。RAMがMPU内蔵の分だけなので動かせるプログラムは少ないですがMC6803EP MPUが無事稼働することが確認できました!! やたっ。

今後に向けて

MC6803EP MPUが外部クロックで無事稼働することが確認できましたので、今後 SBC6809EルーズキットのMPU 40P ICソケットから信号線を延長して、今回作ったSBC6303改造版(MC6803搭載)とつないでDRAMマイコン化してみたいと画策しています。E信号はSBC6809Eに載ってるMC6883が作ってくれるので、あとはAS信号をどうするか?というところが残ります…(RAS0#信号でイケるかも?というアドバイスをいただいたので、それにチャレンジ予定です。)

また、MC6883はDRAMコントロールだけではなくて、MC6847 VDGビデオLSIとセットVRAMアクセスがうまいことできるようになるらしいので、その後 ビデオつきマイコンも作れるのでは??と妄想しているところです。夢が広がります。

コメント