IPB

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

> Контроллер AZ BK: Документирование процесса разработки, на основании этой темы будет сформирована техническое описание
SuperMax
сообщение 20.1.2021, 20:37
Сообщение #1


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

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



Палитры V2
управление палитрами осуществляется через 2 регистра палитры первый (177234) - адрес ячейки палитры
второй(177236) - значение палитры 15bit

адреса ячеек палитры будут начинаться с большей
Код

нумерация кодов цветов
палитра коды цветов (адреса ячеек палитры)
256     0-255
4х16    256-319
16      320-335
2       336-337


так получается полностью независимые палитры без пересечений
+ явный дубль стандартного функционала палитр, те можно переключать палитры как и ранее, но теперь доступна опция настройки каждой штатной палитры!

и как следствие палитры не надо будет перегружать при переключении видеорежима

для удобства формирования палитр сделал эксельку
v2.6 от 2023.11.07
Прикрепленный файл  palette_calc26.xlsm ( 102.97 килобайт ) Кол-во скачиваний: 78


начиная с v15 базовая палитра изменена
v2.8 от 2024.02.07
Прикрепленный файл  palette_calc28.xlsm ( 107.53 килобайт ) Кол-во скачиваний: 37

изменения косметические, касаются только палитры 256 цветов - ее начало изменено на 32 градации серого тк в стандартной WEB-safe которая взята за базу, такого набора градаций серого почему-то нет
эта палитра загружена в ПЛИС, а также перегружается при запске явно.
именно эта палитра используется при конвертации графики этим конверетером
https://master.pdp-11.ru/picword3/picword.php



основная задача этой эксельки - сформировать файл mif для загрузки дефолтной палитры при старте ПЛИС

также она пригодится разработчикам для пересчета цветов в 15bit

пояснения к блоку 4x16 256-319
это 16 наборов палитры, изначально туда грузятся штатные значения, но их можно менять на любые!
нумерация прямая - те нулевая палитра это 256-257-258-259 ячейки
следующие 4 ячейки это 1ая палитра и так далее

управление палитрами осуществляется через 2 регистра
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]

Код




                 РЕГИСТРЫ УПРАВЛЕНИЯ ПАЛИТРАМИ

         АДРЕС = 177234
         ФОРМАТ РЕГИСТРА                                
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                             │                        │
                             └────АДРЕС ПАЛИТРЫ───────┘
    
       Доступен по чтению и записи



         АДРЕС = 177236
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
           │                                          │
           └──────────ЗНАЧЕНИЕ ПАЛИТРЫ────────────────┘

       Доступен по чтению и записи    



        Палитра 15bit
        
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
        └─────RED────┘ └───GREEN───┘  └────BLUE────┘






формулу формирования цвета
цвет на выходе = VideoModeOffset + PaletteOffset + ColorIndex ;

VideoModeOffset - смещение видеорежима
cмещение - кол-во цветов (значения десятичные)
0 - 256
256- 4 х16
320- 16
336- 2

PaletteOffset существует только для штаного видеорежима 4 цвета
во всех остальных случаях =0
номер палитры - смещение
0 - 0
1 - 4
2 - 8
итд

ColorIndex - непосредственно номер цвета в видеорежиме, начиная с 0

Примеры работы с палитрой
надо загрузить новые значения для 16ти цветной палитры
для этого мы последовательно пишем
320.-> 177234 те устанавливаем адрес палитры
теперь мы можем записать значение
<новое значение> -> 177236
(также после установки адреса палитры мы можем ее и считать)


Примеры работы с экселькой
к примеру делаем новые значения для 16ти-цветой палитры
Прикрепленное изображение
слева вводим стандартные RGB значения в hex
справа получаем как этот цвет выглядит (надо включить макросы) и восьмеричные значения цвета
номер палитры - в столбце номер цвета


Как включить макросы в эксельке
идем в настройки
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


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


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

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



К расширенным видеорежимам добавились слои (редакция от 2024-01-09)

теперь вот так:

177230 - регистр управления
177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
177244 - регистр вертикального скролинга слой 2
177246 - регистр вертикального скролинга слой 1
177250 - регистр вертикального скролинга слой 0
177252 - регистр гозизонтального скролинга слой 0
177254 - регистр гозизонтального скролинга слой 1
177256 - регистр гозизонтального скролинга слой 2

