MSXの周辺ペリフェラル
MSXの2回目は、周辺ペリフェラルの話をしようと思います。MSXに使用されたチップは、どれも廉価なもので、「MSX独自の」特徴といえるほどのものはありません。しかし、それは裏を返せば当時のパソコンに共通して見られる仕様でもあるのです。
目次
VDP・TMS9918
MSXに使用されたVDP「TMS9918」は、決して高性能ではありませんが、少ないメモリで多くの色数を出せる、優れたものでした。
また、このチップではスプライトも使用出来るため、ゲーム用途に性能を発揮します。MSXがパソコンとしてよりも「ゲーム機」として捉えられ、低い地位に甘んじたのは残念なことですが、どちらにせよ当時のパソコンの(そして現在も)使用目的の多くはゲームであったことは否めません。その点でこのVDPを選んだのは間違いではなかったと思います。
TMS9918は、CPUのメモリ空間とは別に独自のメモリ空間を16Kbyte持ち、CPUからは周辺デバイスとしてI/Oポートを使ってアクセスされるように設計されていました。 このメモリ空間は通常全てRAMで埋められ、文字コードだけでなく文字フォントもここに置かれました。そのため画面上の文字フォントは変更が可能で、絵にしてゲームなどに利用することも出来ました。(このような方式の画面をProgramable Character Generator : PCGと呼びます) また、スプライトのドット絵データや表示位置、色のデータなど、画面表示に関するデータはすべてVRAMに置かれました。 TMS9918の基本的な解像度は256×192dotで、表示色数は16色でした。この解像度は当時でも低めの部類に入りましたが、家庭用テレビを使用することを考えると妥当な数値だったと思います。また、16色という色数はデジタル8色が同然だった当時としては、多い色数でした。 |
TMS9918の画面モード
TMS9918には4つの画面モードがありました。それぞれ、テキストモード、マルチカラーモード、グラフィック1モード、グラフィック2モードと呼びます。
テキストモードは、その名のとおりテキストの表示を目的としたモードです。画面には横40文字×縦24行のテキスト表示が可能でしたが、1文字の大きさは6×8dotという中途半端なものとなるため、アルファベットはともかく、ひらがなの表示には向きませんでした(注:MSXの標準キャラクタセットにはひらがなが含まれていた)。
そのため、ひらがな混じりのプログラムでは、ひらがなの端が切れて読みにくかった覚えがあります。
マルチカラーモードはいわゆるローレゾグラフィックです。他のモードの4×4dot分の大きさのドットに16色中の任意の色をつけて絵が描けます。このモードでは1dotを4bitで表わしており、1dotを1bitで表わす他のモードと比べてみるとドットの大きさが4倍であることの正当性がわかります(縦方向まで大きくすることはないのだが)。
グラフィック1モードは、グラフィックとは呼んでいますが、MSXの標準テキスト画面です。テキストモードとの違いは、横32文字になり、その代わりに1文字の大きさが8×8dotになることです。
このモードでは、キャラクタセット8文字毎に文字色・背景色を変更することが可能でした。文字は全部で256文字ありますから、32種類のグループが出来ることになり、PCGで自由な文字を作れることと組み合わせて絵を描くことも出来ます。これがグラフィックモードと呼ばれる由縁でしょう。
写真はグラフィック1モードで作られたと思われる初期のMSXゲーム、「MAPPY」(ナムコ)。部品が全て単色で表現されているのがわかる。 |
グラフィック2モードは、正真正銘のグラフィックモードです。とはいっても、やはりPCGを利用して絵を描きます。
このモードではPCGのキャラクタ定義数が、256個から一気に3倍の768個に増えます。ただし、画面は上段、中段、下段の3段に別けられ、それぞれに256個という形です。
それでも、これで画面の全てを、別々のキャラクターで覆い尽くすことが可能になります。あらかじめ覆い尽くした後でPCGを変更することで、疑似的にグラフィック画面とすることも可能です。
写真はグラフィック2モードで作られたと思われる、「TEXDER」(ゲームアーツ)。敵キャラクタに影や光がついていたり、自分のロボットが多色で描かれている。 |
このモードでのPCGは、1ライン毎に前景色・背景色をもつことが可能でした。つまり、画面上では横8dot毎に任意の2色が使えることになります。これは4bitの色情報2色分をまとめた1byteと、横8dotのbit毎にどちらの色を使うかを示す1byteの、合計2byteの情報で制御されていました。
この2色を超える色を使うような複雑なグラフィックでは、いわゆる「にじみ」「色化け」などと呼ばれる現象が起こりますが、そうでない限り、ドット当たり2bitで16色を出せることになります。これはメモリが高価だった当時、非常に優れた方式だったと思います。
この方法も、初期のころは上・中・下の各256個のキャラクターに同じ絵を割り振り管理を楽にしていたようですが、使いこなされたころにはそれぞれの段に別々の絵を割り振るようになってきます。
このような方法では上下方向にキャラクターを移動させるのは難しく、必然的に多くのゲームは「グラディウス」のような横スクロールものになっていきます。
しかし、私が覚えているなかでいちばんグラフィック2モードの特徴を巧みに利用していたのは、コナミの「F1スピリット」でした。
このゲームは縦スクロールのカーレースゲームだったのですが、上段、中段、下段と風景が通りすぎるあいだに、絵が微妙に変化して視差を感じさせるようになっていました。これは同じキャラクターコードでも画面の上中下段でキャラクターが変わってしまうことを逆手に取った演出で、画面は上空からカメラで撮影しているような実在感をもっていました。
スプライト
以上の4つの画面モードのうち、テキストモード以外ではスプライトが使用出来ます。スプライトは16×16dot、又は8×8dotの単色のものが32枚表示でき、横には4つまで並べることが出来ました。(4つを超えると番号の若い方から4つだけ表示される)
また、特殊機能としては2倍の拡大、衝突判定がありましたが、グラフィックとのプライオリティ等はありませんでした。
スプライト機能はTMS9918の大きな特徴ではありますが、スプライト自体に工夫はそれ程見られませんので、今は詳しく扱いません。(MSX2の時に詳しくやりましょう)
後日追記 2013.7.29
MSX・ファミコン 30周年記念で、GRAPHIC2 とスプライトの詳細を説明する記事を書きました。
基礎技術、ファミコン編も含めて3本だてです。上記説明で「もっと詳細を知りたい」と思った方や、当時のゲームなどで「どうやって処理していたのか」と疑問がある方は読んでみてください。
PSG・AY-3-8910
AY-3-8910というのは、当時最も使われていた音源チップです。VDPは独自に開発しても音源はこのチップを使っているパソコンがたくさんあったことからも、普及の度合がわかります。(あるいは、見た目ですぐに違いがわかるVDPほど、音源が重視されていなかったのかもしれません)
AY-3-8910には3チャンネルの発声器があり、同時に3音までの和音を出すことが出来ます。これらの発声器は独立に4096段階(8オクターブ)の音階と、16段階の音量を指定することが出来ました。
このほか、3チャンネルに共通したものとして、ノイズ発生器とエンベロープ機能がありました。
ノイズ発生器はその名のとおりノイズを発生するもので、どこか1チャンネルを通して出力されることになります。ノイズはいわゆる白色雑音ではなく、平均周波数をもつことが出来ます。
エンベロープ機能は連続的に音量を変更する機能で、8種類の波形から変化のパターンを選び、変加速度を設定することで、さまざまな楽器の音に音色を似せることが出来ました。
このジョイスティックポートの規格自体はATARI社が作成したもので「アタリジョイスティック」規格として有名ですが、MSX規格ではこの概念をさらに押し進め、パドルやタッチパネル、ライトペン、マウス、トラックボールまで接続出来るようにしました。
そのため、現在ではこれらの機器は「MSXジョイスティック」「MSXマウス」などと呼ばれています。(FM-Townsでもこの規格が採用されていたため、さらに「Townsマウス」などとも呼ばれますが)
たった3チャンネルの単純な音源ではありますが、工夫次第で多彩な音を出すことも可能です。あえて2つのチャンネルで同じ音をだすことで、厚みのある音にしたり逆に透明感のある音にしたり…というような技法も良く使われました。
MSXに限らず広く使われていた音源だからこそ、その使いこなしにもさまざまなテクニックがありました。私は音楽に疎いため、このチップの使いこなしについては残念ながらあまりお話しできませんが、今でもその独特の音色が好きだ、という人もいるくらいの音源です。
…っていうか、ページ開設時にリンクさせてもらい、その後たびたび行方不明になるものを、2012.3に発見、再リンク。
彼のページのプロフィールに書いてある「MagicalKid Wiz」ってのは僕が聞いたものですね (^^;