openMSX V9968 移植版

ソースファイルはこちら

実行バイナリ

Windows x64 版バイナリ: openmsx-21.0-v9968-f79d279-x64-VC-Release.zip

設定ファイル

設定方法は下記のファイルを参照ください。
V9968 カートリッジ: share/extensions/HRA_V9968.xml
FS-A1ST V9968 組み込み版: share/machines/Panasonic_FS-A1ST_V9968.xml

インストール方法(Windows)

設定ファイルの変更内容

    <VDP id="VDP">
      <version>V9968</version>           <!-- V9968 へ変更 -->
      <vram>128</vram>                   <!-- VRAM サイズは無視されます -->
      <io base="0x98" num="5" type="O"/> <!-- num の数を 5 へ変更 -->
      <io base="0x98" num="5" type="I"/> <!-- num の数を 5 へ変更 -->
      <timing>0</timing>                 <!-- VDPコマンド動作速度 0:V9968 と同じ / 1:HS=0の時に V9958 の VDP コマンドエミュレータを使う -->
    </VDP>

既存の V9938/V9958 用ソフトを高速で使う方法

メニューの [Settings] - [Advanced] - [force_hs] をチェックしてください

カートリッジ版について

カートリッジ版は I/O アドレス 88h に割り当てられています。
また、映像が内蔵 VDP と別になりますので、メニューの [Setting] - [Video] - [Video source to display] で映像ソースを V9968 に切り替えてください。

旧 V9968 のレジスタ定義で使用する方法

設定ファイル中の <version>V9968</version> を <version>V9968_OLD</version> へ変更してください。

V9968 と V9968 エミュレータの差異

各種表示タイミング(HSYNC,VSYNC等)

V9968 エミュレータは V9958 エミュレータと同じタイミングで動作します。

VRAM アクセススロットは V9968 と(なるべく)同じタイミングになるようにしています。

VDPコマンドとP#0の VRAM R/W 処理が重なった時の R/W タイミング

V9968 は P#0 を優先する排他処理を行いますが、V9968 エミュレータは排他処理が行えない為に VDP コマンドと P#0 のアクセスを同時に行います。

VDPコマンドとP#0の VRAM R/W 処理が重なった時の VDP コマンドのデータ

V9968 はキャッシュ上のデータを使用しますが、V9968 エミュレータは VRAM のデータを直接 R/W します。

VDP コマンドの NX, NY 処理

V9968 は NX, NY のカウントをインクリメントカウンタで行いますが、V9968 エミュレータはデクリメントでカウントします。この為、VDP コマンド動作中に NX や NY レジスタを書き換えた場合の挙動が異なります。

スプライト拡大縮小処理

座標計算のアルゴリズムが異なります

VRAM アクセススロット

V9968 の仕様変更で実機は 5番目(9番目) のスプライトアトリビュートを VRAM から読み出しますが、エミュレータは未実装です。

VRAMキャッシュ方式

V9968 の仕様変更で実機は 8way/LRU に変更になりましたが、エミュレータは旧仕様の 4way/RR です。

P#0 R/W 時のVRAMキャッシュ

V9968 の仕様変更で実機は P#0 R/W 時も VRAM キャッシュが有効ですが、エミュレータはキャッシュが無効です。

横 512 ドット時のスプライト表示(作業中)

Screen6, 7 のスプライト描画が未実装です。

LockExtReg レジスタ(作業中)

V9968 の仕様変更で LockExtReg レジスタが実装されましたが、エミュレータでは未実装です。

アドレス設定レジスタ(作業中)

V9968 の仕様変更で V58 レジスタが 1 の時、アドレス設定レジスタの上位ビットが 0 でクリアされますが、エミュレータでは未実装です。

履歴

2026/9/27

変更点Screen7(NonPlanar)モードのレンダラーのバッファーオーバーフローを修正
コミットf79d279
バイナリWindows x64 版

2026/9/26

変更点LFMC コマンドの VRAM アクセススケジューリングの細かい調整
コミット24d261c
バイナリWindows x64 版

2026/9/26

変更点LFMC コマンドのデータ転送間隔が空くとコマンドが正常に終了できない問題を修正
コミットac25209
バイナリWindows x64 版

2026/9/24

変更点SpriteMode2 + EPAL のパレットセット機能を追加
コミット14215c7
バイナリWindows x64 版

2026/9/24

変更点EVRモード時に拡張されたページを表示できない問題を修正
コミットf4c5a45
バイナリWindows x64 版

2026/9/23

変更点V58機能の使用時に値のマスクが拡張されない不具合を修正
コミットc620b69
バイナリWindows x64 版

2026/9/22

変更点V58 ライト時に EVR, FID が切り替わらないバグを修正
コミット1d0ac55
バイナリWindows x64 版

2026/9/21

変更点SP3 モード時は VRAM Planar モードを使用しないように修正
コミット194a769
バイナリWindows x64 版
Linux 版

2026/9/21

変更点LFMC コマンド実行時の R#44 の取り扱いを修正
コミット74e0067
バイナリWindows x64 版
Linux 版

2026/9/20

変更点リセット時にデフォルトパレットで初期設定するように修正
新しいV9968レジスタ定義に合わせて修正
256ドット画面モード時に右端1ドットが表示されない問題を修正
コミットbf1f46b
バイナリWindows x64 版
Linux 版

2026/1/18

変更点FORCE_HS スイッチの追加
コミットd884c4b
バイナリWindows x64 版
Linux 版

2026/1/13

変更点VDPレジスタマスクの修正
VDP P#0 アドレスマスクの修正
コミット873df9d
バイナリWindows x64 版
Linux 版

2026/1/11

コミット2b4e105
バイナリWindows x64 版