n2kd FM Driver
FM sound driver for PC-9800 series and PC/AT compatible computers.
Download: n2kd_v1.0_beta_3f.zip
n2kd は NEC PC-9800 シリーズとその互換機、及び PC/AT 互換機の DOS 上で動作する FM 音源ドライバです。 MML を記述したテキストファイルをコンパイルして曲データを含むバイナリファイルを作成し、その曲データファイルをドライバに与えることで楽曲を演奏します。
対応している FM 音源は OPL3 です。 ドライバと MML コンパイラともに使っている命令は 186 命令です。
対応音源
以下の OPL3 での演奏に対応しています。
- PC-9800 シリーズ
- Creative SB16/98 及び Canopus T64S と同様の IO ポートでアクセスできる OPL3
- Yamaha YMF724/744/754 内蔵の OPL3 ブロック
- PC/AT 互換機
- Sound Blaster の IO ポート(2x0h)でアクセスできる OPL3
- Yamaha YMF724/744/754 内蔵の OPL3 ブロック
本ドライバは音源ボードの OPL3 機能の有効化等の機能は持っていません。 OPL3 を搭載した音源ボード等の設定はユーザが事前に行う必要があります。
その他環境固有の注意点や制約に関する情報は、配布物に同梱のドキュメントを参照してください。
サンプル MML・HTML 版 MML マニュアル
サンプル MML のダウンロード: yaku.mml
東方風神録より「厄神様の通り道 ~ Dark Road」の OPL3 アレンジを作成しました。 n2kd 付属の MML コンパイラの n2kc でコンパイルすることができます。 曲データ作成の参考にどうぞ。
2026/04/29 に yaku.mml を更新しました。
もともとは、スケール指定命令がまだ未実装であった初期の時代に作成した MML であるため、調号による音程変化をすべて + / - 命令で記述していましたが、現在の n2kc 向けの MML ではスケール指定命令がありますので、これを用いるようにしました。
HTML 版 MML マニュアルは こちら にあります。
実装関連記事
- デチューン・LFO 等の実装
- メモリマップ
- タイマ(テンポ管理)
- 曲データファイルフォーマット(執筆予定)
予定している今後の計画
- PC-9801-118 ボード対応
- OPN 系の音源チップ対応
既知の不具合
- 環境によって曲の演奏速度が異なる場合がある(調査中)
更新履歴
- 2026/04/23: v1.0 (beta 3f)
- ユーザファンクション設定機能が正しく動作していなかったのを修正
- 2026/04/20: v1.0 (beta 3e)
- 音量相対変化命令を使った時、間違った音量になることがあるバグを修正
- マクロ名の1文字目は大文字または小文字の英字でなくてはならない制約を追加
- 2026/04/12: v1.0 (beta 3d)
- A1=1 のパートの演奏処理で A1=0 のレジスタに書いてしまうことがあるバグを修正
- 2026/04/04: v1.0 (beta 3c)
- SB 常駐時のテンポ変更処理を微調整
- 繰り返し命令に指定できる繰り返し回数が2以上だったのを1以上に変更
- コンパイルエラー行にタブ文字があるとエラー位置表示の桁がずれるのを修正
- 2026/03/13: v1.0 (beta 3b)
- PC/AT 互換機版で SB に常駐すると常駐解除に失敗する不具合を修正
- 2026/03/12: v1.0 (beta 3a)
- LFO の仕様変更
- 曲データファイルフォーマットも変わっています
- ポルタメントの仕様調整とバグ修正
- MML で数値を記述する際に2進数での記述を可能にした
- マクロ定義と同じ行に1行コメントを記述可能にした
- LFO の仕様変更
より過去の更新履歴
- 2026/02/26: v1.0 (beta 2e)
- テンポ管理で使う割り込みを指定するプログラム引数追加
- BLASTER 環境変数のパース処理を調整
- 演奏処理に合わせたユーザファンクション呼出機能追加
- ドライバ制御ファンクションの呼出可能条件調整
- PIT 常駐時のテンポ管理処理調整
- 他のタイマに常駐した場合とのテンポの差が小さくなるよう変更
- RR 上書き命令追加
- 2026/02/08: v1.0 (beta 2d)
- 演奏時のテンポ管理に Sound Blaster 16 for PC-9800 の PCM 再生割込を利用する機能を追加
- 2026/01/11: v1.0 (beta 2c)
- キーオン同期しない LFO を開始するとハングする問題を修正
- 2026/01/10: v1.0 (beta 2b)
- #Include 及び複数行コメントが正しく働かない場合があったのを修正
- 2026/01/07: v1.0 (beta 2a)
- 曲データファイルフォーマット調整
- 2026/01/04: v1.0 (beta 1a)
- PC-9800 版のアセンブルでエラーが出るのを修正
- ポルタメントの演奏のバグ修正
- 2026/01/03: v1.0 (beta 1)
- 大改修(機能追加・バグ修正等色々)
- PC/AT 互換機対応
- 2022/06/11: v0.1.2 (beta 2)
- 演奏中に常駐解除すると音が鳴り続ける不具合を修正
- YMF724/744/754 の OPL3 を探す機能を追加
- INT5 で割り込む OPN(A) のタイマを優先して使用するよう変更
- 2021/09/01: v0.1.2 (beta 1)
- 初版