トップ 一覧 検索 ヘルプ PDF RSS ログイン

過去の更新履歴

過去の更新履歴

2017/09/17
2017/06/03
2017/03/29

今回のソフトウェアエンベロープ機能はドライバ側の実装ではなく、コンパイラ内で各種コマンドを列挙したデータに変換して擬似的に実現しています。

そのため、多用しすぎるとデータサイズが肥大化してしまいますのでご注意ください。

2017/03/03
  • ドライバ
    • PSGトラックにおけるポルタメントの仕様を変更し、精度を改善した。
    • 上記の変更に伴い、ドライバの内部バージョンを2に。
    • 音程系ソフトウェアLFOで、最高音を超えたときに音程がおかしくなっていたのを修正。
    • ポルタメントの処理に無駄があったところを削除。

これらの不具合は、kumatanさんがNRTDRVのコアをMDPlayerに移植してくださる際、ドライバのソース(NRTDRV.ASM)を解析する中で発見してくださいました。ありがとうございます!

  • コンパイラ
    • 曲データの再生にMDPlayerを使用できるようにした。任意のフォルダにあるMDPlayerを使用可能。
    • ASLPLAYの実チップ出力に対応。scci.dllと設定済みのscci.iniをaslplayフォルダにコピーしておき、メニュー上の「実チップで再生する」にチェックを入れるとSPFM LightAE-TTL-232R経由でNBV4から曲データを直接再生できる。
    • ドライバ側の仕様変更に伴い、PSGトラックでポルタメントを使ったときの挙動を変更。
      1. pコマンドの分解能を倍にして、変化する速度を従来の半分にした。
      2. 音程指定型ポルタメントを使ったときの精度を改善。
    • 音程指定型ポルタメントで255カウントを超える音長を指定した際にポルタメントの速度が正しく計算されていなかったのを修正。
    • Tone Doubler使用時、255カウントを超える音長が正しく処理されていなかったのを修正。
    • MMLファイルのタイムスタンプを監視していない状態でNRDSELディスクイメージ作成機能を実行したときに、空のファイルを監視しようとしてしまうのを修正。
    • コマンドライン設定で任意のコマンドラインを実行後、約1秒のウェイトをかけるようにした(外部プログラムに曲データのテンポラリファイルを確実に読み込ませるため)。
    • 設定メニューを整理し、データ再生時のアプリケーションに関する項目は「プレイヤー設定」にまとめた。
    • NRDSELディスクイメージ作成時の最初に表示されるダイアログで、「いいえ」を選択してキャンセルできるようにした。
    • NRTDRV.EXE起動時、ASLPLAYやnrdplayが立ち上がっていたら閉じるようにした。
    • 曲データの42バイト目にドライバの内部バージョンを含む場合、3バイト目の最上位ビットを立てるようにした。
    • (04:30更新) NRDファイルを保存する設定にしているときは、各プレイヤーでのデータ再生時にテンポラリファイルではなく保存済みのNRDファイルを指定するようにした。
    • (04:30更新) コマンドラインが設定されていない場合、実行を中止せずにスキップさせるようにした。
  • セレクタ
    • 曲データの3バイト目をチェックして、最上位ビットが立っていた場合は曲名の先頭アドレスを+1するようにした(内部バージョン番号のアドレスと被るため)。
2017/02/02
  • コンパイラ
    • nrdplayに対応。AE-TTL-232Rを介してUSB接続したNBV4から曲データを直接再生できるようになった(詳しくは「AE-TTL-232R+NBV4でNRTDRV」にて)。
    • 曲データ再生時に任意のコマンドラインを実行できるようにした。「設定(C)」→「コマンドラインを設定する」にて設定可能。
2017/01/19
2016/12/17
2016/12/03
  • ドライバ
    • MFADEエントリ実行時のフェードアウト速度を固定値にした(今まではFOコマンドを最後に実行したときの速度になっていた)。
    • フェードアウトの内部処理を修正。
    • 内部バージョン番号用のワークエリアを用意。
    • ワークエリアのアドレス変更。
  • コンパイラ
    • viコマンドv+コマンドv-コマンドでの省略時の値)を新設。
    • 曲データに内部バージョン番号を埋め込むようにした。
    • 簡易説明のテキストを修正。
    • 簡易説明のテキストを読み込む処理に問題があり、正常に実行できなくなってしまっていた不具合を修正。
  • セレクタ/OPM音色エディタ
    • ドライバ側のワークアドレス変更に追従。
2016/12/01
  • コンパイラ
    • PVコマンド(パターン指定ボリューム)を新設。パラメータを並べて記述すると、キーオンのたびにその値が設定される。
    • クリップボードの内容を自動的に検索ボックスに代入する機能を新設(デフォルトでは無効)。
    • クリップボードを監視し、コマンド名やヘッダ名などが該当した際に簡易説明メッセージボックスを表示する機能を新設(デフォルトでは無効)。
    • 同音連打の最適化処理を見直して、行末が最適化されていなかったのを修正。
    • Lコマンドの手前で音色、音量、パンポットのいずれかを指定した場合、ループするたびに再指定されるようになってしまっていたのを修正(たとえば「@0 o4 q4 L c1」が「o4 q4 L @0 c1」と等価になっていた)。
    • OPM#2でOPM音色パラメータ直接設定コマンドを使用した際に正しく機能していなかったのを修正(本来のレジスタ番号+8のレジスタに書き込まれてしまっていた)。
2016/11/16
  • ドライバ
    • ハードウェアLFO初期設定用の機能を新設。
    • 仮想OPMレジスタへの書き込みを最適化。
    • 演奏開始時、OPMの音量設定は先行処理させないようにした。
    • 演奏停止時、OPMのSLとRRをすべて15にするようにした(発音を完全に止めるため)。
  • コンパイラ
    • ASLPLAY使用時、S98ファイルの記録にも対応。
    • 従来の簡易演奏モニタ搭載IPLパッチと、OPM音色エディタ搭載のIPLパッチをメニューから切り替えられるようにした。
    • 今まではNRTDRV.EXE起動時にIPLパッチを読み込んでいたが、上記の変更に伴い、MMLコンパイル後に変更。
    • HLコマンドで、ドライバ側に新設した機能を使うようにした(従来はコンパイラ内でzコマンド相当に置換していた)。
  • パッチ
    • 実機およびX1エミュレータ用のOPM音色エディタ(IPLOPMED.BIN)を用意した。
    • IPLPATCHのCRTC初期化処理を修正。
2016/11/05
  • ドライバ
    • 演奏開始時、曲データの先頭に音符と休符以外のコマンドがある際は先に1コマンド分だけ処理し、負荷を分散させるようにした(演奏開始した瞬間のもたり対策)。
    • 細部の最適化。
  • コンパイラ
    • PPコマンド(パターン指定パンポット)を新設。パラメータを並べて記述すると、キーオンのたびにその値が設定される。
    • 音色の定義と指定で、番号だけではなく文字列も扱えるようにした。ダブルクォーテーションで囲って指定する(例:「@"PIANO"」)。大文字と小文字は区別されない。
    • NRDSELディスクイメージ作成機能で、ファイル名が13文字を超えている場合は13文字にして登録するように修正。
    • NRDSELディスクイメージ作成機能で常に4096バイトのBATファイルを生成してしまっており、末尾にゴミが付いていたのを修正。
    • ディスクイメージ作成時と削除時のメッセージボックスを追加。
2016/11/01
  • ドライバ
    • 音量系ソフトウェアLFOをかけた状態でレガート(スラー)した際、ディレイが元に戻ってしまっていたのを修正。
    • ソフトウェアLFOの仕様と内部処理を変更し、ソフトウェアLFOをキーオン時に初期化しないモードを実装。
    • キーオン処理の相対ジャンプをすべて絶対ジャンプに変更。
  • コンパイラ
    • NRDSELディスクイメージ作成機能を新設。
    • SSPコマンド/SSAコマンド(ソフトウェアLFOキーオン非同期モード)を新設。
    • #REPLACE_TRACKヘッダ(トラック入れ換え)を新設。
    • #MIX_ASLPLAYヘッダ(ASLPLAY用の音量バランス調整)と、#MIX_HOOTヘッダ(従来の#MIX_OPM1/OPM2/PSGに代わるヘッダ)を新設。
    • ASLPLAYのデフォルトオプションに「--adjvol 2=160」を追加。
    • ASLPLAYのオプション指定ミスなどで正常に起動できなかった場合、3秒でタイムアウトさせるようにした(従来は5秒)。また、1.5秒の時点で起動に時間がかかっている旨のメッセージを表示。
    • hootを起動できなかった場合、10秒でタイムアウトさせるようにした。
    • ドライバ側の仕様変更に合わせ、ソフトウェアLFOの出力値を変更。
    • 一部のメッセージボックスが他のウィンドウの後ろに隠れてしまうことがあるのを修正。
    • 一部のエラーメッセージを修正。
  • セレクタ
    • ドライバ側のワークアドレス変更に追従していなかったのを修正。
