IPB

Здравствуйте, гость ( Вход | Регистрация )

> Программирование под AZБК, методики использования возможностей AZБК
SuperMax
сообщение 3.11.2023, 16:33
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 6 341
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Работа с палитрами

документация по палитрам тут

оба регистра доступны по записи и чтению, сохранение палитры осуществляется по записи в 177236
пример изменения дефолтной палитры RGB
Код

SetPal1:        mov     #177234,R0
                mov     #177236,R1

                mov     #256.,(R0)   ; адрес палитры
                mov     #10,(R1)    ; значение палитры - был черный фон - теперь темно-синий

                inc     (R0)
                mov     #15446,(R1)     ; значение палитры - был синий - стал - зеленый

                inc     (R0)
                mov     #77454,(R1)     ; значение палитры - был зеленый - стал желтый

                inc     (R0)
                mov     #46614,(R1)     ; значение палитры - был красный - стал коричневый
                return


загрузка палитры 256 цветов
Код

                mov        #177234,R0      ; установка палитры
                mov        #177236,R1
                mov        #newpal,R2
                mov        #256.,R3
                clr        R4
$rp0:            mov        R4,(R0)
                mov        (R2)+,(R1)
                inc        R4
                sob        R3,$rp0


newpal - метка массива палитры 256 цветов (256 слов)





--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
SuperMax
сообщение 6.2.2024, 1:51
Сообщение #2


Администратор
*****

Группа: Root Admin
Сообщений: 6 341
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола)

особенности
- код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки)
- код демонстрационный - те я не занимаюсь оптимизацией или красотой кода
- код с корректным возвратом в операционку

1. Замостим плиткой 32х32 весь экран 256х256 256цветов

результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  0.gdemo.mp4 ( 2.65 мегабайт ) Кол-во скачиваний: 117


исходник
Прикрепленный файл  GRAPHICS_DEMO_0.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1276



2. Замостим плиткой 32х32 весь экран 256х256 256цветов и затем заполним рандомными пикселями (цвет и позиция случайны)

результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  1.gdemo.mp4 ( 14.03 мегабайт ) Кол-во скачиваний: 109


исходник
Прикрепленный файл  GRAPHICS_DEMO_1.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1292


тут хочу обратить внимание на качество генератора псевдослучайных чисел в AZБК (и скорость установки точек)


3.Используем длинный рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 первые 64кБ и плиткой второго типа - следующие 64кБ
далее по таймеру будем крутить рулон вверх вниз

результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  2.gdemo.mp4 ( 39.55 мегабайт ) Кол-во скачиваний: 99


исходник
Прикрепленный файл  GRAPHICS_DEMO_2.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1278


тут сразу напрашивается сделать pinball
Прикрепленное изображение


4.Используем широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 левый экран и плиткой второго типа - следующие правый
далее по таймеру будем крутить рулон вправо-влево

результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  3.gdemo.mp4 ( 33.52 мегабайт ) Кол-во скачиваний: 119


исходник
Прикрепленный файл  GRAPHICS_DEMO_3.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 1319



5. Используем длинный и широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 256кБ
те у нас в ширину два "экрана" и "в высоту" два - всего 4
для демонстрации замостим плиткой все 4 экрана дабы их отличать
далее по таймеру будем крутить рулон по горизонтали и вертикали


результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  4.gdemo.mp4 ( 82.39 мегабайт ) Кол-во скачиваний: 91


исходник
Прикрепленный файл  GRAPHICS_DEMO_4.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 1278



6. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали


результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  5.gdemo.mp4 ( 10.97 мегабайт ) Кол-во скачиваний: 118


исходник
Прикрепленный файл  GRAPHICS_DEMO_5.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 1257


7. Сделаем тоже что мы делали с помощью блиттера ранее - см примеры (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали
+ добавим вращение


результат работы - качественный видеозахват 1024х768 60fps
Прикрепленный файл  6.gdemo.mp4 ( 19.5 мегабайт ) Кол-во скачиваний: 103


исходник
Прикрепленный файл  GRAPHICS_DEMO_6.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 1251






FAQ по рулонам, сдвингам итд
Q:
Есть ли ограничение у рулона ? Можно ли сделать длинный рулон "вниз" ?
A: Ограничений на самом деле нет, есть особенности:для сдвига экрана (окна отображения) вниз мы оперируем регистром вертикального скрола - но у него только 1024 значения, иначе говоря при его помощи мы можем сдвигаться на от 0 до +1023 строк вниз,
но надо помнить, что у нас есть еще и регистр начала отображения - те номер страницы с которой идет отображение и соответственно расчет этого сдвига!соответственно используя обра регистра мы можем двигаться бесконечно!поясню на примере - допустим у нас разрешение 256x256 и ширина строки 128 слов - те все что есть идет на экран.
соответственно изменение значения на 1 в регистре страницы начала отображения эквивалентно сдвигу вниз на 16 строк!
иначе говоря движение вниз можно сделать по этапам - сначала двигать плавно регистром скрола, а потом менять регистр со страницей начала отображения экрана и соответственно "сбрасывать" скролл на 0. и так до конца памяти


Q: Можно ли сделать большой хост ? те больше 512х512 256цветов ? Дабы герой мог бежать что влево что вправо и так далее
A: Да, можно, но это будет набор полос:
те у нас к примеру экран 256x192 нужен холст в 8 экранов по горизонтали (256х8=2048px) и 6 экранов по вертикали (192х6=1152px)делаем набор полос - ширина 512px а длина - см выше 1152pxи полосы делаем пересекающиеся:
Код

0      256      512      768       1024       1280       1536
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │
│       ║        │        ║         │          ║           │                                                          

первая (нечетная полоса) от одинарной линии до соседней тонкой
четные - от двойной линии до следующей двойной

первая от 0 до 512px
вторая от 256 до 768px
третья от 512 до 1024px
итд

соответственно когда герой дошел до середины правой стороны полосы мы можем сменить полосу и отображать фон уже с четной полосы - потом как он перейдет дальше - снова поменять полосу
получится что мы можем бегать по фону и при этом его не надо отрисовывать постоянно! достаточно нарисовать его один раз (ну и дублировать изменения если они будут)
соответственно получается, что можно сделать те же HMM3/WC2 в разрешении 512х384х16 цветов плавно двигая экран во все стороны

если у нас фон вообще не изменяется, то можно обойтись только нечетными полосами: фон на заднем (2) слое, герой на переднем слое (0), а NPC на среднем.

легко делается оптимизация движения героя:
- сам герой единожды отрисован на (к примеру) на 16ми страницах - те 16 фаз его движения/действия
- все что надо сделать для перемещения героя - крутим регистры скролла (влево-вправо и вверх-вниз)
фазу движения просто выбираем устанавливая нужную страницу отображения. иначе говоря можно полностью сосредоточиться на программировании игровой логики не тратя ресурсы на работу с графикой.




--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18.6.2025, 1:06