MSXのカートリッジをつくる

最近知人に1チップMSXとユニバーサル基板を譲ってもらいまして、個人的にMSXが盛り上がっていたりします。今回は勉強も兼ねて何かカートリッジを作ってみようと思いました。

資料集め

MSXについては昔BASICでプログラムを作ったことはありますが、カートリッジ作るとなるといきなりハードルが上がりますね。とりあえず資料集めから始めることになりました。

ネットで検索すると、テクハンwikiというページが見つかりました。MSX2テクニカルハンドブックという本をテキストに起こしているようで、なかなかグレーな感じです。もちろん原本が欲しいところですが入手困難なのでありがたく活用させてもらうことにします。

ただこれだけだとなんだか良く分かりません。必要なことは書いてあるのだと思いますが、やっぱりサンプル的なものが無いと理解が進まないですね。

そういえば、かつてMSX Magazineという雑誌で「ハードウェア事始め」という当時(中学生だったか)はよく分からないながらも面白いと眺めていた連載があった事を思い出しました。

という訳でヤフオクでその辺を買い漁ることにしました。

IMG_4282

やはり記憶にあった通り素晴らしい連載で、カートリッジ製作にあたっての必要な情報をかなり得ることが出来ました。

作例を作ってみる

まずは、データバスやスロットについての理解を深めるためにSRAMカートリッジを作ってみることにしました。

基本的に1989年12月号の記事と同じものですが、バッテリーバックアップ用に専用ICを使用しているところはトランジスタで代用することにしました。

ブレッドボードで試しただけでしたが、CR2032によるデータの保持、ヘッダを書き込んでROMとしての起動などを確認することが出来ました。

次にI/Oを試すために1990年7〜8月号の記事を参考に8255を使用した作例を作ってみました。こちらもブレッドボードでの確認ですが、データの書込みと読出しを確認しました。

SRAM & I/Oカートリッジを製作

何気なく試した2つの作例でしたが、1つのカートリッジに同居が可能ということに気がつき、ユニバーサル基板に実装してみることにしました。

MSX用SRAM&I/O基板の回路図
回路図(PDF)

こちらが完成した基板です

IMG_4279

使い方

(以下は連載記事の受け売りなので詳しく知りたい人は原本参照ですね。まぁ今どきいないと思いますが…)

スライドスイッチが2つあって、1つはSRAMのライトプロテクト、もう1つは領域切り替えになります。1ページが16KBに対してSRAMが32KBなので2つ分保存できるというわけです。

ライトプロテクトをオフ(書き込みできる状態)にしてMSXを起動します。無事起動したら下記のコマンドを入力します。

POKE &HF676,1:POKE &HF677,&HC0:POKE &HC000,0:NEW

これでBASICの開始位置がC001H〜(ページ3)として初期化されます。
次に下記のプログラムを打つか、保存していたものをロードします。

100 ‘CMOS-RAM Cartrige init.
105 ‘MSX Magazine 1989-12
110 FOR I=0 TO 48 STEP 16
120 P=I OR (INP(&HA8) AND &HC0)
130 OUT &HA8,P:RESTORE
140 FOR J=&H8000 TO &H8018
150 READ D$:D=VAL(“&H”+D$)
160 POKE J,D:NEXT J,I
170 ON STOP GOSUB 200
180 STOP ON:PRINT “POWER OFF!"
190 GOTO 190
200 RETURN
210 DATA 41,42,0,0,0,0,0,0
220 DATA 10,80,0,0,0,0,0,0
230 DATA 0,17,80,A,0,94,0,0
240 DATA 0

実行すると、全てのスロットの8000Hから8018HまでDATAの内容が書き込まれます。これがROMのヘッダと初期化プログラム(NEW)になります。

ライトプロテクトをオンにしてMSXを再起動すると、成功していれば恐らく青い画面で止まります。これはNEWをしたいのに書込みが出来ないので止まってしまっている状態です。ライトプロテクトをオフにするとOKと出るはずです。

この状態で好きなBASICプログラムを入力すれば、そのプログラムはバッテリーによって保持され、電源オンで自動的に起動するようになります。(マシン語の場合はひと工夫必要ですがその辺は記事を参照してください)
そして電源を切る前にライトプロテクトをオンにすることを忘れないように。

I/Oの初期化の説明は省略しますが、全て出力ポートであれば3番地にH80を書き込むことで設定できます。

OUT 3,&H80

ポートA、B、Cはそれぞれ0、1、2番地に相当しますので、ポートAの全てをオンにするには2進数で書くと

OUT 0,&B11111111

となります。

最後に

このカートリッジを作ることでMSXの仕組みが少しわかった気がします。少なくともROMカートリッジは作れそうです。ソフトウェア関係はこれからなんですけどね…

投稿者:

ないん

30半ば過ぎで突然電子工作にはまりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です