← ジョン・ドウ レポート
V9968TEST · README

V9968TEST - V9968 のテストプログラム (v1.00)

MSX-DOS 用。V9968 カートリッジ (I/O 88h) を主な対象とし、本体の VDP (98h の V9938 / V9958 / V9968) でも動く。

V9968 は開発中です。 ここに書いた V9968 の動き (測った値や、R800 での VRAM の読み出しなど) は 2026-10-09〜10-13 ごろの FPGA で確かめたもので、ここに書いたことも書いていないことも、今後の FPGA の更新で直ったり変わったりすることがあります。

ファイル内容
V9968TST.COM機能の確認: VRAM 試験と全画面モードの表示 (MSX-DOS のファイル名は 8 文字までなので TEST を TST に縮めている)
V9968TIM.COMタイミングの確認: パレットのラスター / snow、ページ切り替えのタイミング、走査線割り込みでの分割、速さ (下の「V9968TIM」)
V9968G3D.COMGeo3D (Alex Moncks 氏の 3D 補助プロセッサ) が載っているかの確認 (下の「V9968G3D」)

使い方

V9968TST [/8] [/9] [/R]
オプション意味
なし88h に VDP があれば 88h、なければ 98h
/888h (V9968 カートリッジの既定の I/O) に固定
/998h (本体 VDP の位置) に固定
/RturboR で R800 のまま実行する。既定は Z80 に切り替えて、終わったら戻す

テスト画面でのキー操作:

キー動作
SPACE / →次の画面 (最後の次は VRAM 試験に戻る)
BS / ←前の画面
RETURN今の画面をもう一度 (VRAM 試験なら試験をやり直す)
ESC終了

起動時と終了時に、MSX 本体の画面 (DOS) に VDP の種類・I/O・VRAM 容量・CPU と、VRAM 試験の結果を表示する。88h のときは本体の VDP には触らないので、テスト画面は V9968 側 (HDMI) にだけ出る。

画面

