● SL9821 改訂履歴

○ 0.2.5.0 2017/7/17
  言語対応に関して、英語メニューの表示条件の改善以来があったため対応しました。
  対応方法を変えたため、本バージョンからリリースにenディレクトリとその配下のdllファイルはなくなりました。
  あわせて指摘頂いた方に英語訳の改善をして頂きました。この場を借りて御礼申し上げます。ご協力ありがとうございました。
  なお、上記修正には以下のサイトの情報を参考にさせて頂きました。
  https://social.msdn.microsoft.com/Forums/ja-JP/a68caf09-4ec3-421c-86fc-1a7b4936b504/1exe?forum=wpfja
  
  ファイル選択ダイアログにユーザ任意の拡張子を選べるように、設定ファイルの機能を拡張しました。
  エミュレータ最初の起動後に作成されるsettings.xmlファイルにテキストエディタ等で直接編集する必要があります。
  settings.xmlをテキストエディタ等で開き、<drive>タグの配下に以下のように記述します。
  <drive>
    :
    :
    <fdext title="FD Image File" extension="*.fdd;*.bin" />
    <cdext title="CD Image File" extension="*.iso;*.bin" />
  </drive>

    fdextタグは、フロッピーディスクイメージファイルを選択するダイアログ用、
    cdextタグは、CDイメージファイルを選択するダイアログ用で、従来のメニューに先行して表示されるようになっています。
    title属性にはプルダウンメニューに表示される内容、extension属性にはセミコロン区切りで選択可能な拡張子を記述します。
    タグの形式はwindowsとmacOSで共通ですが、記述内容が異なります。
    ○windows版はプルダウンメニューに表示される内容はイメージ的には"$title($extension)"というような形でextensionに記述した内容も記述されます。
      また、extensionには拡張子を"*.ext"というように、"*."をつけて記述します。
    ○macOS版はプルダウンメニューにはtitle属性に設定した内容のみが表示されます。
      そのため、拡張子も表示したいときはtitle属性にも表示されるイメージで記述しておく必要があります。
      また、extensionには"*."は記述せず拡張子のみを記述します。以下はmacOS版での表示サンプルです。
    <fdext title="FD Image File(*.fdd;*.bin)" extension="fdd;bin" />

    プログラム中では記述内容のチェックはしていないので、記述の際には注意してください。
    また、おわかりかとは思いますが、この機能は選べるファイルを変えられるようにするだけで、データ構造を持ったイメージファイルへの対応ではありません。
    この機能でファイルを選べるようにしても、データ構造を持ったイメージファイルが読めるようになるわけではありません。
  
  以下バグ修正
  CPU
    ins/outs命令で、プロテクトモード時に行うI/Oプロテクトチェックをしていなかったバグを修正
    cmpxchg8b命令で、比較計算を間違っていたバグを修正
  VIDEO
    描画の際に、vram領域外のデータを参照し表示が乱れるケースがあったため、ラップアラウンド処理を追加

○ 0.2.4.3 2017/7/9
  COM
  シリアルポートの実装にバグがあって正常に動作していなかった問題を修正
  (チェック漏れで従来からずっと機能していませんでした申し訳ありません)
  CPU
  32ビットのidiv命令で、計算結果が除算エラーになる範囲を間違えていたため、本来除算エラーにならなければならない計算で
  エラーが発生しないことがある問題の修正
  VIDEO
  試験的にGDCのSYNCコマンドでI/Sビットがそれぞれ1/0の場合は、縦倍表示を行うように変更(テキスト、グラフィックとも)
  SOUND
  試験的にプリスケーラの変更に対応(対応が十分じゃないかもしれません)
  ソースのスペルミスの修正

  その他細かい修正
  
  以下MAC版の機能追加分
  ・シリアルポートへの対応(Windows版同様調歩同期(UART)のみ、ハードウェアフロー制御は非対応)
  ・ホストのCD-ROMドライブに対応
  なお、MACに関しては現状対応可能な機能をすべて実装したつもりなので、バージョンをWindows版にあわせることにしました。
  Windows版で実装してMAC版で実装できていない機能については以下の通りです。
  ・FDDドライブ対応(マウントしたメディアのパーミッションがないためユーザ権限での読み書きが出来ない)
  ・ゲームパッド対応(対応デバイスを持っていないためペンディング)

