Программирование под AZБК, методики использования возможностей AZБК |
Здравствуйте, гость ( Вход | Регистрация )
Программирование под AZБК, методики использования возможностей AZБК |
SuperMax |
3.11.2023, 16:33
Сообщение
#1
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 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 |
6.11.2023, 22:02
Сообщение
#2
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 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 |
7.11.2023, 11:05
Сообщение
#3
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 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 |
17.12.2023, 13:23
Сообщение
#4
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
Работа с блиттером, блиттер доступен начиная v15b9 прошивки
2024-05-16 Документация ТУТ Для формирования команды можно использовать калькулятор команд блиттера Важно: видео снято телефоном с 30 кадрами соответственно тут не видно плавности, которая есть в реальности особенности - код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки) - код демонстрационный - те я не занимаюсь оптимизацией или красотой кода - код с корректным возвратом в операционку перезаливка кода и измененного видео от 2024-02-17 0. Заполнение константой - команда 0 заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы видео 0.random_rectangles_2024_02_17.mp4 ( 13.21 мегабайт ) Кол-во скачиваний: 1525 исходники BLTTST0_2024_05_08.RAR ( 1.86 мегабайт ) Кол-во скачиваний: 958 1. Копирование спрайта безусловное - команда 11 производится копирование спрайта хранящегося линейно в прямоугольную позицию в экране видео 1.horse_is_runnig_2024_02_17.mp4 ( 6.33 мегабайт ) Кол-во скачиваний: 1579 исходники BLTTST1_2024_05_08.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 980 2. Копирование спрайта c наложением по SRC - команда 21 видео 2.horse_is_runnig_overlay_2024_02_17.mp4 ( 7.03 мегабайт ) Кол-во скачиваний: 1555 исходники BLTTST2_2024_05_08.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 909 3. Копирование спрайта безусловное, с анимацией и движением (команды 0 и 11) сначала тут идет отчистка экрана при помощи ручного запуска блиттера, затем по таймеру идет видео 3.ball_bounces_off_the_screen.mp4 ( 8.63 мегабайт ) Кол-во скачиваний: 1634 исходники BLTTST3_2024_05_08.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 917 обращаю внимание на пример ручного запуска блиттера Код ;*********** ручной запуск блиттера v15b8 и далее ***************** mov #2000,@#177272; страница с блоком команд блиттера mov #40000,@#177270; включаем ручной режим блиттера bis #1,@#177270 ; количество команд bis #10000,@#177270; стартуем блиттер ; ********** ожидание выполнения команды блиттера ************ $w1: bit #100000,@#177270; ждем завершения выполнения bne $w1 4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) видео 4.ball_bounces_off_the_screen_with_background.mp4 ( 4.43 мегабайт ) Кол-во скачиваний: 1637 исходники BLTTST4_2024_05_08.RAR ( 1.99 мегабайт ) Кол-во скачиваний: 905 5. Подкладывание под фон (команды 11 33 и 42) видео 5.ball_bounces_off_the_screen_under_background.mp4 ( 5.77 мегабайт ) Кол-во скачиваний: 1562 исходники BLTTST5_2024_05_08.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 939 6. Подкладывание под фон (команды 11 33 и 42) + вращение видео 6.ball_bounces_off_the_screen_under_background_2.mp4 ( 5.37 мегабайт ) Кол-во скачиваний: 1639 исходники BLTTST6_2024_05_08.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 993 7. Подкладывание под фон (команды 11 33 и 42) + дрожание экрана - горизонтальный и вертикальные скроллинги видео 7.ball_bounces_off_the_screen_under_background_and_screen_shake.mp4 ( 4.99 мегабайт ) Кол-во скачиваний: 1575 исходники BLTTST7_2024_05_08.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 958 8. Заполнение константой - команда 0, выжимаем скорость! заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы - основное отличие от примера 0 - тут мы не по кадровому таймеру работаем - а выжимаем максимальную скорость ! видео 8.random_rectangles_super_fast_2024_04_08.mp4 ( 10.24 мегабайт ) Кол-во скачиваний: 1388 исходники BLTTST8_2024_05_08.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 951 тут организована конвейерная обработка: 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ая команда при столкновении с границами экрана видео 9.ball_bounces_off_the_screen_under_background_and_white_fill.mp4 ( 8.95 мегабайт ) Кол-во скачиваний: 1218 исходники BLTTST9_2024_05_16.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 846 10. Подкладывание под фон (команды 11 33 и 42), но с применением координаты Y видео A.ball_bounces_off_the_screen_under_background_with_Y_coord.mp4 ( 6.8 мегабайт ) Кол-во скачиваний: 1170 исходники BLTTSTA_2024_06_05.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 874 Образ диска с примерами AZKV.RAR ( 406.82 килобайт ) Кол-во скачиваний: 863 -------------------- Живы будем - Не помрем !
|
SuperMax |
25.12.2023, 21:44
Сообщение
#5
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
Подготовка графической информации для использования на БК
Подготовка 256-цветных картинок для AZБК Распил GIFок производится GIF Movie Gear GIF_Movie_Gear.rar ( 962.52 килобайт ) Кол-во скачиваний: 1045 открываете 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.2.2024, 1:51
Сообщение
#6
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола)
особенности - код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки) - код демонстрационный - те я не занимаюсь оптимизацией или красотой кода - код с корректным возвратом в операционку 1. Замостим плиткой 32х32 весь экран 256х256 256цветов результат работы 0.gdemo.mp4 ( 7.59 мегабайт ) Кол-во скачиваний: 1682 исходник GRAPHICS_DEMO_0.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1131 2. Замостим плиткой 32х32 весь экран 256х256 256цветов и затем заполним рандомными пикселями (цвет и позиция случайны) результат работы 1.gdemo.mp4 ( 15.41 мегабайт ) Кол-во скачиваний: 1642 исходник GRAPHICS_DEMO_1.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1156 тут хочу обратить внимание на качество генератора псевдослучайных чисел в AZБК (и скорость установки точек) 3.Используем длинный рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 128кБ для демонстрации замостим плиткой первого типа 32х32 первые 64кБ и плиткой второго типа - следующие 64кБ далее по таймеру будем крутить рулон вверх вниз результат работы 2.gdemo.mp4 ( 8.18 мегабайт ) Кол-во скачиваний: 1703 исходник GRAPHICS_DEMO_2.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 1134 тут сразу напрашивается сделать pinball 4.Используем широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 128кБ для демонстрации замостим плиткой первого типа 32х32 левый экран и плиткой второго типа - следующие правый далее по таймеру будем крутить рулон вправо-влево результат работы 3.gdemo.mp4 ( 5.57 мегабайт ) Кол-во скачиваний: 1652 исходник GRAPHICS_DEMO_3.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 1162 5. Используем длинный и широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ а весь рулон - 256кБ те у нас в ширину два "экрана" и "в высоту" два - всего 4 для демонстрации замостим плиткой все 4 экрана дабы их отличать далее по таймеру будем крутить рулон по горизонтали и вертикали результат работы 4.gdemo.mp4 ( 11.23 мегабайт ) Кол-во скачиваний: 1694 исходник GRAPHICS_DEMO_4.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 1142 6. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) далее по таймеру будем крутить рулон по горизонтали и вертикали результат работы 5.gdemo.mp4 ( 4.61 мегабайт ) Кол-во скачиваний: 1655 исходник GRAPHICS_DEMO_5.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 1115 7. Сделаем тоже что мы делали с помощью блиттера ранее - см примеры (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42) далее по таймеру будем крутить рулон по горизонтали и вертикали + добавим вращение результат работы 6.gdemo.mp4 ( 6.16 мегабайт ) Кол-во скачиваний: 1787 исходник GRAPHICS_DEMO_6.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 1135 FAQ по рулонам, сдвингам итд Q: Есть ли ограничение у рулона ? Можно ли сделать длинный рулон "вниз" ? A: Ограничений на самом деле нет, есть особенности:для сдвига экрана (окна отображения) вниз мы оперируем регистром вертикального скрола - но у него только 256 значений, иначе говоря при его помощи мы можем сдвигаться на от 0 до +255 строк вниз, но надо помнить, что у нас есть еще и регистр начала отображения - те номер страницы с которой идет отображение и соответственно расчет этого сдвига!соответственно используя обра регистра мы можем двигаться бесконечно!поясню на примере - допустим у нас разрешение 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 цветов плавно двигая экран во все стороны -------------------- Живы будем - Не помрем !
|
SuperMax |
14.2.2024, 18:21
Сообщение
#7
|
Администратор Группа: Root Admin Сообщений: 6 299 Регистрация: 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 -------------------- Живы будем - Не помрем !
|
Текстовая версия | Сейчас: 1.11.2024, 5:53 |