#モード内容
0SCREEN 0 W40VRAM 試験 (下記)
1SCREEN 0 W40桁の目盛り、外周の枠、256 文字、1 ドットの縦じま・市松・塗り
2SCREEN 0 W80同上 (80 桁) + ブリンク (R#12 = F8h, R#13 = 33h)
3SCREEN 116 色 x (塗り / 市松 / 縦線 / 横線)、文字
4SCREEN 316 色の縦のバー、斜めの色の帯、白い外周
5SCREEN 2格子、同心円、対角線、四隅の 1 ドットの模様、16 色のバー (8x1 の色で虹色)
6SCREEN 4同上 + スプライトモード 2 (1 ラインに 9 個並べて 8 個だけ見える。ライン毎の色)
7, 9, 11, 15SCREEN 5 / 6 / 7 / 8テストカード: カラーバー (75%)、8 段の階調、解像度 (1-4 ドットの縦じま)、円、格子、四隅と下の 1 ドットの模様
8, 10, 12, 16SCREEN 5 / 6 / 7 / 8幾何パターン: 格子、対角線、6 重の同心円、四隅と中心の模様
13SCREEN 7 インターレース512x424 (R#9 IL+EO、ページ 0 = 偶数ライン、ページ 1 = 奇数ライン): 格子、6 重の同心円、左上 1 ラインの横じま (片方のフィールドだけ白)、右上 2 ラインの横じま、左下 424 ラインの市松、右下 1 ドットの縦じま
14SCREEN 7 フラットインターレース同じ絵を V9968 の R#20 FIL (VRAM の上から 424 ラインが順に並ぶ。VDP コマンドの DY = 0-423) で (V9968 のみ)
17SCREEN 8256 色の表 (16 x 16)
18SCREEN 8 + EPAL32768 色から 256 色: 赤・緑・青・灰 各 32 段、色相 128 段 (V9968 のみ)
19SCREEN 12YJK: J-K の平面 (Y = 16)、Y の 32 段の階調、カラーバー (V9958 以降)
20SCREEN 10/11YJK + パレット: J-K の平面とパレット 16 色、Y の 16 段、カラーバーの上にパレットの文字 (V9958 以降)

VRAM 試験

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

表示に使うだけでは、使わない領域やアドレス線の重なり (128KB 以降が 0 番地からの写しになっている等) が分からないので、試験は表示とは別にした。

V9968TIM (タイミング)

V9968TIM [/8] [/9] [/R]

オプションは V9968TST と同じ。キー: SPACE / → 次のテスト、BS / ← 前、RETURN モード切り替え、↑↓ 調整、ESC 終了。CPU の速さで結果が変わるので、Z80 (既定) と R800 (/R) の両方で見るとよい。

#テスト内容
1パレットのラスター (SCREEN5)毎ライン、水平帰線 (S#2 HR) の始まりでパレット 0 (左半分と周辺) を書き換える。色の変わり目がラインのどこに来るか、ゆれがないかを見る。RETURN でモード: ラスター / snow (表示中に、画面に出ていないパレット 15 を書き続ける。点が出たら表示中のパレット書き込みで乱れる) / V9968 は EPAL (3 バイト) のラスター / snow も
2ページ切り替えのタイミング (SCREEN5)ページ 0 = 色 1、ページ 1 = 色 2。毎フレーム、垂直帰線の始まり + N ラインで「これから出すページの色 = 灰色、今のページの色 = 赤」をパレットに書いてから R#2 を切り替える。灰色なら次のフレームから切り替わっている。赤やちらつきは 1 フレーム遅れ、上下で分かれるのは表示の途中で効いている。↑↓ で N、RETURN でパレットを 4 バイト / EPAL 768 バイト (V9968)
3走査線割り込みでの分割 (SCREEN5)R#19 のラインで S#1 の FH を待ち、R#23 (縦スクロール) とパレット 0 を変える。帯の番号でスクロールが、周辺の色で変わる位置が分かる。↑↓ で分割位置、RETURN でスクロールあり / なし
4速さ1 フレームと垂直帰線のライン数、パレット 32 バイト、EPAL 768 バイト、VRAM 16KB の書き込み / 読み出し (OTIR / INIR)、SCREEN8 の HMMV / LMMV / HMMM / LMMM (256x212)。V9968 は VDP コマンドを通常 / 高速 (R#20 HS) の両方。垂直帰線の始まりからのライン数と ms (1 ライン = 64us として) を SCREEN0 に出す。RETURN で測り直す
5CPU からの VRAM アクセス (turboR のみ)VRAM 10000h-13FFFh (16KB) を「R800 で書いて Z80 で読む」(書き込みの誤り) と「Z80 で書いて R800 で読む」(読み出しの誤り) に分け、OTIR / INIR と、1 バイト毎に待ち (dec a / jr nz を 1-32 回) を入れた場合で誤りの数を数える。最初に Z80 だけの基準も測る

V9968G3D (Geo3D の確認)

V9968G3D [/8] [/9] [/R]

Geo3D は HRA! 氏の FPGA に入っている 3D の補助プロセッサ (作者 Alex Moncks 氏。2026-10-05 の版にはすでに入っている)。ポートは先頭 + 5 (88h なら 8Dh: 番号 / 状態) と先頭 + 7 (8Fh: データ)。結果は DOS の画面に出す。

  1. 状態のポートを読む。FFh なら Geo3D なし (古い FPGA) で終わる
  2. レジスタ NVERT に 5Ah を書いて読み返す
  3. 頂点 1 つの計算を 10 通り (中心、右上、遠く、30° 回転、移動、512x424、手前すぎ (NEAR)、あふれ (OVF)、画面外、2 倍) 行い、前もって計算した答え (SX, SY, Z, FLAGS) と比べる。答えは作者の検証モデル (geo3d/sim/gen_vectors.py) とも一致を確認済み
  4. 全部合えば、キーを押すと V9968 の画面 (SCREEN5、ページ 0 / 1 を交互) に回転する立方体を Geo3D に描かせる (SPACE / ESC / RETURN で止める)。終わると最初のフレームの DRAWN / CULLED / SKIPPED (線なら 12 / 0 / 0 のはず)、描いたフレーム数、時間、平均フレームレートを出す。時間は turboR ならシステムタイマー (E6h/E7h)、それ以外は JIFFY で測る (88h なら割り込みを止めずに動かすので JIFFY を取りこぼさない。98h で turboR 以外だと、画面消去の待ちなどで取りこぼして短く出ることがある)
  5. Geo3D の読み出しも VDP と同じく後からデータを返す作りなので、既定の Z80 で動かす (/R は付けない)。
  6. V9968 実機 (turboR、88h) で、回転する立方体が描かれ、DRAWN / CULLED / SKIPPED = 12 / 0 / 0、平均 59.9fps を確認した。

V9968 について

参考: HRA! 氏の V9968_Cartridge (fpga/V9968_Cartridge_TangNano20K/src/v9968/manual/)

確かめた環境

参考

非公式のテストプログラムです。使用は自己責任でお願いします。