Контроллер AZ BK: Документирование процесса разработки, на основании этой темы будет сформирована техническое описание |
Здравствуйте, гость ( Вход | Регистрация )
Контроллер AZ BK: Документирование процесса разработки, на основании этой темы будет сформирована техническое описание |
SuperMax |
20.1.2021, 20:37
Сообщение
#1
|
Администратор Группа: Root Admin Сообщений: 6 287 Регистрация: 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 килобайт ) Кол-во скачиваний: 107 начиная с v15 базовая палитра изменена v2.8 от 2024.02.07 palette_calc28.xlsm ( 107.53 килобайт ) Кол-во скачиваний: 60 изменения косметические, касаются только палитры 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 |
24.9.2023, 12:33
Сообщение
#2
|
Администратор Группа: Root Admin Сообщений: 6 287 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
Блиттер (описание соответствует версии v15b8 и далее)
cм https://forum.maxiol.com/index.php?s=&showt...indpost&p=58488 редакция от 2024-05-01 Блиттер в мой реализации есть робот читающий набор команд и выполняющих их по окончанию отображения кадра в отличии от классического блиттера в амиге, где команды подаются в режиме реального времени Примеры применения блиттера с исходниками вот ТУТ изначальные ограничения: 1. блиттер оперирует только словами, иначе говоря минимальная дискретность по горизонтали - 2пикселя (в видеорежиме 256цветов) *все расчеты в блиттере ведутся словами.* 2.команда блиттера - 8 слов 3. блиттер может работать в автоматическом или ручном режиме запуска. автоматический режим запуска производится по факту окончания отображения видимой части кадра. ручной запуск производится по факту установки бита 12 в регистре управления блиттером (177270) и при установленном бите 14. Бит 14 доступен и по чтению и по записи, тогда как бит 12 будет всегда читаться как 0. 4. после получения сигнала к запуску блиттера, он сначала читает пакет команд в память ПЛИС, а зачем начинает выполнять пакет команд. как только блиттер начал что-то делать, блиттер устанавливает флаг своей работы (занятости) - бит 15 в регистре управления блиттером (177270), данный бит доступен по чтению, записать туда не получится. Для организации конвейерной обработки, есть бит 9 который устанавливается во время чтения пакета команд в буфер и означает запрет на изменения в этом пакете. 5. блиттер работает в плоском адресном пространстве со словами 16бит и адресом 24 бита иначе говоря он видит всю память [расширенную - те 32МБ] сразу. 6. макс количество команд - 128. 8. макс количество слов в команде - те обрабатываемое в пакете - 256*256=65536 cлов 9. хранение исходных (SRC) спрайтов строго линейное и кратное 32м словам те спрайт должен начинаться с адреса кратному 100(8) 9. расположение целевых данных (DST) прямоугольное - те строка cпрайта (ширина спрайта) + строчная инкрементация. важно для понимания: ширина спрайта + строчная инкрементация = длина строки в данном видеорежиме. 10. максимальная шbрина спрайта - 256 слов 11. максимальная строчная инкрементация - 256 слов 12. максимальное количество строк - 256 13. операции: - заполнение константой - копирование из SRC в DST (дискретность - слово) - наложение SRC на DST и помещение результата в DST при SRC!=константа прозрачного цвета (дискретность - байт) - наложение SRC на DST и помещение результата в DST при SRC!=константа прозрачного цвета и DST==константа прозрачного цвета (дискретность - байт) - копиирование из прямоугольного DST в линейный SRC (сохранение фона) (дискретность - слово) - NOP - пропуск команды что означает дискретность: слово - те операция всегда пишет слово (2 байта) байт - означает, что тут проверяется каждый байт на соответствие правил и пишутся только те байты которые выполнили условия иначе говоря наложение спрайта на фон будет без дефектов - те оно попиксельное! 14. под блок команд блиттера выделяется страница (технически любая cвободная, просто команды читаются с начала указанной в регистре страницы) иначе говоря набор команд можно быстро менять просто меняя номер страницы 15.После чтения строки команд в буфер ПЛИС, регистр номера страницы можно менять как угодно это сделано для того чтобы пока одна пачка команд выполняется, можно было подготовить новую пачку команд. для индикации есть бит 9 - он устанавливается во время чтения команд в буфер.данный бит доступен по чтению, записать туда не получится.при cброшеном бите 9 можно менять значение регистра количества команд на новое, однако если установить =0 как количество команд - блиттер асинхронно остановится. во время своей работы блиттер устанавливает флаг - бит 15 в регистре управления блиттером (177270), данный бит доступен по чтению, записать туда не получится. 16. чтение пачки команд производится в память ПЛИС при выполнении условий: автоматический режим: бит 14=0, количество команд не равно =0 и поступает флаг окончания отображения видимой части от VGA контроллера ручной режим: бит 14=1, количество команд не равно =0 и затем установка бита 12 в регистре управления блиттером (177270) 17. процесс выполнения пачки команд не останавливается кроме как установкой количества команд в 0. если мы зафигачим 100 команд которые будут выполняться 5 кадров (к примеру) то чтение новой пачки не начнется пока вся пачка команд не выполнится. также изменения режимов ручной/автоматический или попытка ручного запуска будут проигнорированы! 18. правильный ручной запуск блиттера осуществляется так: - устанавливаем ручной режим - те бит 14 (в регистре управления блиттером (177270)) - следующей командой (!) устанавливаем бит 12=1 (запуск) и количество команд /данная технология необходима для исключения гонок внутри логики запуска блиттера/ допускается разбить на 3 этапа - устанавливаем ручной режим - те бит 14 (в регистре управления блиттером (177270)) - устанавливаем количество команд - устанавливаем бит 12=1 (запуск) 19. выполнение большого пакета команд блиттером: - готовим пачку команд в страницу - запускаем блиттер см п18 - ждем cброса флага занятости буфера бит 9=1 в регистре управления блиттером (177270) (смысл в том что чтение пакета команд в память ПЛИС занимает некоторое время) - устанавливаем в регистр номера страницы новую страницу с пачкой команд - устанавливаем новое (не нулевое) количество команд в пакете - ждем снятия флага работы блиттера бит 15=0 в регистре управления блиттером (177270) - запускаем блиттер снова устанавливая бит 12=1 в регистре управления блиттером (177270) 20. для удобства работы с координатами добавлена явная координата Y в 7е слово, она ориентирована на видеорежим 256 слов в строке базовый адрес формирует иначе говоря это часть базового адреса для удобства addr_mem_dst<=addr_dst+{spr_Yadd,8'd0}; Управление блиттером осуществляется через два регистра 177270 - регистр управления, регистр сбрасывается в 0 по низкому B_HALT_L (системный сброс в БК) 177272 - номер страницы содержащей команды запись 0 в 177270 вызывает полный асинхронный сброс/останов всех процессов блиттера Код РЕГИСТР УПРАВЛЕНИЯ БЛИТТЕРОМ АДРЕС = 177270 ФОРМАТ РЕГИСТРА доступен по чтению и записи ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ │ │ │ │ │ │ │ │ │ │ ╔╧═════════════════════╧╗ │ │ │ │ ║ Количество команд R/W ║ │ │ │ │ ║ =0 выключен ║ │ │ │ │ ╚═══════════════════════╝ │ │ │ │ ╔═════════════════════════╗ │ │ │ └──╢ Флаг не трогать команду ║ │ │ │ ║ =1 R/O ║ │ │ │ ╚═════════════════════════╝ │ │ │ ╔══════════════════════════╗ │ │ └──────────╢ Ручной пуск блиттера W/O ║ │ │ ║ =1 пуск, по чтению =0 ║ │ │ ╚══════════════════════════╝ │ │ ╔══════════════════════════════════╗ │ └────────╢ Режим: Автоматический/Ручной R/W ║ │ ║ =1 ручной =0 пуск по концу кадра ║ │ ╚══════════════════════════════════╝ │ ╔════════════════════════════════════╗ └─────────╢ Блиттер выполняет пакет команд R/O ║ ║ или читает пактет команд в буфер ║ ║ =1 занят ║ ╚════════════════════════════════════╝ РЕГИСТР СТРАНИЦЫ КОМАНД БЛИТТЕРА АДРЕС = 177272 ФОРМАТ РЕГИСТРА доступен по чтению и записи ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ │ │ ╔╧════════════════════════════════════╧╗ ║ Номер страницы с командами блиттера ║ ╚══════════════════════════════════════╝ пояснение к флагам - бит 15 и 9 в 177270 бит 15 бит занятости блиттера - он установлен в =1 всегда когда блиттер занят чем-либо: читает команды в буфер или уже выполняет команды бит 9 бит фиксации пачки команд, =1 означает, что блиттер читает пачку команд в буфер и сейчас ничего с командами делать ничего нельзя. данный бит предназначен для организации конвейерной обработки пакетов команд; далее в описании рассматриваем видеорежим разрешение 512х384 256цветов, 196кБ экран, квадратный пиксель как основное команда блиттера cодержит 8 слов 1 слово старший байт - старшая часть адреса SRC младший байт - старшая часть адреса DST 2 слово - младшая часть адреса SRC 3 слово - младшая часть адреса DST 4 слово - команда биты 0 = 1 для команды нужно чтение SRC 1 = 1 для команды нужно чтение DST 2 = 1 флаг NOP - те наличие этого флага вызывает переход к следующей команде 3-4-5 номер команды =0 заполнение константой CONST =1 копирование SRC=>DST =2 наложение SRC на DST =>DST при (при SRC!=прозрачный цвет SRC) =3 наложение SRC на DST =>DST при (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST) =4 копирование DST => SRC (сохранение фона) в итоге получаются команды (в 8 системе) = 0 заполнение константой = 11 копирование SRC=>DST = 21 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) = 33 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST) = 42 копирование DST=>SRC Пояснения - на примере команды заполнения константой: для нее не требуется установка битов чтения данных SRC или DST, тк запись данных (в данном случае константы идет безусловно). если мы поставим эти биты - ничего не произойдет для пользователя - лишь скорость выполнения команды уменьшится тк блиттер потратит время на чтение. = 11 копирование SRC=>DST тут чтобы положить данные в DST мы должны из считать из SRC - cоответственно проставляем бит чтения SRC, читать DST нам тут не надо тк нам пофиг - запись безусловная = 21 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) тут аналогично - нужен только SRC для проверки условия = 33 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST) - тут две проверки - и нам нужно считать и SRC и DST - соответственно установлены оба бита чтения зачем чтение вынесено в отдельные биты ? тупо оптимизация аппаратной части блиттера - экономия LC (бит проще проверять чем несколько битов) далее в примере будем рассматривать спрайт шириной 8 пикселей и высотой тоже 8 пикселей количество слов получается (8/2)*8 = 32. 5 слово младший байт длина спрайта в словах по горизонтали иначе говоря в копировании 1в1 значение должно быть 1 (речь о копировании сплошного блока целиком) а если спрайт по горизонтали 8. пикселей то указываем 3. тк копирование идет словами по 2 пикселя старший байт количество строк 6 слово младший байт инкрементация адреса назначения после копирования строки спрайта иначе говоря в копировании 1в1 значение должно быть 1 а если мы хотим вывести спрайт шриной 8. пикселей в строку длиной 256. слов то мы должны указать инкрементацию - 256.-3.=253. 7 слово Y координата для видеорежима 256. слов в строке иначе говоря это часть базового 24х битного адреса для удобства addr_mem_dst<=addr_dst+{spr_Yadd,8'd0}; 8 слово младший байт - константа заполнения или константа прозрачного цвета SRC старший байт - константа прозрачного цвета DST Для формирования команды можно использовать калькулятор команд блиттера технология работы с блиттером - один из вариантов к примеру у нас на экране 5 спрайтов соответственно в пакете команд - 10. команд с адресами спрайтов: (первая команда - запись пустого поля, вторая запись спрайта) каждый раз спрайты перерисовываются из памяти и копируются в средний слой а для перемещения спрайта на новое место 1. чистим слой (к примеру средний) заполняя его прозрачным цветом те =0 2. пишем нижний спрайт 3. пишем верхний спрайт ..... n. пишем самый верхний спрайт иначе говоря порядок наложения спрайтов определяется порядком команд Быстродействие блиттера: за время гашения кадра точно помещается пара команд со спрайтом 3.6-4кБ соответственно для большего числа спрайтов рекомендуется буферизация те один экран отображаем - другой рисуем и переключаем соответственно вполне просто получить 60 кадров в секунду для плавности FAQ: Q: А можно использовать блиттер для копирования информации ? A: Да, можно ибо блиттер никак не отличает видеопамять от обычной памяти Q: Видит ли блиттер память в самой БК A: Нет, адресуется только память внутри AZБК Q: А можно использовать блиттер для видеорежимов с 2-4-16 цветами ? A: Технически никаких ограничений нет, просто все команды будут оперировать словами и к примеру команды наложения (21 и 33 ) не будут выполнены корректно тк сравнение будет по байтам, но если подогнать данные до байтов то это прокатит -------------------- Живы будем - Не помрем !
|
Текстовая версия | Сейчас: 9.5.2024, 15:50 |