Код


             РЕГИСТР УПРАВЛЕНИЯ ВИДЕОКОНТРОЛЛЕРОМ

         АДРЕС = 177230
         ФОРМАТ РЕГИСТРА
         доступен по чтению и записи                            
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ ┌────────────────────┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│ │ 0 - 1 бит  на цвет*│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ │ 1 - 2 бита на цвет │
         ║        ║    │   │    │   │    │   │ ║  │   │  │ 2 - 4 бита на цвет │
         ║        ║    └───┤    └───┤    └───┤ ║  └───┴──┤ 3 - 8 бит на цвет  │
         ╠════════╝        │        │        │ ║         └────────────────────┘
         ║                 │        │        │ ║         ┌────────────────────┐
         ║                 │        │        │ ╚═════════╡ =1 слоеный режим   │
         ║                 │        │        │           └────────────────────┘
         ║                 │        │        │           ┌─────────────────────┐
         ║                 │        │        └───────────┤ 0 - 32 слова        │
         ║                 │        │                    │ 1 - 64 слова        │
         ║                 │        │                    │ 2 - 128 слов        │
         ║                 │        │                    │ 3 - 256 слов        │
         ║                 │        │                    └─────────────────────┘
         ║                 │        │                    ┌─────────────────────┐
         ║                 │        └────────────────────┤ 0 - х1 - 1024 точки │
         ║                 │                             │ 1 - х2 - 512  точки │
         ║                 │                             │ 2 - х3 - 256  точки │
         ║                 │                             │ 3 - х4 - 128  точки │
         ║                 │                             └─────────────────────┘
         ║                 │ ┌──────────────────────────┐
         ║                 └─┤ 0 - х1 - 768 строк       │
         ║                   │ 1 - х2 - 384 строк       │
         ║                   │ 2 - х3 - 256 строк       │
         ║                   │ 3 - х4 - 192 строк       │
         ║                   └──────────────────────────┘
         ║╔═════════════════════════╗
         ╚╣ длина рулона в словах   ║
          ║ 0     6144              ║
          ║ 1     8192              ║
          ║ 2    12288              ║
          ║ 3    16384              ║
          ║ 4    24576              ║
          ║ 5    32768              ║
          ║ 6    49152              ║
          ║ 7    65536              ║
          ║ 8.   98304              ║
          ║ 9.  131072              ║
          ║ 10. 196608              ║
          ║ 11. 262144              ║
          ╚═════════════════════════╝



        РЕГИСТР ОСНОВНОЙ (ВЕРХНЕЙ) СТРАНИЦЫ ОТОБРАЖЕНИЯ

         АДРЕС = 177232
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                  │                                    │
                  └──────────НОМЕР СТРАНИЦЫ ───────────┘



        РЕГИСТР СРЕДНЕЙ СТРАНИЦЫ ОТОБРАЖЕНИЯ

         АДРЕС = 177240
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                  │                                    │
                  └──────────НОМЕР СТРАНИЦЫ ───────────┘



        РЕГИСТР НИЖНЕЙ СТРАНИЦЫ ОТОБРАЖЕНИЯ
                  
         АДРЕС = 177242
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                  │                                    │
                  └──────────НОМЕР СТРАНИЦЫ ───────────┘



        РЕГИСТР ВЕРТИКАЛЬНОГО СКРОЛЛИНГА СЛОЙ 2
                  
         АДРЕС = 177244
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                             │                        │
                             └─────────СДВИГ──────────┘
                            


        РЕГИСТР ВЕРТИКАЛЬНОГО СКРОЛЛИНГА СЛОЙ 1
                  
         АДРЕС = 177246
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                             │                        │
                             └─────────СДВИГ──────────┘
                            


        РЕГИСТР ВЕРТИКАЛЬНОГО СКРОЛЛИНГА СЛОЙ 0
                  
         АДРЕС = 177250
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                             │                        │
                             └─────────СДВИГ──────────┘
                            

        РЕГИСТР ГОРИЗОНТАЛЬНОГО СКРОЛЛИНГА СЛОЙ 0
                  
         АДРЕС = 177252
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                                │                     │
                                └───────СДВИГ─────────┘
                            

        РЕГИСТР ГОРИЗОНТАЛЬНОГО СКРОЛЛИНГА СЛОЙ 1
                  
         АДРЕС = 177252
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                                │                     │
                                └───────СДВИГ─────────┘
                            


        РЕГИСТР ГОРИЗОНТАЛЬНОГО СКРОЛЛИНГА СЛОЙ 2
                  
         АДРЕС = 177252
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘                                                      
                                │                     │
                                └───────СДВИГ─────────┘
                            





