Skip to content

MsxSoundSuiteExtension v0.3.2

Choose a tag to compare

@madscient madscient released this 16 Sep 09:07
· 56 commits to master since this release

利用条件

この ROM イメージは個人利用に限り許諾されています。

再配布には MSX ライセンシングコーポレーションの許諾が別途必要です。
詳細は同梱の NOTICE.md を参照してください。

v0.3.1 からの変更点

変更はすべて Y8960 BASIC Extension(y8960bas.rom)です。MSX-MUSIC・
MSX-AUDIO・SFG・MIDI Play の単体 ROM に利用者から見える変更はありません。

注意:CALL MINIT の引数が変わりました

リズムモードを引数で選ぶのをやめたため、第2引数が分解能になりました。

書き方 v0.3.1 v0.3.2
CALL MINIT(0) Syntax error 定位モノラル・200Hz
CALL MINIT(0,0) 定位モノラル・リズムモードなし・200Hz 定位モノラル・VDP 割り込みに相乗り(約60Hz)
CALL MINIT(0,0,0) 定位モノラル・リズムモードなし・約60Hz Syntax error
CALL MINIT(0,15) 全デバイスのリズムチャンネルを有効に Illegal function call

**CALL MINIT(0,0) はエラーにならずに意味が変わります。**v0.3.1 で
200Hz のつもりで書いていたものが約60Hz になるので、書き換えてください。

リズムモードは、シーケンスが使うチャンネルから自動で決まるようになりました
(下記)。

注意:FM 音源の @n と、音色の初期値が変わりました

  • @ を書く前の音符が @0 で鳴るようになりました(全音源)。ADPCM
    チャンネルではボイスファイル 0 です。曲を繰り返すと、そのたびにこの音色から
    始まります。
  • OPLLEX の @n の 0-63 でプリセット音色を選択できない不具合を修正しました。
    チップ内蔵の音色は 65-127(n−64 の bit5-4 がバンク、bit3-0 がバンク内の番号)です。
    @64 は Illegal function call になります。
  • v0.3.1 までの OPLLEX は、@1〜@15 をチップ内蔵の音色として鳴らしていました
    (@16〜@63 も下位4ビットに畳んで同じ音色になり、@0 はチップのユーザー音色
    でした)。そう書いた MML は @65〜@79 に書き換えてください。
  • OPLLEX でプリセットと VOICE COPY の音色を鳴らすときは、チップのユーザー音色を
    使います。ユーザー音色は 1 回路に 1 つなので、**同じ OPLLEX の 2 つの
    チャンネルで違うプリセットを同時に鳴らすと、あとから選んだほうで両方が
    鳴ります。**チップ内蔵の音色(65-127)はチャンネルごとに選べます。

リズムモードがシーケンスから決まるようになりました

OPLLEX と OPL2EX の各ブロックは、チャンネル 10 のリズム音を鳴らすあいだ
チャンネル 6-8 をリズム音に使います。1 つのブロックでチャンネル 10 と 6-8 は
同時に使えません。

  • モードは MSTART(MPLAY は鳴らし始めるとき)に決まります。チャンネル 10 に
    トラックを持つブロックはリズムモードに入り、6-8 に持つブロックは出ます。
    MINIT の直後はどのブロックもリズムモードではありません。
  • 同じブロックのチャンネル 10 と 6-8 が揃ってしまう MASSIGN MLOAD MPLAY は
    エラーになります。先に割り当てたほうが優先されます。
  • 一時停止からの再開と、リピートで先頭に戻るときはモードを設定し直しません。

ADPCM のデータをディスクに出し入れする文が入りました

  • CALL EXPORT PCM(ファイル名,モード) ―― ボイスファイルの設定
    (番号・置き場所・長さ・サンプリング周波数)と ADPCM メモリの中身を、
    ディスクのファイルに書き出します。モードは 1 が設定、2 が ADPCM メモリ、
    3 が両方です。
  • CALL IMPORT PCM(ファイル名,モード) ―― 同じファイルから読み込み
    ます。設定を読み込むとボイスファイルの設定はすべて置き換わります。
    演奏中は Illegal function call です。
  • 書き出すのは ADPCM メモリに置いたボイスファイルだけで、配列変数と VRAM の
    ものは書き出しません。ディスクの無い機械では Illegal function call です。
  • ファイルのバイト単位の形は
    docs/y8960/pcmfile.md
    にあります。PC 側で同じファイルを作るときに使えます。

