[1chipMSX改]

V9958調査資料 [V9958互換IP TH9958作成のための資料]

レジスタマップ[register map]
パレットレジスタ [palette register]
VRAMアクセス[vram access]
表示系 [display output]
GRAPHIC1 [GRAPHIC1]
GRAPHIC2/GRAPHIC3 [GRAPHIC2/GRAPHIC3]
GRAPHIC4 [GRAPHIC4]
GRAPHIC5 [GRAPHIC5]
GRAPHIC6 [GRAPHIC6]
GRAPHIC7 [GRAPHIC7]
割り込み系 [interrupt]
YJKカラー(自然画) [YJK color mode]
VRAMアービタ [VRAM access arbiter]


TH9958 (V9958 compatible IP core)
[progress]
block coding unit test
TH9958_TOP 60% 20%
TH9958_CONFIG --% --%
TH9958_SSG 100% 100%
TH9958_REGISTER 95% 90%
TH9958_TG 60% 50%
TH9958_GRAPHIC 60% 50%
TH9958_VDP_COMMAND 0% 0%
TH9958_ARBITER 100% 100%
TH9958_SPRITE 30% 0%
TH9958_SPRITE_DET 100% 50%
TH9958_SPRITE_PIX 100% 50%
TH9958_SPRITE_DELAY_LINE 100% 0%
TH9958_PALETTE 100% 100%
TH9958_PALETTE_RAM 100% 100%
TH9958_YJK 100% 10%
TH9958_MIXER 0% 0%
TH9958_VGA_UPCON 100% 100%
TH9958_LINEBUF_RAM 100% 100%
TH9958_INTERRUPT 100% 100%
TH9958_DEBUG --% --%


2008/9/23 現状
SPRITE_PIX を実装完了。
SPRITE_DET に Y座標取得用VRAMアドレス信号出力 が抜けているのを修正。

2008/9/21 現状
SPRITE_PIX を実装完了。

2008/9/19 現状
表示するスプライトを選択する回路 SPRITE_DET を実装完了。
とりあえず、Typical動作の1ケースをテストしてみて、問題ないことを確認。
細かいテストは後回しにして、スプライトの残りのルーチンの実装を優先する。


2008/9/14 現状
スプライト関連の回路を設計中。
1ライン内における表示期間と非表示期間(Hブランキング期間)とで処理を分けることにした。
最初の表示期間内で、表示するスプライト(最大8枚)を特定する。
次の非表示期間で、特定したスプライトの情報を収集し、SRAM上に1ライン分のスプライト表示を構成する。
次の表示期間で、SRAM上のスプライト表示情報を表示回路へ送りつつ、SRAMをクリアして、かつ次の表示スプライト特定処理を実施する。
結局、ESE-VDP とほとんど同じ処理になるが、TH9958 では、これら3つの異なる処理を3つの回路に分けて作成し、個別にテスト実施
しやすいようにする。

下の 9/6 の不都合だが、無改造の 1chipMSX でも MSX1 のタイトル表示後に暴走することが判明。
単純に、用意した MSX1 の BIOS が、1chipMSX と相性の悪いもの(意識しているスロット構成が異なるなど)なのかもしれない。
BIOS を逆アセンブルして追跡すればわかるかもしれないが、時間がかかりそうなので、それは断念。

作業を再開したのは良いものの、しばらく放置していた影響で、中身を忘れている。
資料を読み直しながらリハビリ中。


2008/9/6 現状
作業を再開。
MSX2+ の BIOS で起動しようとしていたが、起動時のロゴ画面のときに、スプライトが正常に動作していないと暴走するため、
MSX1 の BIOS での起動を試みたところ、起動時の文字列表示が正常に出ることを確認 (^-^)/
しかし、その後、表示が乱れ、リセットがかかる。
スプライトを使っている様子は無いので、おそらく、割り込み処理の不都合だと思われる。要調査。


2008/8/23 現状
本業が忙しくなり、1chipMSX改 開発に時間を割けない状態のため、現在、一時停止中。
9月の中頃から、作業を再開できる見込み。
それまで、しばしお待ちを。


2008/7/21 現状
割り込み信号がステータスレジスタ F, FH に出ていなかったバグを修正。
Sprite を作り始めた。
ESE-VDPの代わりに接続すると、青い画面に黒と白の四角がたくさん出てくる画面でフリーズする。
青い画面は背景色だから良いとして、黒と白の四角は何だろう!?
ESE-VDP が正常な VRAM を構成した後に TH9958 に切り替えると、表示は正常なので GRAPHIC1 の表示回路にミスは無いはずだが・・・

ESE-VDP からいくつかの機能を削除して MSX2+ として起動できるかどうか確認してみたところ、VDP-Command は無くても起動したが
Sprite が無いと起動ロゴでフリーズする。ロゴで Sprite を使っているが、Sprite に関する何らかのステータスを読んで待機する
処理が入っているようだ。
なので、TH9958 も VDP-Command よりも先に Sprite を実装することにした。


