古いマイコンのためのブートローダー

今年もよろしくお願いします。

さて、年末に『モトローラ6800伝説』を読み、懐かしい気持ちになりました。MC6800は私が最初に勉強したCPUであり、考えてみるともう40年近く前の話です。

この本を読んで、私もCPUボードを作ってみたいなぁなどと悪い癖が出てきたのですが、そこで問題になるのがブートストラップ・ロードです。MC6800はブートROMを内蔵していないため、何らかの方法でイニシャルローダーをメモリに事前に書き込まなければなりません。もちろん、アップデートの手段も必要です。

一番自然な方法はEP-ROMを入手して、書き込み機も自分で作ることでしょう。書き込み機はなんとかなります。しかしこのためだけに紫外線ランプを買うとなると、さすがに気後れします。先人に倣ってフロントパネルにトグルスイッチを並べ、手作業でイニシャル・ローダーを書き込む方法も考えられます。これは痛烈にかっこいい仕上がりになりますが、すぐに飽きることが目に見えています。

あれこれと考える内に、ブートローダーをワンチップ・マイコンで作ればいいと思いつきました。ただ、例によって考えるだけに終わりそうなので、ここにアイデアを記しておきます。

アイデアとしてはシンプルです。STM32マイコンから、十分なROM容量とUSBデバイスIF、外部メモリIFを持ったデバイスを選びます。144ピン LQFPのSTM32F103ZEあたりがよいでしょう。このマイコンは外部SRAMと直結できるFSMCを内蔵していますので、64kBのSRAMをそのまま接続できます。また、CubeMXを使って、USB Mass Storageデバイスとして構成することができます。後は何とかがんばって内蔵Flash ROMをMass Storageデバイス用のメモリにしてしまえば、ホストPCからはUSBメモリに見えます。

こうして作ったシステムにS9レコード形式のファイルを書き込みます。書き込みの終了を検知したらファイルをデコードしてSRAMに書き込めばいいのです。リセット時にはファイルシステム内のS9レコードファイルをデコードしてSRAMに書き込みます。

マイコンとSRAMを接続するバスは、TXS0108のような双方向レベル・コンバータを介してMC6800と接続します。電源起動後はMC6800をリセット状態とし、TXS0108をディセーブルにしてMC6800は切り離しておきます。

メモリへの書き込みが終わったらSTM32マイコンのFSMCをディセーブルにしてピンをHi-Zにし、TXS0108をイネーブルにしてMC6800をリセットから開放します。

これで、mbedのように気楽にプログラムを書き込めるボードになります。

邪道と眉をひそめる人も居るかと思いますが、要するに昔のCPUを懐かしみたいのか、昔の不自由を懐かしみたいかの違いでしか有りません。ちょっと規模が大きくなりますが、MC68000にも対応できそうです。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください