IPB

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

 
Ответить в эту темуОткрыть новую тему
> Контроллер AZ BK: Документирование процесса разработки, на основании этой темы будет сформирована техническое описание
SuperMax
сообщение 20.1.2021, 20:37
Сообщение #1


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

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



Палитры V2
управление палитрами осуществляется через 2 регистра палитры первый (177234) - адрес ячейки палитры
второй(177236) - значение палитры 15bit

адреса ячеек палитры будут начинаться с большей
Код

нумерация кодов цветов
палитра коды цветов (адреса ячеек палитры)
256     0-255
4х16    256-319
16      320-335
2       336-337


так получается полностью независимые палитры без пересечений
+ явный дубль стандартного функционала палитр, те можно переключать палитры как и ранее, но теперь доступна опция настройки каждой штатной палитры!

и как следствие палитры не надо будет перегружать при переключении видеорежима

для удобства формирования палитр сделал эксельку
v2.3
Прикрепленный файл  palette_calc23.xlsm ( 91.63 килобайт ) Кол-во скачиваний: 344

новая версия v2.4 - на нее переходим
Прикрепленный файл  palette_calc24.xlsm ( 98.78 килобайт ) Кол-во скачиваний: 178

v2.5 - исправил ошибку с 1й палитрой
Прикрепленный файл  palette_calc25.xlsm ( 98.95 килобайт ) Кол-во скачиваний: 24


основная задача этой эксельки - сформировать файл mif для загрузки дефолтной палитры при старте ПЛИС

также она пригодится разработчикам для пересчета цветов в 15bit

пояснения к блоку 4x16 256-319
это 16 наборов палитры, изначально туда грузятся штатные значения, но их можно менять на любые!
нумерация прямая - те нулевая палитра это 256-257-258-259 ячейки
следующие 4 ячейки это 1ая палитра и так далее

управление палитрами осуществляется через 2 регистра
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]

Код




                 РЕГИСТРЫ УПРАВЛЕНИЯ ПАЛИТРАМИ

         АДРЕС = 177234
         ФОРМАТ РЕГИСТРА                                
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                             │                        │
                             └────АДРЕС ПАЛИТРЫ───────┘
    
       Доступен по чтению и записи



         АДРЕС = 177236
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
           │                                          │
           └──────────ЗНАЧЕНИЕ ПАЛИТРЫ────────────────┘

       Доступен по чтению и записи    



        Палитра 15bit
        
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
        └─────RED────┘ └───GREEN───┘  └────BLUE────┘






формулу формирования цвета
цвет на выходе = VideoModeOffset + PaletteOffset + ColorIndex ;

VideoModeOffset - смещение видеорежима
cмещение - кол-во цветов (значения десятичные)
0 - 256
256- 4 х16
320- 16
336- 2

PaletteOffset существует только для штаного видеорежима 4 цвета
во всех остальных случаях =0
номер палитры - смещение
0 - 0
1 - 4
2 - 8
итд

ColorIndex - непосредственно номер цвета в видеорежиме, начиная с 0

Примеры работы с палитрой
надо загрузить новые значения для 16ти цветной палитры
для этого мы последовательно пишем
320.-> 177234 те устанавливаем адрес палитры
теперь мы можем записать значение
<новое значение> -> 177236
(также после установки адреса палитры мы можем ее и считать)


Примеры работы с экселькой
к примеру делаем новые значения для 16ти-цветой палитры
Прикрепленное изображение
слева вводим стандартные RGB значения в hex (обведено синим)
справа получаем как этот цвет выглядит (надо включить макросы) и восьмеричные значения цвета (обведено красным)


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


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

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



Для Legacy видеорежимов реализовано циклическое переключение по сочетанию AR2 + KT
В зависимости от запущенной программы, поведение может отличаться от стандартного, но в большинстве перехват данного сочетания работает корректно

Всего 4 видеорежима - точнее интерпретации 16кБ видеопамяти

0 - ч/б режим, по умолчанию палитра с белыми точками и темно-синим фоном
разрешение 512х256

1 - цветной режим, 4 цвета, палитра управляется как и стандартным 177716 как и через 177234/177236
разрешение 256х256


Для БК10 добавлена возможность сброса палитры на нулевую

