Контроллер AZ BK: Документирование процесса разработки, на основании этой темы будет сформирована техническое описание |
Здравствуйте, гость ( Вход | Регистрация )
Контроллер 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БК реализован режим РП (те часть экрана скрывается) -------------------- Живы будем - Не помрем !
|
Текстовая версия | Сейчас: 28.4.2024, 21:20 |