SSブログ

MC6802CPUボード [6802]

またちょっと間が空いて、今回は元に戻って68系の話。
MC6802のCPUボードを起こしました。

SYC-6802_1.jpg

MC6802とACIA(MC6850)のボード。
例によってPICでシリアル-USB変換、CPUクロック、ボーレート供給、リセットを任せているが、これはZ80のものと全く同じもの。
CPU用のクロックは6MHz。MC6802は4分周されるので1.5MHz動作。シリアルボーレートは9600bpsで、クロック供給はACIA側で16分周するものとして9600×16=153.6K。
一応今までのものと同じように電源はCPUボードからも通信用USBと電源用のUSBと選択できるようにしたが、ベースのボードからスマフォ充電用のACアダプタで電源供給。
ベースボードにCPUボードとメモリボードをさして動かしている状態がこちら。

SYC-6802_2.jpg

メモリボードはZ80で使用したものと同じもの。ただしZ80と違って下位アドレスがRAM、上位アドレスがROM。
メモリボードのバス7番ピンは80系のMREQと68系のEを切り替えるようにしてたのだが、メモリマップドI/Oの68系では結局の所I/Oアドレスの時にメモリアクセスを禁止しなければいけないので、CPUボード側でMREQとIORQを生成するようにした。
回路図はこちら。

SYC-6802_3.jpg

動作確認用として68系定番モニタMIKBUGと電大版TinyBASICを用意。
この電大版TinyBASICを動作させるのに手間取ったのが間が空いた理由。

そのままでは動かないので修正を施す。

・MIKBUG修正点

(1)いわゆるコンソール入出力をACIAに変更。
MIKBUGはパラレルI/OであるPIA(MC6820/21)を使ってシリアル通信を行っているのを、ACIAでのシリアル通信変更。
ついでに送受信とも割込で行う事にする。

(2)コンソールは当時のテレタイプライターが前提になっているのでその部分を修正。
テレタイプライタの制御部分、最後に$FFを連続して送ったり、文字列終端がEOTだったりといった部分を削除。

(3)アドレス配置を変更
これは普通にこちらのメモリマップにあわせるだけ。

MKIBUGの動作はわりとすんなりOK。
リセット後にブートメッセージを表示させるようにしてみたら、最初の4~5文字が化けるのはご愛敬(笑)

・TinyBASIC修正点

次に電大版TinyBASIC。ネットにあったソースをベースにさせてもらった。
一応、昔「マイコン手づくり塾」という本に掲載されたソースを打ち込んだものもあるが、あれはメモリ配置も含めけっこう手が入っているのでオリジナルに近いものからの方がいいかな?という判断。

(!)MIKBUG前提部分の修正
MIKBUGも同時に移植しているのでそのままでいいはずだけれども、ACIAでしかも送受信割込を使った独自の入出力に変更したこともあり変更。

(2)テレタイプライタ制御部分の修正
これもMIKBUGを使う事が前提になっていることもあって、テレタイプライタ用の制御コードが色々入っている。LOADとSAVE代わりでもあるLISTはSTXで始まり、ETXで終了であるとか。
LIST出力時は別段問題ないと思われるが(TeraTermの場合)、LOADでSTX待たれても困るので。
ただしLOADの動作確認はしていないので、ちゃんと動くかは未確認。

(3)アドレス配置の変更
これもこちらのメモリマップにあわせて変更。
ただし、変数A~Zのメモリ配置はゼロページの特定領域決め打ちになっていたりするので、影響少ない範囲で最小限に。
ちなみに「マイコン手づくり塾」のTinyBASICは、その変数領域もゼロページ外に変更してたりする。

そうやって変更を加えたのだが、起動はするがうまく動作しない。
で、変更部分のチェックからはじめて、ベースにさせてもらったソースと自分で打ち込んだソース、打ち込み元の本のソースリストを見比べて修正していったがやはりダメ。
ただ、動作現象的にTinyBASICのワークアリアを侵食してしまっているか、スタックが崩れているかかな?と思いながらソースを順に追っていたところ、スタックポインタをインデックスレジスタ代わりに使っているのを所々発見。
あぁなるほど、送受信に割込を使っているからスタックにワークエリアを設定している時に割込がかかるとアウトになる模様。
スタックポインタ操作前に割込禁止。一連の処理終了後に割込許可を入れたら無事動作しました。



nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。