Привлеките экранную границу в Commodore 64

Я думаю, что самый простой ответ: это быстрее.

, Если Вы действительно хотите знать весь материал под капотом, Вы могли бы всегда взглянуть на источник сами:

http://www.sun.com/software/opensource/java/getinvolved.jsp

http://download.java.net/jdk6/latest/archive/

56
задан paprika 31 March 2010 в 05:29
поделиться

5 ответов

Я бы попытался решить проблему нестандартно, возможно, есть какой-то другой алгоритм, который мог бы выполнять работу намного лучше и быстрее, чем база данных. Конечно, все зависит от природы данных, но есть какой-то алгоритм поиска строк, который довольно быстр (Boyer-Moore, ZBox и т. Д.), Или другой алгоритм сбора данных (MapReduce?). Тщательно разработав экспорт данных, можно было бы измените проблему, чтобы найти более элегантное и быстрое решение. Кроме того, можно было бы лучше распараллелить проблему и с помощью простого клиента использовать циклы простоя окружающих вас систем, есть структура, которая может помочь с этим.

Результатом этого может быть список refid кортежи, которые можно использовать для получения полных данных из базы данных намного быстрее. Обратите внимание, что вы можете увидеть эти спрайты или 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 думать, что он имеет уже начал рисовать границу, поэтому никогда не начинает ее рисовать. Вуаля, верхняя и нижняя границы открыты.

Что касается боковых границ, вы можете сделать то же самое с разными регистрами, но поскольку горизонтальное перемещение растра происходит намного быстрее, чем вертикальное перемещение, время должно быть намного точнее. И есть еще одна проблема, которую следует учитывать, - это джиттер. <- я не буду здесь объяснять. Поищите в Интернете "Stable Raster C64", чтобы получить более подробное объяснение этой проблемы.

поэтому он никогда не начинает его рисовать. Вуаля, верхняя и нижняя границы открыты.

Что касается боковых границ, вы можете сделать то же самое с разными регистрами, но поскольку горизонтальное перемещение растра происходит намного быстрее, чем вертикальное перемещение, время должно быть намного точнее. И есть еще одна проблема, которая называется джиттером. <- я не буду здесь объяснять. Поищите в Интернете "Stable Raster C64", чтобы получить более подробное объяснение этой проблемы.

поэтому он никогда не начинает его рисовать. Вуаля, верхняя и нижняя границы открыты.

Что касается боковых границ, вы можете сделать то же самое с разными регистрами, но поскольку горизонтальное перемещение растра происходит намного быстрее, чем вертикальное перемещение, время должно быть намного точнее. И есть еще одна проблема, которую следует учитывать, - это джиттер. <- я не буду здесь объяснять. Поищите в Интернете "Stable Raster C64", чтобы получить более подробное объяснение этой проблемы.

41
ответ дан 26 November 2019 в 17:30
поделиться

ПЕЧАТЬ "ЭТО БЫЛО 53280, ЧУВК".

3
ответ дан 26 November 2019 в 17:30
поделиться

Я собираюсь нанести удар в темноте здесь (сам не делал этого). Я нашел это в Википедии.

Раздел c64demo объясняет, что:

Эффекты, которые считались невозможными, были достигнуты в демонстрациях, в основном благодаря недокументированные побочные эффекты, относящиеся к к микросхеме MOS Technology VIC-II . Некоторые примеры обмана VIC:

Один из упомянутых приемов был:

Скроллеры спрайтов были помещены в граница. Обманывая оборудование не чтобы нарисовать рамку вокруг экрана, спрайты могут быть перемещены в эту область и отображается.

Конечно, интересная часть вопроса заключается в том, как это сделать. Я бы посоветовал поискать демонстрационную базу данных , которая включает исходный код, в поисках демонстрации, в которой используется взлом.

4
ответ дан 26 November 2019 в 17:30
поделиться

Насколько я понимаю, это возможно только для спрайтов.

Спрайтам разрешено находиться в области границы, и граница отображается поверх. Путем некоторых уловок границу можно удалить.

2
ответ дан 26 November 2019 в 17:30
поделиться

Note that what Krestage 3 did (as mentioned in the question) is different.

One level of the trick is to mess with the border when the bottom of the "paper" (work-area rectangle, the thing inside the border) is just being drawn. This lets you have sprites in the upper and lower border.

A higher level is to mess with it at the right-hand edge of the paper, in every raster line, all as explained in JohnD's answer above. This lets you have sprites in the left and right border.

None of this lets you have more than 8 sprites in one line. That's just Krest magic.

By far the best resource (I know of) for the VIC chip is "The MOS 6567/6569 video controller (VIC-II) and its application in the Commodore 64" by Christian Bauer and a useful addendum is "The memory accesses of the MOS 6569 VIC-II and MOS 8566 VIC-IIe Video Interface Controller" by Marko Mäkelä.
Предостережение: это несколько технический характер, и вам может быть легче их понять после того, как вы запрограммировали некоторые эффекты VIC самостоятельно.

Если ссылки когда-нибудь исчезнут, просто найдите статьи в Google по заголовкам, и они будут повторяться бесконечно.

8
ответ дан 26 November 2019 в 17:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: