データの構造/直接指定
このデータ形式にするには、コマンドFEHで(+09H)[データフラグ]のb1[直接指定タイプ]を1にします。
音長はコマンドE0H-E3Hのデータで指定したクロックを使用します。
同じくコマンドE0H-E3Hでノイズやトーン若しくはSCCのキーオンのフラグを設定します。
SEで使用されることが主なのでクロック値は1など細かい値が設定されていることが多いようです。
このデータ形式では、PSGのハードウェアエンベロープもコマンドE5Hにより鳴らすことができます。
その時の音量値指定は無効です。
直接指定形式のデータフォーマットは複数あります。
- ノイズのみ有効の場合
データは1バイトで、下位4bitが音量値(0H-DH)となります。上位4bitは0です。
- (+0EH)[音処理フラグ]b6[音量値無効]が1(音量値なし)の場合
-
データは1バイトで、分周比下位のデータとなります。この分周比は00H-CFHの範囲しか指定できません。(+10H)[データから取得した分周比値、下位]に入力されます。
- 音量値が有効で、(+0EH)[音処理フラグ]b5[分周比下位無効]が1(分周比下位無効)の場合
-
データは1バイトで、上位4bitが音量値(0H-CH)、下位4bitが分周比上位となります。
分周比上位は(+11H)[データから取得した分周比値、上位]に入力されます。
- 音量値、分周比下位両方有効の場合(デフォルト)
-
データは2バイトです。
1バイト目上位4bitが音量値(0H-CH)、下位4bitが分周比上位。2バイト目が分周比下位。分周比は(+11H)(+10H)に入力されます。
音名音長形式、直接指定形式、音長指定直接変化形式の3種の発音データとコマンドデータの区別は値の範囲で行われています。D0H-FFHがコマンドデータでそれ以外は3種のデータのどれかという区別です。
なので、分周比のみの1バイトデータの場合、D0H-FFHはコマンドデータとして処理されてしまうので使用できません。
使用を限定されるためかは分かりませんが、ゲーム中の曲やSEでこのフォーマットを使用している形跡はありませんでした。
上位4bitの音量データも同様で、DH-FHならコマンドデータとして解釈されてしまいます。
そのため0-CHまでしか指定できません。
ドライバではデータから読み取った値を+2して処理しています。それによりv2-v14(ノイズのみはv15)という範囲が実際に出力できる音量範囲ということになっていました。
ということで音量値は(ノイズのみの下位4bitも)データから+2された後に(+12H)[チャンネルボリューム]へ入力されます。
サンプル
データ | 意味 |
---|---|
FEH 02H | (+09H)を02Hにセットする。直接指定のデータ形式 |
E2H 04H | トーンon,ノイズoff, 音長4クロック設定 |
91H 40H | v9+2=11,分周比140H,4クロック鳴らす |
71H 60H | v7+2=9, 分周比160H,4クロック鳴らす |
51H 80H | v5+2=7, 分周比180H,4クロック鳴らす |
31H A0H | v3+2=5, 分周比1A0H,4クロック鳴らす |
11H C0H | v1+2=3, 分周比1C0H,4クロック鳴らす |
E0H 1EH | トーンoff,ノイズoff,音長30クロック消音する |
E1H 04H | トーンoff,ノイズon, 音長4クロック設定 |
09H | v=9+2=11,4クロック鳴らす |
07H | v=7+2=9, 4クロック鳴らす |
05H | v=5+2=7, 4クロック鳴らす |
03H | v=3+2=5, 4クロック鳴らす |
01H | v=1+2=3, 4クロック鳴らす |
00H | v=0+2=2, 4クロック鳴らす |
E0H 1EH | 消音30クロック |
E3H 04H | トーンon,ノイズon,音長4クロック設定 |
91H 40H | v9+2=11,分周比140H,4クロック鳴らす |
F4H | データフォーマットを分周比下位のみにする |
60H | v=11,分周比160H,4クロック鳴らす |
80H | v=11,分周比180H,4クロック鳴らす |
A0H | v=11,分周比1A0H,4クロック鳴らす |
C0H | v=11,分周比1C0H,4クロック鳴らす |
E0H 1EH | 消音30クロック |
F6H | データフォーマットを2バイトに戻す |
E2H 04H | トーンon,ノイズoff,音長4クロック設定 |
91H 40H | v9+2=11,分周比140H,4クロック鳴らす |
F5H | データフォーマットを音量と分周比上位4bitにする |
71H | v7+2=9, 分周比140H,4クロック鳴らす |
91H | v9+2=11,分周比140H,4クロック鳴らす |
71H | v7+2=9, 分周比140H,4クロック鳴らす |
91H | v9+2=11,分周比140H,4クロック鳴らす |
71H | v7+2=9, 分周比140H,4クロック鳴らす |
91H | v9+2=11,分周比140H,4クロック鳴らす |
E0H 1EH | 消音30クロック |
F6H | データフォーマットを2バイトに戻す |
E2 1EH | トーンon,ノイズoff,音長30クロック設定 |
E5H 00H 10H 00H | ハードウェアエンベロープセット。パターン0,周期1000H |
91 40H | 分周比140Hでハードウエアエンベロープが30クロック鳴る。音量値はダミー |
FFH | 演奏終了 |