177230, далее пойдут биты с описанием
2;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах

теперь подробно
режим цветовой интерпретации, значение от 0 до 7
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов

4 - 1 бит на цвет - 8 цветов - сборный "слоеный" режим
5 - 2 бита на цвет - 4 цвета - включены слои
6 - 4 бита на цвет - 16 цветов - включены слои
7 - 8 бит на цвет - 256 цветов - включены слои

пояснение к "слоеному" или "плановому" режиму 4
цвет формируется из 3х планов по 16кБ из которых считывается по 1 биту
номер цвета собирается так
старший бит [2] - из верхнего слоя (регистр 177232)
средний бит [1] - из среднего слоя (регистр 177240)
младший бит [0] - из нижнего слоя (регистр 177242)

данный режим интересен возможностью формировать текст читаемый сразу на VGA и на стандартном выходе
к примеру:
177232<-4 ая страница те 40000-77777 стандартный экран на БК11 и БК10
177240<-2000
177242<-2004

получается что если мы будем выводит основной текст по стандартному адресу 40000-77777
а цветовые аттрибуты в страницы 2000 и 2004 то у нас на VGA будет цветной текст
а на стандартном выходе - белый текст на черном фоне

этот подход удобен для создания универсального ПО с минимальными затратами

длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов

растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128

количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192

длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном

типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)

100010 - 1024x768x2цвета (экран 98кБ)

043223 - 256х192 256цветов (экран 48кБ)
052223 - 256х256 256цветов (экран 64кБ)
121133 - 512х384 256цветов (экран 192кБ)



регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти

для слоев добавлены регистры 177240 - средний слой под спрайты
и 177242 под фон


общее количество возможных сочетаний видеорежимов получается 60шт

Скроллинг через 177244-177256
1. вертикальный скроллинг - построчный
2. горизонтальный скроллинг - пословный
иначе говоря это словное смещение

пояснения исходя из технической реализации
1. строки читаются перед отображением в буфер длиной в 256 слов вне зависимости от длины строки заданной в регистре 177230
как следствие при превышении смещения получим отображение строки со смещением: к примеру если длина строки 32 слова (обычный режим БК), то смещение по горизонтали в 32 слова приведет к отображению со смещением на 1 строку вниз
2. большой размер строки может пригодится для работы в режиме отображения части плоскости:
к примеру мы объявляем плоскость 512х384 256 цветов (196кБ)
а отображаем только 256х192
соответственно окно отображения можно перемещать используя регистры скроллинга по горизонтали и по вертикали




Концепция работы слоев

1. у нас три страницы с картинками
пусть первая - это нижний фон (адрес страницы 177242)
вторая - двигающиеся герои, факелы монстры и прочее (адрес страницы 177240)
третья - верхний фон (адрес 177232) который перекрывает объекты под ним - к пример колонна или дерево, за которое можно "зайти"

2. видеосистема складывает все три страницы

наивысший приоритет - верхний фон, те если там не =0 то идет перекрытие
далее вторая страница
и уже в самую последнюю очередь - нижний фон который перекрывает любой [не нулевого цвета] объект на странице выше

значение =0 это прозрачный цвет

3. слияние слоев работает в режимах от 4х цветов ибо в меньшем это просто лишено смысла


4. Для каждого слоя назначается своя палитра
4.1 для видеорежима с 2бит на цвет (пример 12205)
Верх - палитра 0
Середина - палитра 1
Низ - палитра 2
ну и так как палитры можно крутить, то можно назначить любой цвет в пределах 15ти бит
всего получается
В- 3й цвета (один прозрачный)
С- 3й цвета (один прозрачный)
Н- 4й цвета
итого 10 цветов, что круто ибо манипулировать-то надо всего 1й 16кБ страницей со спрайтами