(так как к примеру АНДОС устанавливает 5ую (все белое) при запуске на 10ке в режиме 10ки
сброс палитры по сочетанию АР2+РУС



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


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

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



Модель управления памятью в AZ V2 с поддержкой эмуляции БК11М на БК10

Правки от 2022-12-19

Концепция:
маппер V2 - это чисто маппер AZ без костылей и _все_ запросы к мапперам 177716(БК11М) или 177130(СМК) транслируются в маппер AZ который является единым устройством управления памятью
это сделано для кардинального расширения возможностей БКшек, а именно для отключения 037й
и как следствие - возможности работы полного маппера AZ. Это означает что на любой адрес в адресном пространстве БК10/БК11М можно подставить любую страницу памяти!

адресное пространство расширенной памяти разбито на 4 сегмента:
Код


   АДРЕСНОЕ ПРОСТРАНСТВО ПАМЯТИ В AZ

╔═══════════════════════════════════════════════════ .....  ════════╗
║     АДРЕСНОЕ ПРОСТРАНСТВО ПАМЯТИ В AZ                             ║
╚═══════════════════════════════════════════════════ .....  ════════╝
   0    128kB    256kB   512kB   1024kB                            32MB
  │       │        │       │        │
  └───────┤        ├───────┴────────┘
   RAM    │        │  ROMs    SMK
   Shadow │        │
          │        │
          └─SYSTEM─┘




0-128кБ это память для организации "теневой" или эмулируемой памяти БК11М
первые 128кБ являются полной копией оперативки БК11М - или эмулируемой в БК10
из этой памяти идет отображение legacy видео режимов
а также получается есть техническая возможность отобразить на экран любую страницу памяти БК11М
Прикрепленное изображение
обращаю внимание на то, что физический адрес - словный
режим работы этой памяти устанавливается в регистре 177346

128-256кБ это полноценная R/W память с которой всегда идет RPLY
но эта память служебная и используется для работы AZ контроллера

256-512кБ это read-only память, она не доступна на запись со стороны БКшки
эта память для эмуляции различных ПЗУ, содержимое которых может быть загружено только средствами AZ

512-1024кБ для эмуляции SMK-512

Начиная с 1МБ вся оперативная память - полноценная R/W память без ограничений, а именно ее подключение всегда дает RPLY на чтение и на запись если не установлен режим r/o на данной странице в регистре 177342



маппер памяти AZ
технически адрес в системе 24bit-а (адрес слова 16bit)
для маппера памяти используется старшая часть адреса, и получается дискретность привязки памяти к окну - 4кБ

есть 16 регистров (177300-177336 R/W) куда пишется 13bit адрес начала (11 бит добавляется от адреса с шины и получается 24bit адрес слова)
старшие 3 бита в резеве и маппер предусматривает расширение до 256МБ.

Код



  ПРИНЦИП ФОРМИРОВАНИЯ ПОЛНОГО 24bit  АДРЕСА  16bit слова
  ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
  │23│22│21│20│19│18│17│16│15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
  └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
   │                                    │ │                              │
   └────────────────────────────────────┘ └──────────────────────────────┘
      АДРЕС В РЕГИСТРЕ ОКНА 13bit             АДРЕС С ШИНЫ МЛАДШИЕ 11bit




Адресное пространство разбито на 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







         Регистр управления активацией окно - маски окон
         АДРЕС = 177340 R/W
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘

       пример: для подключения оперативки в окно №14 - 160000-167777
       надо сделать следующее:
    177334 <- 400 (это указатель на первый мегабайт)
    177340 <- 40000 (это разрешение этого окна - 14 бит)
    177342 <- сброс бита 14 тк мы хотим оперативку а не ПЗУ


        
         Регистр управления r/o на окно
         АДРЕС = 177342 R/W
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
      
       пример: для подключения оперативки в режиме ПЗУ
       в окно №14 - 160000-167777 надо сделать следующее:
    177334 <- 400 (это указатель на первый мегабайт)
    177340 <- 40000 (это разрешение этого окна - 14 бит)
    177342 <- 40000 (это установка r/o тк мы хотим ПЗУ)



         Регистр управления shadow окон - маски окон
         АДРЕС = 177344 R/W
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘

shadow это режим копирования всех операций записи в зеркальную память  - см

   АДРЕСНОЕ ПРОСТРАНСТВО ПАМЯТИ В AZ

╔═══════════════════════════════════════════════════ .....  ════════╗
║     АДРЕСНОЕ ПРОСТРАНСТВО ПАМЯТИ В AZ                             ║
╚═══════════════════════════════════════════════════ .....  ════════╝
   0    128kB    256kB   512kB   1024kB                            32MB
  │       │                      
  └───────┘        
  SHADOW RAM              
          
Это нужно для работы на БК11М и формирования изображения на VGA экране

shadow страницы устанавливаются автоматически при работе с маппером БК11М






для управления маппером предусмотрен регистр маски окон - 177340 R/W
младший бит соответствует младшему окну (те с 0 до 7777)

пример: для подключения оперативки в окно 160000-167777 надо сделать следующее:
177334 <- 400 (это указатель на первый мегабайт)
177340 <- 40000 (это разрешение этого окна)

для управления r/o на выбранном окне предусмотрен регистр-маска 177342
соответственно для установки режима только чтения надо установить соответствующий бит на окне
к примеру
177334 <- 400 (это указатель на первый мегабайт)
177340 <- 40000 (это разрешение этого окна)
177342 <- 40000 это запрет записи в это (160000-167777) окно




также есть регистр с битовой маской запрета подключения окон 177344
(=1 аппаратный запрет на подключение окна)
в нем при старте системы сохраняется конфигурация машины исходя из которой можно понять, какие возможности доступны на данной машине

к примеру на БК11М с отключением монитора или на БК-0010 с отключением монитора в регистре будет 377 ибо отвечает только оперативка ДО адреса 100'000
на обычной БК11М будет 30377 - те к ОЗУ добавилась ПЗУ


разбивка на окна соответствует размеру в SMK - те 4кБ начиная со 100000(8)
обращаю внимание на адресацию, те свойства r/o w/o привязаны к 24bit адресу слова (!)
также есть регистр управления который осуществляет включение/выключение окон по маске (177342) + для общего управления и совместимостью с SMK

регистр управления shadow режимом 177344 R/W
это тоже битовая маска окон, и младший бит соответствует младшему окну
назначение регистра - управление работой shadow-режима для БК11М

как уже было сказано - маппер V2 это полный маппер
и соответственно в режиме БК11М - первые 128кБ это тень памяти БК11М
для этого в регистры 177330 и далее прописываются соответствия страниц памяти в которые будет "откидываться" вся запись в память БК11М и будет обеспечиваться ее копия в памяти AZ.

к примеру
177300 <=13'o030; // 000000-007777
177302 <=13'o031; // 010000-017777
177304 <=13'o032; // 020000-027777
177306 <=13'o033; // 030000-037777
те это нулевая страница в понятии БК11М
и соответственно в 177344 устанавливаются биты shadow-режима

управление shadow осуществляется автоматически в ПЛИС трансляцией запросов из 177716 и согласно режиму работы маппера в 177346

регистр управления маппером 177346 R/W

Код


         Регистр управления маппером
         АДРЕС = 177346
         ФОРМАТ РЕГИСТРА
       ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
       │15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
       └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
        │  ║  │  │  │  ║  ║  │     │  │  │  │  │  │   │      ┌─────────────────────────┐
        │  ║  │  │  │  ║  ║  └─────┤  │  │  │  │  └───┴──────┤ версия аппаратной части │
        │  ║  │  │  │  ║  ║        │  │  │  │  │             └─────────────────────────┘
        │  ║  │  │  │  ║  ║        │  │  │  │  │             ┌─────────────────────────────────┐
        │  ║  │  │  │  ║  ║        │  │  │  │  └─────────────┤ =1 50Hz =0 60Hz кадровый таймер │  
        │  ║  │  │  │  ║  ║        │  │  │  │                └─────────────────────────────────┘
        │  ║  │  │  │  ║  ║        │  │  │  │                ┌─────────────────────────────────┐
        │  ║  │  │  │  ║  ║        │  │  │  └────────────────┤ =1 включить таймер 100й вектор  │
        │  ║  │  │  │  ║  ║        │  │  │                   └─────────────────────────────────┘
        │  ║  │  │  │  ║  ║        │  │  │                   ┌────────┐
        │  ║  │  │  │  ║  ║        │  │  └───────────────────┤ резерв │
        │  ║  │  │  │  ║  ║        │  │                      └────────┘
        │  ║  │  │  │  ║  ║        │  │       ┌─────────────────────────────────────────────┐
        │  ║  │  │  │  ║  ║        │  └───────┤ управление эмуляцией ПЗУ в БК11М =1 включить│
        │  ║  │  │  │  ║  ║        │          └─────────────────────────────────────────────┘
        │  ║  │  │  │  ║  ║        │  ┌──────────────────────────────────────────────────────────────┐
        │  ║  │  │  │  ║  ║        └──┤частота процессора явно те =3 =4 =5 =6 MHz =0 то неопределено │
        │  ║  │  │  │  ║  ║           │ заполняется программно, стартовым ПЗУ                        │
        │  ║  │  │  │  ║  ║           └──────────────────────────────────────────────────────────────┘
        │  ║  │  │  │  ║  ║  ╔═════════════════════════════════════════════════════════════════════════════════╗
        │  ║  │  │  │  ║  ╚══╣  R/W - RAM окно памяти с 0 до 77777 (технически это и окно 100000 до 137777)    ║
        │  ║  │  │  │  ║     ║  в отключенном режиме (=1) на 037ую не проходят запросы с адресов с 0 до 77777  ║
        │  ║  │  │  │  ║     ║  соответственно и 037ая никак не отвечает и не принимает данные на запись       ║
        │  ║  │  │  │  ║     ║  соответственно эта опция включает RPLY на маппере БК11М, а также возможность   ║
        │  ║  │  │  │  ║     ║  читать из маппера !!! при 14 бите =0 опция не работает                         ║
        │  ║  │  │  │  ║     ╚═════════════════════════════════════════════════════════════════════════════════╝
        │  ║  │  │  │  ║     ╔═════════════════════════════════════════════════════╗
        │  ║  │  │  │  ╚═════╣ R/W - ответ на 177660-663 строб 014й =1 отключение  ║
        │  ║  │  │  │        ║  а именно эмуляцию 014й                             ║
        │  ║  │  │  │        ║  те уже пойдет RPLY от AZ на адресах 177660-663     ║
        │  ║  │  │  │        ║  при 14 бите =0 опция не работает                   ║
        │  ║  │  │  │        ╚═════════════════════════════════════════════════════╝
        │  ║  │  │  │  ┌──────────────────────────────────────────────────────────────────┐
        │  ║  │  │  └──┤ R/W - включение эмуляции БК11М =1 включено                       │
        │  ║  │  │     │эта опция может быть активирована только при наличии =1 в бите 12 │
        │  ║  │  │     │(при =0 в бите 12 - игнорируется)                                 │
        │  ║  │  │     └──────────────────────────────────────────────────────────────────┘
        │  ║  │  │     ┌────────────────────────────────────────────────────────────────┐
        │  ║  │  └─────┤ R/W - тип БКшки =0 это 11М, дефолтное состояние  =1 это 10ка   │
        │  ║  │        │ проверяется и устанавливается программно стартовым ПЗУ         │
        │  ║  │        └────────────────────────────────────────────────────────────────┘
        │  ║  │ ┌─────────────────────────────────────────────────────────────────────────────────────────────┐
        │  ║  └─┤ 13 - R/W - наличие работоспособной доработки окна1                                          │
        │  ║    │ =1 - работает отключение окна 1 традиционным методом через оттягивание выхода TM9 на землю  │
        │  ║    │ =0 - доработки нет                                                                          │
        │  ║    │ проверяется и устанавливается программно                                                    │
        │  ║    │ но сбрасывается в 0 при установке бита 14 - см ниже                                         │
        │  ║    └─────────────────────────────────────────────────────────────────────────────────────────────┘
        │  ║ ╔═════════════════════════════════════════════════════════╗
        │  ╚═╣R/O - тип доработки, результат автоопределения в ПЛИС    ║
        │    ║=0 доработка окна 1 или нет доработки                    ║
        │    ║=1 доработка с управлением 037й                          ║
        │    ╚═════════════════════════════════════════════════════════╝
        │    ┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
        └────┤ 15 - R/W - =1 отключение окна 1 в БК11М, транслируется из эмуляции SMK                             │
             │ и в зависимости от типа доработки будет подаваться как сигнал на А22 или как переключение окон 11М │
             └────────────────────────────────────────────────────────────────────────────────────────────────────┘





биты
00 - R/O - версия аппаратной части платы ПЛИС - сейчас там 0
01 - R/O - версия аппаратной части платы ПЛИС - сейчас там 0

02 - =1 50Hz =0 60Hz кадровый таймер
переключение источников таймера, в случае 60Гц - оно идет с VGA модуля, 48Гц генерится из 65MHz

03 - =1 включить таймер 100й вектор
включает таймер по 100му вектору безусловно, h

04 - резерв =0

05 - управление эмуляцией ПЗУ в БК11М; по-умолчанию расширенные ПЗУ бейсика подключаемые через 177716 в окно 1 (100000-137777)
ПЗУ 8 [0] - подключает ПЗУ 325, 327 к магистрали
ПЗУ 9 [1] - подключает ПЗУ 328, 329 к магистрали
установка этого бита включает полную эмуляцию подключения этих ПЗУ средствами AZБК
бит независимый от эмуляции БК11М тк может быть случай с БК11М без ПЗУ совсем


частота процессора явно те =3 =4 =5 =6 MHz =0 то неопределено
заполняется программно, стартовым ПЗУ
06 - R/W
07 - R/W
08 - R/W


управление опциями отключения 037й в ПЛИС, доступно программно
по-умолчанию =0, те опция выключена
тк все изначально =0, и устанавливаются по HALT-у

эти опция отключает прохождение SYNC-а на 037 и включает дополнительный функционал
09 - R/W - RAM окно памяти с 0 до 77777 (технически это и окно 100000 до 137777)
в отключенном режиме (=1) на 037ую не проходят запросы с адресов с 0 до 77777 соответственно и 037ая никак не отвечает и не принимает данные на запись
соответственно эта опция включает RPLY на маппере БК11М, а также возможность читать из маппера
при 14 бите =0 опция не работает

эти опция отключает прохождение SYNC-а на 037 и включает дополнительный функционал
10 - R/W - ответ на 177660-663 строб 014й =1 отключение
а именно эмуляцию 014й
те уже пойдет RPLY от AZ на адресах 177660-663
при 14 бите =0 опция не работает

11 - R/W - включение эмуляции БК11М
=0 выключено
=1 включено
эта опция может быть активирована только при наличии =1 в бите 12 (при =0 в бите 12 - игнорируется)
функционал эмуляции БК11М на БК10 включает:
- разрешение записи (RPLY) в 177662
соответственно работают: палитры + кадровый таймер, частота задается в бите 2

12 - R/W - тип БКшки
=0 это 11М, дефолтное состояние
=1 это 10ка
проверяется и устанавливается программно стартовым ПЗУ
опция нужна для дальнейшей работы механизмов эмуляции БК11М на БК10
наличие в ней =1 обязательно для включения эмуляции БК11М на БК10

13 - R/W - наличие работоспособной доработки окна1
=1 - работает отключение окна 1 традиционным методом через оттягивание выхода TM9 на землю
=0 - доработки нет
проверяется и устанавливается программно
но сбрасывается в 0 при установке бита 14 - см ниже

14 - R/O - тип доработки, результат автоопределения в ПЛИС
=0 доработка окна 1 или нет доработки
=1 доработка с управлением 037й

15 - R/W - =1 отключение окна 1 в БК11М, транслируется из эмуляции SMK
и в зависимости от типа доработки будет подаваться как сигнал на А22 или как переключение окон 11М

Регистры-копии данных, доступны только по чтению
177350 R/O - регистр копия по записи 177130 в режиме записи управления памятью в SMK
177352 R/O - регистр копия по записи 177716 в режиме записи управления памятью в БК11М

Основное назначение регистров - возможность в любой процедуре поменять настройки памяти, что-то сделать и вернуть их обратно (тк штатными средствами узнать что записано в эти регистры невозможно)



При этом любая память, может быть использована для отображения изображения на экране
Расширенный режим видеоконтроллера представляет набор строк от 0 до 767
и привязанный к ним
- адрес 24bit начала строки, длина строки от 32 до 256 слов (16bit), важно, это адрес слова 16bit а не байта как это будет на МПИ
- видеорежим строки: те количество цветов 2bit (2/4/16/256), масштабирование 2bita (1/2/4/8)
те растягивание данных на заданное число пикселей


технически 768 строк, которые мы можем дублировать как нам удобно просто указывая одинаковый адрес начала строки

Соответственно технически получается можно создавать любые видеорежимы в пределах 1024х768
комбинируя допустимые варианты


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

a)машина БК11М, без блокировки 037й, возможно наличие простой доработки окна1
доступные режимы
1. теневой маппер БК11М - те ловим DOUT с шины на все окна, RPLY не посылаем
при наличии доработки SMK - отключаем окно аппаратно