○ 0.2.4.2 2017/6/3
  VIDEO
  画面表示のオプション「400ライン表示時もVGA領域を表示する」にチェックしているとき、解像度の変更の際表示が乱れる問題が発生していたため修正
  (0.4.2.0の修正によるエンバグ)
  SOUND
  BEEPの周波数が実機の1/2の周波数で鳴動していたため実機と同一の周波数に変更(あまり自信なし)
  SSGおよびBEEP鳴動用の矩形波テーブルを周波数成分の異なるテーブルを複数持つようにして、より広い範囲の周波数でまともに聞ける音が出るように修正
  (だいたい上が4400Hz程度(オクターブ8のC#付近)、下は特に破綻する閾値はないですが周波数が低くなるほどゆがみが激しくなり、
   感覚的には100Hzを下回るとゆがみがひどくなる感じがします)
  (MACのみ)リズム音源の鳴動タイミングによって曲の演奏が実際より遅く演奏されるケースがあったので状況が多少よくなるように処理を変更
  (MACのみ)FM+SSG音源鳴動用のサンプリングレートの設定が正しく反映されない問題の修正

○ 0.2.4.1 2017/5/20
  VIDEO
  前回の修正で、400ライン表示がぼやける問題が発生したので修正
  グラフィック用GDCにTEXTEとZOOMコマンドを実装(実機の挙動に正確ではないかもしれません)
  グラフィック用GDCで机上で見つけた内部処理のバグを修正
  その他表示関連したいくつかの挙動を修正

○ 0.2.4.0 2017/4/30
  今回のリリースのメインとしてCPUエミュレーションのソースコードに速度改善を見込んだ全般的な修正をしています。
  CPUの修正はコード全般にわたっており、修正にあたり机上でいくつかのバグを直しているものの、修正量が多いためエンバグしている可能性もあり
  全般的なバグの改善度合いは一進一退といった感じだと思います。
  肝心な速度改善の方ですが、修正規模に見合わずベンチマークベースで一割強速くなった程度ですので体感的にはほとんど変化がないと思います。

  CPU以外の修正は以下のとおりです。
  HDD
  HDDイメージを新規作成後の最初のマウントした状態でHDDの先頭領域の読み出しでゴミデータを読み出してしまうバグを修正。
  SOUND
  FM音源でエンベロープ設定を行っていないチャネルをKeyONをしたときに不正終了する問題を修正
  VIDEO(Windowsのみ)
  機種によって2017/3～4頃のアップデート後のWindows10で画面が縦に潰れたように表示される問題があるため描画方法を変更
  VIDEO(macOSのみ)
  機種によってテキスト表示が乱れる問題を修正

  追加機能
  CPUの修正ついでで、P5で追加された命令に対応しました。
  MPU-401コンパチブルのMIDI対応(UARTモードのみ)をしました。(確認しているソフトが少ないので正常に鳴らないかもしれません)

  ● OSをMIDI対応させる方法
    事前にUIでMIDIを使用可能にしておきます。
    I/Oポートと割り込みラインのデフォルトはそれぞれ「E0D0」と「2」になります。通常は変える必要はないと思います。
    (しかも、割り込みラインに関してはプログラム中で一切参照していないので変更しても何ら効果はありません...)
    またドライバのインストールにはOSのインストールメディアが必要になるので事前に用意しておく必要があります。
  Windows3.1
    1. プログラムマネージャの「メイン」で「コントロールパネル」を開く
    2. 「ドライバ」を選択し「ドライバの設定」を開く
    3. 右のメニューから「追加...」ボタンをクリックし、「ドライバの追加」を開き、ドライバの一覧から「Roland MPU-PC98II」を選択します。
    4. 続けて表示されるドライバの設定ではUIで指定したI/Oポートと割り込みラインの値を設定します。
  Windows98
    1. 「コントロールパネル」を開き、「ハードウェアの追加」を選択します。
    2.  最初の選択で「いいえ(一覧から選択する)」を選択し、次へ進みます。
    3. 次のメニューでは「サウンド、ビデオ、およびゲームのコントローラ」を選び、次の画面で製造元「Microsoft」、モデル「MPU-401 Compatible」を選択します。
    4. 再起動を促されますが、ここでは再起動せず「コントロールパネル」から「システム」を選択し、デバイスマネージャを開きます。
    5. 「サウンド、ビデオ、およびゲームのコントローラ」ツリー下の「MPU-401 Compatible」のプロパティを開きます。
    6. プロパティのリソースの設定を、UIで指定した値にあわせて変更し、OSを再起動します。

○ 0.2.3.0 2017/2/8
  GAMEPAD
  環境によって起動時に不正終了する場合がある問題を修正
  ゲームパッド名をアンマネージドコードからマネージドモードへ渡す際適切なメモリの渡し方をしていなかったことが原因でした。
○ 0.2.2.0 2017/2/4
  CPU
  VEM486(Version 1.29N)が動作しない問題に関連したCPUのバグを修正
  修正した本バージョンでは代替BIOSを使用して下記の設定で起動することを確認しています。
  (正常に起動し指定領域がUMBになっていることのみ確認しています。詳細な動作検証はしていません。また、実機BIOSだとIDE BIOSのROM移動が出来ません)
  MS-DOS5.0A-H
     DEVICE=(path)VEM486.EXE /U=A5-A7,C0-CB,D0-DF,E9-F0 /M=D8:F1,D9:F2,DA:F3,DC:F4 ※
     DEVICEHIGH=(path)VEMEMM.SYS
  MS-DOS6.2
     DEVICE=(path)VEM486.EXE /U=A5-A7,C0-CB,D0-DF,E8-F0 /M=D8:F1,D9:F2,DA:F3,DC:F4
     DEVICEHIGH=(path)VEMEMM.SYS
  ※PC-9821本体付属のMS-DOS5.0A-Hに同梱されているNECCD.SYSは初期化時にセグメントE800hの領域を参照しています(NECチェックの一環?)。
  そのため、NECCD.SYSを使用してCD-ROMを認識させるためにはE8をUMB領域から除外する必要があります。

  0.2.1.2で追加したデバッグレジスタ機能に関連した変更の漏れを修正
  BIOS
  従来のままだと代替BIOSがVEM486のROM移動で正常に動作しないため、移動しても動作するように修正
  SCSI
  ポートF0hによるCPUリセット後割り込みが入らないことがある問題の修正
  IDE
  不正なメモリアクセスをしていたバグを修正
  (0.2.0.0の頃指摘を頂いていた不正終了の件はこれが原因かも...?)
  UI
  文言の間違いを修正

○ 0.2.1.2 2017/1/25
  VIDEO
  0.2.1.1で画像が乱れるという指摘を受け、誤差の補正処理方法を見直し再修正
  カーソルブリンクの反転時の表示がおかしい問題の修正
  CPU
  デバッグレジスタの仮実装

○ 0.2.1.1 2017/1/22
  VIDEO
  シェーダの見直しを行い、演算効率を改善
  DirectX9.0対応(およびソフトウェア処理によるDirectX9.0c対応)のGPUでハードウェア処理が出来るように
  専用のシェーダを追加(ただしパフォーマンスは期待できません。ソフトウェア処理よりまし程度です)
  SOUND
  従来、サウンドデバイスのないPCで実行しようとするとダイアログが表示されて起動しなかったものを
  起動できるように修正
  CPU
  ハードウェア割り込みの処理を少し変更。
  ハードウェア割り込み発生時に、当該の割り込みがマスクされていた場合に以降割り込みが発生しなくなる場合があるかもしれない
  MAC
  ハードディスクイメージの新規作成で、作成するサイズの計算間違いで期待したサイズで作成できない問題を修正

○ 0.2.1.0 2016/12/26
  VIDEO
  GDCのWRITEコマンドのビット判定を誤っていたバグを修正
  SOUND
  計算間違いによりAttackRateの初期テーブルが期待とは異なる値で生成されるバグを修正
  COM
  COMイベント受信関数の使い方を間違えていたので修正
  その他
  ITFの代替機能を使用しているとき、画面上のメモリサイズの表示がおかしい(0が表示されない)問題を修正
  VS2015およびxcodeによるコード分析で修正した方がよいと思われるワーニングについて一部修正
  dllファイルにもバージョン情報を追加

○ 0.2.0.0 2016/12/14
  ITF.ROM、IDEBIOS.ROM、SCSIBIOS.ROMがない場合にも動作するように代替機能を追加

  CPU
  インストラクションフェッチの処理を修正
  排他制御すべきフラグが排他制御できていない問題の修正(アプリケーションの終了時に不正終了する問題の修正)
  IDE
  ハードディスクイメージへの読み書きのバグ修正により全般的な処理の信頼性の向上
  ハードディスクを複数台設定できることを想定した修正
  VIDEO
  描画のタイミングの調整
  (DOSシェル終了時にプロンプトに戻ってこれない問題の対策、発生頻度は低くなったように感じますが完全に解消されていません)
  SOUND
  机上で気がついた明らかにおかしい箇所の修正(ハードウェアLFO関連)
  SCSI
  SEEKコマンドの処理でポインタの指定を間違えていて正常に動作しないバグを修正
  COM
  シリアルポートの制御に関するバグの修正とロジックの見直し
  UIで設定したボーレートを使用する機能を追加
  その他
  不揮発情報の保持を行うかどうかを設定しているディップスイッチ情報を正しくエミュレーション出来ていない問題を修正
  スペルミス、コメント間違えの細かい修正

○ 0.1.5.0 2016/09/22
  FDC
  実FDDを使用したときにフロッピーディスクの制御が不安定だった問題の改善
  CD-ROM
  実CD-ROMドライブを使用したときのCD-ROMの制御が不安定だった問題の改善
  実CD-ROMドライブを使用しているときUIのイジェクトボタンでイジェクトできるように変更
  KEYBOARD
  Windows2000で、キーボードが使えない問題の修正(0.1.2.0の修正時にエンバグ)

○ 0.1.4.0 2016/09/15
  VIDEO
  テキストグラフィックのスムーススクロール機能を修正(従来はまともな実装すらされていませんでした、すみません...)
  読み出すフォントデータのコードにANKを指定したあとで、フォントサイズの切り替え(6x8<->7x13)を行ったとき、フォントデータの内容を更新していないバグを修正
  (上記、ポリスノーツのルビ表示がおかしい問題の指摘に対する修正ですが、原因が特定できての修正ではないのでこれで改善されるかは不明です)
  CD-ROM
  メディアの入っていないCD-ROMドライブを設定していたときエミュレータが起動しない問題を修正
  SOUND
  rtythm.datファイルがないときに不正なメモリアクセスを起こすバグを修正

○ 0.1.3.0 2016/09/12
  SCSI/CD-ROM
  CD Audio関連のバグを修正
  トラック番号や再生時刻といった数値情報をBCD値で返さなければいけないところを16進数で返していた問題を修正
  MS-DOS6.2+Windows 3.1でMCI CDオーディオが正しく動作しない問題を修正
  その他CD Audio制御に関連した問題を修正

○ 0.1.2.0 2016/09/02
  CPU
  インストラクションフェッチ処理を一部修正
  インストラクションフェッチ時のエラー判定で誤った判定を行っているか所を修正
  
  KEYBOARD MOUSE
  オートリピートの間隔をOS資源から、プログラム内の高精度カウンタに変更
  キースキャン判定が誤って通知される問題への対応

○ 0.1.1.0 2016/08/29
  エンベロープを使用したときのSSGの鳴動処理を修正
  シリアルポートの受信処理のバグを修正
  releasenote.txt(本ファイル)の追加

○ 0.1.0.0 2016/08/03
  ファーストリース
