Во-первых, в граничной области могут отображаться только спрайты или повторяющийся 8-битный шаблон (шириной 8 пикселей), который считывается из последнего байта видеобанка, обычно $3fff. Обратите внимание, что вы можете видеть эти спрайты или 8-битный шаблон только тогда, когда вы обманываете чип VIC, заставляя его «не отображать» границы. Смотри ниже.
Границы имеют более высокий приоритет, чем спрайты, поэтому обычно, когда спрайт рисуется в области границы, граница закрывает спрайт. Немного хитрости с микросхемой VIC позволяет отключить границы.
Вы можете довольно легко отключить верхнюю и нижнюю границы (я объясню ниже), а боковые границы с очень критичным временем.
Сначала немного информации о том, как чип VIC работает на c64.
Микросхема VIC рисует экран сверху слева вверх справа, затем вниз по строке и снова слева направо, пока не будет отрисован весь экран. Он выполняет эту перерисовку 50 раз в секунду (для устройств PAL) или 60 раз в секунду для (устройств NTSC).
Существует 8-битный регистр VIC, который содержит положение растра по вертикали в любой момент времени. $d012. На самом деле существует более 255 возможных позиций, поэтому 9-й бит хранится в бите 7 (старший бит) или в регистре $d011. Так что в любой момент вы можете прочитать эти регистры и узнать положение растра по вертикали. Нет доступного регистра для чтения позиции x растра.
Еще одна интересная функция чипа VIC была использована для решения проблемы при использовании аппаратной прокрутки. Базовая вертикальная прокрутка была достигнута за счет использования аппаратного регистра для перемещения экрана на 0-7 пикселей по вертикали. Как только вы достигнете предела (0 или 7 в зависимости от направления прокрутки), вы будете перемещать каждый блок символов (8x8 пикселей) на один блок по вертикали и рисовать новые данные, которые будут отображаться вверху (или внизу в зависимости от направления). Это работает очень хорошо, за исключением того, что каждые 8 пикселей прокрутки вы видите, как данные «выскакивают» на экран. Чтобы исправить это, вы можете увеличить область границы на 8 пикселей по вертикали, очистив бит 3 в регистре $d011. Это называется 24-рядным режимом. По умолчанию экран был настроен на 25 рядов символов 8x8 пикселей. В 24-рядном режиме вы все еще можете рисовать символы в нижнем ряду, они просто будут скрыты рамкой.
Таким образом, трюк с отключением верхней и нижней границ заключается в следующем:
1) Установите экран в режим 25 строк
2) подождите, пока растр достигнет вертикальной позиции между $f2 и $fa (8 пикселей между началом границы как в 24-строчном, так и в 25-строчном режиме).
3) Установите экран в 24-строчный режим... перемещая вертикальное начало границы над текущей растровой позицией
4) Подождите, пока не появится вертикальная растровая позиция ($ fa)
5) Повторяйте каждый кадр
Шаг 3) обманывает чип VIC, заставляя его думать, что он уже начал рисовать границу, поэтому он никогда не начинает ее рисовать. Вуаля, верхняя и нижняя границы открыты.
Что касается боковых границ, вы можете сделать то же самое с разными регистрами, но поскольку горизонтальное движение растра происходит намного быстрее, чем вертикальное, тайминг должен быть намного более точным. И есть еще одна проблема, которую следует учитывать, называемая джиттером. ‹-что я не буду объяснять здесь. Найдите в Интернете "Стабильный растр C64" для подробного объяснения этой проблемы.
person
JohnD
schedule
19.11.2009