M5jrにメガROMを
- 2022/06/02 15:35
- カテゴリー:マニアックなおはなし, make:
昨年9月に,M5jrのメンテを行ったのですが,この時の宿題として,BASIC-Fを起動することと,複数のゲームを1つのROMに入れてしまうことがありました。
この時はBASIC-G(これが今貴重である事に驚いているわけですが)のカートリッジを改造して実現しようとしたのですが,BASIC-Gのカートリッジでは取り出すことの出来ない,EXMという信号が必要になったためあきらめたのでした。
ところが,少し前からM5のカセットテープのゲーム類をイメージ化してエミュレータで遊んでいるうちに,やっぱり実機で遊ばないとなと思うようになり,一念発起して宿題を片付けることにしました。
そうするとM5に使えるユニバーサル基板が必要になるんですが,ここで閃いたのは,AppleIIやPC-6001のユニバーサル基板が欲しいと思った時に買っておいたMSXのユニバーサル基板が1つ余っていたことでした。
これを使えばなんとかなると早速回路図を書いて,部品集めを始めたのです。特別な事はなにもせず,0x2000から0x6fffまでをROMに,0x8000から0xffffまでRAMにするだけのものです。
RAMはA15を反転させてCSにすれば終わりです。これは実績がある回路なので心配なしですが,問題はROMです。
BASIC-FとBASIC-I,これに8kBのゲームを4本詰め込んで,512kBitの27512にまとめる計画を立てました。
0x2000から0x3fffまでの8kBがROM1,0x4000から0x5fffまでの8kBがROM2,0x6000から0x6fffまでの4kBがEXMという信号でそれぞれデコードされているのですが,これをAND(負論理のOR)で束ねてやれば,ROM用のCSは出来るはずです。2ゲート入りのTC7W08も手元にありますし,余裕余裕。
バイナリエディタでROMのイメージを作り,ライタで書き込むのですが,どうもベリファイでエラーが出ます。この時期のEPROMは,メーカーが違っていると微妙に書き込み電圧が違っていたり,書き込みのシーケンスが違っていたりするのでちゃんと書けないという事が起きます。検証を含めて多種多様なEPROMに対応したROMライタが,それだけで立派な開発機器として販売出来た時代ですね。
エラーになったのはAMDのものだったのですが,あいにく27512はAMDも富士通もエラーになり,これ以外の手持ちがないので諦めました。そこで,1Mbitの27010を使うことにしました。
1MbitのEPROMなんて使った事がありませんので,書けるのかどうなのかわかりませんし,端子も32ピンになるので回路も書き直しです。しかし上手くいけばさらに8本もゲームを増やせます。
手持ちを調べると,インテルの27010が3つほどありました。ROMライタも対応済みという事で試してみると,ちゃんとベリファイも通ります。早速イメージを作って書き込みます。
さあ,回路図も書いたしROMも準備出来た。
で,MSXのユニバーサル基板を実機に突っ込んで確認をしたところ,端子の数が違う事にようやく気が付きました。MSXは50ピン,しかしM5は58ピンなんですね。知りませんでした。
56ピンのユニバーサル基板なんて見た事ありません。ファミコン用の60ピンの基板を買ってきて,削って56ピンにすることを考えましたが,買うのも面倒くさいです。
改めてM5のピン配列を眺めてみると,A面とB面の1,2,3ピンは,-12Vと+12Vという使う事がない端子であることがわかりました。なら,反対側に寄せて差し込んで,この6つの端子は未接続で使えばいいんじゃないかと閃いて,そういう差し込み方が出来るかどうかを試したところ,問題なさそうであることがわかりました。
あとはもうゴリゴリと配線です。アドレスのセレクタには,先日デジットの特価品から購入した小型のスイッチを早速使います。4時間ほどの作業で配線が終わりました。配線の確認後ワクワクしながらROMを差し込んで電源ONです。
・・・動きません。配線ミスがあったのでそれを修正しますが,BASIC-Iは起動するもののBASIC-Fが起動しません。ゲームも12本も入れたのに4本ほどしか動いてくれません。どうも,A13の処理がまずいような感じです。
ROMのA13は,BASIC-Fのためにバスに繋ぐ場合と,Highにしてバンクを選択する場合とをスイッチで切り替える仕組みにしたのですが,ここがどうも機能していないみたいです。配線間違いも回路のミスも見直したのですが,動いてくれません。
タイミングの問題かと思いCSを少し遅らせたり,どっかショートして信号がぶつかっていたりとか,真面目に調べてもみましたが解決しません。どうしたものか・・・
しかし,心のどこかで,もやっとした不安はありました。本当にこれでROMがきちんとアクセス出来るのだろうかと。確かにデコード済みの信号としてROM1やROM2,EXMが出ているのは事実ですが,それがどんな信号なのかは,内蔵のゲートアレイの中身が不明なのでわかりません。
わからないついでに,盲目的に「0x2000から0x3fffならROM1ね」と深く考えもせずに使うことにしたわけですが,本当にそんなに簡単なものかという疑いは,深く考えていないときに働く第六感のようなものです。
ただ,BASIC-Fのカートリッジを解析した回路図が出回っており,これを見るとなにも特別な事をせず,27128で16kB,2732で4kBを実装していました。27128にはROM1とROM2のANDをCSに突っ込んでありますし,2732にはEXMを突っ込んでありました。
うーん,面倒くさがらず,真面目に紙に書いて確かめて見ましょう。・・・なるほど,これでは動かないはずです。詳しく書く必要もないくらい恥ずかしいミスをしていました。
M5のカートリッジのROMは0x2000から始まります。しかし,ROMは0x0000からバイナリが置かれています。なにも考えずにそのままアドレスバスを繋いでしまえば,M5が0x2000をアクセスすると,ROM上のバイナリは本来0x4000にあるべきものをデータとして出力してしまうのです。
これは,2764を複数個使う場合には成り立つのですが,27128や27256など8kB以上のメモリを使う時には破綻してしまいます。ちゃんと0x2000分のオフセットを乗せないといけないのです。
試しに,ROMの0x2000からBASIC-Fを書き込んだ27256を作って見ると,さくっとBASIC-Fが起動しました。わかってみればなんでもないことですが,思い込みというは厄介なものですねえ。
まてよ,ならBASIC-Fのカートリッジはなぜ動いているのだ?
これ,ちょっと考えればわかるのですが,ROMのバイナリの順番を入れ換えて書き込んで解決しているのだろうと思います。まず,0x2000から0x3fffまででアクセスされるバイナリは,ROMのアドレスも0x2000から0x3fffまでのエリアに配置します。このアリアはA13がHighになるエリアですので,これで正常にアクセス出来ます。
問題は0x4000から0x5fffまででアクセスされるバイナリなのですが,ここはA13がLowになります。なのでROMの0x0000から0x1fffまでに配置するのです。こうするとA13がLowである0x4000から0x5fffまででROMの0x0000から0x1fffがアクセスされるようになります。
0x0000から0x1fffまでがアクセスされたら破綻するんじゃないの?と思われるでしょうが,ここでROM2というデコード信号が0x4000から0x5fffでLowになることを思い出せば大丈夫であることに気が付きます。そう,このROM1やROM2といったデコード信号は,A13からA15が存在しない2764のための信号なのです。
ということで,27128の場合は上下8kBを入れ換えるだけでシンプルに問題が解決します。かしこいなあ,M5の設計者は。和製AppleIIと呼ばれるだけあるなあ,うーん,味わい深い。
前半の8kBにはBASIC-Iを書き込んで,後半の20KBにはBASIC-Fを書き込みます。残り4kBはダミーとして合計32kBとし,これを27256に書き込んでテストをしたところ,ROMのA13をバスに繋げばBASIC-Fが起動し,ROMのA13をGNDに繋げばBASIC-Iが起動するようになりました。(A14はバスにそのまま繋ぎます)
ここまでくれば,あとは慎重に事を進めるまでです。ゲーム類は8kBごとにROM1のエリアにマッピングすればよいので,A13からA16をHighかLowにすれば8kBのエリアが16個選択出来ます。このうち最初のエリアはBASIC-Fという24kBのアクセスが必要ですから,A13とA14はバスに繋がなくてはいけません。
A15とA16はZ80からアクセスされませんので,純粋にエリア選択だけで使いますから,HighとLowを切り替えるだけです。
A13は前述の通りバスとLowの切り替えでいいのですが,A14はちょっと考えねばなりません。A14はBASIC-Fのためにバスに繋がっている場合と,エリア選択に使われる場合があります。
しかし,M5は起動時ROM1を探しに行きます。つまりA14はLowです。ですのでBASIC-Fが格納された領域以外ではA14がLowになっている領域が選ばれます。今度はROMのA14をHighにすれば,次の8kBが選択されて表に出てきます。これでOKでしょう。
ここまでくるのに少し時間がかかった(実はA13は当初バスとHighとLowの3ステートで回路を組んでいたが,実はA13は起動時にHighになるので,わざわざHighにする意味がないことに気が付いた・・・トホホ)のですが,BASIC-IとBASIC-Fに加えて12種類のゲームを1つにまとめたカートリッジが完成しました。
調べているうちに知ったのですが,海外にはすでにこれ以上のものを作って頒布しているマニアがいました。彼はPICマイコンで領域選択を行い,ROMの容量も4Mbitで,40種類近くのゲームを1つにまとめたものを作っていました。
まあ,それはそれで大したもの(バージョンアップではPICマイコンの代わりにCPLDを使ってグルーロジックも取りこんでいました)なのですが,私はそこまでの熱意もわかず,これで綺麗にまとまったので終わりとしました。欲を言えばもう少したくさんのゲームを書き込んでおくのに,2MbitのROMにしたい所ですが,手持ちに27020がありませんので,深追いすることはしません。
ということで,BASIC-Fを少し触ってみましたが,これはなかなか強力なBASICです。私はM5が過大評価されていると考えていて,それはBASIC-Gが整数型であることに由来します。
確かにBASIC-Gはゲームを作るには最強のBASICだと思いますし,高速で動作することは文句の言いようもないのですが,いかんせん整数型のBASICではゲームしか作る事が出来ないBASICと言われても仕方がなく,ちょっと数学的なことをやろうとすればお手上げですし,扱える数字の範囲が狭すぎて桁数の大きなお金の計算には使えません。
1980年代当時,BASICはゲームだけではなく,ビジネスにも使われるものであったわけで,同じようなホビーマシンであったMSXやPC-6001でもちゃんと実数が扱えたことを考えると,M5はそもそも汎用性が低いマシンであって,ゲーム以外には使い物にならない「おもちゃ」であると評されても仕方がないと思います。
それが,安いとはいえMSXと同じ値段で売られていたわけですから,いくらゲームを作りやすいBASICだったとしても,評価はそこ止まりだというのが,私の結論です。
ただし,これはあくまでベーマガで絶賛されていたBASIC-Gを搭載したM5について言えることであって,ソードほどのビジネスマシンを理解していたメーカーに手抜かりはなく,実数型のBASIC-Fと表計算ソフトのFALCまで用意していたことは,さすがです。
BASIC-FはMSX以上の13桁の精度を持ち,しかも高速で動きました。FALCは今のエクセルの原始的なものであり,10種類ほどのコマンドを使えば様々な計算が可能なスプレッドシートで,実はこれだけでビジネスマシンに早変わりするほどの完成度を持っていました。
弱点はBASIC-FがBASIC-Gの特徴的な命令群を持っていないことで,PLAY文さえないので音楽を演奏することも出来ないのです。
だからもし,BASIC-FとBASIC-Gが統合され,速度そのままの実数型になったBASIC-Gが標準搭載されてRAMが32kBになって,もう少しましなキーボードが搭載されていれば,まさに最強のホビーマシンになっていたんじゃないかと思います。惜しいなあ。
BASIC-Fからディスク関連のコードを抜けば16KBくらいになりそうですし,ここに8kBでグラフィックやスプライト,サウンド関連の命令を追加すれば,十分成り立つでしょう。ディスクは他のマシン同様にディスクBASICを用意してディスクから差分を読み出して起動すればよく,ホビーマシンの性格上それでも大丈夫だったように思います。
M5はシンプルで綺麗なメモリマップを持っていますし,VDPを使うことでVRAMをメインメモリに置くことなく,ハイレゾグラフィックにスプライトやPCGまで使えます。そこにZ80CTCを搭載したことで可能になったモード2割り込み(ご丁寧にVDPからのV-SYNCの割り込みもCTC経由でモード2になっているらしい)や,なかなか強力なBIOSを持つ事もあり,本当によく出来たマシンだと感心します。
ただ,繰り返しますがベーマガなどの雑誌での評価は8ビットマシンをゲームマシンとしてしか見ない人たちの過大評価に過ぎず,もっと多面的にマシンを評価するべきであり,その影響力を考えるとあまりに無責任だったのではないかと思われてなりません。
実際,ゲーム以外にも使えるの実用マシンとしてのM5の評価は低いままで,ゲーム以外の雑誌で採り上げられることも少なかったように思います。マニアにウケたマシンだといいますが,I/Oに出てくる事が少なかったことからも,ゲームマニアに限定したものと考えるべきでしょう。
さて,そんなM5は,日本では珍しい安価なホビーマシンでしたが,海外,特にイギリスではこの手のマシンが結構売られていました。ZX-81やSpectrumもそうですし,300万台を売ったと言われるAMSTRADのCPC464や,ORIC-1,有名なBBC Microというマシンもそうでした。VIC-20やC-64はアメリカ生まれですがヨーロッパでも人気がありました。
そんなクラスのマシンの1つにM5があり,ヨーロッパではそれなりに知られた存在だったようです。その後日本は,ゲームはファミコンに,ホビーマシンはMSXからPC-9801に流れることになり,海外とは異なる流れを歩むことになっていくのです。