README 4.11 KB
本ディレクトリは以下の4つのサブディレクトリから構成されています。

	bank/	: playseq.disk用バンクファイルのディレクトリです。

	lib/	: 本サンプルプログラムで使用しています追加オーディ
		  オ関数のディレクトリです。

	seq/	: playseq.disk用シーケンスデータのディレクトリです。

	tools/	: バンクファイル(.ctlファイル及び.tblファイル)を
		  64DD用に修正するパッチプログラムのディレクトリで
		  す。

また本ディレクトリには以下のファイルが含まれています。

	README : 本ファイル

	Makefile
	playseq.c
	playseq.h
	seqdata.c
	spec
	wavedata.c


< playseq.disk >

(1) 目的

本プログラムは、64DDのディスクからRAMに転送された波形データと、64DD
内蔵ROM(DDROM)上の波形データとを、SGIオーディオライブラリで併用す
るためのサンプルです。

基本的な方針は64DDプログラミングマニュアル「9.2.4 SGIドライバ上での
使用に関する補足」に添っていますので、参照してください

(2) 説明

本サンプルプログラムでは、DMAコールバックルーチンの中で、注目波形デ
ータがRAM上にあるのかDDROM上にあるのかを識別し、そのデータに対し適
当な処理を行っています。このとき識別に用いる為のフラグは、サブディ
レクトリtools/内のサンプルアプリケーションdd_bankにより、各データの
アドレスに付加されます。

バンクファイル(.ctl)に記録されている波形データのアドレスの内、
DDROM内に存在する波形データのアドレスは、サンプルアプリケーション
dd_bankにより、その先頭4bitに0xfが付加されます。その結果修正された
バンクファイル(.ctl)の各波形データのアドレスは、その格納先により、
以下の2通りに分られます。


	波形データの格納先  |  波形データのアドレス
       ---------------------------------------------
	       DDROM        |     0xf???_????
       ---------------------------------------------
	      その他	    |     0x0???_????

プログラム内で、この修正済みバンクファイル(.ctl)をディスクからRAM
に転送し、サブディレクトリlib/に用意してあります追加関数
dd_alBnkfNew()(alBnkfNew()に相当)に渡しますと、各波形データのアド
レスはさらに以下のように修正されます。


	波形データの格納先  |  波形データのアドレス
       ---------------------------------------------
	       DDROM	    |     0xf???_????
       ---------------------------------------------
               RAM          |     0x8???_????
       ---------------------------------------------
	      その他	    |     0x0???_????


DMAコールバックルーチン内では、シンセサイズドライバより渡された波形
データアドレスの先頭4bitからデータの格納先を識別し、その識別先に応
じた適当な処理を行います。

DMAコールバックルーチン内での具体的な処理の例を以下に示します。これ
は本サンプルプログラムのソースplayseq.c内で定義されているDMAコール
バックルーチンdmaCallBack()の一部です。

	    /* check address (device flag) */
	    tmp = addr & DDROM_FLAG;

	    /* When in DDROM */
	    if(tmp == DDROM_FLAG) {

	      /* When in 64DD internal ROM */

	      piHandle = driveromHandle;
	      addr &= 0x0fffffff;
	    } else {

	      /* When in RAM */
	      if(tmp)
	        return (osVirtualToPhysical((void *)addr));

	      /* When in CARTRIDGE ROM */
	#ifdef FINAL
	      piHandle = cartromHandle;
	#else
	      osSyncPrintf("Error : Data in CARTRIDGE ROM\n");
	#endif

	    }

addrはシンセサイズドライバより渡される波形データのアドレスです。ま
たDDROM_FLAGはサブディレクトリlib/内のヘッダファイルdd_audio.hの中
で0xf000_0000と定義されています。

上記の様に、波形データの格納先によりその後の処理を違えています。波
形データがDDROM内に有るときは、DMAに用いるPIハンドラ(piHandle)に、
DDROM用に初期化された値(driveromHandle)を用います。またカートリッ
ジROM内に有るときはカートリッジROM用に初期化された値(cartromHandle)
を用います。この後実際の波形データのDMAを行います。

波形データがRAM上に有るときは、そのアドレスを返して処理を終わります。

(3) 注意

・本サンプルプログラムはUltra64開発環境2.0I付属のサンプルプログラム
playseqを"(1) 目的"に従って改造したものです。playseqからの改造点は、
(2)で示したDMAコールバックルーチン以外には、(大きなところで)64DD
の初期化及び64DDディスクからのデータの読み込み処理の追加です。これ
らの処理の詳細及び64DD関数の使用方法等については、64DDプログラミン
グマニュアル及び64DD開発環境2.0I付属のサンプルプログラムddspgameを
参照してください。

・本サンプルプログラムで使用しています.instファイルは例ですので、よ
り良い.instファイルを各自作成してください。


						任天堂 開発3部