в случае если будем делать мортал комбат - верхний фон можно пустить под одного героя
а середину под второго (ну а фон и останется фоном)
тогда решать задачу затирания спрайтов не придется совсем!

4.2 для 16ти цветных режимов тоже персональные палитры - но пул уже берем от типовой 256цветной палитры (см про палитры)
всего получается 15+15+16=46 цветов - КРУТО!
напомню формулу формирования цвета
цвет на выходе = VideoModeOffset + PaletteOffset + ColorIndex ;

VideoModeOffset - смещение видеорежима
cмещение - кол-во цветов (значения десятичные)
0 - 256
256- 4 х16
320- 16
336- 2
соответственно для 16ти цветов и слоев получаетяцвет на выходе = 0 + <номер слоя> + ColorIndex ;номер слоя:
верх -0
середина 1низ - 2

4.3 для 256цветов палитра очевидно едина ибо их хватит на все

4.4 режим монохрома в наложение не интересен, но тк код есть то я сделал его слоями
те В - старший бит ; С- cредний бит; H - младший бит цвета из 16ти цветной палитры
иначе говоря получился "плановый" видеорежим
к примеру код 12204 - это три страницы по 16кБ складываются в 8ми цветный 512х256 режим

Палитра - верхний кусок от 16ти цветной:
Прикрепленное изображение
те сборному коду 0 соответствует 8код цвета



примеры:

у нас установлен режим 4 цвета 256х256 (значение 12205 в регистре 177230 ) а палитра - пусть стандартная

итак верхняя страница задана в 177232
средняя в 177240
нижняя фоновая в 177242

читаем из верхней средней и нижней [далее В C Н] по два бита

В=11 - тк это не =0 то это перекрывающиее значение и оно идет на экран через трансляцию палитры

читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=00 - =0 и тут прозрачно - значит выводим то что на странице Н
Н=10 - код 10 идет на идет на экран через трансляцию палитры

читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=01 - !=0 дальше уже не идем и показваем спрайт из средней страниц
и код 01 идет на идет на экран через трансляцию палитры


читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=00 - =0 и тут прозрачно - значит выводим то что на странице Н
Н=00 - тк уже некуда просвечивать то этот код (00) идет на экран через трансляцию палитры

очевидно что коду 00 мы можем назначить любой из 32768 цветов равно как и другим кодам


Графическое пояснение как работают слои на примере режима 12205
Прикрепленное изображение


Теперь о видеорежиме и его таймингах
физически AZБК вcегда формирует изображение в стандарте VGA в разрешении 1024х768 60Гц

Прикрепленное изображение
Прикрепленное изображение


Начиная с V15b4 в AZБК реализован режим РП (те часть экрана скрывается)



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

Сообщений в этой теме
SuperMax   Контроллер AZ BK: Документирование процесса разработки   20.1.2021, 20:37
SuperMax   Для Legacy видеорежимов реализовано циклическое п...   15.4.2021, 1:24
SuperMax   [b]Модель управления памятью в AZ V2 с поддержкой ...   16.4.2021, 11:52
SuperMax   Генератор псевдослучайных чисел технически это LF...   4.5.2021, 14:16
SuperMax   Консоль контроллера основное назначение - отладка...   8.5.2021, 14:10
SuperMax   Загрузка ПЗУ Пример az.ini [ROM] R00=0...   8.5.2021, 14:13
SuperMax   Стартовая последовательность 1. После нажатия RES...   14.6.2021, 0:12
SuperMax   Индикация режимов работы AZБК снабжен RGB сетодио...   19.6.2021, 15:36
SuperMax   Кнопка перезапуска (RESET) на AZ изначально, подра...   19.6.2021, 16:10
SuperMax   Проект звуковой части 1. COVOX - уже реализован н...   17.7.2021, 22:45
SuperMax   По заявкам телезрителей родилась еще более новая в...   21.12.2021, 2:48
SuperMax   UART (RS-232 EIA-232 COM ком-порт) адреса стандар...   16.1.2022, 23:56
SuperMax   К расширенным видеорежимам добавились слои (редак...   17.6.2022, 20:18
SuperMax   Блиттер (начиная с v15b7) cм [url=https://forum....   24.9.2023, 12:33


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

 



Текстовая версия Сейчас: 28.4.2024, 21:20