Appendix
Script700 SE (Sumire Edition) Manual
Script700 SE のマニュアルです。
以下のドキュメントは木下菫氏によるものであり、著作権も木下氏に帰属します。
元となるテキスト script.txt は kbspc.kpi と同じディレクトリにあります。
2000/7/20
Sumire Kinoshita
このドキュメントについて
理解するには、SPCに関しての、ある程度の知識を必要とします。
それを前提として説明しています。
普通にSPCを聴く方には関係ありませんので、このドキュメントは読まなくても大丈夫です。
Script700 SE について
Script700 SEの目的は…省略。わかる方だけ使用して下さい。
ようは現在のSPCの規格で再現出来ない、ドライバ周りの事情を、
手動でなんとかしようというものです。
Script700 SEは、よいこ氏のMDXDRVに搭載されているScript700を、
私が勝手に同一系の処理系を作成、拡張したものです。
基本的にMDXDRVのそれと互換性を持たせていますので、
現存するMDXDRV用のスクリプトは、ほとんどが流用可能と思われます。
詳しくは後述する「互換性について」を参照して下さい。
注意事項
Script700 SEは、私がMDXDRVのドキュメントを参考にして、同一の処理系を作ったもので、
MDXDRVのソースは一切含まれておらず、また、ソースの提供なども受けていませんので、
MDXDRVが実際に、どういったScript700の処理をしているかは、私にはわかりません。
そのため、細かい部分でMDXDRVのそれと、異なる動作をする可能性も、
無いとはいえません。(同一の処理にしたつもりですが)
ま、その辺は見逃して下さい。(ぉ
なお、Script700 SEの拡張された機能について、よいこ氏に質問したりするのは避けて
下さい。迷惑がかかりますので…。拡張された機能への質問は、私にお願いします。
互換性について
Script700 SEは、MDXDRVのScript700と互換性がありますが、サポートしていない機能が
あるため、完全互換とはいえません。以下はその互換性について説明するものです。
- アドレッシングモード
- コマンド
- p は未サポート。
- bt0 は未サポート。
- n は未サポート。
- 拡張コマンド領域
- 全て未サポート。
ただし、スタートアップコマンド領域(独自拡張)にて、
拡張コマンド領域と完全互換の機能を提供しています。
スクリプトの仕様
- Standard Command
:[LABEL]
m #[DATA],[PORT],W[NUM] [PORT],W[NUM]
c #[DATA],[PORT],W[NUM] [PORT],W[NUM]
a #[DATA],[PORT],W[NUM] [PORT],W[NUM]
bxx [0~999]
w []
e
- Startup Command
::
f "FILENAME";
m [0~255],!
c [0~255] [0~255]
fc [0~255] [0~255]
d [0~255] [+-0~?]
e
- スタンダードコマンド領域の基本的な仕様
- コマンドは大文字、小文字どちらでも可。
- [] は数字を示す。表記は全て10進数にて行なう。
- スペースかタブで区切っていれば、一行に複数コマンドを書いても可。
- エラーチェック無し。即、例外になります。
とりあえず、最低限の回避は行ないますが、基本的には落ちます。
- コメントは使用不可。
- アドレッシングモード
- #[DATA] はデータ直結のsigned long型。
- [PORT] はIAPU.RAMの0xF4~0xF7へ直結。つまり範囲は0~3。
- W[NUM] は256個(0~255)のユーザーワークエリア。signed long型。
- :[LABEL] は0~999の任意の値。
- コマンド
- m はデータのコピー。第1引数を、第2引数へコピー。
- c はフラグへデータをセット。第1引数がFLAG1、第2引数がFLAG2。
- a はデータの加算。第1引数の値だけ、第2引数へ加算。
引き算を行なう場合は、#[DATA]でマイナスを指定すれば可。
- bxx はフラグを参照し、条件を満たせば指定ラベルにジャンプします。
以下はbxx系コマンドの一覧と条件です。
- bra : if (TRUE)
- beq : if (FLAG2 == FLAG1)
- bne : if (FLAG2 != FLAG1)
- bge : if ((signed long)FLAG2 >= FLAG1)
- ble : if ((signed long)FLAG2 <= FLAG1)
- bgt : if ((signed long)FLAG2 > FLAG1)
- blt : if ((signed long)FLAG2 < FLAG1)
- bcc : if ((unsigned long)FLAG2 >= FLAG1)
- blo : if ((unsigned long)FLAG2 <= FLAG1)
- bhi : if ((unsigned long)FLAG2 > FLAG1)
- bcs : if ((unsigned long)FLAG2 < FLAG1)
- w はウェイトの設定。
指定されたSPC700のサイクル分、SPC700に処理を返します。
このコマンドを呼ばない限り、スクリプトは処理を返しません。
つまり、ループを行なう場合は、必ず定期的に呼ぶ必要があります。
- e はスクリプトの終了。
- スタートアップコマンド領域の基本的な仕様
- ラベル記号を2つ続けて書くことによって宣言。
それより以下はスタートアップコマンド領域になります。
演奏開始前に、一度だけ実行されます。
- コマンドは大文字、小文字どちらでも可。
- [] は数字を示す。表記は全て10進数にて行なう。
- "" は文字列を示す。末尾に ; を付けること。スペース可。
- スペースかタブで区切っていれば、一行に複数コマンドを書いても可。
- エラーチェック無し。即、例外になります。
とりあえず、最低限の回避は行ないますが、基本的には落ちます。
- コメントは使用不可。
- コマンド
- f は指定されたSPCファイルを、バッファに読み込みます。
実際に読み込まれている(演奏される)SPCに影響はありません。
- m は指定された音色をミュートします。もう一度指定すると、
ミュートを解除します。つまり、フラグが反転します。
! と指定すると、全ての音色のフラグを反転します。
- c は指定された音色の発音時に、
指定された音色を代わりに発音させるようにします。
- fc は指定された音色の発音時に、f によって読み込まれたSPCの、
指定された音色を代わりに発音させるようにします。
- d は指定された音色の周波数を、指定された値だけデチューンします。
- e はスクリプトの終了。
スクリプトファイルの拡張子
通常は.700を使用して下さい。ただし、Script700 SEで拡張された、
独自の機能を使用したスクリプトの場合は、.7SEでお願いします。
トラブルを避けるためにも…。
サンプル
実際の記述例です。ただし、解説は書いていません。
Script700を自分で記述出来るくらいの方なら、これを見ただけで、
ある程度は理解できるでしょうから…。
下記のものは、自己責任において使用して下さい。
これらの転載などは、特に制限しません。ご自由にどうぞ…。
<sp/65816.700 >
<sp2/65816.700 >
<sp2r/65816.700>
<snt/65816.700 >
<魔道物語はなまる大幼稚園/65816.700>
m 0 w0
:001
w 16384
a #1 w0
m w0 0
bra 1
<Rpg2/65816.700>
m 0 w0
:001
w 32768
a #1 w0
m w0 0
bra 1
<ナージェリブール/65816.700>
m 3 w0
:001
w 32768
a #1 w0
m w0 3
bra 1
上の3つのサンプルは、Script700レベルで記述されていますので、
MDXDRVでも使用可能です。(よって拡張子は.700)
最後に
Script700という素晴らしい規格を提唱された、よいこ氏に、
この場をかりてお礼申し上げます。Script700が存在したからこそ、
Script700 SEを作ることが出来ました。ありがとうございました。