2016/10/28
  • ドライバ
    • エフェクト関連の割り込み処理を、演奏用の割り込み処理と同様に予約(先頭でRETIを実行)するようにした。
    • 仮想OPMレジスタを無効化するエントリ(INVREG)を新設。
    • ソフトウェアLFOをかけたままタイやレガートで音符を繋げた際、中心点がずれてしまっていたのを修正。
  • コンパイラ
    • ASLPLAYのオプションを「ASLPLAY関連設定」から入力できるようにした。
    • コンパイル後、各トラックの長さを目視するためのカウントビューアを表示するようにした(メニューから表示/非表示を選択可)。
    • コンパイル後、NRDファイルやZIPファイルを保存するかどうかを設定できるようにした(データの再生にhootを使わない、かつZIPファイルを保存しない設定なら7z.exe/7za.exeも不要となる)。
    • 休符を最適化する際、ログファイルに書き出す総カウント数を二重に加算してしまっていたのを修正。
    • リピート終了時に回数指定すると正常にコンパイルできなくなっていたのを直しきれていなかったため、再び修正。
    • 再起動時に前回開いていたMMLファイルを自動で開くようにした(メニューから有効/無効を選択可)。
    • NRTDRV.iniのNLGSaveをSaveNLGに変更。
  • パッチ
    • hoot用パッチとIPL起動用パッチで、DRVINIの後にINVREGを呼ぶようにした。
2016/10/24
  • コンパイラ
    • 同音連打の直後にリピートを使い、なおかつリピート終了時に回数指定すると正常にコンパイルできなくなっていたのを修正。(「c4 [de]4」のような場合)
2016/10/23
  • ドライバ
    • レジスタへの直接書き込み時、音源のI/Oポート番号を指定できる機能を追加。
  • コンパイラ
    • #NOTE_OPTIMIZE_ONヘッダ#NOTE_OPTIMIZE_OFFヘッダを新設。同音連打を自動的にコンパイラ内でリピートに変換し、曲データの容量を削減できる(デフォルトはON)。
    • yコマンドおよびOPM音色パラメータ直接設定で、任意の音源チップを指定できるようにした(省略時は従来と同じ挙動)。たとえば、OPM#2のトラックからOPM#1やPSGを制御できる。
    • OPM音色パラメータ直接設定で、OPMのチャンネル番号を指定できるようにした(省略時はトラック依存)。
    • PSGトラック上でも、OPMのチャンネル番号さえ指定すればOPM音色パラメータ直接設定を使用できるようにした。
    • 休符が連続した場合、コンパイラ内でひとつの休符にまとめるようにした(たとえば「r4 r8 r8 r2」はコンパイラ内で「r1」に変換される)。
    • #Q_MODE 0以外のとき、休符も分解してしまっていたのを修正(たとえば「q4r4」が「r8r8」になってしまっていた)。
    • ドライバの仕様上、255の倍数となるカウント数の音符は使えないため、+1カウントぶん補正してメッセージを表示するようにした(従来のバージョンでも補正しているが、何も表示していなかった)。
    • エラー時などに表示される行番号を0からと1からで選べるようにした(NRTDRV.iniのStartLineで指定可。初期値は0。旧バージョン相当は1)。
    • エラー時の行番号表示を「〜行目」から「〜行」に変更。
    • #J_KEYONヘッダ#J_KEYOFFヘッダを交互に書き換えて再コンパイルした際、重複していないにもかかわらず重複エラーが出ていたのを修正。
2016/10/19
  • コンパイラ
    • QMコマンドを新設。
    • #Q_REVヘッダ#P_REVヘッダ#Y_REVヘッダを新設。
    • #Q_MAXヘッダQMコマンドで255を指定したときのみ、qコマンドでゲートタイムのカウント値を直接指定できるモードに切り替わるようにした(例:「q24」で24カウント後にキーオフ)。
    • yDRコマンド(yADコマンド相当)、ySRコマンド(yDSコマンド相当)を用意した。上位ビットも操作の対象となるため、DT2/AMEの変化には注意が必要。
    • ASLPLAYの実行時、メインウィンドウにオプションを表示するようにした。
    • ASLPLAYのオプションを指定できるようにした(NRTDRV.iniのASLOptionで、初期値は「-x」)。
    • NRTDRV.iniのSiteURLで、左右に空白が付いていたら削るようにした。
2016/10/18
  • コンパイラ
    • NRTDRV.EXEと同じフォルダにPRESET.MMLがある場合、その内容をプリセット定義として扱うようにした(音色とヘッダを定義可能で、ヘッダ重複時は曲データ側の指定を優先)。
    • #DETUNE_OFFSET_OPMヘッダ#DETUNE_OFFSET_PSGヘッダを新設。
    • #OP_REVヘッダを新設。
    • OPM音色パラメータ直接設定yDMコマンドyTLコマンドyKAコマンドyADコマンドyDSコマンドySLコマンド)を新設。
    • NEZPLAY on SDL から ASLPLAY(CLI) への差し替えにあたり、使わなくなった KSSNRT.BIN と KSNRTV2.BIN の存在もチェックしてしまっていたのを修正。
    • OPM音色定義のOPとVOPコマンドの値が統一されていなかったのを修正。
    • 指定トラックを含まないトラックでトラックネストを使用した際、無視せずにエラーを出すようにした。
    • ASLPLAYを使用する設定時に「hoot用ライブラリ作成」を実行した際、1曲コンパイルするたびにASLPLAYを起動してしまっていたのを修正。
    • hootを使用しない設定時は、hoot関連のフォルダやファイルがなくてもエラーが出ないようにした。
    • PSG音色を多重定義すると正常にコンパイルできなくなっていたのを修正。
    • 音色定義の内部処理を変更した。
    • (02:10更新) オペレータマスク関連の動作がエンバグしていたのを修正。
2016/10/12
2016/10/11
  • ドライバ
    • 簡易演奏モニタで、各チャンネルのループカウント(Lコマンド実行回数)を表示するようにした(9回以上の表示は「*」で固定)。
  • コンパイラ
    • #Q_MAXヘッダを新設。qコマンドの最大値を自由に設定できるようにした(ただし、#Q_MODEを1か3にする必要がある)。
    • 同じ音色番号で多重定義した際、後に定義したほうで上書きするようにした(PSGの@Pと@Eの音色番号は共用なので注意)。
    • リピート脱出時およびリピート終端での音量指定、パン指定、音色切り替えが正しく反映されていなかった不具合を修正。
    • NLGファイル出力対応プレイヤーを「NEZPLAY on SDL」から「ASLPLAY(CLI)」に変更。
    • 上記の変更に伴い、iniファイルのNEZUseを廃止し、ASLUseを新設。
2016/09/24
  • ドライバ
    • フレーム落ちが発生しており、本来のテンポよりも遅く演奏されていたので、割り込み処理の先頭でRETIを実行するように変更。この変更により、次フレームの割り込みを予約できる。(すーぱーたーぼさんのご助言による改良です。ありがとうございます!)
  • コンパイラ
    • リピート内で最後の音符にスラーを付けた際の不具合を修正。
2015/05/10
  • コンパイラ
    • DRコマンド(休符用セルフディレイ)を新設。
    • vrコマンド(休符時の音量指定)を新設。
    • 検索ワード入力ボックスの初期文字列を「検索ワード」に変更。
    • バージョン情報の内容を変更。