б) машина БК11М, с блокировкой 037
1. теневой маппер БК11М - те ловим DOUT с шины на все окна, RPLY не посылаем
2. полный маппер БК11М - те отключаем штатную память полностью, ловим DIN и DOUT с шины на все окна, RPLY посылаем
3. полный маппер БК11М - те отключаем штатную память полностью, ловим DIN и DOUT с шины на все окна, RPLY посылаем, подключаем все "ПЗУ" БК11М (для БК11М без ПЗУ или БК10)

в) машина БК10, без блокировки 037
1. теневой маппер БК10 - те ловим DOUT с шины на все окна, RPLY не посылаем
работаем в режиме обычной расширенной памяти с 120000-157777

г) машина БК10, с блокировкой 037
1. теневой маппер БК10 - те ловим DOUT с шины на все окна, RPLY не посылаем
2. полный маппер БК11М - те отключаем штатную память 037й, ловим DIN и DOUT с шины на все окна, RPLY посылаем
3. полный маппер БК11М - те отключаем штатную память 037й, ловим DIN и DOUT с шины на все окна, RPLY посылаем, подключаем все "ПЗУ" БК11М (для БК11М без ПЗУ или БК10)

Также наличие доработки 037й позволяет отключить 014ую и подключить внешную PS/2 клавиатуру


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


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

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



