ちょっと間があいちゃいましたが、前回KZ80マイコンをMSX1化するためのカートリッジボードを作成しましたが、ゲームをしているとちょっと足りない機能があることが分かり追加しました。
またその機能を追加したプリント基板を作成しました。
「グラディウス2」で自機がチラチラ
KZ80マイコンでROMカセットでゲームができるようになったので、中古ゲーム屋さん(ハードオフとか駿河屋とか)でMSXのゲームをいろいろと買ってみました。令和の御代のいまでも中古ゲーム市場で1980〜90年代のMSX ROMゲームが手に入るのは幸せです。レトロパソコンが流行って?きているためか、ちょっと価格はお高めですが手が届く範囲内なのでOKです。
前回も写真を掲載しましたがMSXのゲームで名作と名高いグラディウス2を手に入れまして、ジョイパッドでゲームをしてみましたところ以下の問題点がありました。
- デモ画面では綺麗に表示されているのに、実際のゲーム中で自機の残像?のようなものがチラチラと画面左端に出る
- ゲーム音楽がベース部分だけで主旋律が出てなくて寂しげ
MSXはメモリーアクセスで1WAIT
まず「1.」のチラチラ問題。MSXのCPUクロックは3.579545MHzです。KZ80-CPUBのクロックも差し替えて同じ周波数にしてました。CPUクロックの差異ではなさそう。各MSX情報サイトをぼんやりと眺めていたところ、MSXではメモリーアクセスに1WAIT入ってるんですね。
元PC-8001ユーザー(ゲーム打鍵ONLYw)で、そのあたりはまったく知りませんでした。MSXに詳しい方には常識かも。以下のような感じです。
CPUにはZ80A相当品が使用され、基本仕様ではこれですべての処理が行われます。クロックは3.579545MHzで、M1サイクルに1WAITが挿入されます。
https://w.atwiki.jp/tagoo/pages/16.html
ちなみに、ザイログ社が出しているZ80データシートに「M1サイクルで1WAIT入れるならこんな回路」というのもありました。データシートは何度も見ていた気がしますが興味がなくてスルーしていた模様。7474D-FFが1つで実現できるみたいです。
Zilog Z80 CPU USer Manual
Z80にWAITをかけるための信号線はKZ80マイコンで使用しているSBC8080バスに出ていまして使ってません。CPUボードに搭載しなくても別ボードでその信号線を操作してあげれば良いと思いつきまして、ROMカートリッジボードにプリント基板化の際に搭載することにしました。
「グラディウス2」の音楽がしょぼい問題
つづいて、「グラディウス2」の音楽がPSG音源だけだと伴奏というか低音パートだけでしょぼい問題です。前回の最後にも書きましたが「グラディウス2」とか「沙羅曼蛇」などのKONAMIのゲームはゲームカセット内にSCC音源チップを搭載していて、MSXパソコン内蔵のPSG音源とミキシングしなければならない模様。
https://www.msx.org/wiki/MSX_Cartridge_slot
上記にMSX ROMカートリッジスロットの端子を再掲しますが、No.49にある”SOUNDIN”端子がROMカセット内の音源からの音の出力端子です。最初は”IN”だからROMカーリッジ側への音楽取り込みかしらんとか勘違いをしてました。
こちらをKZ80-PSG(PSG音源ボード)で抵抗器ミキシングしている音声出力に接続してあげればよさそうです。ひとまず20kΩ抵抗器x2本で左右チャンネル両方につないであげることにしました。
こちらは次のリビジョンのPSG音源ボードで外部端子として出しておきたいと思ってます。(いつになるかなぁ….)
プリント基板を製造
この2点の改良点を踏まえて、KZ80マイコン用MSXカートリッジボードのプリント基板をJLCPCBへ頼んで製造しました。
- 1WAIT回路の出力は自信がなかったので、まずかったときに切り離せるようにジャンパを通しました。
- ROMカセットの向きはユニバーサル基板で作成したときとは表裏を逆にしました。
- ROMの差し込み間違いが無いように「FRONT」「BACK」はシルクで表記しました。
この基板の回路図やガーバー(基板製造)データはgithubで公開しています。
無事、「グラディウス2」で自機チラチラ無し&音楽もOK
M1サイクルで1WAITを入れた回路と、ROMカートリッジ音源のミキシングによりMSX「グラディウス2」で自機チラチラもなくなり、音楽も主旋律が出ましてたいへん快適なゲームができるようになりました。
ゲーム自体の操作はヘボなのでいくらやっても先に進めないのですがw
これでKZ80マイコンの偽MSX1化としては ほぼ完成しましたので、メモリーボードやPSG音源などを改造しないようにしたり、ArduinoMEGAを使って実現しているPS/2キーボード接続を独自基板へして行きたいと思ってます。
コメント