2015/04/21
  • ドライバ
    • フェードアウト時、PSGの音量が突然大きくなる現象を修正。
    • FOコマンドが機能しなくなっていたのを修正。
  • コンパイラ
    • リピート回数を [〜]n という形で指定した際、ログに出力されるカウント数が常にリピート2回分として計算されてしまっていたのを修正。
  • パッチ
    • IPLPATCH使用時、非ハイレゾ機で画面が表示されなくなっていたため、機種判別ルーチンを修正。
2014/05/15
  • ドライバ
    • PSGトラックで1カウントの音符をレガートやスラーで繋いだ際に次の音符が発音されなくなっていたのを修正。
    • PSGトラックで音程指定型ポルタメントが動作しなくなっていたのを修正。
  • コンパイラ
    • @E(PSGエンベロープ定義)のサスティンレートが効かなくなっていたのを修正し、減衰速度を2014/04/23版の20%に変更。
  • セレクタ
    • X1turboで画面初期化時にゴミが残っていたのを修正(漢字VRAMをクリアしてからテキストVRAMに書き込むように変更)。
    • 機種判別方法を修正(従来はZ80DMAの有無でX1turbo以降かどうかを判別していたが、X1F実機で誤判定されるため、Z80CTCの有無で判別するようにした)。
    • ハイレゾチェックを修正(従来は機種に関わらず前面スイッチの状態を確認していたが、X1F実機でハイレゾにしようとして表示が崩れてしまうため、ノーマルX1ではローレゾに固定するようにした)。
2014/05/03
  • ドライバ
    • PSGトラックにリリースレート、リリースレベルを実装。
    • OPMトラックの頭でポルタメントを使った際、「o4c」から始まらずに超低音が発音されてしまっていたので、演奏開始時にあらかじめ「o4c」相当値を音程レジスタに入れておくようにした(実際には2009/04/20版の時点でこの仕様にしていたが、2009/05/17版からOPMトラックのみエンバグしていた)。
  • コンパイラ
    • Rコマンド(PSGリリース指定)を新設。第1パラメータがリリースレート、第2パラメータがリリースレベルとなる。
    • @E(PSGエンベロープ定義)にリリースレートとリリースレベルを追加し、パラメータの順序とパラメータ判別方法を変更。
    • PSGトラックで "@E<num>" という表記を受け付けるようにした(内部的には "@P<num>" と等価)。
    • NEZPLAYで使用するNRTDRV.BINの指定方法を変更(今まではnezplayフォルダにNRTDRV.BINをコピーしていたが、NRTDRV.EXEと同じフォルダにあるNRTDRV.BINをそのまま使うようにした)。
  • セレクタ
    • ドライバのワークエリアサイズ変更に伴う修正。
2014/04/23
  • ドライバ
    • OPM音色定義時、PAN/ALG/FBをワークエリアに保存する際の手順を修正。
  • コンパイラ
    • リピート回数を“]”の後にも記述できるようにした。従来の書式とも互換性を保っており、後に指定したほうが有効となる。
    • @E(PSGエンベロープ定義)を新設。アタック、ディケイ、サスティンを指定できる(コンパイラ内部で@P相当のデータに変換)。
    • NRTDRVフォルダ直下にnezplay.exeがあると正常に動作しないため、エラーを出すようにした。
    • NEZPLAYの実行に必要なファイルがnezplayフォルダ内に揃っていない場合、エラーを出すようにした。
2014/04/16
  • コンパイラ
    • 曲データの再生にNEZPLAY on SDL for Win32を使用できるようにした。
    • 上記対応に伴い、NLGファイルの記録も可能に。
2013/12/29
  • コンパイラ
    • #TITLEヘッダに制御コードが含まれる場合、文字列に置換するようにした(たとえば 0x1b のエスケープシーケンス開始は 「 ^[ 」 に置換される)。
    • 半角空白を含むファイル名でエラーが発生していたのを修正。
    • トラックの頭で@コマンドを使わずに途中で初めて使った際の不具合を修正。
    • トラック名のみで内容のない行があるとフリーズしてしまうのを修正。
2013/12/15
  • コンパイラ
    • hootが起動してから演奏開始用サウンドコードを発行するまでの待ち時間を設定できるようにし、初期値を1秒(=100)にした(従来は0.5秒固定だったが、一部の環境で再生に失敗することがあった)。NRTDRV.ini内のhootBootWaitキーで設定可。単位は10ミリ秒。
    • #CAPITAL_REVヘッダIコマンドのみ小文字化されなかった不具合を修正。
2013/10/13
  • ドライバ
    • ドライバの開始アドレスを01800Hに変更。
    • 仮想OPMレジスタを追加(03E00H〜)。OPM書き込み時に仮想レジスタも更新するように変更。
    • 一時停止/再開と、トラックマスク演奏をサポート(トラックワーク+19のbit7にミュートフラグを追加。演奏状態フラグ(PLYFLG)を拡張し、bit6=pauseフラグ bit7=maskplayフラグとした)。
  • パッチ
    • ドライバのアドレス変更に伴い、エントリアドレスを変更。
    • 自身のアドレスを0000Hスタートに変更。
    • 曲タイトルの漢字表示に対応(turbo以降で高解像度モード時のみ・要BIOS)。
  • コンパイラ
    • ドライバの開始アドレス変更に伴う修正。
  • セレクタ
    • ドライバの開始アドレス変更に伴う修正。
    • NRTDRV本体内蔵ルーチンとは別のキーボード/レベルメーター描画ルーチンに変更し、画面レイアウト全体を変更。
    • トラックマスク&MaskPlayモードを追加。
    • 演奏終了検知処理の改善。フェードアウト中もキーボード操作できるように変更。
    • レジスタ表示・ヘルプ表示・演奏時間表示・ループカウント表示を追加。
    • OPMレジスタの書き換えに暫定対応。
    • その他いろいろ
2011/10/23
  • ドライバ
    • トラックワークに無限ループカウンタを追加し、トラック毎のループ回数を記録するように変更。(293)
  • その他
    • 実機用ファイルセレクタNRDSEL2D.BINを追加。(293)
2010/06/13
  • パッチ
    • 48倍速PCG定義を実装。(293さん)
    • hoot用PATCHで、演奏停止時のフェードアウトを廃止。
    • ドライバのアドレス変更に伴い、全パッチのエントリアドレスを変更。
  • ドライバ
    • CSM用コマンドを追加。(293さん)
    • PSG制御時の使用レジスタを最適化。(293さん)
    • PCG定義ルーチンとPCGデータをIPLPATCH側に移動。
    • ドライバの開始アドレスを01300Hに変更。
  • コンパイラ
    • xコマンドを新設。(293さん)
    • ドライバの開始アドレス変更に伴う修正。
    • 曲データのサイズ制限を変更(サイズオーバー時にIPL用ワークを破壊していた)。
  • その他
    • アーカイブをLZH形式からZIP形式に変更。

今回、293さんの手腕によって大幅な機能強化を実現していただきました。ありがとうございます!

2010/02/02
  • パッチ
    • hoot用PATCHで、演奏停止時にフェードアウトするようにした(hoot上で演奏中にPキーを押すとフェードアウトする)。
  • コンパイラ
    • X1turbo実機とのシリアル通信が動作しなくなっていたのを修正。
    • ドライバマクロ使用時のカウント数が正しく出力されていなかったのを修正。
    • リピート制御コマンドの回数指定で、2進数や16進数を使えないようにした([$a 〜] のような場合、マクロ名なのか16進数なのか判別できないため)。
    • スラー中にリピート脱出するとスラーが解除されなくなってしまうのを修正。
    • HSP本体のバージョンを変更(64ビット環境での問題を回避)。
2009/08/03
  • ドライバ
    • ワークエリア初期化時にOPMのノイズレジスタも初期化するようにした。
  • コンパイラ
    • アルペジオの展開方法を変更し、アルペジオ使用時の容量を削減した(従来はすべての音符をそのまま展開していたが、ドライバのリピート機能を併用して最小限の音符を展開するようにした)。
    • hoot用ライブラリ作成機能を新設。
    • Cコマンドを新設。
    • リピートの最大ネスト数を5重にした(アルペジオでリピート機能を使うため)。
    • アーカイブの容量制限を緩和(最大8MB)。
    • #TITLEヘッダで曲名の1文字目が文字参照に置換されなかったのを修正。
