[1chipMSX改]

V9958調査資料 〜PALETTE〜

本物のV9958 は、おそらくFFでパレット値を保持していると思われる。
FPGAで実現するにあたり、3bit * 3element * 16palette = 192bit の FF を使うと LogicElementの消費が激しく
無駄に使ってしまうため、MSX ではあまり必要としていない BlockRAM にパレットレジスタを割り当てることにする。

GRAPHIC6 (SCREEN7) では、1画素を 2cycle で処理しなければならないため、8bit 幅の BlockRAM を使うと、
RB の 1byte と、G の 1byte を読み出すのに 2cycle 掛かり、表示期間中は常にパレットレジスタを読み出し続ける
ことになる。そうなると、CPU からのパレット書き込みがブランキング期間だけにしか動作しなくなり遅くなる。
そんなことからも、本物は FF だろうと思われる。

そこで、BlockRAM はたくさん余っているため、8bit幅の RAM を2つ使ってパレットレジスタを構成する。
16word では BlockRAM に割り当てられない場合があるため、256word のメモリを使用することにする。
非常に無駄が多いが、未使用部分は後に TH9958独自機能として利用する予定なので気にしないことにする。

そんな感じで、RAMへのアクセスを調停する回路を作成した。



これは、下記のようなタイミングで動作する。



PALETTE_RAM とかかれている部分が、2つの 256word/8bit の BlockRAM をあわせることで 256word/16bit としているメモリ
である。
1read/write (1cycle で read か write のどちらかのみ) の RAM を想定している。
1read/1write (1cycle で read と write が同時に実施できる) でも代用できる。

[▲上へ]