主にMSX関係のコンテンツが置いてあります。

データの構造/音長指定直接変化

このデータ形式にするには、コマンドFEHで(+09H)[データフラグ]b2:[音長指定直接変化0]からb4:[音長指定直接変化2]までのどれかのビットを1にします。

データは1バイトで上位4bitはテーブルインデックス値、下位4bitは音名音長形式と同じ音長値です。

インデックス値の範囲はコマンドとの切り分けのため0H-CHの範囲になると思われます。

インデックス値に規定の音データが対応し、その音を指定音長で鳴らすという動作になります。

テーブルは(+16H)[オクターブ値][音長指定直接変化0]-[音長指定直接変化2]のどれを選択しているのかによって決まります。

組み合わせは多いですが、オクターブ値は 0,1の2種が有効なので実際は6個のテーブルから選択します。

更には[音長指定直接変化0]とオクターブ値0以外のテーブルはダミーデータしか用意されていないように見えるので、実際使用するのは、[音長指定直接変化0]とオクターブ値0の組み合わせのみかと思われます。

その1つのテーブルですらもインデックス値0-9の10種類しか設定されていないので、可能な登録数にはかなり余裕がありそうです。

インデックス値と選択される音一覧

5-8はSCC用で、使用する前に波形5番(sin波)を設定しておく必要があります。

インデックス値
0
1
2
3
4
5
6
7
8
9

データの流れ

音長指定直接変化形式のデータの流れは以下のようになります(実際のデータからの抜粋です)。

アドレス データ 内容
9578 FE 04 音長指定直接変化形式
957A D0 O6
957B E9 04 基本音長4
957D F9 F7 99 曲データアドレス99F7呼び出し
 
99F7 91 インデックス9,音長クロック8
インデックス9から曲データアドレス747Fに変更
747F E2 01 ノイズオフ、トーンオン、クロック値1設定
7481 E5 09 00 0A ハードウェアエンベロープセット
パターン9
エンベロープ周期000AH
7485 94 50 v9+2=v11 分周比450H,1クロック鳴らす。
ハードウェアエンベロープにより音が出ます。割り込み処理ここまで
7487 96 00 v9+2=v11 分周比600H,1クロック鳴らす。
ハードウェアエンベロープが消音していて解除していないので実際はここ以降音が出ません。
割り込み処理ここまで
7489 97 00 v9+2=v11 分周比700H,1クロック鳴らす。割り込み処理ここまで
748B 98 00 v9+2=v11 分周比800H,1クロック鳴らす。割り込み処理ここまで
748D FF データ終了。ハードウェアエンベロープ解除
残り4クロック、消音のまま
99F8 00 次の音のデータ読み込み、インデックス0,音長4
インデックス0から曲データアドレス73BDに変更
73BD E1 01 ノイズオン、トーンオフ、クロック値1設定
73BF E4 00 ノイズ周波数0
73C1 07 v7+2=v9 1クロック鳴らす。割り込み処理ここまで
73C2 05 v5+2=v7 1クロック鳴らす。割り込み処理ここまで
73C3 FF データ終了
残り2クロック、消音のまま
99F9 00 次の音のデータ読み込み、インデックス0,音長4

処理的には上のように曲データアドレスが目まぐるしく入れ替わりますが、データを作る立場から見れば以下のようになります。

アドレス データ 内容
99F7 91 インデックス9の音を8クロック鳴らす
99F8 00 インデックス0の音を4クロック鳴らす
99F9 00 インデックス0の音を4クロック鳴らす

複雑に変化する音を1音として扱うデータになるので、スッキリ短く表現できます。