GIGAMIX DM-SYSTEM2
パレット機能
updated: Feb 13, 1998

  1. 概要
    1. パレット機能とは
    2. パレット機能のルール

  2. DMシステム2からの利用方法
    1. パレットテーブルの設定
    2. パレットの設定
    3. 写しモード
    4. 一気モード
    5. オマケ・VRAMモード

  3. ちょっと高度な活用方法
    1. BASICでフェードイン
    2. パレットアニメーション
    3. VDPマクロで更に面白く

  4. 補足
    1. 使用上の注意
    2. パレットデータの作成法について

第1章 概要

1.1 パレット機能とは

 MSX-BASICでは困難とされた画面のフェードイン・アウト等、パレットを利用した視覚的効果を実現します。


1.2 パレット機能のルール

 パレットデータはMSX2のパレットテーブルと互換でカラー1色につき2バイト、計32バイトが必要です。  1バイト目はRとBが混合しますが、2バイト目はGのみです。数値は0〜7の3ビットを使用します。  パレットテーブルはパレットの羅列です。先頭の32バイトはパレット#0とし、以後32バイトごとにパレット番号がカウントされます。

 パレットテーブルはVRAMとRAMのどちらにも配置できます。が、DMシステム2のパレット機能を有効に活用するにはデータをRAMに配置する必要があります。


第2章 DMシステム2からの利用方法

2.1 パレットテーブルの設定

 RAM上に配置したパレットテーブルの先頭アドレスを宣言します。DMシステム2の出荷時では C000h になってます。宣言できるアドレスは自由です。  パレットデータはpoke文で直接作っても良いですし、事前にファイル化してからbloadや_loadでメモリへ転送しても構いません。

※ DMシステム2本体のアドレスにパレットデータは置かないで下さい。


2.2 パレットを変更する

 パレットを変更します。1バイトの整数を代入しますが、これには3種類の重要な意味があります。  パレット番号は、call setpltで宣言したアドレスから順に0〜63となります。

 通常はパレット番号と同時に各種モード(後述説明)を設定して、この命令を利用します。

 ちなみに特にモードを指定しない場合は、この命令を実行した時点のパレットと、指定したパレットとの輝度(赤、青、緑)を比較して、全パレットの輝度を各1段階ずつ変化させて終了します。これを7回繰り返せば、結果的に目的のパレットになります。


2.3 写しモード

 MSX2のVRAMのパレットテーブル32バイトを、指定されたパレット番号のRAMへコピーします。  「DD倶楽部」など、MSXで作成したCGファイルのパレットデータは大抵CGと一緒に格納されていますが(パレットデータはVRAMのパレットテーブルに格納されています)、DMシステム2では常にcall setpltで宣言したアドレスからのパレットテーブルを使用するのでこの機能があります。

 VRAMのパレットテーブルにパレットデータが入っている場合は、まずこのモードでDMシステム2のパレットテーブルへデータをコピーしてください。スクリーンモードは自動判定しますので、スクリーンモードに関係なくこの命令を利用できます。


2.4 一気モード

 指定したパレットを基に、全パレットの輝度を一度で目的の輝度にして終了します。color=restore と同等の機能です。

2.5 オマケ・VRAMモード

 旧DMシステム(DM-SYSTEM ver.1.50)で搭載したDM-PALETと互換のモードで、VRAM上のDM-PALETテーブルからパレットを変更します。  DM-PALETテーブルは以下の通りでアドレス固定になっています。

第3章 ちょっと高度な活用方法

3.1 BASICでフェード・イン

 画面を「ふわぁ〜っ」と表示するような、フェード・インという映像表現をやってみましょう。

 フェード・インは、現在見ている画面のパレットから次のパレットへ移行するまでの「中間色」が肝心です。BASICでこれを実現するのはかなり面倒なのですが、DMシステム2なら簡単なプログラムで実現できます。