2009/07/19
  • パッチ/プレイヤー
    • IPLPATCHを次のように改変。
      • X1リソースセンター管理人様に改良していただき、リモート制御によるX1turbo実機の自動リブートに対応。
      • NMIスイッチの扱いを変更。
    • ドライバのアドレス変更に伴い、全パッチのエントリアドレスを変更。
  • ドライバ
    • 軽量キーオン(qコマンドの値を無視して常にq8状態でキーオン)の処理を追加。
    • Qコマンドの初期値を0にした。
    • ドライバの開始アドレスを00600Hに変更。
  • コンパイラ
    • X1リソースセンター管理人様の開発・移植してくださったHSSIOを正式に組み込ませていただき、非常に安定した高速シリアル転送と、リモート制御によるX1turbo実機の自動リブートを実現。
    • #Q_MODEヘッダを新設。
    • シリアル通信関連の設定項目に、「コンパイル開始時にローダーを再起動する」と「シリアル転送時にシステムを毎回転送する」を追加。
    • iniファイルのX1termUseキーをUseX1termキーに変更し、メニューからは設定できないようにした。何らかの事情で x1term.exe を使う必要がある場合はこのキーの値を1にすると有効になる。
    • x1term.exe使用時、実機の準備を促すダイアログでキャンセルできるようにした。

X1リソースセンター管理人様の多大なご協力とご尽力によって、ますます実機環境が快適になりました。このような素晴らしい実機環境を実現していただきまして、本当にありがとうございます!

2009/06/21
2009/06/18
  • パッチ/プレイヤー
    • hoot用PATCHで、OPMレジスタに任意の値を書き込めるようにした。演奏指定コードを下記の順序で発行するとレジスタ書き込みモードになり、書き込みが行われる。
      • 255 → I/Oポート下位1バイト(上位1バイトは07H固定) → OPMレジスタ番号 → 書き込む値
      • 254 → OPMレジスタ番号 → 書き込む値
  • コンパイラ
    • X1リソースセンターにて公開されている「全二重高速シリアル通信モジュール+リモートブート」を使用させていただいて、高速シリアル転送に対応。
    • hoot用のOPM音色レジスタ編集ツールを搭載した。
    • PSG音色エディタを搭載した。
    • IコマンドI@コマンドIPコマンドIVコマンドを新設。
    • **コマンド」でコンパイルを終えたときに、そのトラックの改行可能エリアを認識しなくなってしまっていたのを修正(改行可能エリア内の行頭1文字をトラック名として認識してしまっていた)。
    • {」よりも「}」の数が多いときのエラーメッセージを修正。
    • #CAPITAL_REVヘッダ使用時、Gコマンドが反転していなかったのを修正。
    • コンパイル中は各メニュー項目を選択できないようにした。
    • アルファベット1文字でなおかつ大文字のコマンドについては、オンライン検索時のページ名に「(大文字)」を付けるようにした。
    • 進捗表示のちらつきを抑制。
    • PSG音色定義で同じ音色番号が重複していたときのエラーメッセージを修正(エラーメッセージ内の音色番号が正しくなかった)。
2009/06/04
  • コンパイラ
    • MMLファイルをテキストエディタに関連付けしていない環境でMMLファイルを開こうとした際に「内部エラー(10)」で落ちていたので、その修正。
    • ドライバマクロ使用時に特定の条件を満たすと「内部エラー(7)」で落ちていたので、その修正。
