![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SuperMax |
![]() ![]()
Сообщение
#1
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 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 |
![]() ![]()
Сообщение
#2
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Как можно доработать уже готовую игру для БК с использованием возможностей AZБК ?
Что может помочь сократить код и поднять быстродействие ? 1. Генератор случайных чисел. регистр 177550 отдает случайное число каждое чтение думаю пояснений тут не требуется 2. Слои. детально слои описаны вот тут постараюсь пояснить как их можно использовать для уже имеющейся игры для БК-0010 те игра изначально ориентирована писать всю графику в блок 40'000-77'777 напомню, AZБК занимается зеркалированием оперативной памяти в самой БК и уже эту копию выводит на VGA механизм зеркалирования управляемый через регистры рассмотрим конфигурацию памяти в самом плохом случае - у нас БК-0010.01 с отключенным бейсиком те у нас вот такое адресное пространство Код АДРЕСНОЕ ПРОСТРАНСТВО БК-0010 + AZБК ┌─────────┬─────────┬───────────┬─────────────────────────────┐ │ 0-37777 │ 40k-77k │ 100k-117k │ 120k ..... 170k│ └─────────┴─────────┴───────────┴─────────────────────────────┘ │ │ │ │ │ │ └─────────────────┘ └─────────┘ └──────────────────────────┘ Штатное ОЗУ ПЗУ монитора ОЗУ/ПЗУ AZБК те ОЗУ штатное + монитор не отключен соответственно что делает AZБК - он как вы уже знаете разбивает все адресное пространство на блоки по 4кБ Код Адресное пространство разбито на 16 окон для облегчения восприятия я пронумерую их с 0 до 15 ┌────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬─ │0..7777 │10000..17777│20000..27777│30000..37777│40000..47777│50000..57777│60000..67777│70000..77777│ └────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴─ 0 окно 1 окно 2 окно 3 окно 4 окно 5 окно 6 окно 7 окно 177300 177302 177304 177306 177310 177312 177314 177316 ──┬─────────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┐ │100000-107777│110000..117777│120000..127777│130000..137777│140000..147777│150000..157777│160000..167777│170000..177000│ ──┴─────────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘ 8 окно 9 окно 10 окно 11 окно 12 окно 13 окно 14 окно 15 окно 177320 177322 177324 177326 177330 177332 177334 177336 соответственно в регистрах 177300 - 177316 указаны страницы ОЗУ AZБК в которые работает SHADOW RAM механизм SHADOW RAM это зеркалирование всех данных по этим адресам иначе говоря мы выполняем команду Код MOV #123456,@#40000; пишем слово в экран физически эта команда будет видна на шине как запись по адресу 40000(8) числа 123456(8) соответственно контроллер SHADOW RAM выполнит эту операцию тоже и в странице памяти сопоставленной (см регистры) будет занесено число 123456(8) по умолчанию, после старта у нас экран 40k-77k приколочен вот так Код АДРЕСНОЕ ПРОСТРАНСТВО ┌────────┬─────────┬─────────┬──────────┐ │ Адреса │ регистр │ режим │ страница │ ├────────┼─────────┼─────────┼──────────┤ │0-7777 │ 177300 │ shadow │ 0 │ ├────────┼─────────┼─────────┼──────────┤ │10-17k │ 177302 │ shadow │ 1 │ ├────────┼─────────┼─────────┼──────────┤ │20-27k │ 177304 │ shadow │ 2 │ ├────────┼─────────┼─────────┼──────────┤ │30-37k │ 177306 │ shadow │ 3 │ ├────────┼─────────┼─────────┼──────────┤ │40-47k │ 177310 │ shadow │ 4 │ ├────────┼─────────┼─────────┼──────────┤ │50-57k │ 177312 │ shadow │ 5 │ ├────────┼─────────┼─────────┼──────────┤ │60-67k │ 177314 │ shadow │ 6 │ ├────────┼─────────┼─────────┼──────────┤ │70-77k │ 177316 │ shadow │ 7 │ ├────────┼─────────┼─────────┼──────────┤ │100-177k│ 177320 │ │ │ ├────────┼─────────┼─────────┼──────────┤ │ │ │ │ │ ну и в регистре 177232 у нас указана страница 4 - те что отображение идет с нее теперь внимательно: к примеру у нас игра с фоном - пусть это какой-то дом/лабиринт - он рисуется какой-то процедурой у нас есть NPC и есть главный герой управляемый игроком, и все они поверх фона (соответственно у нас есть код который сохраняет фон под спрайтом дабы его потом восстановить когда спрайт переместится в другое место) иначе говоря мы можем задействовать 3 слоя: верхний - это главный герой средний - это различные НПС - которые к примеру двигаются на месте (анимация на месте) нижний - это собственно фон и вот теперь делаем финт ушами: 0. на стадии инциализации * - устанавливаем видеорежим Код mov #12205,@#177230; включаем слоенный видережим 256х256х4цвета - те 16кБ экран mov #1004,@#177232; верхняя страница - доступно 3 цвета mov #1014,@#177240; средняя страница - доступно 3 цвета mov #1024,@#177242; нижняя страница - доступно 4 цвета - устанавливаем персональные палитры для каждого Код ; верхний слой ; нулевой цвет прозрачный и соответственно его палитру мы просто пропускаем mov #257.,@#177234 mov #15446,@#177236 mov #258.,@#177234 mov #77454,@#177236 mov #259.,@#177234 mov #46614,@#177236 ; средний ; нулевой цвет прозрачный и соответственно его палитру мы просто пропускаем mov #261.,@#177234 mov #17446,@#177236 mov #262.,@#177234 mov #77474,@#177236 mov #263.,@#177234 mov #47614,@#177236 ; нижний - тут есть все цвета mov #264.,@#177234 mov #17446,@#177236 mov #265.,@#177234 mov #07774,@#177236 mov #266.,@#177234 mov #67674,@#177236 mov #276.,@#177234 mov #17654,@#177236 1. в процедуре вывода фона, до начала очистки-вывода вставляем Код mov #1024,@#177310 mov #1025,@#177312 mov #1026,@#177314 mov #1027,@#177316 те указываем что SHADOW будет делаться в страницы памяти 1024...1027 2. в процедурах работы с НПС - перед работой ** Код mov #1014,@#177310 mov #1015,@#177312 mov #1016,@#177314 mov #1017,@#177316 3. в процедурах где отрисовывается главный герой ** Код mov #1004,@#177310 mov #1005,@#177312 mov #1006,@#177314 mov #1007,@#177316 * стоит учитывать, что изначально на страницах 1004...1027 может быть мусор и их надо очистить как вы уже догадались сделать это можно двумя способами 1. подмапировать страницы явно в окно со 120k и записать туда 0 2. а можно в режиме shadow те устанавливаем Код mov #1024,@#177310 mov #1025,@#177312 mov #1026,@#177314 mov #1027,@#177316 а зачем прогоняем обычный цикл очистки экрана с 40k и так для всех 3х экранов ** так как на экране с 40k у нас будет физически каша, то ничего читать оттуда и применять точно не стоит весь вывод на экран с 40k должен быть построен на командах MOV никаких BIS BIC - иначе мы утащим мусор на страницы которые отображаются! Графическое пояснение как работают слои на примере режима 12205 ![]() те у нас в каждом слое цвет кодируется двумя битами, но каждый слой имеет свою палитру и всего на экране у нас будет 10 цветов из палитры 32768 цветов FAQ Q: почему выбраны страницы 1024 итд? A: просто для красоты примера, можно начать с 1000 к примеру Q: почему запись палитр явная - mov #257.,@#177234 ? A: только для демонстрации и для понимания процесса - те можно оптимизировать Q: я внимательно читал что shadow режим управляется средствами AZ - не сломаем ли мы чего-нибудь ? A: нет, не сломаем ибо мы сам режим у страниц не меняем, а меняем только сами страницы иначе говоря если мы экран прицепим к страницам 1000...1004 это будет корретным для всех конфигурация БК11М и даже для БК10 которая в режиме эмуляции БК11М ибо все отличие будет только в том, что страницы будут реальными - а не зеркальными. Q: снова про shadow - можно ли менять режим shadow руками ? A: технически - да, но необходимости в этом нет, а также надо понимать, что именно вы делаете - те надо точно определить конфигурацию машины и только потом менять иначе мы получим нерабочую конфигурацию и скорее всего зависание. Q: как сделать корректный выход ? A: все просто- надо вернуть изначальные страницы которые вы поменяли -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#3
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Модели памяти разных конфигураций БКшек доступных в AZБК
стоит заострить внимание на их различии, и способах создания универсального ПО с использованием AZБК думаю, те, кто изучали документацию на маппер SMK уже поняли, что это "нечто с чем-то" на всякий случай напомню, только не пугайтесь Код теневые и прямые регистры управления памятью в SMK512 Память в контроллерах "АльтПро" разбита на страницы по 32 Кб, части (сегменты) одной такой страницы подключаются в области адресов 100000-177777, сегменты разных страниц одновременно подключить нельзя! Сегментами ниже называются фрагменты памяти по 10000 байт. (4кБ) Название режима Start Std10 ОЗУ10 All Std11 ОЗУ11 HLT10 HLT11 ------------------------------------------------------------------------------------------------------ Код включения 8 160 60 120 20 140 40 100 20000 Код включения 2 1 110 000 110 000 1 010 000 10 000 1 100 000 100 000 1 000 000 10 000 000 000 000 Откл. мон. БК10 + + + + Откл. мон. БК11M + + + + Откл.окна1 БК11M + + + + ------------------------------------------------------------------------------------------------------ 170000-177777 ПЗУ 7 7 3 7 7 7 7 160000-167777 ПЗУ ПЗУ 6 2 ПЗУ 6 6R/6 6 ------------------------------------------------------------------------------------------------------ 150000-157777 1 5 5 0 - 5 5 5 140000-147777 0 4 4 1 - 4 4 4 ------------------------------------------------------------------------------------------------------ 130000-137777 7 3 3 7 - - 3 - 120000-127777 6 2 2 6 - - 2 - ------------------------------------------------------------------------------------------------------ 110000-117777 - - 1 5 - - 1 - 100000-107777 - - 0 4 - - 0R - ------------------------------------------------------------------------------------------------------ SYS - используется для запуска, пересылки данных на БК10 и RAM-BIOS'ом (он - всегда в 0-й странице); Std10, Std11 - стандартные, традиционные режимы работы для БК10 и 11М соответственно, Std10 используется также для пересылки данных на БК10; ОЗУ10 - вместо монитора БК10 и ПЗУ-160000 подключается ОЗУ (на многих БК10 требуется простая доработка, иначе доп. ОЗУ подключается параллельно ПЗУ монитора и приходится записывать в это ОЗУ копию монитора); используется также для доступа к доп. памяти на БК11М; All - позволяет на БК10 подключить ОЗУ ко всему адресному пространству, что используется для загрузки копии Вильнюсского Бейсика; применяется также для доступа к доп. памяти на БК11М; ОЗУ11 - подключение ОЗУ вместо ПЗУ на БК11М, для отключения ПЗУ монитора БК11М простая доработка требуется всегда; Hlt10, Hlt11 - открывают доступ к HALT-режиму процессора на БК10 и БК11М соответственно. Максимально "продвинутые" режимы: везде, где можно, подключается ОЗУ вместо ПЗУ и на БК10 нижняя часть ОЗУ монитора защищена от записи (квази-ПЗУ) для повышения глюкоустойчивости. пугаться не будем и вернемся к вариантам конфигураций памяти БКшек которые могут существовать ![]() легенда МОНИТОР - наличие доработки (или штатного функционала) его отключающей 037 - наличие доработки его отключающей пояснения изначально существовало 3 типа БК 0010(01) - первые с фокалом, ПЗУ не отключалось аппаратно при установке внешних устройств. нужна доработка - БКшки с бейсиком который отключался аппаратно - см варианты - БКшки с мягкой клавиатурой - у них отключается не только бейсик но и ПЗУ монитора добавилась новая конфигурация БКшки с возможностью отключить работу 037й для эмуляции БК11М БК11М изначально два вида - обычная БК11М не содержит в себе возможности отключения ПЗУ монитора - новодел БК11М от Воланда - есть опция отключения ПЗУ монитора добавляется конфигурация с отключенной 037й (я еще такого не делал, но такая конфигурация будет) Соответственно можно нарисовать худшую для программиста универсальную конфигурацию: ![]() тут мы рассматриваем конфигурацию памяти которая будет доступна на любой БКшке с AZБК (стартовое ПЗУ и SETUP как раз работают в таких ограничениях) те у нас может быть закрыто ПЗУшками монитора пространство 100-117k и 140-157k и доступны для подключения страниц AZБК только окна 120-137k (2 окна по 4кБ) и 160-177k (2 окна по 4кБ, но у второго хвост обрезан) Для создания простых универсальных программ (те которые вообще не вдаются в тип БК и ее конфигурацию памяти) эта конфигурация получается наиболее интересной тк мы просто пишем программу как хотим. Однако, с точки зрения программирования, куда более удобна конфигурация с отключенным монитором: ![]() тут мы видим что первые 32кБ всё еще приколочены к БК, но зато верхние доступны для маппирования туда страниц AZБК кстати именно в такой конфигурации работает Принц Эта конфигурация удобна для создания серьезных программных продуктов которые нуждаются в большом количестве памяти одновременно доступной Есть еще и исключительная конфигурация, которая пока сделана на БК-0010, но будет и на БК-0011М ![]() в этой конфигурации легко создать мультизадачную ОС тк вся память - только память AZБК данная конфигурация скорее всего потребуется для самых крутых продуктов, но пока могу сказать, что она пока мало распространена, увы. FAQ Q: А можно что-то делать с ПЗУ которое желтое с пометкой FAST ROM? A: Да, конечно, это окно памяти куда можно подключить всё, что угодно, просто там по-умолчанию ПЗУ КНГМД или ПЗУ монитора. Q: У меня БК без доработки монитора - я правильно понимаю, что доработка отключения монитора очень важна ? A: Да, это наиболее массовая конфигурация ибо она дает программисту уже 32кБ свободной для фантазии памяти. Q: Правильно ли я понимаю, что в случае с AZБК экран может быть в любом месте ? A: Да, совершенно верно - вы можете смело расположить программу с 0 до 77777, а экран подключать страницами со 120k или с 100k - или вообще прокручивать страницами со 160k - делайте как Вам удобно! AZБК не накладывает ограничений! -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#4
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Работа с блиттером, блиттер доступен начиная v15b9 прошивки
2024-05-16 Документация ТУТ Для формирования команды можно использовать калькулятор команд блиттера UDP 2025-01-24: видео перезалито, в MP4 и 1024х786 60fps особенности - код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки) - код демонстрационный - те я не занимаюсь оптимизацией или красотой кода - код с корректным возвратом в операционку перезаливка кода и измененного видео от 2024-02-17 0. Заполнение константой - команда 0 заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 1. Копирование спрайта безусловное - команда 11 производится копирование спрайта хранящегося линейно в прямоугольную позицию в экране видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 2. Копирование спрайта c наложением по SRC - команда 21 видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 3. Копирование спрайта безусловное, с анимацией и движением (команды 0 и 11) сначала тут идет отчистка экрана при помощи ручного запуска блиттера, затем по таймеру идет видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() обращаю внимание на пример ручного запуска блиттера Код ;*********** ручной запуск блиттера v15b8 и далее ***************** mov #2000,@#177272; страница с блоком команд блиттера mov #40000,@#177270; включаем ручной режим блиттера bis #1,@#177270; количество команд bis #10000,@#177270; стартуем блиттер ; ********** ожидание выполнения команды блиттера ************ $w1: bit #100000,@#177270; ждем завершения выполнения bne $w1 4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 5. Подкладывание под фон (команды 11 33 и 42) видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 6. Подкладывание под фон (команды 11 33 и 42) + вращение видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 7. Подкладывание под фон (команды 11 33 и 42) + дрожание экрана - горизонтальный и вертикальные скроллинги видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 8. Заполнение константой - команда 0, выжимаем скорость! заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы - основное отличие от примера 0 - тут мы не по кадровому таймеру работаем - а выжимаем максимальную скорость ! видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() тут организована конвейерная обработка: 0- готовим изначальную команду 1- запускаем готовую команду 2- ждем пока буфер команды будет считан в буфер блиттера 3- готовим данные для новой команды 4- ждем завершения работы блиттера идем на п1 Код ; вариант с ручным запуском - выжимаем максимальную скорость mov #2000,@#177272; страница с блоком команд mov #40000,@#177270; включаем ручной режим блиттера bis #1,@#177270; количество команд ;*********** ручной запуск блиттера v15b8 и далее ***************** main: bis #10000,@#177270; стартуем блиттер ; ********** ожидание считываения команд блиттера в буфер блиттера ************ $w0: bit #10000,@#177270; ждем пока буфер читается bne $w0 ; ****************************************************************** ; можно начинать готовить новую команду! ; рандомный цвет mov @#177550,R0 bic #177400,R0 mov R0,@#120016 ;5 слово ;младший байт - длина спрайта в словах по горизонтали минус 1 ;старший байт - количество cтрок mov @#177550,R0 bic #174370,R0 inc R0 mov R0,@#120011; ;6 слово - инкрементация адреса назначения после копирования строки спрайта ; если мы хотим вывести спрайт шриной 8. пикселей в строку длиной 256. байт ;то мы должны указать инкрементацию - 128.-3.=125 mov #128.,R1 bic #177700,R0 sub R0,R1 mov R1,@#120012; ; позиция рандомная mov @#177550,R0 bic #100000,R0 mov R0,@#120004 ; ********** ожидание выполнения команды блиттера ************ $w1: bit #100000,@#177270; ждем завершения выполнения bne $w1 ; ****************************************************************** 9. Применение команды 51 - подкладывание под фон (команды 11 33 и 42) + 51ая команда при столкновении с границами экрана видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() 10. Подкладывание под фон (команды 11 33 и 42), но с применением координаты Y видео - качественный видеозахват 1024х768 60fps ![]() исходники ![]() Образ диска с примерами ![]() -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#5
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Подготовка графической информации для использования на БК
Подготовка 256-цветных картинок для AZБК Распил GIFок производится GIF Movie Gear ![]() открываете GIF-ку и сохраняете ее кадры в PNG Важные моменты: - палитра в GIFке может быть локальной - иначе говоря в каждом кадре - своя соответственно надо сделать глобальную палитру тк перезагрузка всей палитры это достаточно ресурсоемкая процедура (пересылка 512 слов в регистры) Конвертер картинок в код - "как есть", те он извлекает палитру и саму картинку на вход подаем картинку 256цветов - на выход получаем два текстовых блока - значения для палитр и сам спрайт ![]() ![]() блок загрузки палитр есть в примере №3 Конвертер картинок в WEB SAFE палитру (почти тк я туда добавил еще 32 градации серого) на вход подаем картинку до 256цветов включительно - на выход получаем два текстовых блока - значения для палитр - оно для всех картинок будет одинаковым и сам спрайт, цвета которого скорректированы для этой палитры ![]() ![]() этот конвертер интересен тем что можно готовить разный графический материал (множество спрайтов фонов итд итп) в единую палитру в конвертере есть кнопки сохранения текстовых и бинарных файлов (они уже сразу в big-endian упаковке байтов) вариант сохранения спрайта в формате с заголовком отличается от простого бинарного тем что в начале идет слово размера по горизонтали, затем слово высоты по горизонтали (в пикселях) Конвертер использовался для подготовки примера №4 Подготовка информации в Photoshop так как возникли вопросы по предварительной конвертации картинок то подсвечу важные моменты: 1. исходная картинка как правило в true color ![]() 2. конвертируем ее в indexed color ![]() 3.вот так - выбираем WEB safe палитру и нажимая галку preview видим что меняется ![]() и при необходимости можем поправить цвета до конвертации или выбрать дизеринг Подготовка 16ти цветных картинок Для начала посмотрим на штатную палитру ![]() номер цвета - десятичный, коды палитры dec, hec и oct - что удобнее технически штатная палитра это стандартный 16ти цветный набор но конечно который можно менять как угодно Подготовка монохромных картинок подготовка монохромной картинки, явных ограничений на видеорежим нет Picture converter to text format for AZBK (mono) -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#6
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола)
особенности - код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки) - код демонстрационный - те я не занимаюсь оптимизацией или красотой кода - код с корректным возвратом в операционку 1. Замостим плиткой 32х32 весь экран 256х256 256цветов результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() 2. Замостим плиткой 32х32 весь экран 256х256 256цветов и затем заполним рандомными пикселями (цвет и позиция случайны) результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() тут хочу обратить внимание на качество генератора псевдослучайных чисел в AZБК (и скорость установки точек) 3.Используем длинный рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 128кБ для демонстрации замостим плиткой первого типа 32х32 первые 64кБ и плиткой второго типа - следующие 64кБ далее по таймеру будем крутить рулон вверх вниз результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() тут сразу напрашивается сделать pinball ![]() 4.Используем широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 128кБ для демонстрации замостим плиткой первого типа 32х32 левый экран и плиткой второго типа - следующие правый далее по таймеру будем крутить рулон вправо-влево результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() 5. Используем длинный и широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 256кБ те у нас в ширину два "экрана" и "в высоту" два - всего 4 для демонстрации замостим плиткой все 4 экрана дабы их отличать далее по таймеру будем крутить рулон по горизонтали и вертикали результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() 6. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) далее по таймеру будем крутить рулон по горизонтали и вертикали результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() 7. Сделаем тоже что мы делали с помощью блиттера ранее - см примеры (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) далее по таймеру будем крутить рулон по горизонтали и вертикали + добавим вращение результат работы - качественный видеозахват 1024х768 60fps ![]() исходник ![]() 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 фаз его движения/действия - все что надо сделать для перемещения героя - крутим регистры скролла (влево-вправо и вверх-вниз) фазу движения просто выбираем устанавливая нужную страницу отображения. иначе говоря можно полностью сосредоточиться на программировании игровой логики не тратя ресурсы на работу с графикой. -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#7
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Особенности программирования под AZБК
постараюсь подсветить моменты, которые могут быть не особо заметны, но важны 1. Включение/Выключение кадрового таймера 60Гц правильное включение Код bic #4,@#177346 ; 60Гц таймер! bis #10,@#177346 ; пуск таймера 60Гц безусловный (дабы не делать ветвлений в заисимости от машины) те я явно гашу бит 2 ибо он может остаться от какой-то другой программы которая включала 48Гц таймер те я задаю что мы хотим включить таймер 60Гц и следующим BIS-ом его включаем правильное выключение Код bic #10,@#177346 ; тормозим таймер 2. Пример входа/выхода из программы один из способов - сохранение регистров которые мы будем крутить - в стеке Код mov @#177230,-(SP) mov @#177232,-(SP) mov @#177324,-(SP) mov @#177326,-(SP) mov @#100, -(SP) ; сохраняем старые перехватчики mov @#102, -(SP) mov @#177340, -(SP) ; сохраним настройки памяти mov @#177342, -(SP) mov @#177344, -(SP) mov @#177352, -(SP) mov @#177346, -(SP) пояснение - вот это mov @#177352, -(SP) обеспечивает сохранение последней конфигурации памяти БК11М записанной в 177716 теперь мы хотим использовать память в окне 120000-137777 соответственно правильная последовательность действий Код mov #14020,@#177716 ; отключим оперативку в верхнем окне в БК11М bis #6000,@#177340 ; дополнительно включим окна 120 130 bic #6000,@#177342 ; выключм R/O если оно там было поясню - #14020,@#177716 командует БК11М что ей надо отключить окно 1 и подключить внешнее ПЗУ, которого фактически нет и окно получается свободным для подключения туда оперативки AZБК и вот только после этого мы явно активируем окна 120 130 ! такой подход обеспечит использование этого окна на абсолютно любой БК - вне зависимости от доработки окна 1 Если ПО работает со скролами - надо сбросить их на первоначальное значение или вообще вернуть их из стека если сохранение было (это будет полезно для программ под RT11 тк там вертикальный скрол возможен в консоли) Код clr @#177250 ; сбросим скролы на начальное значение clr @#177252 ; сбросим скролы на начальное значение пример возврата из стека настроек Код ; возврат настроек mov (SP)+,@#177346 mov (SP)+,@#177716 mov (SP)+,@#177344 mov (SP)+,@#177342 mov (SP)+,@#177340 mov (SP)+,@#102 mov (SP)+,@#100 mov (SP)+,@#177326 mov (SP)+,@#177324 mov (SP)+,@#177232 mov (SP)+,@#177230 JMP @#100000 -------------------- Живы будем - Не помрем !
|
SuperMax |
![]()
Сообщение
#8
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 335 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Подготовка 16ти цветной графики на PC и вывод ее на экран в AZБК
Для уменьшения количества цветов удобно использовать линейку Adobe Photoshop Технология проста - открываем картинку, выбираем Image/Mode/Indexed color ![]() тут вводим 16ть цветов которые мы хотим получить и обязательно убираем галку Transparency (иначе она съест один цвет) нажимая на галочку Preview - мы можем увидеть отличия - что было до и что стало теперь обратим внимание на выбор локальной палитры - тут есть 3 варианта локальной палитры Perceprual Selective Adaptive выбираем ту в которой мы получаем лучшую картинку (как правило это Selective но возможны варианты) Теперь сравним порядок ресайза исходная картинка это 1280х1707 - нам это много соответственно надо сделать меньше - к примеру нам подойдет 512х683 но возникает вопрос - когда же изменять количество цветов ? профессионалы, конечно знают, но я явно подсвечу различия ![]() слева - оригинал только resize в 512х683 в середине сначала resize в 512х683 а потом indexed color справа - сначала indexed color а уже потом resize в 512х683 вывод прост - вся обработка графики делается ДО уменьшения количества цветов, это финальный этап подготовки графики для сохранения результата нам нужен формат который понимает 16ти цветную картинку и при этом еще поддерживается софтом - это GIF вот к примеру картинка с которой можно будет работать дальше - вывести ее на БК в видеорежиме 1024х768х4bit ![]() Однако для красивого примера, картинка таки великовата - вырезаем кусочек и ресайзим в 256x192 и затем уже приводим 16ти цветной палитре результат конечно же сохраняем в GIF ![]() Займемся конвертацией картинки в удобный для обработки на БК формат идем сюда https://master.pdp-11.ru/picword16/picword.php загрузим картинку ![]() Получим результат ![]() тут есть и палитра, сверху выводится легенда палитры - дабы можно было легко посмотреть где какой цвет в окне ниже - хекс вывод картинки, он удобен для восприятия тк цвет 4х битный по нажатию кнопок можно получить бинарные варианты или в восьмеричной системе Теперь напишем программу которая выведет данную картинку ![]() Посмотрим на результат - все отлично! ![]() образ диска ![]() -------------------- Живы будем - Не помрем !
|
![]() ![]() |
Текстовая версия | Сейчас: 19.2.2025, 6:15 |