Генератор псевдослучайных чисел

технически это LFSR длиной 128bit, младшие 16bit доступны по адресу 177550
данный регистр отвечает и на чтение и на запись. запись игнорируется.

питается генератор частой 65MHz и как следствие каждое обращение с МПИ даст совершенно новое слово




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


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

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



Консоль контроллера
основное назначение - отладка + информационные сообщения для расширенной диагностики

Настройка консоли
baud rate: 115200
data:8 bit
parity: none
stop: 1bit


К примеру в случае отсутствия карточки в консоли будет:

Код
AZBK build May  5 2021 23:12:19
Start lan init
ERROR: Card NOT installed
Lan init ok
IO11 init begin
ERROR open AZ.INI  errorcode=12
IO11 Error: 4
System Halted



Нормальный старт выводит в консоль следующий лог
Код

AZBK build May 17 2021 22:27:48
Start lan init
Card installed OK
Card mounted OK
Lan init ok
IO11 init begin
LOAD 0 ROM: file 0:/ROM/AZBOOT.ROM at 400000 (100)
LOAD 8 ROM: file 0:/ROM/BZ326.ROM at 440000 (110)
LOAD 11 ROM: file 0:/ROM/HDD326.ROM at 454000 (113)
LOAD 16 ROM: file 0:/ROM/11M_324.ROM at 500000 (120)
LOAD 18 ROM: file 0:/ROM/11M_325.ROM at 510000 (122)
LOAD 20 ROM: file 0:/ROM/11M_327.ROM at 520000 (124)
LOAD 22 ROM: file 0:/ROM/11M_328.ROM at 530000 (126)
LOAD 24 ROM: file 0:/ROM/11M_329.ROM at 540000 (130)
MOUNT image 0:/DISKS/AG.IMG
MOUNT image 0:/DISKS/ANSYS.IMG
MOUNT image 0:/DISKS/CSI_321B.IMG
MOUNT image 0:/DISKS/CSI_321R.IMG
MOUNT image 0:/DISKS/FORTRA.DSK
MOUNT image 0:/DISKS/51SYS_DS.DSK
MOUNT image 0:/DISKS/51DS_BK.DSK
MOUNT image 0:/DISKS/BK326.IPL
Card installed OK
Card mounted OK

