(C) Saruman / Dementia corp.
C2P конвертор
Привет, народ! С вами снова я,Saruman.
Как мне помнится, в прошлый раз я расска-
зывал о методах быстрого вывода графики
через стек; а сегодня у нас еще один мощ-
ный метод: chunky to planar conversion.
Объясню поподробнее, в чем состоит смысл
данного алгоритма. Если вы внимательнее
приглядитесь к последним демкам, то навер-
няка заметите, что во многих эффектах для
имитации 16-цветового режима используются
текстуры. Т.е., элементарной единицей
изображения становится не пиксел, а квад-
рат со стороной, например, 4 пиксела. Та-
ким образом, в одном знакоместе мы получа-
ем 4 элемента, каждый из которых при помо-
щи текстур "окрашивается" в один из 16
цветов. При в памяти это, естественно,
хранится в виде "байт на элемент"(chunky
data), а при выводе на экран необходимо
преобразовывать данные в стандартный
(planar) вид. Для достижения максимально
быстрого вывода и служит данный алгоритм.
Замечание: хочу предупредить, что этот
метод был разработан не мной. Я сам узнал
о нем из файлов Explodera.
Каждый байт chunky datы имеет вид:
1000 0101
Здесь младшие 4 бита - это цвет (смеще-
ние от начала палитры), а старшие 4 бита -
- базовый адрес палитры. Но!!! ведь коман-
ды работы со стеком могут читать из памяти
сразу по 2 байта!!! Поэтому палитра будет
иметь такой вид:
#8080 00 01 02 03 04 .. .. 0D 0E 0F
#8180 10 11 12 13 14 .. .. 1D 1E 1F
. . . . . . .
#8F80 F0 F1 F2 F3 F4 .. .. FD FE FF
Слева указан адрес, считываемый из
chunky datы, т.е. младший байт - цвет пер-
вого из выводимых элементов, старший байт-
- цвет второго. Справа указаны номера
текстур, выводимых при данной комбинации
цветов, причем в текстуре, естественно,
изображены сразу 2 элемента. Т.е. первый
ряд - все текстуры со вторым цветом 0,
второй ряд - со вторым цветом 1 и т.д.
Итого у нас получается 16*16=256 текстур.
Ну а теперь, разобравшись с форматом
хранения данных, можно приступать и к на-
писанию процедуры вывода.
Для работы требуются:
SP = адрес chunky datы;
DE = адрес на экране, куда выводить;
B = старший байт адреса,с которого хра-
нятся текстуры.
POP HL ;читаем chunky daty
LD C,(HL) ;читаем адрес текстуры
LD A,(BC) ;выводим
LD (DE),A
INC B
INC D
LD A,(BC) ; спрайт
LD (DE),A
INC B
INC D
LD A,(BC) ; на
LD (DE),A
INC B
INC D
LD A,(BC) ; экран
LD (DE),A
INC E
POP HL ;читаем chunky daty
LD C,(HL) ;читаем адрес текстуры
LD A,(BC) ;выводим
LD (DE),A
DEC B
DEC D
LD A,(BC) ; спрайт
LD (DE),A
DEC B
DEC D
LD A,(BC) ; на
LD (DE),A
DEC B
DEC D
LD A,(BC) ; экран
LD (DE),A
INC E
Ну вот и все. Разбирайтесь в моей писа-
нине и - let`s start da demomakin`! (Раз-
врат попрошу не пропагандировать ;-)
ред.) А будут какие вопросы, пожелания или
предложения - звоните по телефону 54-01-70
в Барнауле, конечно ;-)) и спрашивайте
Олега - если он будет дома, то ответит
всем!
Bye,people! C Ya l8r!!!
_______________________________________End
Other articles: