![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
SuperMax |
![]() ![]()
Сообщение
#1
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 345 Регистрация: 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 345 Регистрация: 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: все просто- надо вернуть изначальные страницы которые вы поменяли -------------------- Живы будем - Не помрем !
|
![]() ![]() |
Текстовая версия | Сейчас: 27.8.2025, 15:24 |