Во-первых, только спрайты могут отображаться в области границы или в виде повторяющегося 8-битного шаблона (шириной 8 пикселей), который считывается из последнего байта видеобанка, обычно $ 3fff. Обратите внимание, что вы можете видеть только эти спрайты или 8-битный шаблон, когда вы обманываете микросхему VIC, чтобы «не отображать» границы. Смотри ниже.
Границы имеют более высокий приоритет, чем спрайты, поэтому обычно, когда спрайт рисуется в области границы, граница покрывает спрайт. С помощью хитрости VIC вы можете отключить границы.
Вы можете довольно легко отключить верхнюю и нижнюю границу (я объясню ниже), а боковая граница ограничивается очень критичным временем.
Сначала немного информации о том, как чип VIC работает на c64.
Микросхема VIC рисует экран сверху слева, сверху справа, затем вниз по линии и снова слева направо, пока не будет нарисован весь экран. Эта перерисовка выполняется 50 раз в секунду (для блоков PAL) или 60 раз в секунду (для блоков NTSC).
Существует 8-битный регистр VIC, который содержит вертикальную позицию растра в любой момент времени. $ D012. На самом деле существует более 255 возможных позиций, поэтому 9-й бит хранится в бите 7 (старший бит) или регистре $ d011. Таким образом, в любой момент вы можете прочитать эти регистры и узнать вертикальное положение растра. Нет доступного регистра для чтения позиции х растра.
Еще одна интересная особенность чипа 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 думать, что он уже начал рисовать границу, поэтому он никогда не начинает рисовать его. Вуаля, верхняя и нижняя границы открыты.
Что касается боковых границ, то вы можете сделать то же самое с разными регистрами, но поскольку горизонтальное движение растра намного быстрее, чем вертикальное, синхронизация должна быть намного более жесткой. И есть еще одна проблема, которую нужно учитывать, называется джиттер. <-что я не буду здесь объяснять. Поищите в сети «Stable Raster C64» для подробного объяснения этой проблемы. </p>