← ジョン・ドウ レポート
V9968 · 開発報告

V9968 テストプログラム 開発報告

V9968 カートリッジを組み立てた人が、自分のカートリッジがちゃんと動いているかを確かめるための MSX-DOS 用プログラムを 3 本作った。VRAM と全画面モードを見る V9968TST、パレット・ページ切り替え・割り込み・速さを測る V9968TIM、FPGA に入っている 3D 補助プロセッサ Geo3D を確かめる V9968G3D である。実機(turbo R + V9968 カートリッジ)で試して分かったこともあわせて報告する。

V9968 は開発中である。 この報告の内容は、2026-10-09〜10-13 ごろの FPGA で確かめたものである。「6. 実機で分かったこと」に挙げたことはもちろん、挙げていないことも、今後の FPGA の更新で直ったり変わったりすることがある。

1. V9968 について

V9968 は HRA! 氏が FPGA(Tang Nano 20K)で作った、V9958 の上位互換の VDP である。カートリッジ版は MSX のスロットに挿して使い、絵は HDMI で出る。

参考: HRA! 氏の V9968_Cartridge、Alex Moncks 氏の Geo3D

2. プログラムの一覧

ファイル内容
V9968TST.COM機能の確認: VRAM 試験と、全画面モードの表示
V9968TIM.COMタイミングの確認: パレットの書き換え、ページの切り替え、走査線割り込み、速さ、R800 での VRAM の読み書き
V9968G3D.COMGeo3D が載っているかの確認と、回転する立方体
V9968TST [/8] [/9] [/R]
V9968TIM [/8] [/9] [/R]
V9968G3D [/8] [/9] [/R]
オプション意味
なし88h に VDP があれば 88h、なければ 98h を使う
/888h を使う
/998h を使う
/Rturbo R で R800 のまま動かす。指定しなければ Z80 に切り替えて、終わったら元に戻す

3. V9968TST(機能の確認)

最初に VRAM 試験、そのあと SCREEN 0 から SCREEN 12 までの全画面モードを 1 枚ずつ出す。SPACE で次、BS で前、RETURN でもう一度、ESC で終わり。

3.1 VRAM 試験

VRAM 全体(V9968 は 256KB、V9938 / V9958 は 128KB)を 16KB のバンク単位で調べる。

画面に絵を出すだけでは、使っていない領域や、128KB から先が 0 番地の写しになっているような不良に気付けない。それで、試験は表示とは別にした。

VRAM 試験の画面(openMSX の V9958 なので 128KB = 8 バンク)
VRAM 試験の画面(openMSX の V9958 なので 128KB = 8 バンク)

3.2 画面

モード内容
SCREEN 0(40 / 80 桁)、1、3桁の目盛り、外周の枠、256 文字、1 ドットの模様、16 色、ブリンク
SCREEN 2 / 4格子・同心円・対角線、16 色のバー、スプライト(1 ラインに 9 個並べて 8 個だけ見える)
SCREEN 5 / 6 / 7 / 8テストカード(カラーバー、階調、解像度、円、格子)と幾何パターン
SCREEN 7 インターレース512x424。左上に片方のフィールドだけの横じま
SCREEN 7 + FIL同じ絵を、VRAM に 424 ラインが順に並ぶ形で(V9968 のみ)
SCREEN 8 / 8 + EPAL256 色の表 / 32768 色から 256 色(V9968 のみ)
SCREEN 10 / 11 / 12YJK の色の平面、Y の階調、カラーバー(V9958 以降)
SCREEN 5 のテストカード(openMSX で撮影)
SCREEN 5 のテストカード(openMSX で撮影)
SCREEN 2 の格子と同心円(openMSX)
SCREEN 2 の格子と同心円(openMSX)
SCREEN 7 インターレース 512x424(openMSX)
SCREEN 7 インターレース 512x424(openMSX)
SCREEN 12 の YJK(openMSX)
SCREEN 12 の YJK(openMSX)

4. V9968TIM(タイミングの確認)

動画の再生やラスター処理のような「表示に合わせてレジスタを書く」使い方を想定して、反映のタイミングと速さを測る。CPU の速さで結果が変わるので、Z80(既定)と R800(/R)の両方で見るとよい。SPACE で次のテスト、RETURN でモード切り替え、↑↓ で調整。

#テスト見方
1パレットのラスター(SCREEN 5)毎ライン、水平帰線の始まりでパレット 0 を書き換える。色の変わり目の位置とゆれを見る。表示中に書き続けて点(snow)が出ないかも見られる。V9968 は EPAL でも
2ページ切り替えのタイミング毎フレーム、垂直帰線の始まり + N ラインで「これから出すページの色 = 灰色、今のページの色 = 赤」をパレットに書いてから R#2 を切り替える。灰色なら間に合っている
3走査線割り込みでの分割R#19 のラインで縦スクロールとパレットを変える
4速さ1 フレームと垂直帰線のライン数、パレット 32 バイト、EPAL 768 バイト、VRAM 16KB の読み書き、SCREEN 8 の VDP コマンド(V9968 は通常 / 高速)
5CPU からの VRAM アクセス(turbo R のみ)「R800 で書いて Z80 で読む」と「Z80 で書いて R800 で読む」に分けて、誤りの数を数える
テスト 1 パレットのラスター(openMSX)
テスト 1 パレットのラスター(openMSX)

5. V9968G3D(Geo3D の確認)

Geo3D は、頂点の座標変換と透視の計算をして、VDP の LINE コマンドで線を引いたり面を塗ったりする補助プロセッサである。結果は DOS の画面に出す。

  1. 状態のポートを読む。FFh なら Geo3D がない(古い FPGA)ので終わる
  2. レジスタに値を書いて読み返す
  3. 頂点 1 つの計算を 10 通り(中心、回転、移動、512x424、手前すぎ、あふれ、画面外など)させて、前もって計算した答えと比べる。答えは作者の検証用モデルとも一致を確かめてある
  4. 全部合えば、キーを押すと V9968 の画面に回転する立方体を描かせる。終わると最初のフレームの描いた線の数(12 / 0 / 0 のはず)、フレーム数、時間、平均のフレームレートを出す

Geo3D からの読み出しも VDP と同じく後からデータを返す作りなので、既定の Z80 で動かす(/R は付けない)。

6. 実機で分かったこと

turbo R、MSX-DOS2、V9968 カートリッジ(I/O 88h)で、2026-10-09〜10-13 ごろの FPGA で試した。機能(全画面モード、VRAM 256KB、EPAL、インターレース / FIL、VDP コマンド)はどれも問題なく動いた。そのうえで気付いたことを挙げる。

6.1 測った値

項目(ライン数、1 ライン 約 64µs)Z80R800
1 フレーム / 垂直帰線262 / 51262 / 51
パレット 32 バイト51
EPAL 768 バイト8122
VRAM 書き込み 16KB1715479
SCREEN 8 256x212 の HMMV / LMMV / HMMM / LMMM50 / 154 / 133 / 225同じ

6.2 気付いたこと

7. 確かめた環境

対象確かめた環境
全画面、VRAM 試験、V9968TIM のテスト 1-4openMSX(Panasonic FS-A1ST、本体の V9958 を 98h で)
V9968 の機能(88h、256KB、EPAL、FIL、HS)、テスト 5実機: turbo R + V9968 カートリッジ(88h)
V9968G3D実機: turbo R + V9968 カートリッジ(88h)。Geo3D がない場合は openMSX

openMSX には V9968 も Geo3D もないので、V9968 だけの処理は実機でしか確かめていない。

8. V9968 に対応したほかのソフト