SBC6800とACIAのアドレス互換でシングルボードで稼働するコンピューターを作ってみたかったのでした。
SBC6800はMC6800のためメインクロックが2相だったりしましたが、MC6802は単相クロックだしクリスタルも直結できるのでシンプルにできそうです。自分のポカミスで若干ハマりました。
仕様について
CPUまわり
MC6802を搭載して4MHzクロックで動かします。内部で4分周されますので実際のEクロックは1MHzです。CPUに水晶発振回路内蔵ですので水晶振動子とコンデンサ直結でOKです。コンデンサは27pFぐらいが推奨かもですが、いつもの22pにしてしまいました。

CPUのパワーオンリセットはKZ80-CPUBやK65-CPUBなどと同じくコンデンサと抵抗器で構成します。ちょっと手抜きで74LS14などのシュミットトリガーICは搭載してません。
#NMI(マスクなし割り込み)と#INT(割り込み)信号線はブルアップして引き回し。RE(内部128バイトメモリ)端子はGNDに落としてディセーブル。VCC_STANDBY(メモリバックアップ)端子はVCCにつなぎます。以前6802CPU下駄を作ったときにHレベルにしてなくてハマった気がします。
メモリマップ
アドレスデコーダは74LS138で64kBを8分割する構成なのは、SBC6800やSBC-IOと同じです。
また基本的にはSBC6800を踏襲しますが、Tomi9さんのSBC-IOのアイデアをいただいて64kBフル実装にしつつ、I/Oや外部基板のVRAMエリア等を切り離せる構成にします。

メモリーマップとしては以下のようになりまして、C000_JPとA000_JPの2つの半田ジャンパで制御します。A000_JPを短絡すると、本ボードのRAMはディセーブルとなり外部基板(K68-VDGのVRAMなど)で使えるようになります。C000_JPを短絡するとROMが16kBまで使えるようになります。
$C000-$DFFFの領域はRAMかROMの切り替え領域となり、ディセーブルして外部基板で使うことはできません。REV2とかで検討課題かなと思ってます。

ROMは27C256型(32kB)を装備してまして8k/16kROMとして使えるようにしてます。容量がもったいないので、 前半($0000-$3FFF)後半($4000-$7FFF)をA14_JPで切り替えて使えるようにしたいと思います。ジャンパ設定とROMの配置は以下の通りです。

ROMを焼くときに W27C512(64k ROM)だったら、MIKBUGのIntelHexデータは$E000から始まってますんで $E000⇒$A000に変更して書き込むなど 、書き込みアドレスを調整して焼いてください。
※27C256だったら$E000⇒$2000にするとROM前半部分に、いい感じで書き込まれます。
I/O (ACIAアドレスなど)
冒頭でも書きましたが、ACIAアドレスはSBC6800互換にしてソフト資産を活用しやすい構成を目指します。以下のSBC6800技術資料にあるとおり$8018/$8019のアドレスに合わせます。
http://www.amy.hi-ho.ne.jp/officetetsu/storage/sbc6800_techdata.pdf
シリアルクロックはSBC6800で使っているPICではなく、SBC8080 SUBボードとおなじく74HC4060で19.6608MHzを発振して153.6kHzなどを生成します。デフォルトは153.6kHzでシリアルスピードは9600bpsとなります。

ちなみに、上記 回路図はクリスタルのあたりの抵抗器を正しく入れた版です。後述しますが、基板作成時には間違ってました…orz
シリアル接続はSBC6800と同じで、FTDIの6Pコネクタ装備でTTLレベル通信です。
外部バス
外部バスは SBC6303/SBC680/SBC-IOなどとほぼ互換のSBC68系バスを搭載して、いままで作った K68ーVDGビデオボードなども接続できるようにしたいと思います。

回路や基板サイズ
全体の回路は以下のような感じです。
基板サイズはSBC6800と同じ いつもの秋月電子ユニバーサル基板と同サイズの10cm x 7.5cmにします。スタックした時に便利ですんで。
基板発注して組み付け
基板発注
基板はいつものJLCPCBさんに発注して5枚作成してもらいました。OCSNEP(ネコポス)対応を継続してもらえて助かります。ただ、「遠隔地加算」が増えてて400円くらい以前よりプラスでしたが。。。(それでも安い!)
部品組み付け〜動かない1
実質 1週間ぐらいで基板が手元に届きました。(いつも早い!)
基板が届いたのは平日(月曜日!) でしたが我慢できずに部品を組み付けてみました。
仕様でも書きましたが、いろいろとSBC6800互換にしたのでSBC6800用のUniversanMonitorとかMIKBUGが動くはず。。。。ですが、動きませんでした。
回路図をSBC8080 SUBボードと見比べていたら、クリスタルのあたりの抵抗器1MΩの接続方法が間違ってました。クリスタルと並列に抵抗器を入れなければならないところを直列に入れてました。これでは発振しない….orz

以下のようにハードパッチ(というほどでもないですが。。)して、無事シリアルクロックは発振しました、テスタの周波数カウンタモードで確認しました、
動かない2
シリアルクロックも正しく出るようになったので、勇んで起動してみましたが、相変わらずTeraTermは無応答です。
テスタの周波数カウンタモードやAnalog Discovery2のロジアナとかオシロスコープでCPUクロックのあたりやE信号を観測してみましたが、動いてる感じ。
回路図と睨めっこしながらウンウン悩んでいたんですが、基板の部品をみていたらなんと74LS00を装着したはずが老眼のため取り違えて74LS05を装着してました。

LS00はメモリーの#READ/#WRITEを生成したり、アドレスデコーダの信号からメモリーのCE(チップイネーブル)信号を生成してますんで、動くはずがないですね。久々にポカをやってましたw
74LS00がなかったので、TTLレベルに反応するCMOSのロジックIC 74HCT00を装着して 電源ON!!
Universal MonitorのメッセージがTeraTermの画面に出てきました。やったー

ちなみに、SBC6800のACIA対応版 MIKBUGもちゃんと動きます。うがーー、アホでした。
まとめ
ひとまず、回路の問題でなくてホッとしました。基板の問題は、シリアルクロック発振部分の間違いだけだったみたいです。
REV1.1ということにして治したいと思います。
今後 動作確認で、シリアルクロックを増速できる半田ジャンパとか、ROM16k対応や ROM2面化の機能とかも確認してみたいと思います、
また別の外部基板とSBC68系バスで繋いで動作確認とかですね。
動いてよかった〜
コメント