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

ベンド

この機能をベンドと言っていいのかどうかはよく分からなかったのですが、鳴らしたい周波数より高い周波数、あるいは低い周波数から徐々に目的の周波数に近づいていく機能です。

コマンド

データ オフセット 内容
D6H +0 ベンドアップ設定(低い周波数から目的の周波数へ上がる)
(+3CH)[ベンドフラグ]
b4[ベンド処理有効フラグ]=1
b6[ベンド処理中フラグ]=1
b7[ベンドアップダウンフラグ]=0
+1 (+39H)[ベンド増減値]
+2 両方に同じ値が設定される
(+3AH)[ベンドカウンタ]
(+3BH)[ベンドカウンタ元値]
データ オフセット 内容
D7H +0 ベンドダウン設定(高い周波数から目的の周波数へ下がる)
(+3CH)[ベンドフラグ]
b4[ベンド処理有効フラグ]=1
b6[ベンド処理中フラグ]=1
b7[ベンドアップダウンフラグ]=1
+1 (+39H)[ベンド増減値]
+2 両方に同じ値が設定される
(+3AH)[ベンドカウンタ]
(+3BH)[ベンドカウンタ元値]
データ オフセット 内容
D8H +0 ベンド処理オフ
(+3CH)[ベンドフラグ]
b4[ベンド処理有効フラグ]=0
b5[ベンド状態フラグ]=0
b6[ベンド処理中フラグ]=0
b7[ベンドアップダウンフラグ]=0

動作説明

ベンド設定をすると、元の周波数より上下にずれた位置から発音を開始して、徐々に目的周波数に近づきますが、ベンド処理はエンベロープと同じく音処理のルーチンで処理されています。

そのような流れなので発音1クロック目は音処理を通らず、その1クロックだけ一瞬元の周波数が鳴ってしまう仕様です。

2クロック目から音処理ルーチンに流れてベンド処理が行われます。

音を出して最初の処理は、離れた周波数を算出することから始まります。

その方法は、ベンド増減値をベンドカウンタの数だけ(+0BH)(+0AH)[分周比データ]から繰り返し減算/加算していくやり方で分周比を算出します。

初回の処理はそうやって算出した分周比を出力します。

2回目以降は、分周比にベンド増減値を加算/減算し、新しい分周比とします。また、(+3AH)[ベンドカウンタ]を-1し、0になればベンド終了とし、(+11H)(+10H)[音階分周比]を分周比として出力します。

そして(+3CH)b6[ベンド処理中フラグ]を0にして次の音までベンド処理をしないようにし、(+3AH)を元の値に戻します。

サンプル

データ 意味
FEH 01H (+09H)を01Hにセットする。音名音長のデータ形式指定
E9H 08H 基本音長8
EAH 0DH V13
D2H O4
F8H 05H 波形転送5番(sin波)
D6H 08H 10H ベンドアップ
分周比8*10H下から8ずつ音程が上がる
05H 45H 75H o6c e g
D7H 08H 10H ベンドダウン
分周比8*10H上から8ずつ音程が下がる
05H 45H 75H o6c e g
FFH 曲データ終了