----------------------------------------------------------------------
                  Script700 SE (Sumire Edition) Manual
                                                            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 は未サポート。

   ＜コマンド＞
   ・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 SEに対する質問や要望、バグ報告などは、
   下記のアドレスまで、メールをお願いします。

   sumire@lien.ac


□ 最後に
   Script700という素晴らしい規格を提唱された、よいこ氏に、
   この場をかりてお礼申し上げます。Script700が存在したからこそ、
   Script700 SEを作ることが出来ました。ありがとうございました。

----------------------------------------------------------------------
Sumire Kinoshita (sumire@lien.ac)
----------------------------------------------------------------------