わたしの電子工作復活のトリガーとなったのが、SBC6800ルーズキットです。高校時代に動かしてみたかったMIKBUGが動き、電大版BASICも若干の修正で動くという夢のボードでありました。
SBC6800のACIA版MIKBUGも良いのですが、高校時代に買った書籍「マイコンの作り方・使い方」に出ているオリジナルのMIKBUGを動かしたシステムにもちょっと興味があり、SBC-IOとの組み合わせで動かしてみました。
オリジナルMIKBUGを動かすには
SBC6800は割り切った設計となっていて、データパックに入っているMIKBUGはオリジナルからACIAに合うように修正されていたり、基板上のメモリーも$A000に実装されていないので、ワークエリアが移動されていたりします。
そのため、MIKBUG上で動く電大版BASICを動かす場合なども、若干の修正が必要となります。詳しくは、古風平凡さんのホームページに、移植ポイントがまとまっていて大変参考になります。
オリジナルのMIKBUGでは、$A000にMC6810(128バイトRAM)が実装されていることを前提としていたり、シリアル通信にMC6820(PIA)を無理やり使っていたりということで、同じ回路を作るのはたいへんかもなぁ…..と長らく思ってきたのです。
そういえば、6502 CPUマイコンでいろんなことをするため、Tomi9さん作のSBC-IO REV2を使ったなぁとSBC-IOのBLOG記事とか回路図を眺めていたら、メモリーが$A000から配置されているし、PIAもあるし….I/Oアドレスを合わせて$8004-5に配置したりすれば、オリジナルMIKBUGも動くのでは?と思い立ちました。PIAでのシリアル通信は半二重で300bpsだったりしますので実用性は無いのですが「できるかな?」のノリです。いつものことですが…
SBC-IOに追加する回路
SBC-IOのPIAでシリアル通信を実施するために、以下のような回路を追加します。MIKBUGの資料や書籍「マイコンの作り方・使い方」に出ている回路のままです。
PIAを使ったシリアル通信のタイミングをとるためにMC14536タイマーICで150Hzで発振させます。74LS00 NANDゲートは波形整形のためとハードウェアエコーバック回路を形成します。
最初は単純に150Hzの矩形波が出せればいいんじゃ?と勘違いして555タイマーで回路を組んでうんともすんとも言わなかったのは内緒です。
SBC-IOはPIAパラレルICの出力を26ピンコネクタに出していますので、そこからケーブルを伸ばして子基板を作成し、シリアルI/O端子はSBC-IOの6P FTDI(いつものシリアル端子)に戻してやることにしました。26ピンコネクタにちょうどよく2本のNC(無接続)端子があったので….
SBC-IOのシリアルIC ACIA MC6850と、タイマーIC MC6840は今回は実装しません。
部品実装の様子
PIAパラレルICのアドレスデコードの変更は基板のパターンカットをしたくなかったので、40ピンICソケットを2段積みにして、上の段のICソケットの足を曲げて配線をしました。
26ピンソケットはリボンケーブルが手持ちになかったので、メス-メスのジャパケーブルでつなぎましたので、ちょっとごちゃごちゃしています。
タイマーICの発振周波数は50kΩのトリマーを微妙に調整して150Hzぐらいにあわせます。これがシリアル通信のスピードとなりますので、根気よく合わせてください。わたしはテスターを周波数カウンターモードにして微調整しました。
SBC6800にSBC6800Adapterを装備してSBCバスを接続できるようにし、SBC6800の8kB RAMとシリアルIC MC6850 ACIAは外します。SBC-IO基板には128kB RAM、74LS00とMC6821 PIAを装備します。
MIKBUGオリジナルROMの準備と動作確認
MIKBUGの資料やアセンブラソースは海外サイトなどにありますので、適宜ゲットしてきます。アセンブラの書式がオリジナル?のモトローラアセンブラ形式が通るアセンブラがなかなかないので、コメントやデータ領域確保、定数定義などの疑似命令をいじる必要がありますが、それほど長いソースでもないのでテキストエディタで修正すればそれほど苦労しなくてもアセンブルが通るようになると思います。わたしはいつもの The Macroassembler ASでアセンブリしました。
インテルHex形式のオブジェクトファイルを作成したら、TL866II+やTL866CSなどのROMライタで書き込みします。
オリジナルMIKBUG ROMをSBC6800のROMソケットに装備しまして、Windows上のTeraTERMを300bpsに設定して 電源ON!
無事 “*” のプロンプトが出ました。つづいて、$A000からのRAMエリアが更新できるかMコマンドで確認。行けそうです。
SBC6800データパックについてきたHELLO.SもLコマンドでロードして動きました。
電大版BASIC オリジナルの準備と動作確認
基本動作確認ができましたので、つづいて電大版TinyBASICをロードしてみます。以前はSBC6800のACIA対応MIKBUGで動くように色々とパッチしましたが、今回はオリジナルMIKBUGでシリアルもPIA MC6821を使ってますので無改造で動くはず。
電大版TinyBASICのモトローラS形式のオブジェクトを、何度かMIKBUGのLコマンドでロードを試みましたが、何度やってもロードが終わる寸前で文字化けの嵐で暴走し、あげくのはてはTeraTERMが異常終了してしまいます。
結局、TeraTERMのシリアル設定で1文字ずつ1mSecのWAITを入れてのんびりと流し込んで、ワークエリア$A048-49にスタートアドレス$0100をセットしてGコマンドで起動したところ無事 電大版TinyBASICが起動しました!
オリジナルの電大版TinyBASICなので、入力促進プロンプトあたりにテレタイプライタ向けの制御コード$FFが入っていたりしまして(上のソースコードの一部を参照であります)、ちょっと画面上には豆腐状の文字化けがありますが、まぁ味があるということで…^^)
高校時代にブルーバックス「マイ・コンピュータをつかう」の巻末ダンプリストを見ながらうごかしたいなぁと夢想していた電大版TinyBASICが、そのままの形で動いて感無量であります。
オリジナルMIKBUGでのPIAを使ったシリアル通信は300bpsということもありまして、PC-8001のターミナルモードのスピードとぴったりでは?と思いついて、通信してみました。
こちらも無事通信成功でありました!!!
コメント