-----------------------------
Network setting:
DHCPNAME=AZNET-BK.home.maxiol.com
MAC=00.0e.35.22.0b.01
DHCP=ON
IP=0.0.0.0
MASK=0.0.0.0
GW=0.0.0.0
NTP=0.0.0.0
DNS1=0.0.0.0
DNS2=0.0.0.0
NTP_BROADCAST=OFF
SNMP_COMMUNITY=maxiol
SNMP_TRAP=0.0.0.0
SNMP_TRAP_CHECK_PERIOD=0
SNMP_OK1=0.0.0.0
SNMP_OK2=0.0.0.0
SNMP_OK3=0.0.0.0
SNMP_OK4=0.0.0.0
SNMP_OK5=0.0.0.0
TIMEZONE=0
IO11 init ok
Begin main work






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


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

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



Загрузка ПЗУ

Пример az.ini
Код

[ROM]
R00=0:/rom/AZBOOT.ROM
R08=0:/rom/bz326.rom
R11=0:/rom/HDD326.ROM
R16=0:/rom/11m_324.rom
R18=0:/rom/11m_325.rom
R20=0:/rom/11m_327.rom
R22=0:/rom/11m_328.rom
R24=0:/rom/11m_329.rom
[disks]
D0=0:/disks/AG.IMG
D1=0:/disks/ANSYS.IMG
D2=0:/disks/CSI_321B.IMG
D3=0:/disks/CSI_321R.IMG
D4=0:/disks/fortra.dsk
D5=0:/disks/51SYS_DS.DSK
D6=0:/disks/51DS_BK.DSK
D7=0:/disks/BK326.IPL
[boot]
D7


