IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Программирование под AZБК, методики использования возможностей AZБК
SuperMax
сообщение 3.11.2023, 16:33
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 6 286
Регистрация: 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 286
Регистрация: 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 286
Регистрация: 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 286
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Работа с блиттером, блиттер доступен начиная v15 прошивки

Документация ТУТ

Для формирования команды можно использовать калькулятор команд блиттера

Важно: видео снято телефоном с 30 кадрами соответственно тут не видно плавности, которая есть в реальности

особенности
- код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки)
- код демонстрационный - те я не занимаюсь оптимизацией или красотой кода
- код с корректным возвратом в операционку
перезаливка кода и измененного видео от 2024-02-17


0. Заполнение константой - команда 0
заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы

видео
Прикрепленный файл  0.random_rectangles_2024_02_17.mp4 ( 13.21 мегабайт ) Кол-во скачиваний: 18


исходники
Прикрепленный файл  BLTTST0.RAR ( 1.86 мегабайт ) Кол-во скачиваний: 16



1. Копирование спрайта безусловное - команда 11
производится копирование спрайта хранящегося линейно в прямоугольную позицию в экране

видео
Прикрепленный файл  1.horse_is_runnig_2024_02_17.mp4 ( 6.33 мегабайт ) Кол-во скачиваний: 18


исходники
Прикрепленный файл  BLTTST1.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 16



2. Копирование спрайта c наложением по SRC - команда 21

видео
Прикрепленный файл  2.horse_is_runnig_overlay_2024_02_17.mp4 ( 7.03 мегабайт ) Кол-во скачиваний: 16


исходники
Прикрепленный файл  BLTTST2.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 16



3. Копирование спрайта безусловное, с анимацией и движением (команды 0 и 11)
сначала тут идет отчистка экрана при помощи ручного запуска блиттера, затем по таймеру идет
видео
Прикрепленный файл  3.ball_bounces_off_the_screen.mp4 ( 8.63 мегабайт ) Кол-во скачиваний: 38


исходники
Прикрепленный файл  BLTTST3.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 19


обращаю внимание на пример ручного запуска блиттера
Код

             ;*********** ручной запуск блиттера *****************
                mov     #2000,@#177272   ; страница с блоком команд блиттера
                mov     #40000,@#177270  ; включаем ручной режим блиттера
                bis     #1,@#177270      ; устанавливаем количесто команд
                bis     #10000,@#177270  ; стартуем блиттер
             ; ********** ожидание выполнения команды блиттера ************
$w0:            bit     #100000,@#177270 ; в начале ждем начала выполнения команды блиттера
                beq     $w0
$w1:            bit     #100000,@#177270 ; теперь ждем завершения выполнения
                bne     $w1



4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)

видео
Прикрепленный файл  4.ball_bounces_off_the_screen_with_background.mp4 ( 4.43 мегабайт ) Кол-во скачиваний: 35


исходники
Прикрепленный файл  BLTTST4.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 19


5. Подкладывание под фон (команды 11 33 и 42)

видео
Прикрепленный файл  5.ball_bounces_off_the_screen_under_background.mp4 ( 5.77 мегабайт ) Кол-во скачиваний: 32


исходники
Прикрепленный файл  BLTTST5.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 17


6. Подкладывание под фон (команды 11 33 и 42) + вращение



видео
Прикрепленный файл  6.ball_bounces_off_the_screen_under_background_2.mp4 ( 5.37 мегабайт ) Кол-во скачиваний: 37


исходники
Прикрепленный файл  BLTTST6.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 17



7. Подкладывание под фон (команды 11 33 и 42) + дрожание экрана - горизонтальный и вертикальные скроллинги


видео
Прикрепленный файл  7.ball_bounces_off_the_screen_under_background_and_screen_shake.mp4 ( 4.99 мегабайт ) Кол-во скачиваний: 30


исходники
Прикрепленный файл  BLTTST7.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 18





--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SuperMax
сообщение 25.12.2023, 21:44
Сообщение #5


Администратор
*****

Группа: Root Admin
Сообщений: 6 286
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Подготовка графической информации для использования на БК

Подготовка 256-цветных картинок для AZБК

Распил GIFок производится GIF Movie Gear
Прикрепленный файл  GIF_Movie_Gear.rar ( 962.52 килобайт ) Кол-во скачиваний: 35

открываете 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 286
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола)

особенности
- код универсальный - те будет работать на любой БК(10/11 пофиг на дорабоки)
- код демонстрационный - те я не занимаюсь оптимизацией или красотой кода
- код с корректным возвратом в операционку

1. Замостим плиткой 32х32 весь экран 256х256 256цветов

результат работы
Прикрепленный файл  0.gdemo.mp4 ( 7.59 мегабайт ) Кол-во скачиваний: 30

исходник
Прикрепленный файл  GRAPHICS_DEMO_0.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 16



2. Замостим плиткой 32х32 весь экран 256х256 256цветов и затем заполним рандомными пикселями (цвет и позиция случайны)

результат работы
Прикрепленный файл  1.gdemo.mp4 ( 15.41 мегабайт ) Кол-во скачиваний: 34

исходник
Прикрепленный файл  GRAPHICS_DEMO_1.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 16


тут хочу обратить внимание на качество генератора псевдослучайных чисел в AZБК (и скорость установки точек)


3.Используем длинный рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 первые 64кБ и плиткой второго типа - следующие 64кБ
далее по таймеру будем крутить рулон вверх вниз

результат работы
Прикрепленный файл  2.gdemo.mp4 ( 8.18 мегабайт ) Кол-во скачиваний: 28

исходник
Прикрепленный файл  GRAPHICS_DEMO_2.RAR ( 1.87 мегабайт ) Кол-во скачиваний: 20


тут сразу напрашивается сделать pinball
Прикрепленное изображение


4.Используем широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 128кБ
для демонстрации замостим плиткой первого типа 32х32 левый экран и плиткой второго типа - следующие правый
далее по таймеру будем крутить рулон вправо-влево

результат работы
Прикрепленный файл  3.gdemo.mp4 ( 5.57 мегабайт ) Кол-во скачиваний: 22

исходник
Прикрепленный файл  GRAPHICS_DEMO_3.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 17



5. Используем длинный и широкий рулон: видеорежим 256х256 256цветов - отображаемая часть 64кБ
а весь рулон - 256кБ
те у нас в ширину два "экрана" и "в высоту" два - всего 4
для демонстрации замостим плиткой все 4 экрана дабы их отличать
далее по таймеру будем крутить рулон по горизонтали и вертикали


результат работы
Прикрепленный файл  4.gdemo.mp4 ( 11.23 мегабайт ) Кол-во скачиваний: 19

исходник
Прикрепленный файл  GRAPHICS_DEMO_4.RAR ( 1.88 мегабайт ) Кол-во скачиваний: 18



6. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали


результат работы
Прикрепленный файл  5.gdemo.mp4 ( 4.61 мегабайт ) Кол-во скачиваний: 26

исходник
Прикрепленный файл  GRAPHICS_DEMO_5.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 19


7. Сделаем тоже что мы делали с помощью блиттера ранее - см примеры (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали
+ добавим вращение


результат работы
Прикрепленный файл  6.gdemo.mp4 ( 6.16 мегабайт ) Кол-во скачиваний: 23

исходник
Прикрепленный файл  GRAPHICS_DEMO_6.RAR ( 1.97 мегабайт ) Кол-во скачиваний: 15






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 286
Регистрация: 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 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20.4.2024, 1:52