Мне интересно, как NES отображает свою графическую мышцу.Я исследовал материал онлайн и прочитал его, но меня интересует еще одна вещь: Nametables.
По сути, из того, что я прочитал, каждый блок 8x8 в именованной таблице NES указывает на местоположение втаблица шаблонов, в которой хранится графическая память.Кроме того, таблица имен также имеет таблицу атрибутов, которая устанавливает определенную цветовую палитру для каждого блока 16x16.Они связаны между собой следующим образом:
(при условии 16 блоков 8x8) Nametable, с ABCD = указатели для спрайта данных:
ABBB
CDCC
DDDD
DDDD
Таблица атрибутов, с 1 2 3 = указатели наданные цветовой палитры, с <ссылочным значением слева, ^ вверху и 'слева и сверху: </p>
1<2<
^'^'
3<3<
^'^'
Таким образом, в приведенном выше примере блоки будут окрашены следующим образом:
1A 1B 2B 2B
1C 1D 2C 2C
3D 3D 3D 3D
3D 3D 3D 3D
Теперь, если у меня есть это на фиксированном экране - это прекрасно работает!Потому что разрешение NES составляет 256х240 пикселей.Теперь, как эти таблицы настраиваются для прокрутки?
Поскольку Nametable 0 может прокручиваться до Nametable 1, и если вы продолжите прокрутку, Nametable 0 снова будет отображаться.Это я получаю.Но я не понимаю, как прокрутить таблицу атрибутов.Из того, что я читал в Интернете, блоки 16x16, которым он назначает атрибуты, вызовут искажения цвета на краях экрана (как видно при прокрутке слева направо и наоборот в SMB3).
меня беспокоит то, что я понимаю, как прокручивать таблицы имен, но как прокрутить таблицу атрибутов?Например, если у меня есть зеленый блок в левой части экрана, перемещение экрана вправо должно теоретически привести к тому, что плитки справа также будут зелеными, пока они не переместятся в кадр, к которому они вернутся.их нормальные цвета.
~~~~ РЕДАКТИРОВАТЬ: Я хочу отметить, что я знаю о линиях сканирования, X и Y. Эта мысль только что пришла мне в голову.
Допустим, я на ScanlineY из 10. Это означает, что я читаю 10 значений в мои таблицы имен по горизонтали.Это означало бы, что мой первый столбец находится за пределами экрана, поскольку его ширина пикселя равна 8. Однако атрибут цвета остается, поскольку он имеет ширину 16.
Предполагается, что атрибут цвета для всего столбца имеет значениезеленый, я был бы прав, предполагая, что для пользователя первые 6 пикселей в левой части экрана будут окрашены в зеленый цвет, а самые правые 10 на экране также должны быть зелеными?Итак, я был бы прав в своем предположении, что в соответствии с экраном, слева?