2009/05/17
  • パッチ/プレイヤー
    • IPLPATCHを次のように改変。
      • ジョイスティックのトリガー2でテスト音を鳴らせるようにした。
      • 演奏モニタ呼び出しのタイミングを変更(垂直帰線期間信号の立ち下がりを検出した瞬間に呼び出す)。
      • 機種と音源ボードの判別方法を変更。
      • 演奏モニタの使用/未使用をワークエリアで判別させるようにした。
      • レイアウトなどを変更し、画面下部に曲名とバージョン番号を表示するようにした(まだ仮組み状態なので変更する可能性大)。
    • ドライバのアドレス変更に伴い、全パッチのエントリアドレスを変更。
  • ドライバ
    • 音階とオクターブ値を統合し、キーオンのコマンド番号を128〜247に変更(128=o0c、247=o9b)。ドライバ内でのオクターブ指定は完全に撤廃し、コンパイラに処理させる。
    • トラック停止のコマンド番号を126に変更。
    • トラック終了/マクロ終了のコマンド番号を127に変更。
    • アルゴリズム5〜7の音色で音量が正しく設定されない恐れがあったのを修正。
    • ポルタメントで目的の音程に到達したかどうかの判別ルーチンを修正。
    • 一気に複数のレジスタに書き込むための機能を新設。
    • フェードアウト処理を修正。
    • MMLトラック内からもフェードアウト処理を利用できるようにした。
    • フェードイン処理を廃止。
    • マスターボリューム(フェードアウト処理で使用しているワークエリア)の値を音量コマンドとPSG音色にも反映させるようにした。
    • マスターボリュームの値をTLに反映させながらOPM音色定義を行う処理を追加(フェードアウト時のみ使用)。
    • 演奏停止時に全オペレータのトータルレベルを最小にするようにした(従来はキーオフだけだったので、停止した瞬間にo4cの音が聞こえていた)。
    • 演奏停止時に内部カウンタを初期化するようにした(演奏モニタのレベルメーター描画更新フラグとして兼用しているので、内部カウンタを初期化しないと演奏停止時にレベルメーターが伸びたまま止まってしまうことがある)。
    • 特定トラックの演奏を完全に終了する機能を追加し、トラック一時停止/再開の内部処理を修正(従来は休符を無限ループさせることでトラック終了を再現していた)。
    • PSGトーン/ノイズ切り替えを任意のチャンネルで行えるようにした。
    • オクターブ9の音階テーブルを修正。
    • IPLPATCHのワークエリアを参照し、演奏モニタ未使用時は最小限のPCG定義のみを行うようにした。
    • 音色選択時に、PAN/ALG/FBを決め打ちして、さらにオペレータマスクの値をワークに保存しない機能を追加。
    • 音量をワークエリアにだけ設定する(レジスタへの書き込みを行わない)機能を追加。音色切替と音量コマンドが連続している際、TLレジスタへの書き込みが重複するのを防ぐために使用する。
    • 演奏モニタ用のPCGデータ(フォントなど)を修正。
    • 音色定義などの各ルーチンを少しだけ最適化。
    • ドライバの開始アドレスを00500H、曲データのデフォルト開始アドレスを04000Hに変更。
    • テスト音を修正。
  • コンパイラ
    • マクロ1を「ドライバマクロ」、マクロ2を「コンパイラマクロ」に改称。
    • ドライバマクロ内でリピート制御コマンドを使用できるようにした。ただし、ドライバマクロの中と外をまたぐような指定は不可。
    • ドライバマクロ内でHLコマンドHSコマンドHRコマンドを使用できるようにした。
    • #TITLEヘッダの仕様を変更し、データ内に曲名を埋め込むようにした。
    • #COMPOSERヘッダ#PROGRAMMERヘッダ#MEMOヘッダ#TITLE_ANKヘッダ#MIX_OPM1ヘッダ#MIX_OPM2ヘッダ#MIX_PSGヘッダ#PSG_COREヘッダを新設。
    • FOコマンドを新設。
    • HMコマンドを新設。
    • zコマンドを新設。
    • PSGのハードウェアエンベロープ用のコマンド(sコマンド/mコマンド)を新設。
    • PSG音色定義で「.」(ピリオド)を使用できるようにした。
    • ハードウェアLFO設定時の処理を改良(一気に複数のレジスタに書き込むための機能をドライバ側に追加し、それを利用するようにした)。
    • 一部のコマンドで2進数を使用したときに正常動作しない恐れがあったのを修正。
    • yコマンドで値を省略したときに従来は0として解釈していたが、エラーを出すようにした。
    • 音色設定コマンドと音量コマンドが連続している場合は、最適化してから出力させるようにした(TLレジスタへの重複書き込みを防ぐため)。ただし、VOP0の場合のみ。
    • VOPコマンドが正常に機能しないことがあったのを修正…したつもり。
    • 各トラック(ドライバマクロ内は除く)2回目以降の@コマンドオペレータマスクの値が変化していない場合は再設定しないようにして、さらにPAN/ALG/FBをコンパイラ側で計算させるようにした。
    • hootのタイトル選択と演奏開始にhootclientを使用するようにした。
    • エラーメッセージをメインウィンドウ側に表示できるようにした。設定項目の追加により、従来のダイアログも利用可能。
    • メインウィンドウ下部のフォームから、NRTDRVのサイト内を検索できるようにした。任意のコマンドやヘッダのページを直接閲覧できる機能も搭載。
    • メインウィンドウのメッセージが最下部に到達した際、ウィンドウの内容を消去せずにスクロールさせるようにした。
    • コンパイルしたデータの演奏にhootを使用するかどうかを設定できるようにした。
    • MMLコンパイル開始時にhootを再起動しない設定にした際、hoot.xmlをリロードさせるようにした(hootのウィンドウに対してCtrl+Rキーを発行)。
    • 「ツール(T)」→「外部アプリケーション起動」の項目で、hoot、hoot voice ripper、MX2NRTを起動できるようにした。
    • 「ヘルプ(H)」→「NRTDRVのサイトを開く(S)」の項目で、NRTDRVのサイトにアクセスできるようにした。
    • 「ヘルプ(H)」の位置を一般的なWindowsアプリと同様にした。
    • コンパイル進捗状況の表示位置と色を変更。
    • 分解能192以外のときに音程指定型ポルタメントの誤差が生じていたので、#COUNTヘッダの値を参照するように計算式を変更。
    • 音程指定型ポルタメントで休符を指定したときにエラーを出すようにした。
    • 将来のために確保しているトラック名(0、4〜9、Q〜Z)を使用したときは今までエラーを出さずにスキップさせていたが、エラーを出すようにした。
    • PSGトラックのオクターブ設定可能範囲をOPMトラックと同等(o0〜8)に制限してしまっていたので、9まで受け付けるようにした。
    • 09/04/13版以降、定義されていない音色番号を@コマンドで指定したときのエラーメッセージが正常に表示されなくなっていたので、その修正。
    • トラック名に2バイト文字を使用した際のエラーメッセージが文字化けしていたので、シフトJISコードを判別して正しく表示するようにした。
    • MMLコンパイル中に他のタスクにも処理を渡すようにするための処理が進捗表示有効時にしか効いていなかったので、無効時にも効くようにした。
    • MMLファイル新規作成時の音色定義テンプレートの内容を変更。
    • バイナリファイルを開いたときに警告が表示されるようにした。通常のテキストファイルに含まれない制御コード(改ページや垂直タブなど)が含まれている場合はすべてバイナリファイルとして扱う。
    • コメント処理を全面的に変更。/* 〜 */ の行頭・文中制限をなくし、常にネストできるようにした。
    • コンパイラマクロで自分自身を呼び出すとフリーズしてしまうバグを修正。
    • コンパイラマクロを呼び出した行やコンパイラマクロ内でエラーが出たときに、なるべく正しい桁数を表示するように変更(従来はマクロ展開後の桁数を表示していた)。
    • 音色定義の解釈をヘッダやコンパイラマクロと同じタイミング(PASS1)で行うように変更。この変更により、音色定義より前の行に書かれたMMLトラックからも音色を呼び出せるようになった。
    • 複数トラック定義で**コマンドを使用したときの処理を修正(たとえば「ABC **」と記述したときに、トラックAにしか「**」が効かない恐れがあった)。
    • 改行有効中でも「#」や「$」が行頭にあるとヘッダやコンパイラマクロとして解釈してしまっていたので、スキップさせるようにした。
    • OPM音色定義ルーチンを改良し、「{」と「}」の有無、パラメータの過不足、文法エラーなどを厳密に解釈させるようにした。
    • トラック解釈ルーチンを改良し、行頭に空白やタブを含んでいても正しく処理されるようにした。
    • ドライバの仕様変更に合わせて、トラック一時停止コマンドの内部データを変更。
    • 空のテキストをコンパイルしたときにエラーを出すようにした。
    • 曲データがサイズオーバーしていたときに、曲データのサイズを「-1」と表示してしまっていたので、利用可能なサイズの算出方法と共に修正。
    • 演奏モニタ未使用時、従来はNRTDRV.Sysに含まれるIPLPATCH.BINのプログラム本体を書き換えていたが、ワークエリアを書き換えるようにした。
    • NRTDRV.Sysに含まれるIPLPATCH.BINのワークエリアに、ドライバ本体とIPLPATCHのバージョン番号を書き込むようにした。
    • hootフォルダとx1フォルダの有無を確認するようにした。
    • 各ファイルの有無のチェックを強化。
    • hoot起動時、既にhootのウィンドウが存在するかどうかを確認するようにした。存在するときは起動処理をスキップ。
    • MMLファイル監視中は、常にコンパイラのウィンドウを再描画するようにした。別のウィンドウが重なった後などにウィンドウの表示が崩れる症状を改善。
    • 曲データの拡張子を "*.BIN" から "*.NRD" に変更。
    • HSP-NEXT様、森々せつき様、月影とも様の作成されたモジュールスクリプトを外部ファイル(module.hsp)にして、NRTDRV.hspの内容は拙作のスクリプトのみとなるようにした。
2009/04/27
2009/04/20
  • パッチ/プレイヤー
    • ドライバの演奏モニタ機能を使用するために、IPLPATCHを次のように改変。
      • ドライバ側のPCG設定ルーチンと演奏モニタルーチンを呼び出すようにした。
      • ドライバ名と機種名は、ドライバ側に内蔵したロゴを使用するようにした。
      • テキスト表示のレイアウトを若干変更。
  • ドライバ
    • 負荷軽減のため、音色定義時の処理を全面的に変更。
    • 演奏モニタ(鍵盤やレベルメーターなどの表示)を内蔵。α版。
    • 演奏モニタに必要なパーツやロゴ、フォントなどのPCGデータとPCG定義ルーチンを内蔵。α版。
    • 曲データのデフォルト開始アドレスを03000Hに変更。
  • コンパイラ
    • ドライバの仕様変更に合わせて、音色定義時と音色選択時の処理を変更。
    • 演奏モニタの有効・無効化をメニューで設定できるようにした。
    • コンパイル中にWindowsのタスクを占有してしまっていたので、他のタスクにも処理が渡るようにした。
    • エラー表示時の桁数が+1されていたので、正しい値を表示するようにした。
2009/04/13a
  • ドライバ
    • 実機やX1エミュレータでPSG未使用曲の演奏時、微少な音量でPSGのトーンが鳴りっぱなしになっていたのを修正。
  • コンパイラ
    • **コマンドを使ったトラックの次の行を無条件でスキップしてしまっていて、1行空けないと正しく認識されなかったのを修正。
2009/04/13
  • ドライバ
    • グライド機能を実装(ポルタメントの処理を一部流用しているので、ポルタメントと同時には使用できない。後に実行した機能のほうが優先される)。
    • ポルタメントのオン→オフでソフトウェアLFOまで無効化されていたので、ポルタメントで音程が変化している最中のみソフトウェアLFOを一時停止させるようにした。
    • 演奏開始時、o4c相当値を音程レジスタに入れるようにした(トラックの頭でポルタメントを使うとo4cからの変化となる)。
    • キーコードの扱いを根本的に変更。ワークエリアにノートナンバーを保存し、ノートナンバーを元にテーブルを参照してキーコードを取得するようにした。これによって重複キーコードをスキップする処理自体を省略できるので、ドライバのサイズや負荷を若干軽減できる(従来はノートナンバーではなくキーコードをワークエリアに保存していて、デチューン、ポルタメント、ソフトウェアLFOによって加減算されるたびに各ルーチンで重複キーコードをスキップさせていた)。
  • コンパイラ
    • Gコマンド(グライド)を実装(ポルタメントと同時には使用できない。後発のコマンドが優先される)。
    • #VOICE_MODE=5を新設。追加分のパラメータは、OPMトラックで@コマンドを使ったときにコンパイラ側でyコマンドに変換して出力する。
    • トラック終了コマンド(**コマンド)を新設。このコマンド以降、そのトラックのコンパイルを行わない。
    • 数値を解釈するときの内部処理を改良し、音長以外のあらゆる数値に対しても加減算できるようにした。
    • SPコマンドSAコマンドで値を省略したときは、前回の値が入るようにした。
    • カウント関連のエラーメッセージで、なるべく「絶対音長」という表記を使うようにした。
    • 絶対音長を9999カウントまで指定できるようにした(255カウント以上の絶対音長が使えなかった頃のドライバの名残で、意味もなくコンパイラ側で254までに制限してしまっていた)。
    • SAコマンドのステップ数を255にしたときの不具合を修正。
    • #DETUNE_EXPヘッダ使用時に、PSGトラックでKコマンドが使用できなくなっていたのを修正。
    • 音長と絶対音長に0を指定できてしまっていたのを修正。
    • #VOICE_MODE=4の時、AFのアルゴリズムとフィードバックのビットをそれぞれ逆に解釈してしまっていたのを修正。
    • 音色パラメータの範囲チェック処理を改良。範囲外の値を指定したときに、パラメータ名だけではなく音色番号とオペレータ番号も表示するようにした。
    • #DETUNE_EXPヘッダ使用時の内部処理を変更(従来は全音単位でKコマンドに置換していたのを半音単位にした)。
    • 音程指定型ポルタメントで、' と & を併用したときの制限を緩和(従来は c_d&'10e のように記述する必要があったが、あまり直感的ではないので、c_d'10&e のような記述でもスラーが効くようにした)。
    • 今までは多重起動を禁止していたが、既存のウィンドウを自動的に閉じて新しく起動したほうが有効になるようにした。
    • エラー表示時に、行数だけではなく桁数も表示するようにした。
