Прошивка 00015 beta 5
фиксация глобальных изменений!
жирным новое (или измененное) в прошивке относительно 14й версии прошивки
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее
https://forum.maxiol.com/index.php?showtopic=5556изменена база палитр 256 цветов ( ее начало изменено на 32 градации серого тк в стандартной WEB-safe которая взята за базу, такого набора градаций серого почему-то нет)2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+ЛАТте можно спокойно переключать его в зависимости от программы не напрягаясь!
3. Сочетание АР2+РУС используется для нормализации палитры4. изменено - см п 16
5. полный вывод VGA уже из SDRAM, переключение страниц
6. перехват переключения палитр БК11М
- доступ к памяти палитр с шины, чтение+запись
исправлены ошибки перехвата при обращении к нечетным адресам
7. Генератор псевдослучайных чисел - технически это LFSR длиной 128бит, младшие 16 в регистре доступном программно.
сдвиг идет с частотой 65MHz как следствие полностью новое слово доступно будет каждый процессорный такт
8. загрузка ПЗУ в память полностью реализована
9. Реализовано распознавание новодела БК11М и подключение ПЗУ
10. COVOX
набор регистров доступных и по чтению и по записи
(по чтению регистры не отдают последнее значение но кому надо читать из регистра ковокса ?)177200 - 16bit левый канал
177202 - 16bit правый канал
177204 - 16bit моно, иначе говоря запись в этот регистр приводит к фактической одновременной записи в регистры 177200 и 177202
177206 - 8bit стерео/mono, иначе говоря запись в этот регистр приводит к фактической одновременной записи в
регистры 177200 и 177202 - в старший байт
режимы stereo/momo определяются по байтовой записи
те если писать слово в 177206 то это будет стерео
а если писать младший байт в 177206 то данные будут трактоваться как моно
запись в 177714 мультирежимная
ибо у нас есть 2 варианта ковокса
1. моно 8bit - запись в младший байт
2. стерео 8bit - МЛБ - левый СТБ-правый
переключать режимы через регистр 177212
соответственно запись в 177714
тоже приводит к фактической одновременной записи в 177200 и 177202
обеспечивая полную совместимость со старым софтом
Регистр управления звуком - 177212
биты:
00 - легаси перехват ковокса в 177714: 0=моно 1=стерео
01 - =0 разрешен легаси перехват 177714 =1 запрещен
02 - =0 разрешен перехват 177716 =1 запрещен
перехват спикера сделан 3х битный
03 - =0 YM2149 =1 AY8910 тип эмуляции PSG
11. DMA контроллер звука
177160 - регистр управления
регистр скорости чтения , режима интерпретации данных (8/16 моно стерео), повтора
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 пойдут напрямую на микшер отдельным каналом
OPL2 - экспериментальная опция в V15b4 и далее
177176 (младший байт) адрес
177177 ( старший данные)
также поддержана словная запись -те можно писать напрямую словами 12. Legacy AY через 177714
работает автоопределение источника звука - или ковокс или AY
13. Сделан UART - изменена базовая частота - теперь это не 130MHz а 65MHz
адреса стандартные
177560 - регистр статуса приемника
177562 - регистр управления + регистр принятых данных
177564 - регистр статуса передатчика
177566 - регистр данных на передачу
177560 - регистр статуса приемника
бит 7 - флаг наличия данных: единица означает наличие принятых данных в регистре 177562
после чтения 177562 - флаг будет сброшен
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177562
- по чтению - младший байт содержит принятые данные
- по записи - слово определяющее скорость, подробности ниже
дефолтное значение 32346(8) что соответствует стандартной скорости в 9600бод
177564 - регистр статуса передачика
бит 7 - флаг успешной передачи данных: единица означает что байт из регистра 177566 успешно передан в линию
после записи в 177566 - флаг будет сброшен тк начнется передача
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177566 - регистр данных на передачу, используется младший байт, доступен на чтение и запись
после записи начинается передача в линию
Слово определяющее скорость - доступно только по записи
детальное описание UART в AZБК 14. Сделан конструктор видеорежимов (редакция от 2024-01-09)теперь вот так:
177230 - регистр управления
177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
177244 - регистр вертикального скролинга слой 2
177246 - регистр вертикального скролинга слой 1
177250 - регистр вертикального скролинга слой 0
177252 - регистр гозизонтального скролинга слой 0
177254 - регистр гозизонтального скролинга слой 1
177256 - регистр гозизонтального скролинга слой 2
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 цветов - включены слои
подробное описание работы со слоями тутдлина строки в словах
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 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти
15. Добавлена эмуляция 2xAY
сложение каналов по форумуле
R=A1+A2+B1+B2
L=C1+C2+B1+B2
Прямая доступность регистров на шине, а именно доступны байтовые регистры
177172 - адрес AY1
177173 - данные AY1
177174 - адрес AY2
177175 - данные AY2
16. Доработки маппера памяти AZ
Правки от 2023-03-20
Концепция:
маппер 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М
Нажмите для просмотра прикрепленного файлаобращаю внимание на то, что физический адрес - словный
режим работы этой памяти устанавливается в регистре
177346128-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) окно
разбивка на окна соответствует размеру в 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М
Основное назначение регистров - возможность в любой процедуре поменять настройки памяти, что-то сделать и вернуть их обратно (тк штатными средствами узнать что записано в эти регистры невозможно)
17. RTC часы и энергонезависимая память
для работы с ними используется новый блок команд AZ
см
https://forum.maxiol.com/index.php?s=&showt...indpost&p=57017должны отвечать регистры
SOUND
177160-177176
177200-177212
AZ
177220-177226
видеоконтроллер
177230 - регистр управления
177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
177244 - регистр вертикального скролинга слой 2
177246 - регистр вертикального скролинга слой 1
177250 - регистр вертикального скролинга слой 0
177252 - регистр гозизонтального скролинга слой 0
177254 - регистр гозизонтального скролинга слой 1
177256 - регистр гозизонтального скролинга слой 2
маппер памяти
177300-352
177550 - генератор псевдослучайных чисел
177560-177566 - UART
После reset машина стартует автоматически и загружается со первого образа в ini-файле
18. При остановленном процессоре БКшки (КР1801ВМ) контроллер отображает логотип, а также при невозможности старта - ошибку с подсказками как ее можно устранить
19. Сделан блиттердетальное описание тут Блиттер (начиная с v15)
редакция от 2024-01-11Блиттер в мой реализации есть робот читающий набор команд и выполняющих их по окончанию отображения кадра в отличии от классического блиттера в амиге, где команды подаются в режиме реального времени
Примеры применения блиттера с исходниками вот ТУТизначальные ограничения:
1. блиттер оперирует только словами, иначе говоря минимальная дискретность по горизонтали - 2пикселя (в видеорежиме 256цветов) *все расчеты в блиттере ведутся словами.*
2.команда блиттера - 8 слов
3. чтение блока команд происходит по концу отрображения 767й строки (считая с 1й);
запуск блиттера происходит по началу 769й строки - те после отображения кадра и одновременно с иницированием кадрового прерывания. иначе говоря в кадровом прерывании можно смело менять команды, страницу команд, количество команд (кроме обнуления количества команд - оно приведет к асинхронному останову блиттера)
4. блиттер работает в плоском адресном пространстве со словами 16бит и адресом 24 бита
иначе говоря он видит всю память [расширенную - те 32МБ] сразу.
5. макс количество команд - 128
6. макс количество слов в команде - те обрабатываемое в пакете - 256*256=65536 cлов
7. хранение исходных (SRC) спрайтов строго линейное и кратное 32м словам
те спрайт должен начинаться с адреса кратному 100(8)
8. распроложение целевых данных (DST) прямоугольное - те строка + пропуск
9. максимальная шрина спрайта - 256 слов
10. максимальная строчная инкрементация - 256 слов
11. максимальное количество строк - 256
12. операции:
- заполнение константой
- копирование из SRC в DST (дискретность - слово)
- наложение SRC на DST и помещение результата в DST при SRC!=константа прозрачного цвета
(дискретность - байт)
- наложение SRC на DST и помещение результата в DST при SRC!=константа прозрачного цвета и DST==константа прозрачного цвета
(дискретность - байт)
- копиирование из прямоугольного DST в линейный SRC (сохранение фона)
(дискретность - слово)
что означает дискретность:
слово - те операция всегда пишет слово (2 байта)
байт - означает, что тут проверяется каждый байт на соответствие правил и пишутся только те байты которые выполнили условия
иначе говоря наложение спрайта на фон будет без дефектов - те оно попиксельное!
13. под блок команд блиттера выделяется страница (технически любая cвободная, просто команды читаются с начала указанной в регистре страницы)
иначе говоря набор команд можно быстро менять просто меняя номер страницы
14.После чтения строки команд в буфер ПЛИС, регистр номера страницы можно менять как угодно это сделано для того чтобы пока одна пачка команд выполняется - можно было в обработчике кадрового прерывания ее поменять на другую пачку ( по времени это разнесено - и кадровое прерывание возникает гарантированно позднее чтения )
15. чтение пачки команд производится в память ПЛИС при выполнении 3х условий - команда читать от VGA - количество команд не равно =0 - блиттер готов к выполнению (те он в статусе ожидания) иначе говоря если мы зафигачим 100 команд которые будут выполняться 5 кадров (к примеру) то чтение новой пачки не начнется пока вся пачка команд не выполнится
Управление блиттером осуществляется через два регистра
177270 - количество команд в блиттере, регистр сбрасывается в 0 по низкому B_HALT_L (системный сброс в БК)
177272 - номер страницы содержащей команды
запись 0 в 177270 вызывает полный асинхронный сброс/останов всех процессов блиттера
Код
РЕГИСТР УПРАВЛЕНИЯ БЛИТТЕРОМ (КОЛИЧЕСТВА КОМАНД)
АДРЕС = 177270
ФОРМАТ РЕГИСТРА
доступен по чтению и записи
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
│ │
╔╧═════════════════════╧╗
║ Количество команд ║
║ =0 выключен ║
╚═══════════════════════╝
РЕГИСТР СТРАНИЦЫ КОМАНД БЛИТТЕРА
АДРЕС = 177272
ФОРМАТ РЕГИСТРА
доступен по чтению и записи
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│15│14│13│12│11│10│09│08│07│06│05│04│03│02│01│00│
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
│ │
╔╧════════════════════════════════════╧╗
║ Номер страницы с командами блиттера ║
╚══════════════════════════════════════╝
далее в описании рассматриваем видеорежим разрешение 512х384 256цветов, 196кБ экран, квадратный пиксель как основное
команда блиттера cодержит 8 слов1 словостарший байт - старшая часть адреса SRC
младший байт - старшая часть адреса DST
2 слово - младшая часть адреса SRC
3 слово - младшая часть адреса DST
4 слово - команда
биты
0 = 1 для команды нужно чтение SRC
1 = 1 для команды нужно чтение DST
2 = не используется, резерв
3-4-5
номер команды
=0 заполнение константой CONST
=1 копирование SRC=>DST
=2 наложение SRC на DST =>DST при (при SRC!=прозрачный цвет SRC)
=3 наложение SRC на DST =>DST при (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST)
=4 копирование DST => SRC (сохранение фона)
в итоге получаются команды (в 8 системе)
= 0 заполнение константой
= 11 копирование SRC=>DST
= 21 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC)
= 33 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST)
= 42 копирование DST=>SRC
Пояснения - на примере команды заполнения константой: для нее не требуется установка битов чтения данных SRC или DST, тк запись данных (в данном случае константы идет безусловно). если мы поставим эти биты - ничего не произойдет для пользователя - лишь скорость выполнения команды уменьшится тк блиттер потратит время на чтение.
= 11 копирование SRC=>DST
тут чтобы положить данные в DST мы должны из считать из SRC - cоответственно проставляем бит чтения SRC, читать DST нам тут не надо тк нам пофиг - запись безусловная
= 21 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) тут аналогично - нужен только SRC для проверки условия
= 33 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) и (при DST=прозрачный цвет DST) - тут две проверки - и нам нужно считать и SRC и DST - соответственно установлены оба бита чтения зачем чтение вынесено в отдельные биты ? тупо оптимизация аппаратной части блиттера - экономия LC (бит проще проверять чем несколько битов)
далее в примере будем рассматривать спрайт шириной 8 пикселей и высотой тоже 8 пикселей
количество слов получается (8/2)*8 = 32.
5 слово (используется младший байт)
длина спрайта в словах по горизонтали
иначе говоря в копировании 1в1 значение должно быть 1
(речь о копировании сплошного блока целиком)
а если спрайт по горизонтали 8. пикселей то указываем 3. тк копирование идет словами по 2 пикселя
6 слово - (используется младший байт) инкрементация адреса назначения после копирования строки спрайта
иначе говоря в копировании 1в1 значение должно быть 1
а если мы хотим вывести спрайт шриной 8. пикселей в строку длиной 256. слов
то мы должны указать инкрементацию - 256.-3.=253.
7 слово - (используется младший байт) количество строк
8 слово -младший байт константа заполнения или константа прозрачного цвета SRC
старший байт - константа прозрачного цвета DST
Для формирования команды можно использовать
калькулятор команд блиттераВ архиве обновленное - надо прошивать ВСЕ
Нажмите для просмотра прикрепленного файла
azboot.ROM - положить в ROM
AZLIB00.ROM - положить в ROM
AZLIB01.ROM - положить в ROM
AZLIB02.ROM - положить в ROM
AZLIB03.ROM - положить в ROM
SETUP.ROM - положить в ROM
AZBK_00015b5.hex
AZBK_00015b5.pof
AZLOGO.RAW - положить в ROM
Добавлена новая секция ini файла
[LOGO]
L=0:/rom/AZLOGO.RAWУстановку и настройку сети теперь можно сделать как и в AZ.INI так и в SETUP-е
пример
Код
[network]
MAC=002335220510
DHCPNAME=AZNET-BK10.home.maxiol.com
DHCP=ON
TIMEZONE=420
таймзона - в минутах
Setup сделан в интуитивно понятном стиле
Добавлю пояснения по расширенным опциям:
Для БК11М
1. для работы дискового бейсика 11М - включаем опцию "ROM 11emulation"
также эта опция позволит работать на БК11М вообще без каких-либо ПЗУ
2. V-sync таймер это расширенный таймер через 177346 (см выше)
Для БК10
в зависимости от доработок будут доступны опции
- FastRAM - это режим 10ки но с быстрой нижней памятю
- BK11 emulation - режим эмуляции БК11М
- внешняя PS/2 клавиатура
Горячие кнопки:
после появления надписи "Press KT to run Setup"
доступны следующие горячие кнопки
1. КТ - запуск SETUP-а, это не мгновенно, не беспокойтесь!
2. Пробел - выход в монитор (БК10 или БК11М - в зависимости от БК и ее режима)
3. Цифры от 0 до 9 - загрузка с выбранного диска
/также напоминаю, что выбор дефолтного бутового диска в SETUP-е/
Рабочие комплектыANDOS + ПРИНЦ + демки блиттера
Нажмите для просмотра прикрепленного файлана БК10 с 3MHz запускать start2.exe (тк у БК не хватает быстродействия отобразить заставку пришлось внести коррективы)
Про доработку БК-0010(01) читать тут