original
画面のフェード・イン

 パレットは最低2セット必要です。そしてパレットテーブルはRAMの任意のアドレスへ事前にロードしておきます。ここでは現在見えているパレットを#0、目的のパレットを#1と決めてサンプルプログラムを紹介します。

 よく「時間稼ぎ」に for〜next文 の空ループを使うプログラムがありますが、MSX2/2+で計算されたウェイトはR800では時間稼ぎにならないくらい速すぎたり、逆にturboRで計算されたウェイトはZ80では重すぎるなど、CPUの速度が変わるととたんにウェイトが破綻してしまいます。ギガミックスとしてはあまり薦められません。

 turboR専用でcall pauseなんて命令もありますが、せっかくDMシステム2があるのですから、ここは call wait を利用したウェイトを使うように心がけてみてはいかがでしょうか。


3.2 パレットアニメーション

 「パレットアニメーション」とは、パレットの変化であたかも画面が動いているように見せる表現法です。MSX-FAN誌の「AVフォーラム」等で多用されたので、有名ですよね。

 ある色だけ点滅させたり、高速に色を変えたりするテクニックもありますし、16色中の何色かをアニメーション用に割り当て、色を隣の色コードへ移動させることを繰り返す「回し」というテクニックなんてのもあります。

original
カラー1〜8の連続で描かれたCG
animation
カラー1〜8を「回し」で表現したアニメーション
 フェード・インにしてもパレットアニメーションにしても、やろうと思えばMSX-BASICだけで実現できます。しかしBASICでパレットを変更する、color=(c,r,g,b)文では1色しか変更できない上、RGBすべての輝度を計算しなければならないので、16色分やろうと思うとその処理に時間がかかってしまいます。やはりパレットが一瞬で全部変化してくれないと、作業状態がまる見えなのでカッコ悪いのです。

 DMシステム2ではパレットアニメも簡単に実現します。要は「一気モード」でフェード・インと同じことをやれば良いのです。


sample program
CHGPLT.LZH (14KB)

3.3 VDPマクロでさらに面白く

 DMシステム2には「VDPマクロ」と呼ばれる、タイマー割り込み内でVDPのレジスタを操作できる機能が搭載されています。

 事前にマクロデータを用意してこれを実行すると、バックグラウンド処理でパレット操作を行いつつ、BASICは次の命令を処理できるという「並列処理」が可能です。

 今までの説明ではBASICプログラムを組んでそのつど実行してきましたが、VDPマクロを利用するとパレットアニメーションは自動運転で、その間に他のプログラムが実行できるわけです。

 プログラムの内部処理に時間がかかっていたりすると画面表示が止まりがちでプレイヤーにストレスを与えかねませんが、パレットアニメーションしている間に裏で計算したり、裏のVRAMへCG等の圧縮データを展開させたりすれば、パレットアニメーションである程度はごまかせますよね(笑)。用途はいろいろあるでしょう。

 詳しくは「VDPマクロ(ds2vm.txt)」をご覧ください。


第4章 補足

4.1 使用上の注意

  • 当然ながらパレット機能が働くスクリーンモードでしか使えません。よって、SCREEN 8ではご利用いただけません。SCREEN 12ではスプライト部分のカラーパレットしか有効になりません。

  • call chgpltで変更したパレットは常にVRAMのパレットテーブルにも書き出しますが、VDPマクロにて変更したパレットは書き出しません(重要)。VDPマクロで変更したパレットを期待して画面のVRAMをセーブするような場合は注意してください。

  • 4.2 パレットデータの作成法について

  • パレットテーブルには、「グラフサウルス」のパレットファイル(.PL*)をそのままご利用いただけます。この場合、合計8パレット分のデータを「グラフサウルス」で作成できます。

  • パレット#0は「フェードアウト専用(画面が消えてゆく)」を推奨しています。データ的には 00h(黒)を32バイト書き込みます。
      CALL POKES ( address, STRING$(32,0) )
  • [Back]
    Copyright (c) 1998 GIGAMIX, All rights reserved.