SET PCM と COPY PCM が VRAM の 128KB 全体を扱えるようになりました

  • SET PCM のデバイス 5(VRAM)のページが 0-511(128KB) になりました
    (MSX1 は 0-63)。これまでは 64KB までしか読み書きできず、ページ 256 以降を
    指すと先頭に書いていました。
  • **領域が VRAM の外に出るとエラーになります。**これまで範囲の検査はありません
    でした。

直したもの

演奏エンジンが仕様と食い違っていた箇所をまとめて直しました。

  • ポルタメントが、1 tick に 2 半音を超える速さのとき到達点に届かなかったのを
    直しました。
  • (DC) と (FINE) を書いた tick で、番号の大きいトラックがもう1つ先まで
    進んでいたのを直しました。
  • **長さ 0 の音長イベントが 1 tick を取っていたのを直しました。**その tick の
    うちに次のイベントへ進みます。(C0R4 の C が、キーオンと同じ tick で
    キーオフされて鳴らないのはこれまでどおりです)
  • シーケンスが先頭に戻るとき 1 tick 空いていたのを直しました。(1 tick も
    取らずに終わる周だけは、これまでどおり次の tick を待ちます)
  • **フェードアウトが始まると曲が遅くなることがあったのを直しました。**1 回の
    割り込みで進む tick の数は、再生中と同じです。
  • リズムチャンネルに、シーケンス音量・ミュート・フェードが効くようになりました。
    鳴り続けている楽器にも、打撃を待たずにその場で効きます。
  • リズムモードに入るとき、チャンネル 6-8 の F-Number を設定するようにしました。
    これまでは 0 のままでした。
  • リズムのアクセント(@A)が、繰り返しや飛び越しのあとに前の周のものを
    引きずっていたのを直しました。
  • SCC で、シーケンスが持つ波形の読み込みが抜けることがあったのを直しました。
  • **Y で書いた値が、次の音符で消えていたのを直しました。**音符・V・@ が
    受け持たないビットは、Y で書いた値のまま残ります。
  • OPL2EX で @n を書かないトラックが、音色表に無い音色で鳴っていたのを
    直しました。
  • MTRK や MPLAY に式で作った文字列を渡していくと、10 個を超えたところで
    String formula too complex になり、その文が何もせずに戻っていたのを
    直しました。

Y8960 Sequencer BIOS

  • ABI バージョンが 3 になりました。
  • ADPCM のボイスファイル設定と ADPCM メモリを、メイン RAM との間で読み書きする
    4 本を足しました ―― SQPTBR(4097h)、SQPTBW(409Ah)、
    SQPCMR(409Dh)、SQPCMW(40A0h)。ファイルの読み書きは BIOS では行わず、
    アプリケーションが組み合わせます。
  • **SQINIT の E(リズムモード)は使わなくなりました。**リズムモードは
    SQSTRT が決めます。
  • SQALLC は、同じブロックのチャンネル 10 と 6-8 が揃うシーケンスを拒みます。

ドキュメント

  • docs/y8960/pcmfile.md
    を追加しました
    (EXPORT PCM / IMPORT PCM のファイル形式)。
  • シーケンスのバイトコードに、ADPCM ボイスファイルのチャンク 03 と、OPL2EX の
    リズム音色(索引 32-34)を書きました。A8(アクセント)を書き手が出すべき位置も
    はっきりさせました。
  • MML の Y で書いた値が、音符・V・@ とどう重なるかを書きました。

収録物

ファイル サイズ 用途
y8960bas.rom 128KB Y8960 カートリッジ用。5つの拡張BASICをすべて収めたイメージ
mmbe.rom 16KB MSX-MUSIC 単体用。本体内蔵 MSX-MUSIC の差し替え、または ROM カートリッジ
mabel.rom 16KB MSX-AUDIO(Y8950)単体カートリッジ用
sfg.rom 16KB SFG-01/05 と併用する単体カートリッジ用
midi.rom 16KB MIDI インターフェースを鳴らす単体カートリッジ用

下の「Source code (zip / tar.gz)」は GitHub が自動で付けるもので、中身は
ドキュメントとビルド用スクリプトだけです。拡張BASIC 本体のソースコードは
含まれません(バイナリの配布のみが許諾されているため)。

zip にはドキュメントと、各 ROM のビルド元コミットおよび SHA256 を記録した
MANIFEST.txt が入っています。

ステートメントと MML の仕様は docs/ を参照して
ください。