本ディレクトリは以下の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部
Name |
Last commit
|
History
|
Last Update |
---|---|---|
.. | ||
CVS | ||
bank | ||
lib | ||
seq | ||
tools | ||
Makefile | ||
README | ||
playseq.c | ||
playseq.h | ||
seqdata.c | ||
spec | ||
wavedata.c |