Секция ROM обязательна и всегда должна быть первой
привязка основных ROMов будет статична тк является ключевой для эмуляции стандартного набора ПЗУ разных БК

разберем строчку:
Код
R00=0:/rom/AZBOOT.ROM


R00 - номер слота куда будет загружено ПЗУ
нумерация от R00 до R63
(весь сегмент ПЗУ - 256кБ - соответственно всего 64слота)
соответственно если ПЗУ 8кБ то она займет 2 слота

Код
0:/rom/AZBOOT.ROM

тут очевидно путь к файлу

Распределение адресного пространства ПЗУ
Прикрепленное изображение
обращаю внимание на то, что физический адрес - словный

столбец окно маппера как раз показывает номер для мапирования
те для подключения ПЗУ AZ326.ROM которое загружено с адреса 440'000(8)
мы должны занести в регистр слота - в нашем случае 177334 (тк мы подключаем в окно 160'000(8)), значение 110(8)

Если мы хотим подключить длинное ПЗУ которое занимает два слота маппера то надо указать оба
Код

            mov        #120,@#177330         ; окно 140000-147777
            mov        #121,@#177332         ; окно 150000-157777
            bis        #30000,@#177340       ; включаем страницы




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


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

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



Стартовая последовательность

1. После нажатия RESET на БК (или включения) питания процессор в БК остановлен
2. Запускается STM32, удерживает RESET в низком состоянии и начинает загрузку конфига AZ.INI и его исполнение
3. Загружаются образа ПЗУ в оперативку для эмуляции ПЗУ
4. После завершения инициализации инфраструктры, STM32 отпускает RESET и БК может стартовать
5. Инициализирует сетевой стек до старта БК (подъема RESET через штатную цепь заряда конденсатора)
6. Старт БКшки с AZ осуществляется с адреса 177000 по которому отвечает стартовое однорегистровое ПЗУ.
6. Старт БКшки с AZ осуществляется с адреса 170000
7. Программа в нем подключает ПЗУ AZBOOT c адрес 170000 и передает управление ему.
8. ПЗУ AZBOOT включает сеть и инициализирует оборудование AZ
9. AZBOOT передает управление стандартному монитору (в БК-0010 со 100000 а в БК-0011М о 140000)

Цветовая индикация,стадии
1-2 - фиолетовый
3 - синий
4-5-6-7 - зеленый
8,9 - красный-зеленый (адрес по DHCP еще не получен) или синий-зеленый (есть адрес по DHCP)

далее при обращении к карточке могут быть сочетания до белого



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


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

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



Индикация режимов работы

AZБК снабжен RGB сетодиодом в целях экономии места и увеличения функционала

Индикация ошибок - подробно расписано тут

1. При старте если все OK - горит зеленый

2. Сеть в номинальном режиме работы: раз в секунду гасит зеленый и зажигает синий потом обратно - те синий-зеленый раз в секунду

3. Процесс неполучения адреса по DHCP [или отсутствия сетевой карты]
раз в секунду зеленый гаснет но синий не загорается, загорается красный

4. Сетевая активность - только при отправке пакетов ибо мусор из сети валится постоянно
зеленый не горит, синий моргает часто

5. Активность контроллера - малиновый [синий +красный], при совмещении с сетью получаются сочетания до белого.


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


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

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



Кнопка перезапуска на AZ
изначально, подразумевалось что перезапуск будет идти с платы БКшки, и на самом AZ не предусматривалась установка кнопки перезапуска, однако это можно легко сделать

необходимо подключить кнопку между контактами NRST и GND

к примеру можно так:
Прикрепленное изображение

Данная кнопка перезапустит STM32, а он в свою очередь осуществит полный перезапуск и БКшки и ПЛИС


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


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

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



Проект звуковой части

1. COVOX - уже реализован

набор регистров доступных и по чтению и по записи
177200 - 16bit левый канал
177202 - 16bit правый канал
177204 - 16bit моно, иначе говоря запись в этот регистр приводит к фактической одновременной записи в регистры 177200 и 177202
177206 - 8bit стерео/mono, иначе говоря запись в этот регистр приводит к фактической одновременной записи в
регистры 177200 и 177202 - в старший байт
режимы stereo/momo определяются по байтовой записи
те если писать слово в 177206 то это будет стерео
а если писать младший байт в 177206 то данные будут трактоваться как моно

запись в 177714 мультирежимная
ибо у нас есть 2 варианта ковокса
1. моно 8bit - запись в младший байт
2. стерео 8bit - МЛБ - левый СТБ-правый
переключать режимы видимо придется через регистр тк байтовую запись в младший байт завернули на AY

соответственно запись туда
тоже приводит к фактической одновременной записи в 177200 и 177202
обеспечивая полную совместимость со старым софтом

Регистр управления звуком - 177212
биты:
00 - легаси перехват ковокса в 177714: 0=моно 1=стерео
01 - =0 разрешен легаси перехват 177714 =1 запрещен
02 - =0 разрешен перехват 177716 =1 запрещен
03 - =0 YM2149 =1 AY8910 тип эмуляции PSG
перехват сделан 3х битный


2. DMA контроллер звука - реализован
177160 - регистр управления
регистр скорости чтения , режима интерпретации данных (8/16 моно стерео), повтора

//reg_dma_ctrl
00 - старт =1 старт
01 - =1 однократный запуск =0 циклический , при этом надо записать =0 в 3й бит
при циклическом запуске, запись 1цы даст останов после завершения цикла, с установкой в =1 бита3
02 - =1 принудительная остановка до завершения цикла
03 - на чтение =1 однократный запуск завершился, в начале сбрасывается на ноль, запись =1 не влияет на процесс
04 - =1 потоковое воспроизведение с подкачкой данных, актуально для IMA_ADPCM в этом режиме на стадии начала цикла не происходит сброса начальных кодов декодирования ADPCM

// 06-07-08 - скорость выдачи наружу
поддерживаемые скорости
0 - 44100

// 09-10-11 - режим интерпретации
// 09 - =0 моно =1 стерео
// 11 - =0 PCM =1 IMA_ADPCM
поддерживаемые режимы:
000-0 PCM 16 mono
100-4 IMA ADPCM DECODER mono
101-5 IMA ADPCM DECODER stereo


177162 - регистр адреса страницы с которой будем читать с дискретностью 10000 (4кБ)
177164 - старшая часть длины - 8бит
177166 - младшая часть длины - 16бит
177170 - номер текущей страницы воспроизведения

данные с DMA пойдут напрямую на микшер отдельным каналом

3. AY эмуляция
штатный перехват 177714 - реализован


4. AYх2 эмуляция (турбосаунд) - уже реализован
Прямая доступность регистров на шине, а именно доступны байтовые регистры
177172 - адрес AY1
177173 - данные AY1
177174 - адрес AY2
177175 - данные AY2

адреса и данные в прямом коде, инвертировать ничего не надо

X. Микшер
пока рождается концепция
- несколько каналов звука
- регулировка громкости сдвигом на/до 16 бит



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


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

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



По заявкам телезрителей родилась еще более новая версия расширенных видеорежимов
первая версия со строчным управлением мне кажется слишком сложной и не дающей никаких преимуществ

итак проект такой

177230 - регистр управления
177232 - регистр номера страницы начала отображения

177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах

теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов

длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов

растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128

количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192

длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном


типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)

регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти

общее количество возможных сочетаний видеорежимов получается 60шт


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


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

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



UART (RS-232 EIA-232 COM ком-порт)

адреса стандартные
177560 - регистр статуса приемника
177562 - регистр управления + регистр принятых данных
177564 - регистр статуса передатчика
177566 - регистр данных на передачу

177560 - регистр статуса приемника
бит 7 - флаг наличия данных: единица означает наличие принятых данных в регистре 177562
после чтения 177562 - флаг будет сброшен
регистр доступен на чтение
запись игнорируется, ошибки не взывает

177562
- по чтению - младший байт содержит принятые данные
- по записи - слово определяющее скорость, подробности ниже
дефолтное значение 32346(8) что соответствует стандартной скорости в 9600бод

177564 - регистр статуса передачика
бит 7 - флаг успешной передачи данных: единица означает что байт из регистра 177566 успешно передан в линию
после записи в 177566 - флаг будет сброшен тк начнется передача
регистр доступен на чтение
запись игнорируется, ошибки не взывает

177566 - регистр данных на передачу, используется младший байт, доступен на чтение и запись
после записи начинается передача в линию

Слово определяющее скорость - доступно только по записи
Прикрепленное изображение

те для переключения UART-a на скорость 2400бод мы записываем 64713(8) в регистр 177562

технически эти константы вычисляются так:
константа скорости = (65 000 000)/(бодовая скорость)
те в принципе можно сделать любую доступную скорость в пределах 16ти битного делителя.

дефолтное значение 15163(8) что соответствует стандартной скорости в 9600бод.

Техническая реализация на плате
порт реализован в двух режимах напряжений
TTL - 3.3V
EIA-232 (+-12V)
переключение режимов осуществляется перемычками JP2 и JP3
Прикрепленное изображение
положения перемычек подписаны - TTL и EIA232

соответственно для включения TTL надо JP2 и JP3 установить в положение 2-3
Прикрепленное изображение

для переключения в режим EIA232 надо JP2 и JP3 установить в положение 1-2
Прикрепленное изображение

также есть перемычка JP1 установка которой позволяет вывести +5В с БК на 9й пин порта
это может потребоваться для изготовления своих устройств питающихся от AZ


Старая таблица, актуальна только для прошивки #9
Прикрепленное изображение
Начиная с 10й прошивки RS232 переведен на тактирование от 65MHz



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


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

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



К расширенным видеорежимам добавились слои

теперь вот так:

177230 - регистр управления
177232 - регистр номера страницы начала отображения - верхняя страница
177240 - регистр номера страницы начала отображения - средняя страница под спрайты
177242 - регистр номера страницы начала отображения - нижняя страница - под фон177250 - регистр вертикального скролинга
177244 - регистр управления кадровыми прерываниями

