NESがどのようにそのグラフィカルな筋肉を表示するのか疑問に思っています。私はオンラインで物事を調べてそれを読み通しましたが、最後にもう1つ疑問に思っています。それはNametablesです。
基本的に、私が読んだことから、NESネームテーブルの各8x8ブロックは、グラフィックメモリを保持するパターンテーブル内の場所を指しています。さらに、ネームテーブルには、16x16ブロックごとに特定のカラーパレットを設定する属性テーブルもあります。それらは次のようにリンクされています。
(16個の8x8ブロックを想定)名前付きテーブル、ABCD =スプライトデータへのポインター:
ABBB
CDCC
DDDD
DDDD
属性テーブル、1 2 3 =カラーパレットデータへのポインタ、<は左に値を参照、^は上、'は左と上に:
1<2<
^'^'
3<3<
^'^'
したがって、上記の例では、ブロックは次のように色付けされます
1A 1B 2B 2B
1C 1D 2C 2C
3D 3D 3D 3D
3D 3D 3D 3D
さて、これを固定画面に表示すると、うまく機能します。NESの解像度は256x240ピクセルだからです。では、これらのテーブルはどのようにスクロール用に調整されますか?
Nametable0はNametable1にスクロールできるため、スクロールを続けるとNametable0は再び折り返されます。私が得ること。しかし、私が得られないのは、属性テーブルのラップアラウンドもスクロールする方法です。私がオンラインで読んだものから、属性を割り当てる16x16ブロックは、画面のエッジタイルに色の歪みを引き起こします(SMB3で左から右にスクロールした場合、またはその逆の場合に見られます)。
私が懸念しているのは、名前テーブルをスクロールする方法を理解していることですが、属性テーブルをどのようにスクロールしますか?たとえば、画面の左側に緑色のブロックがある場合、画面を右に移動すると、理論的には、フレーム内に移動するまで右側のタイルも緑色になり、元に戻ります。彼らの通常の色。
~~~~編集:私はスキャンライン、XとYについて知っていることを指摘したいと思います。この考えはちょうど私の心を駆け巡りました。
スキャンラインYが10になっているとしましょう。つまり、名前テーブルに水平方向に10個の値を読み込んでいます。これは、ピクセル幅が8しかないため、最初の列が画面から外れていることを意味します。ただし、幅が16であるため、color属性はそのままです。
列全体の色属性が緑色であると仮定すると、ユーザーにとって、画面の左側の最初の6ピクセルは緑色になり、画面の右端の10ピクセルも緑色になると仮定するのは正しいでしょうか。それで、画面によると、左という私の仮定は正しいでしょうか?