2009/04/06
  • パッチ/プレイヤー
    • IPLPATCHでNMI処理に不具合があったので修正(割り込み状態を触らないようにして、AFレジスタを壊さないように変更)。
    • IPLPATCHでジョイスティックポートの状態を読み込む時のループ処理で垂直帰線期間の立ち下がりを待つように変更(DI状態を最小限にするため)。
    • hoot用PATCHで、従来は「0=演奏、0以外=テストトーン」にしていたが、ライブラリを作りやすいように「0=テストトーン、0以外=演奏」に変更。
  • ドライバ
    • キーオフのタイミングを変更して、従来よりもキーオンを1カウント長くした(たとえば "Q0q8l#48" なら従来は「キーオン#47+キーオフ#1」だったが、これを「キーオン#48+キーオフ#0」として処理するようにした)。
    • 上記変更に伴い、Qのデフォルト値を1に変更。
    • Q255で強制レガートになるようにした。
    • トラック停止機能を実装。未定義コマンドもトラック停止として扱い、ドライバ本体とデータのバージョンが違っても暴走しないようにした。
    • 上記機能の新設に伴い、トラック再開機能を実装。
    • 1カウントの音符がうまくキーオフできていなかったのを修正(前バージョンでは次の音符が#1の時だけ前の音符をキーオフしていたので、「l#1cde」ならドとレはキーオフされるがミがキーオフされていなかった)。
    • qコマンドQコマンドによって最終的な音長が1カウント以下になると全くキーオフされずにレガート相当の状態になってしまっていたので、1カウント以下の音長は1カウントで発音するように修正。
    • ポルタメントで重複キーコードをスキップする時にキーフランクションをリセットしないように変更して、階段状だった発音を若干改善した。
    • コマンド判別ルーチンをジャンプテーブル化。
    • ワークエリアへの演奏ポインタの退避を必要以上に多く実行していたので、最小限にして若干の負荷軽減。
    • テンポ変更時に割り込みを許可してしまっていたのを修正(実機やX1エミュレータでは意図しない割り込みが不意に掛かってしまい、一部のトラックがミュートされるなどの不具合があった)。
    • テンポ変更時にCTCをリセットしないようにしてみた。
  • コンパイラ
    • 始点と終点を指定する方式のポルタメント "_" を新設(コンパイラ内で従来のポルタメントに置換する)。
    • #FILENAMEヘッダを新設。アーカイブ内の曲データのファイル名を指定できるようにして、デフォルトはMMLファイルのファイル名と同じにした(従来は "DATA.BIN" と "DATA.ASM" に固定していた)。
    • #VOICE_COMPATIBLEヘッダを廃止して、#VOICE_MODEヘッダを新設。PANを省略した書式や、アルゴリズムとフィードバックをひとつのパラメータ(AF)にまとめた書式にも対応。
    • #J_KEYOFFヘッダを廃止して、#J_KEYONヘッダを新設(デフォルトを#J_KEYOFF相当の状態にした)。
    • #COUNTヘッダを新設。
    • #CAPITAL_REVヘッダを新設。
    • 音長の減算に "\" を使えるようにした。従来の "-" も使えるが、"\" なら音長を省略した時も減算できる(l4d\16はレの付点8分音符、l4d-16は♭レの16分音符)。
    • 76以下のテンポ指定が正しく反映されていなかったのを修正(Z80CTCのタイムコンスタント値の算出方法を誤っていた)。
    • テンポの範囲を1〜999にしてみた。
    • "*" をトラック終了コマンドからトラック停止コマンドへと変更。
    • トラック再開コマンド(~)を新設。
    • リピート脱出後の相対オクターブがうまく機能していなかったのを修正(たとえば "[ o3cd / o5efg ] ab>c" のようなMMLを書いた時に、"ab>c" の部分が今までは "o3abo6c" になってしまっていた)。
    • コンパイル中はファイルメニューを選択できないようにした。
    • コンパイルの進捗状況をパーセンテージとプログレスバーによって表示するようにした。表示のオン/オフはメニューバーから設定可能。
    • 曲名に & > < ' " が含まれている場合は、実体参照に置換してからhoot.xmlに書き込むようにした(前回はそのまま出力してしまっていたので誤動作の原因となっていた)。
    • 曲名にタブが含まれている場合は、半角空白4個に置換するようにした。
    • 選択中のMMLファイル名をタイトルバーに反映させるようにした。
    • メモ帳に限らず、ウィンドウ名にMMLファイル名が含まれているアプリをタイムスタンプ監視開始時に最前面に持ってくるようにした(もちろんコンパイラ本体は除く)。
    • ウィンドウへのMMLファイルのドロップに対応。
    • レガートとスラーを同時に使用した時の処理を修正。
    • 付点や空白の後に音長の重複指定ができるようになっていたので、エラーを出すようにした(従来は "c2 8" なら "c8"、"c4.16" なら "c16" と解釈されてしまっていた)。
    • 「ファイルを開くアプリケーション」のデフォルト指定を「関連付けされたアプリケーションで開く」にした。
2009/03/29
  • パッチ/プレイヤー
    • IPLPATCHで、NMIリセットからの復帰にRETI命令使ってしまっていたので、RETN命令に変更。(実機ではRETIでも動作するが、エミュレータ上でうまく動作していなかった)
  • ドライバ
    • PSG音色でノイズを制御できるようにした(トラック3のみ)。
    • OPMトラックで1カウントの音符もキーオフするようにした。
    • レガート中でも強制的にキーオフできるようにした。
    • リピートのワークエリアを6重ネストぶん確保するようにした。
    • ソフトウェアLFOのディレイ値を256段階にした。
    • デチューンで一部の音階が半音多くずれてしまっていたのを修正。(重複キーコードの処理ができていなかった)
    • レガートオン直後の音符にハードウェアLFOシンクが効いていなかったのを修正。
    • 音程に対するソフトウェアLFOで、OPMではtype=1、PSGではtype=0を指定したときに振幅の中心点がずれてしまっていたのを修正。
    • OPMトラックではレガートの最中にも無意味なキーオンをしてしまっていたので、重複キーオンしないようにした(負荷軽減)。
    • OPMトラックで音色定義時にTL加工値のワークエリアを参照して、値が変化している時のみレジスタに書き込むようにした(負荷軽減)。
    • レガート時にはソフトウェアLFOのディレイ値を戻さないようにした。(ただし、位相はリセットされないので音が多少ぶれてしまう。ソフトウェアLFO使用時はレガートやスラーよりもタイを推奨)
    • ワークエリア初期化時にPSGの全レジスタをクリアするようにした。(PSGトーン有効・ノイズ無効、それ以外はすべて0)
    • テンポが変更されるまでキーオンしないようにする機能を実装。(#J_KEYOFFを実現するための機能)
    • 曲データのデフォルト開始アドレスを02000Hに変更。
  • コンパイラ
    • メニューバーを付けて、ファイルオープンやコンパイラの設定などの各種操作を行えるようにした。
    • iniファイルにコンパイラの設定を保存するようにした。
    • |コマンド(強制キーオフ)を新設。
    • "&" でスラーを表現できるようにした。内部処理はレガートと同じ。
    • PSG音色定義でNコマンドPコマンドを使えるようにした(ノイズ制御)。
    • PSG音色定義で0カウントのループを指定できてしまっていたのを修正。
    • #J_KEYOFFヘッダを新設。
    • #OPM_REVヘッダを新設。
    • #OPM8ヘッダを新設(hoot.xml内で選択するドライバに反映)。
    • #TITLEヘッダを新設(hoot.xml内の曲名に反映)。
    • コンパイル時にhoot.xmlを自動生成して上書きするようにした。上書き前のhoot.xmlはhoot_bak.xmlとして自動バックアップする。それに伴い、アーカイブへのhoot.xmlの同梱は廃止。
    • リピートの最大ネスト数を6重にした。
    • 早送りコマンドを "J" から "j" に変更。(Jはトラック名と被って視認性が良くないので)
    • SPコマンドSAコマンドのdelay値を0〜255に変更。
    • MML中の「/*」と「*/」をネストできるようにした。(行頭に置いた場合はネスト不可)
    • 「hootを起動中です」のメッセージをhoot起動後に表示してしまっていたので、起動する前(hootのウィンドウハンドル検索時)に表示するようにした。
    • メッセージ表示領域の色を変更。
2009/03/23
  • パッチ/プレイヤー
    • ゴードんさんがIPLPATCHを改良し、機種名(X1/turbo/turboZ)や演奏状態、FM音源ボードの有無などが画面上にテキストで表示されるようになった。さらに、NMIスイッチによる演奏停止に対応。
    • PATCHとhoot.xmlを編集し、hoot上でテスト音を鳴らせるようにした。
  • ドライバ
    • 音色定義時と音量設定時でOP2とOP3のTLのワークエリアの扱いが逆になっていて、その結果、OP2とOP3のTLが同じ値になるという重大なバグを招いていたので修正。
    • 従来のCTC0とCTC3に加え、CTC1の割り込みを併用するようにした。今後、テンポにかかわらず一定の頻度で行うべき処理はCTC1を使用する。
    • CTC3をタイムコンスタント設定後に駆動させるように変更。
    • ポルタメントを新設。
    • ソフトウェアLFOを新設。音程とTLに対応。
    • PSG音色(ソフトウェアエンベロープ)関連の機能を新設。
    • 曲中でテンポを変更できるようにした。
    • FM音源ボードを装着していないturboではドライバ自体を無効化していたが、内蔵のZ80CTCを使ってPSGパートのみでも演奏できるようにした。
    • 内部処理上、PSGの音量を0〜127として扱い、8で割った値を音量レジスタに入れるようにした。(従来は内部的に0〜255としていて、16で割った値をレジスタに入れていた)
    • デチューンの値にマイナスを使えるようにした。
    • テスト音を鳴らすためのエントリ(MTEST)を追加。(詳細は「実機やX1エミュレータで再生するには」の項にて)
    • BGMADRワークを初期値(01A00H)に戻してから演奏するエントリ(MPLAYD)を追加。(テスト音を鳴らすとBGMADRが書き換わってしまうので、その対策用)
  • コンパイラ
    • バージョン番号(NRTDRV.EXEのタイムスタンプ)を起動時に表示するようにした。
    • コンパイル時に使用するアセンブラをZASMからPasmoに変更。
    • Kコマンド(移調)を新設。
    • pコマンド(ポルタメント)を新設。
    • ソフトウェアLFO関連の各コマンド(SPコマンドSAコマンドSRPコマンドSRAコマンドSRコマンド)を新設。
    • Jコマンド(早送り)を新設。
    • PSG音色定義(@P)を新設。
    • @コマンドの仕様を変更し、OPMとPSGトラックの両方で使えるようにしてPSGトラックでは "@P<num>" という記述も受け付けるようにした。
    • MMLの区切り記号として ":" を新設。内部処理は半角空白と同等。
    • 上記変更に伴い、リピート脱出コマンドを ":" から "/" に変更。
    • 複数行対応の注釈記号として "/*" と "*/" を新設。この記号で囲った範囲が注釈となる。詳しい使い方は本文参照。
    • tコマンドの仕様をドライバに合わせて、曲中でテンポの変更を可能にした。
    • Nコマンド(ノイズ周波数)をOPMトラックでも使えるようにした。使用すると、HトラックとPトラックのOP4がノイズジェネレータになる。N0〜31で周波数指定、N255で効果オフ。
    • #VOICE_COMPATIBLEヘッダを新設。
    • #DETUNE_EXPヘッダを新設。
    • #J_TIMESヘッダを新設。
    • ヘッダ名で、"_" と "-" の扱いを同等にした。
    • ヘッダ名で、大文字と小文字を区別しないようにした。
    • ドライバマクロをOPMとPSGで明示的に使い分けるようにした("!" でOPM、"?" でPSG)。
    • ドライバマクロNコマンドを使えるようにした。
    • トラック終了コマンドを "?" から "*" に変更。
    • PSGパートのvコマンドでは内部的に8倍の値(0〜127)を扱うようにした。(従来は16倍して0〜255として扱っていた)
    • トラック名の直後、半角空白やタブを入れずに { を使っても正常に動作するようにした。
    • 行頭に半角空白やタブが入っている場合、従来はその行全体をコメント行にしてスキップしていたが、「正しいMMLを書いているはずなのに何も鳴らない」などのトラブルの原因となりうるのでエラーを出すようにした。
    • アーカイバのファイル名を "7za.exe" と "7z.exe" の両方に対応。
    • MMLファイル新規作成時、デフォルト音色定義テキストを出力するようにした。
    • Dコマンドの範囲を-128〜127、または-16384〜16383(#DETUNE_EXPヘッダ使用時)にした。
    • HAコマンドの範囲を0〜3にした(従来はHPと同じく0〜7にしてしまっていた)。
    • ハードウェアLFOコマンドやマクロ名の途中で改行されてしまっていたときにエラーを検出できていなかったので、その修正。
    • NRTDRV.Sysの開始アドレスを0100Hにした。(従来はバイナリエディタで見やすくするために0000Hにしていた)
    • 音長の加算に + を使えるようにした。実際の処理は ^ と同等。
    • 使用可能な音色を10000個にしてみた。
2009/03/15
  • ドライバ
    • 各トラックのアドレス、ループポイントのアドレス、音色データのアドレス、マクロデータのアドレスなど、すべてのアドレスの扱いを相対アドレス化。(この変更によって曲データがリロケータブルになったので、曲データを01A00H以外に置きたい時も再アセンブルする必要がなくなった)
    • OPM書き込み時にウェイトをかけるかどうかをデータ側で選択できるように変更。(OPM16音に対応していないバージョンのhootでウェイトをかけると暴走するが、この機能によってウェイトをかけないようにすれば回避できる)
    • OPM1個の環境で、2個目のOPMと共にPSGの処理まで飛ばされていたのを修正。
  • コンパイラ
    • ZIPアーカイブ生成時に使用するアーカイバをZIP.VBSから7-Zipに変更。
    • ループ(Lコマンド)の後に音符や休符を置かずに0カウントでループさせてしまうとドライバがハングアップするため、コンパイル時にエラーを出すようにした。(hootでそのようなデータを再生するとOSを巻き込んでフリーズしてしまう)
    • 数値の前に "%" を付けると2進数として解釈するようにした。さらに、値を見やすくするための記号としてアンダーバーを使用可能に。
      • [例] %101_10_100 = %10110100 = $B4 = 180
    • "{" と "}" で括ったMMLの中では改行できるようにした。
    • 調号コマンド(-、+、=)を新設。
    • マクロ名を最大255文字にして、マクロ数を最大10000個にした。
    • コンパイラマクロで、末尾に書いた数字が不自然に繋がってしまうのを修正。(たとえば$Aに "@111" というMMLを登録して、OPMトラックで $A2 と記述した時に"@1112" と展開されてしまっていた。これを文法エラーとなるように変更)
    • ヘッダやコンパイラマクロで ";" を使った時に誤動作の原因となっていた不具合を修正。
    • ヘッダの文字数が6文字固定だったのを撤廃して自由にした。
    • #OPM_WAITヘッダ#OPM_NOWAITヘッダを新設。
    • #OCTAVE-REVヘッダを新設。機能は#OCTA_Xヘッダと同等。
    • #TEMPOヘッダを新設。機能はtコマンドと同等。
    • 調号コマンド新設に伴い、音階コマンドの算出方法を変更。
    • ファイル監視開始時にメモ帳を最前面に持ってくるようにした。(MMLをコンパイルしてhootが起動した後すぐにメモ帳がアクティブになるので便利)
    • "r+" という記述を受け入れてしまっていたので、エラーを出すようにした。(従来は "r+" = "c" として扱ってしまっていた)
    • 一部のエラーメッセージを分かりやすく変更。
    • ZSAM.EXEが見つからない時にテンポラリファイルが残ったままになるのを修正。
2009/03/09
  • ドライバ
    • スロットマスク(オペレータマスク)を音色パラメータに追加。
    • PSGトーン/ノイズ切り替えで、0(トーン・ノイズ両オフ)を受け付けるように。
  • コンパイラ

293さんからのご報告とご要望により、上記のデバッグと機能追加を行いました。293さん、ありがとうございます!

2009/03/08a
    • UME-3さんのご指摘により、IPLパッチ内でジョイスティックポートを読み込む際に割り込み禁止していなかったミスが判明したため、IPLPATCH.BINのみ修正^^;

この変更により、一部のエミュレータで動作しなかった不具合が解決しました。UME-3さん、ご指摘ありがとうございます!

2009/03/08
  • ドライバ
    • PSGに対応(とりあえず鳴らせるだけ)。
    • キーコードをテーブル化し、使用可能な音域を拡大。
    • デチューンの扱いを修正し、半音以上のデチューンもできるようにした。
    • 上記変更に伴い、基準ピッチを約438Hzにした。
    • 音色パラメータ設定時にキャリアのTLを上書きしないように変更し、音量の設定が正しく反映されるようにした。
    • 音色パラメータ設定時にPANが0なら、それまでの値を維持するようにした。
    • ワークエリア初期化時にハードウェアLFOのリセットとAMS/PMSの初期化を行うようにした。
    • キーオン時にハードウェアのLFOリセットを行うか指定できるようにした。
    • ドライバの開始アドレスを0300Hに変更。
    • 19ch化に伴い、ファイル名をNRTDRV16.BINからNRTDRV.BINに変更。
  • コンパイラ
    • PSGトラックに対応(とりあえず基本的なコマンドだけ)。
    • ゴードんさんのパッチにより、IPL起動用ファイル(NRTDRV.Sys)の作成に対応。
    • 従来の#VOLMAXを#V_STEPに変更し、新たに#VOLMAXと#VOLMINを追加。
    • コンパイラ側で展開する方式のマクロ "$" を追加。
    • ハードウェアLFO関連の各コマンド(HL、HP、HA、HS、HR)を追加。
    • オクターブ0を指定できるようにした。
    • 音色定義時に、PAN=0(それまでのパンポットの継続)を指定できるようにした。
    • 各トラックのカウント数を算出してログファイルに記録するようにした。
    • マクロ名の大文字と小文字を区別するようにした。
    • hootのx1フォルダにコピーするアーカイブのファイル名をx1nrtdrv.zipに変更。
    • アドレスやファイル名などの変更に伴い、hoot.xmlを差し替え。
    • hootのウィンドウに送出するキーボードイベントのタイミングを調整。(たまに取りこぼすことがあるための暫定的な措置)
    • ZIPアーカイブ生成時に使用するアーカイバをInfo-ZIPからZIP.VBSに変更。
    • MMLファイルが関連付けされていない場合は、エラーメッセージを表示させずにメモ帳で開くようにした。
    • これから開こうとするMMLファイルが既にメモ帳で開かれていた場合は、メモ帳を複数起動せずに既存のメモ帳を最前面に持ってくるようにした。
    • ファイルを開くダイアログで、存在しないファイル名を手打ちで入力した時に、そのファイルを新規作成するようにした。
    • ファイルを開くダイアログで、何もファイルを選択せずにキャンセルした時はNRTDRV.EXEと同じフォルダに "新しいファイル.MML" を新規作成するようにした。
    • ファイル名に拡張子が付いていない場合は ".MML" を付加するようにした。
    • アーカイブ作成時にファイルが足りない場合はエラーを出力するようにした。(従来は不完全なアーカイブを生成してしまっていた)
    • 音色定義内で複数のカンマを並べた際はエラーを出力するようにした。(従来はひとつのカンマとして解釈していた)
    • データサイズの制限を緩和(最大52KB)。
    • 使用可能な音色を1024個にしてみた。
2009/03/03
  • ドライバ
    • 曲データの開始アドレスを01A00Hに変更。
    • 255以上のカウントを扱えるように変更。
  • コンパイラ
    • 音長指定に ^ (タイ)を追加。
    • 音長指定で ^ や - の重複指定に対応。[例] c2-16-4 なら c8. 相当。
    • 音長指定に空白を含めても動作するように変更。
    • 1音あたりのカウント数が255を超えた場合は複数バイトに分けて出力。
    • データサイズの制限を緩和(最大40KB)。
    • フルパスに空白を含む環境でアーカイブが正常に生成されない不具合を修正。
2009/03/02
  • ドライバ
    • レジスタ直接書き込みを実装。
    • レガート(スラー)機能を実装。
    • ボリュームを実装。
    • パンポットを実装。
    • リピートを実装。
    • ゲートタイム1を実装(キーオンする割合を1〜8で指定)。
    • ゲートタイム2を実装(キーオフするカウントを0〜255で指定)。
    • アルゴリズムだけじゃなくてPAN/ALG/FBをワークに保存するように変更。
    • マスターボリュームとフェードアウトの範囲を0〜127に変更(従来は0〜63)。
  • コンパイラ
    • フォルダの決め打ちとかがちょっと美しくないような気もするけど、とりあえず使えるようになったっぽいバージョンが完成。
2009/02/19
  • ドライバ
    • X1リソースセンター様にて公開されたアドレスデコーダの情報をもとに、FM音源ボードを改造してI/Oポートを708H〜へと変更した環境に対応。(turboZの内蔵FM音源や非改造のFM音源ボードと併用して合計16chになる)
    • フェードインを追加(相変わらずモジュレータのTLもフェードしちゃう)。
    • フェードアウト終了時、演奏状態フラグが4になるように変更。
2009/02/17
  • ドライバ
    • 再生開始ルーチンと停止ルーチンのDIとEIのタイミングを変更。(以前はワーク初期化時にEI状態だったため、再演奏時に問題があった)
2009/02/15
  • ドライバ
    • さらにUME-3さんから頂いたご指摘に従い、下記のように修正。
      • FM音源ボードとturboの判別ルーチンを修正。
      • 割り込みルーチンのレジスタ待避順序を修正。

UME-3さん、再チェックありがとうございます!

2009/02/14
  • ドライバ
    • ドライバ初期化ルーチンを追加(FM音源の有無とCTCアドレスの設定)。
    • CTC3のタイムコンスタントも指定できるように変更。
    • マスターボリュームを追加。
    • フェードアウトを追加(暫定処理なのでモジュレータのTLもフェードする)。
    • ワークエリアを前のほうのアドレスに移動。
    • UME-3さんから頂いたご指摘に従い、下記のように修正。
      • CTCのI/Oアドレスをワークエリアに保存
      • Iレジスタを見て割り込みベクタのフックを書き込み
      • 割り込みベクタ下位8ビットをラベル化
      • OPMの書き込み時にウェイトを入れる

UME-3さん、ご指摘ありがとうございます!

2009/02/13
  • ドライバ
    • マクロルーチン実装。
    • 曲停止ルーチン実装。
    • 曲データ側でCTC0のタイムコンスタントを指定できるようにした。
    • アルゴリズムをワークエリアに保存するようにした。(フェードアウト処理を組む予定のため)
    • 再生開始時にキーオフとミュートが失敗してたんで修正。
    • ループする時に間が空くのを修正。
    • 音色定義で25個分のデータを転送しちゃってたのを修正。
2009/02/11
  • ドライバ
    • α版。