177230, далее пойдут биты с описанием
2;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах

теперь подробно
режим цветовой интерпретации, значение от 0 до 7
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов

4 - 1 бит на цвет - 8 цветов - сборный "слоеный" режим
5 - 2 бита на цвет - 4 цвета - включены слои
6 - 4 бита на цвет - 16 цветов - включены слои
7 - 8 бит на цвет - 256 цветов - включены слои

пояснение к "слоеному" или "плановому" режиму 4
цвет формируется из 3х планов по 16кБ из которых считывается по 1 биту
номер цвета собирается так
старший бит [2] - из верхнего слоя (регистр 177232)
средний бит [1] - из среднего слоя (регистр 177240)
младший бит [0] - из нижнего слоя (регистр 177242)

данный режим интересен возможностью формировать текст читаемый сразу на VGA и на стандартном выходе
к примеру:
177232<-4 ая страница те 40000-77777 стандартный экран на БК11 и БК10
177240<-2000
177242<-2004

получается что если мы будем выводит основной текст по стандартному адресу 40000-77777
а цветовые аттрибуты в страницы 2000 и 2004 то у нас на VGA будет цветной текст
а на стандартном выходе - белый текст на черном фоне

этот подход удобен для создания универсального ПО с минимальными затратами



длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов

растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128

количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192

длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном


типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)

регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти

для слоев добавлены регистры 177240 - средний слой под спрайты
и 177242 под фон


общее количество возможных сочетаний видеорежимов получается 60шт


Концепция работы слоев

1. у нас три страницы с картинками
пусть первая - это нижний фон (адрес страницы 177242)
вторая - двигающиеся герои, факелы монстры и прочее (адрес страницы 177240)
третья - верхний фон (адрес 177232) который перекрывает объекты под ним - к пример колонна или дерево, за которое можно "зайти"

2. видеосистема складывает все три страницы

наивысший приоритет - верхний фон, те если там не =0 то идет перекрытие
далее вторая страница
и уже в самую последнюю очередь - нижний фон который перекрывает любой [не нулевого цвета] объект на странице выше

значение =0 это прозрачный цвет

3. слияние слоев работает в режимах от 4х цветов ибо в меньшем это просто лишено смысла


4. Для каждого слоя назначается своя палитра
4.1 для видеорежима с 2бит на цвет (пример 12205)
Верх - палитра 0
Середина - палитра 1
Низ - палитра 2
ну и так как палитры можно крутить, то можно назначить любой цвет в пределах 15ти бит
всего получается
В- 3й цвета (один прозрачный)
С- 3й цвета (один прозрачный)
Н- 4й цвета
итого 10 цветов, что круто ибо манипулировать-то надо всего 1й 16кБ страницей со спрайтами

в случае если будем делать мортал комбат - верхний фон можно пустить под одного героя
а середину под второго (ну а фон и останется фоном)
тогда решать задачу затирания спрайтов не придется совсем!

4.2 для 16ти цветных режимов тоже персональные палитры - но пул уже берем от типовой 256цветной палитры (см про палитры)
всего получается 15+15+16=46 цветов - КРУТО!
напомню формулу формирования цвета
цвет на выходе = VideoModeOffset + PaletteOffset + ColorIndex ;

VideoModeOffset - смещение видеорежима
cмещение - кол-во цветов (значения десятичные)
0 - 256
256- 4 х16
320- 16
336- 2
соответственно для 16ти цветов и слоев получаетяцвет на выходе = 0 + <номер слоя> + ColorIndex ;номер слоя:
верх -0
середина 1низ - 2

4.3 для 256цветов палитра очевидно едина ибо их хватит на все

4.4 режим монохрома в наложение не интересен, но тк код есть то я сделал его слоями
те В - старший бит ; С- cредний бит; H - младший бит цвета из 16ти цветной палитры
иначе говоря получился "плановый" видеорежим
к примеру код 12204 - это три страницы по 16кБ складываются в 8ми цветный 512х256 режим

Палитра - верхний кусок от 16ти цветной:
Прикрепленное изображение
те сборному коду 0 соответствует 8код цвета



примеры:

у нас установлен режим 4 цвета 256х256 (значение 12205 в регистре 177230 ) а палитра - пусть стандартная

итак верхняя страница задана в 177232
средняя в 177240
нижняя фоновая в 177242

читаем из верхней средней и нижней [далее В C Н] по два бита

В=11 - тк это не =0 то это перекрывающиее значение и оно идет на экран через трансляцию палитры

читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=00 - =0 и тут прозрачно - значит выводим то что на странице Н
Н=10 - код 10 идет на идет на экран через трансляцию палитры

читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=01 - !=0 дальше уже не идем и показваем спрайт из средней страниц
и код 01 идет на идет на экран через трансляцию палитры


читаем дальше
B=00 - =0 значит фон прозрачный - надо идти дальше
С=00 - =0 и тут прозрачно - значит выводим то что на странице Н
Н=00 - тк уже некуда просвечивать то этот код (00) идет на экран через трансляцию палитры

очевидно что коду 00 мы можем назначить любой из 32768 цветов равно как и другим кодам







--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3.2.2023, 4:33