2008/7/16 現状
VRAMへの読み込みが正常に行われないバグを修正。

テストプログラムにて、VRAMの読み書きが正常に行えること、ステータスレジスタの読み込みが正常に行えることを確認したので
ESE-VDP の代わりに TH9958 を接続して起動してみたものの、表示が崩れた状態で暴走する。
まだ何かマズイ点があるようだ。


2008/7/14 現状
VRAMへの書き込みで、+1されたアドレスに書き込まれるバグを修正。


2008/7/13 現状
GRAPHIC1〜7 の表示回路を実装。
ただし、GRAPHIC7 の 256色は正しく処理していないため、正しい色で表示されない。
あと、割り込み処理が等に問題があるため、ESE-VDP と入れ替えると MSX として起動できない問題が残ってる。


2008/7/12 現状

VRAM に A5h を書き込む処理を実施後、同じアドレスを読み出す処理を実施するテスト回路を作成。
その読み出した結果が赤文字。00h になっており、正常に読めていないことがわかる。
読めていないのか、書き込めていないのかはこれだけでは判断不能。


テスト回路を充実させて実機動作での不都合原因を追及することと、ModelSIMシミュレーションでタイミングを注意深く確認
したところ、ARBITER と GRAPHIC と タイミング生成回路(現状は TH9958.VHD に直書き)の気持ちが微妙にずれているのを発見。
修正したところ、正常に表示が出るようになった。
ただし、現状は GRAPHIC1 のみ。
ESE-VDP 接続状態で起動して、キーボード操作によって TH9958 に切り替えられるようにして確認したのが上の写真。
切り替えは、DRAM接続もまとめて切り替えるため、TH9958 の表示の際には、ESE-VDP から VRAM にアクセスできないため、
現状は TH9958 接続状態では操作不能になる。


2008/7/6 現状

診断結果表示用として、ROMフォント(16進数の数値のみ)を作成して、それを表示する回路を組み込んでみた。
フォントは問題なく表示できているので、後はレジスタ設定値やDRAM読み書き結果等を表示する機能をつけるのみ。


2008/7/5 現状
ARBITER の再設計は完了し、接続してみたものの、まだ不整合がある状態。
それ以前に、ESE-VDP の代わりに組み込むと、起動時に暴走しているようなので、
割り込み周りにも問題がありそう。
割り込みの問題なのか、それともDRAMアクセスの問題なのか切り分けるために、
もう少しタイミングを整理しなければならない。
SDRAM Controller の挙動は、シミュレーションしただけではわからない(思い通り動いていても SDRAM 自体の挙動を誤解しているとバグる)ので、
実機上で、何らかの診断を実施して、診断結果を表示するような回路を作って組み込まねばならない気がする。


2008/6/30 現状
SDRAM Controller を解析した結果、ARBITER に致命的なバグがあることが判明。
SDRAM Controller のタイミングを考慮して、ARBITER を再設計することに決定。



2008/6/29 現状
表示位置が正しく中央に来るように修正。
画像の表示部分(青)と、外側部分(水色)の判定用ウィンドウ生成回路を追加。
DRAM へのアクセスがまだうまくできていないためか、ESE-VDP の代わりに接続しても表示が出ない。



2008/6/21 現状
I/Oアクセスのバグを修正。
100 Y=0
110 OUT1,Y:OUT1,&H80+23
120 A$=INPUT$(1)
130 Y=(Y+(A$="w")-(A$="s"))AND255
140 GOTO110
これでグラデーション表示が垂直スクロールするのを確認。

この後、PALETTEを接続して、16色カラーバー生成回路を組み込んでパレットの反応をテストしたのが上の写真。
MSXのデフォルトパレット設定をセットして、それらしい色が表示されるのを確認。
TG が生成する画面座標に従ってカラーバーを表示しているが、少し位置がずれている模様。
写真では、黒い縦筋が中央に見えるが、これはすでに解消済み。


2008/6/20 現状
VGA_UPCON に NTSC→VGA のアップコンバータを実装し、MSX の解像度でグラデーション表示。
I/Oアクセスはまだバグありでうまくいかない模様。
この段階で結合しているのは、TOP(途中), REGISTER, SSG, TG(途中), VGA_UPCON(途中)。



2008/6/17 現状
SSG の生成するタイミング信号を直接 VGA_UPCON に投入して、VGA_UPCON で生成したテスト信号
を出力している状態。VGAモニタ向けのタイミング信号生成は、問題なく動作している模様。
この段階で結合しているのは、TOP(途中), REGISTER, SSG, VGA_UPCON(途中)。
ESE-VDPは生かしたまま、別デバイスとして TH9958 を接続。port#0〜#3 は I/O 00h〜03h にマッピング。
これで、MSX-BASICを使って TH9958 をテストできるようになった。
表示の方は、PrintScreenキーで ESE-VDP と TH9958 を切り替えられるようにしてあるから、
TH9958の表示系が不安定でも問題なく結合テスト出来る。


[▲上へ]