Вход

Просмотр полной версии : AZ для БК-0010(01) и БК-0011М



Страницы : 1 [2]

Ратмир
13.12.2022, 09:56
Плату не разьединял. У него в остатках 5900шт. Не ужели можно столько выпаять да и смысл?
Ок.перехожу в телеграм

SuperMax
13.12.2022, 09:57
Макс. Если заменю контроллер, есть шанс восстановить работоспособность?
начнем с диагностики
он греется ?
далее надо проверить корректность соединения плат в "бутерброде" если они разъединялись
далее проверить напряжения 3.3В на стабилизаторах на верхней плате

потом попробовать прошить отдельно верхнюю плату

SuperMax
14.12.2022, 10:22
Обещанная эмуляция БК11М на БК10 заработала
подробности тут
https://t.me/pdp11_az/12856

SuperMax
19.12.2022, 19:18
Прошивка 00014beta
продолжение глобальных изменений: это промежуточная прошивка, с большей частью функционала который планировалось реализовать

жирным новое (или измененное) в прошивке

функционал:

1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556

2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!

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 пойдут напрямую на микшер отдельным каналом

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. Сделан конструктор видеорежимов

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

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 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти

Важно! видеорежимы в состоянии "beta" те я не провел полного тестирования

15. Добавлена эмуляция 2xAY
сложение каналов по форумуле
R=A1+A2+B1+B2
L=C1+C2+B1+B2

Прямая доступность регистров на шине, а именно доступны байтовые регистры
177172 - адрес AY1
177173 - данные AY1
177174 - адрес AY2
177175 - данные AY2

16. Доработки маппера памяти AZ

Правки от 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М
[attachmentid=9946]
обращаю внимание на то, что физический адрес - словный
режим работы этой памяти устанавливается в регистре 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│40 000..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-177174
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
177240 - регистр номера страницы начала отображения - средняя страница под спрайты
177242 - регистр номера страницы начала отображения - нижняя страница - под фон

маппер памяти
177300-352

177550 - генератор псевдослучайных чисел
177560-177566 - UART

После reset машина стартует автоматически и загружается со первого образа в ini-файле

В архиве обновленное - надо прошивать ВСЕ
azboot.ROM
AZLIB00.ROM
AZLIB01.ROM
AZLIB02.ROM
AZ337.ROM
AZBK_00014b.hex - новая
AZBK_00014b.pof - новая

Контроллер AZ BK: Прошивка 00014b (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=57159)

Обращаю внимание на необходимость подключить новые ПЗУ в секции ROM

пример правильной для данной версии прошивки секции ROM


[ROM]
R00=0:/rom/AZBOOT.ROM
R01=0:/rom/AZLIB00.ROM
R02=0:/rom/AZLIB01.ROM
R03=0:/rom/AZLIB02.ROM
R08=0:/rom/AZ337.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
R26=0:/rom/11m_330.rom
R28=0:/rom/10_017.rom
R30=0:/rom/10_018.rom
R32=0:/rom/10_019.rom
R34=0:/rom/10_106.rom
R36=0:/rom/10_107.rom
R38=0:/rom/10_108.rom



Также обращаю внимание на необходимость установки часового пояса в секции NETWORK
пример


[network]
MAC=002335220510
DHCPNAME=AZNET-BK10.home.maxiol.com
DHCP=ON
TIMEZONE=420

таймзона - в минутах


Рабочий комплект
ANDOS + ПРИНЦ
на БК10 запускать start2.exe (тк у БК не хватает быстродействия отобразить заставку пришлось внести коррективы)


Основная особенность этого комплекта это включение эмуляции БК11М на БК10, для запуска на обычной БК10 не пригодна.
На БК-11М работает штатно

Про доработку БК-0010(01) читать тут (https://forum.maxiol.com/index.php?showtopic=5601)

SuperMax
20.03.2023, 10:34
Прошивка 00014

фиксация глобальных изменений!

жирным новое (или измененное) в прошивке относительно 13й версии прошивки

функционал:

1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556

2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!

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 пойдут напрямую на микшер отдельным каналом

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. Сделан конструктор видеорежимов

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

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 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти

Важно! видеорежимы в состоянии "beta" те я не провел полного тестирования

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М
[attachmentid=9946]
обращаю внимание на то, что физический адрес - словный
режим работы этой памяти устанавливается в регистре 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│40 000..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-177174
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
177240 - регистр номера страницы начала отображения - средняя страница под спрайты
177242 - регистр номера страницы начала отображения - нижняя страница - под фон

маппер памяти
177300-352

177550 - генератор псевдослучайных чисел
177560-177566 - UART

После reset машина стартует автоматически и загружается со первого образа в ini-файле

В архиве обновленное - надо прошивать ВСЕ
azboot.ROM
AZLIB00.ROM
AZLIB01.ROM
AZLIB02.ROM
AZLIB03.ROM
SETUP.ROM
AZBK_00014.hex - новая
AZBK_00014.pof - новая

Контроллер AZ BK: Прошивка 00014 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=57442)

Обращаю внимание на необходимость подключить новые ПЗУ в секции ROM

пример правильной для данной версии прошивки секции ROM


[ROM]
R00=0:/rom/AZBOOT.ROM
R01=0:/rom/AZLIB00.ROM
R02=0:/rom/AZLIB01.ROM
R03=0:/rom/AZLIB02.ROM
R04=0:/rom/AZLIB03.ROM
R08=0:/rom/AZ337.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
R26=0:/rom/11m_330.rom
R28=0:/rom/10_017.rom
R30=0:/rom/10_018.rom
R32=0:/rom/10_019.rom
R34=0:/rom/10_106.rom
R36=0:/rom/10_107.rom
R38=0:/rom/10_108.rom
R56=0:/rom/SETUP.rom




Установку и настройку сети теперь можно сделать как и в 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) читать тут (https://forum.maxiol.com/index.php?showtopic=5601)

a153
29.10.2023, 04:51
177560-177566 - UART

Насколько помню, регистры БКшного ИРПС размещаются с адреса 176560.
В исходниках Бейсик-Вильнюс константа IRPSRG==176560.

И в официальной документации тоже 176560:
https://gid.pdp-11.ru/books/00001-01.32.03.html#_Toc381877467

SuperMax
09.11.2023, 14:55
Мне тут были заданны вопросы по поводу формата и качества звука формируемого при помощи AZБК

итак, все детально

1. через единый выход вы получите:
- звук со спикера
- звук с ковокса (stereo и mono, есть и 8 и 16 бит)
- звук с legacy AY причем возможно выбирать какое звучание вам ближе: YM2149 или AY8910
- звук с 2x AY ( и тоже возможно выбирать какое звучание вам ближе: YM2149 или AY8910 )
- звук с DMA контроллера IMA ADPCM - это 16 бит х 44100

2. теперь про качество
- звуковой тракт усилителя целиком питается от отдельного преобразователья +12 -12В (иначе говоря обеспечена полная развязка питания)
- используется профессиональный (можно сказать аудиофильский ЦАП) TDA1387, питатся от отдельного стабилизатора
- частота дискретизации на ЦАП - NTSC/34 => те в районе 100кГц, иначе говоря все преобразования происходят наиболее качественно, на уровне современного высококачественного звука

На основании вышеизложенного, могу с чистой совестью сказать, что AZБК это самый качественный и самый мультиформатный вывод звука из БК, да и впрочем относительно других платформ на данный момент тоже.

SuperMax
17.12.2023, 11:33
Итак в AZБК начал работать блиттер, он сейчас в разработке

смотреть тут
https://t.me/pdp11_az/15708/16267

читать тут
https://forum.maxiol.com/index.php?s=&showtopic=5556&view=findpost&p=58014

SuperMax
26.12.2023, 12:53
Блиттер в стадии полного тестирования, соответственно в канале доступна прошивка и диск с тестами
https://t.me/pdp11_az/14373/16541

На форуме выкладываю исходники и видео работы блиттера
https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282

SuperMax
28.12.2023, 13:04
Разработал калькулятор команд блиттера
http://master.pdp-11.ru/blitter_calculator/blitter_command_calculator2.html

SuperMax
29.12.2023, 22:11
Допилил конвертер для подготовки картинок

и получилось вот так

https://www.youtube.com/watch?v=FOfhb4NH9vE

подкладывание под фон вообще интересно

https://www.youtube.com/watch?v=HggJEBMf1lI

работа с блиттером (примеры с исходниками + видео )
https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282

SuperMax
09.01.2024, 15:38
Прикрутил горизонтальный скроллинг
а также сделал раздельный скроллинг по всем слоям - те какждый слой можно двигать как угодно - и по горизонтали и по вертикали

походу по видеосистеме сделано все что было изначально запланировано

SuperMax
06.02.2024, 10:04
Прошивка 00015 beta 5

фиксация глобальных изменений!

Детально тут (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=58450)

функционал:

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М
[attachmentid=9946]
обращаю внимание на то, что физический адрес - словный
режим работы этой памяти устанавливается в регистре 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│40 000..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

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


В архиве обновленное - надо прошивать ВСЕ

Детально тут (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=58450)


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) читать тут (https://forum.maxiol.com/index.php?showtopic=5601)

gid
06.02.2024, 16:10
Однако, что-то вы там перемудрили или недоописали.
С новыми ромами из прошивки 00015 beta 5, в эмуляторе конфигурация AZBK у меня просто перестала запускаться. После звукового сигнала вместо экрана с диагностическими данными показывает синие горизонтальные и вертикальные полоски а потом мусор и зависает.
Я сегодня всё свободное время побеждал блиттер, и таки победил. Наконец он работает, вроде бы. Устал и поэтому разбираться с новыми ромами пока неохота.

А не. Это я про регистры OPL2 забыл. Всё нормально.

SuperMax
07.02.2024, 05:35
Хочу обратить внимание на тему
Программирование под AZБК, методики использования возможностей AZБК (https://forum.maxiol.com/index.php?showtopic=5617)
тут я выкладываю методики, исходники с видео

соответственно можно и нужно задавать вопросы как пользоваться той или иной возможностью AZБК

на данный момент уже описано

- Работа с палитрами (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58147)
- Работа со палитрами (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58157)
- Модели памяти разных конфигураций БКшек доступных в AZБК (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58159)
- Работа с блиттером (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282)
- Подготовка графической информации для использования на БК (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58310)
- Работа с расширенной графикой напрямую - 256ти цветные видеорежимы (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58449)

SuperMax
17.02.2024, 11:15
Прошивка 00015 beta 7


Прошивка 00015 beta 7 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=58488)

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


документация на блиттер (https://forum.maxiol.com/index.php?s=&showtopic=5556&view=findpost&p=58014)


примеры работы с блиттером (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282)

SuperMax
09.05.2024, 22:05
Прошивка 00015 beta 8


Прошивка 00015 beta 8 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=58742)

в прошивке переработано

A. блиттер:
изменена логика работы бит 15
бит занятости блиттера - он установлен в =1 всегда когда блиттер занят чем-либо: читает команды в буфер или уже выполняет команды

добавлен бит 9
бит фиксации пачки команд, =1 означает, что блиттер читает пачку команд в буфер и сейчас ничего с командами делать ничего нельзя. данный бит предназначен для организации конвейерной обработки пакетов команд;

изменены слова в команде - теперь

5 слово
младший байт
длина спрайта в словах по горизонтали
иначе говоря в копировании 1в1 значение должно быть 1
(речь о копировании сплошного блока целиком)
а если спрайт по горизонтали 8. пикселей то указываем 3. тк копирование идет словами по 2 пикселя

старший байт
количество строк (было в 7м слове)


7 слово целиком отдано как координата Y
Y координата для видеорежима 256 слов в строке
иначе говоря это часть базового адреса для удобства
addr_mem_dst<=addr_dst+{spr_Yadd,8'd0};


добавлен бит NOP для команды
4 слово - команда
биты
2 = 1 флаг NOP - те наличие этого флага вызывает переход к следующей команде
те просто установить его на команде и она будет пропущена

B. видеоконтроллер
- добавлено управление синхронизацией которая появилась в 15b7
регистр 177230
бит 11 - синхрониация отображаемых страниц, =1 включена
данный бит включает синхронизацию отображаемых страниц с отображением кадра
суть в том, что если мы к примеру поменяем значение в регистре 177232 - те установим новую отображаемую страницу, то при отключенной синхронизации, изменения будут приняты немедленно - вне зависимости от того что сейчас отображается на экране, а именно если сейчас идет отображение кадра то начиная со следующей строки будет отображаться новая страница.
если же явно включить синхронизацию =1 то страница поменяется только когда будет отображаться новый кадр. по-умолчанию синхронизация выключена.


C. ROM старта
fix ошибочного определения опций (доработок)




документация на блиттер (https://forum.maxiol.com/index.php?s=&showtopic=5556&view=findpost&p=58014)


примеры работы с блиттером (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282)

SuperMax
06.06.2024, 06:22
Прошивка 00015 beta 9


Прошивка 00015 beta 9 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=58788)

в прошивке переработано

A. блиттер:

добавлена команда 51
предназначена для заливки константой по контуру спрайта, данный способ отметить пересечение или попадание было характерным для игр 80х годов
к примеру тут https://www.youtube.com/watch?v=LtetK6-x6bs&t=146s
герой засвечивается белым во время столкновения с шерифом

51 наложение SRC на DST =>DST (при SRC!=прозрачный цвет SRC) тут аналогично - нужен только SRC для проверки условия
важно - константа заполнения в младшем байте, а константа прозрачного цвета SRC в старшем
(не как в 21й команде где константа прозрачного цвета SRC в младшем байте)


документация на блиттер (https://forum.maxiol.com/index.php?s=&showtopic=5556&view=findpost&p=58014)

примеры работы с блиттером (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282)

SuperMax
23.11.2024, 12:38
Весной было время и я задумался о сетевом API для AZ*

часть 1. Таблица рекордов Hall of Fame
в общих штрихах

серверная часть: сервер БД
WEB интерфейс
- регистрация пользователя логин-пароль (дабы таблицы рекордов были персонализированными)
- регистрация игры и получение уникального ID игры
- просмотр рекордов/статистики игр итд итп
API для AZ*
- авторизация игры
- авторизация пользователя
- добавление рекорда

клиентская часть на AZ*
- авторизация игры
- авторизация пользователя
- добавление рекорда


Сайт в разработке - https://hof.maxiol.com/

API
https://forum.maxiol.com/index.php?s=&showtopic=5632&view=findpost&p=58645


Концептуально проект мультиплатформенный - и планируется его поддержка на MSX в Carnivore2+
Соответственно сразу введено понятие платформы и реализации данной игры на данной платформе

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

так как эта игра это таки дизсам, то я все еще предпочту какой-то иной вариант с натуральным исходником игры на ассемблере под RT11

почему под RT11? цель чтобы она нормально работала и на БК и на УКНЦ и на ДВК
те пример был понятен всем разработчикам

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

SuperMax
02.12.2024, 14:07
Статус по HOF: см https://forum.maxiol.com/index.php?act=ST&f=121&t=5642&st=0#entry59397
в "тетрис" имплементировано API HOF
успешно работает
- аутентификация игры
- аутентификация пользователя
- регистрация пользователя
- регистрация игры

остается
- вывод таблицы рекордов с сервера
- регистрация ачивки

прошивки будут выпущены под все AZ
собственно потому и демо-игра сделана под RT11 дабы было понятно и просто всем кто пишет под PDP-11


далее анонсирую сетевой драйвер для монтирования дисков с архива
(сам движок готов но нужна большая и красивая обвязка)
https://mirrors.pdp-11.ru/

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

SuperMax
04.12.2024, 05:35
Демонстрация работы сетевого функционала "Hall of Fame" на серии контроллеров AZ, в данном случае используется дисассемблированная версия игры тетрис (точнее пентикс или что-то подобное) в которую интегрировано API Hall of Fame. В данном случае игра общается с сервером, регистрируется, проверяет возможность логона пользователем и если пользователь не найден - предлагает быструю регистрацию. Далее показан процесс регистрации рекорда и получение таблицы рекордов с сервера.


https://www.youtube.com/watch?v=uIXB8GznP8Y

Канал в телеграм
https://t.me/pdp11_az/

SuperMax
28.12.2024, 05:46
Демонстрация подключения и работы с сетевым диском в AZБК.
Данный функционал будет реализован во всей линейке контроллеров AZ и позволит использовать репозиторий софта на https://mirrors.pdp-11.ru/

https://youtu.be/ot622Ptu8aU

SuperMax
04.01.2025, 20:32
Статус проекта сетевых дисков для AZ*


проект сетевых дисков "получил время" на разработку
и соответственно я хорошо продвинулся в этом направлении
прямо сейчас уже работает демон обслуживающий монтирование R/O любых образов дисков из архива https://mirrors.pdp-11.ru/
максимальное количество одновременно открытых файлов для работы - 20тысяч
демон способен обслужить до 5k запросов в секунду
полный набор команд демона, я еще не реализовал и не прикрутил средства борьбы с DDOS [у меня есть опыт и готовые модули для этого тоже есть]

теперь можно очертить проект сетевых дисков более четко:
1. диски из архива можно монтировать прямо при помощи API
2. максимальная длина пути - 384 символа (самый длинный путь в архиве сейчас 366, соответственно точно хватит )
3. все диски из архива монтируются только R/O режиме
4. пользователи смогут заводить свои персональные зоны с дисками которые можно будет монтировать в монопольном RW режиме (он будет по-умолчанию)
иначе говоря это будут "персональные облака типа one drive" [TODO]
5. для авторизации будет использовать функционал HOF - иначе говоря это будет единая учетка и для рекордов и для своих облачных дисков
6. ограничений на количество ваших AZ контроллеров работающих под одной учеткой не будет.
7. будет реализована полностью сетевая загрузка с сетевых дисков - иначе говоря можно будет вообще не хранить свои образа на карточке [TODO]


https://forum.maxiol.com/index.php?act=ST&f=121&t=5632&st=0#entry58589

SuperMax
06.01.2025, 10:51
Статус проекта сетевых дисков для AZ*

1. будет 4 пространства сетевых дисков
N:/ - это архив в текущем виде - те все что угодно можно монтировать
R:/ репозиторий - буду формировать внятный набор дисков - прошу коллег подключаться к этому процессу
P:/ - персональное облако, будет доступно и на запись
но доступ только для себя
S:/ - shared - облако для возможности делится с кем-то дисками и доступом к ним
досутп будет управляемый

————-
по времени реализации
N: и R: - будут сейчас
P: и S: - позднее тк это надо дописать авторизацию и прочее в демоне
ибо сейчас он просто сетевой сервер

SuperMax
11.01.2025, 14:36
Прошивка 00017

Прошивка 00017 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=59529)

в прошивке переработано

в прошивке переработано/добавлено

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

2. работа сети
- сделано корректное отображение и сохранение дат/времени создания файлов втч и внутри образов RT11 c учетом часового пояса (физически время в контроллере считается GMT но учитывается коррекция часового пояса для WEBDAV)
- сделано управляемое TCP window для более оптимальной работы сервисов
- добавлена поддержка сервисов HOF
- добавлен функционал сетевых дисков
расширение функционала монтирования дисков см команды первый блок
команды 011 003 004 014
полноценная поддержка реализована утилитами
пример утилиты AZSMNT - просмотр назначений дисков втч. и сетевых
пример утилиты - AZDIR - просмотр директории локального диска
(сетевые директории в V17 просматривать пока нельзя)
пример утилиты AZMNT
пример утилиты AZUMNT

Сетевые пространства имен получили буквенные наименования
D5=0:/disks/rt11bk.DSK - это локальный диск, так как имя диска 0:
D4=N:/RT11BK.DSK - это сетевой диск, так как имя диска N:

Поддерживаемые в V17 пространства имен:
N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11-11m/so...collection/IMG/

надо указать
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG

Указать можно как и утилите монтирования, но и в самом AZ.INI

Важно! регистр имеет значение
есть поддежка русских букв КОИ7/КОИ8

Второе реализованное пространство в V17 имен это R: - репозиторий
это будет репозиторий избранного софта

Ограничения:
- максимальная длина пути - 384 символа (самый длинный путь в архиве сейчас 366, соответственно точно хватит )
- все диски из архива (пространство имен N:/) монтируются только R/O режиме
- все диски из репозитория (пространство имен R:/) монтируются только R/O режиме

3. команды
командный режим реализован через HTTP интерфейс
добавлены две команды
CMD.REBOOT - вызывает перезапуска AZБК
CMD.SCREENSHOT - вызывает формирование скриншота на основании дефолтных настроек экрана
результатом команды является файл-скриншота
распаковать его можно на сайте
https://master.pdp-11.ru/screen_unpack/



Прошивка 00017 (https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=59611)

SuperMax
11.01.2025, 20:44
Сетевое API - AZSERVER
редакция от 2025-01-11


Концепция сетевых дисков:
1. Технически это блочный интерфейс к любому файлу расположенному в пространстве имен.
2. На данный момент поддержаны 2 пространства имен N:\ и R:\
3. Пространство N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11-11m/so...collection/IMG/

надо указать следующее имя файла
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG
4. Форматы запросов и ответов (упакованные структуры) указаны ниже.


Лицензирование
В связи с тем, что сетевое API создается в расчете на все ретроплатформы, API является открытым решением, единственным условием использования которого в своих решениях является обязательное указание
MAXIOL Landisk technology ®
это должно быть указано и в документации на Ваше решение и при использовании данной функции на стороне ретроплатформы.


Данные для подключения:
DNS name - landisk.maxiol.com
TCP Port - 34162

Структуры


// структура пакета запроса
typedef __packed struct landisk_reqest
{
unsigned int num_block; // номер блока (32 бита)
unsigned short int command; // команда
unsigned char reserved[32]; // зарезервировано
unsigned char data[512]; // данные - если они отправляются
char path[386]; // путь до диска
unsigned short int crc; // CRC команды
} landisk_reqest_t;


при открытии файла блок данных (data) рассматривается как пакет информации


// структура пакета открытия файла, информационные параметры
typedef __packed struct landisk_reqest_status
{
unsigned long timestamp; // локальное время контроллера (unix-time)
unsigned long uptime; // аптайм в секундах
unsigned long ip_addr; // локальный ip адрес контроллера
unsigned long dns_srv1; // ip адреса DNS-серверов
unsigned long dns_srv2;
unsigned short int tzone; // таймзона в минутах
unsigned short int platform; // номер платформы
unsigned short int controller; // тип контроллера
unsigned short int version; // версия прошивки контроллера
char build[32]; // дата билда прошивки контроллера
char url[64]; // URL производителя контроллера
} landisk_reqest_status_t;

пакет информации настоятельно рекомендуется заполнять полностью

// номер платформы
1 - PDP-11 - БК 10/11M
2 - PDP-11 - остальные - те ДВК Э60 УКНЦ оригинальные машины итд
3 - MSX

если вашей платформы нет в списке - пишите мне

// тип контроллера
1 - AZБК
2 - AZ - для всех остальных PDP-11 машин
3 - Carnivore2+

для добавления в список Вашего контроллера - пишите мне.




// команды
#define LANDISK_CMD_OPEN 1 // в ответ успешность/ошибка, и если успешно - размер диска
#define LANDISK_CMD_READ 2 // чтение блока
#define LANDISK_CMD_WRITE 3 // запись блока
#define LANDISK_CMD_CLOSE 4 // закрытие файла
#define LANDISK_CMD_OPENDIR 5 // открыть оглавление по указанному пути
#define LANDISK_CMD_READDIR 6 // прочитать одну запись оглавления в буфер
#define LANDISK_CMD_SEARCH_REQ 7 // послать запрос поиска
#define LANDISK_CMD_READ_SREQ 8 // прочитать одну запись результата поиска в буфер




// структура пакета ответа с данными
typedef __packed struct landisk_answer
{
unsigned short int result; // результат
unsigned char data[512]; // принятые данные
unsigned short int crc; // CRC ответа
} landisk_answer_t;





// структура пакета ответа статуса файла
typedef __packed struct landisk_answer_status
{
unsigned char fattr; // File attribute
unsigned short int fdate; // Fat date
unsigned short int ftime; // Fat time
unsigned int fsize; // File size
} landisk_answer_status_t;

это стандартный набор информации о файле-образе в FATформате.




// ответы
#define LANDISK_ANS_OK 0x0000 // команда выполнена успешно
#define LANDISK_ANS_ERROR 0x0001 // флаг ошибки, устанавливается при любой ошибке
#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа
#define LANDISK_ANS_NEED_REG 0x0004 // нет доступа - нужна регистрация
#define LANDISK_ANS_RO_ONLY 0x0008 // нет доступа на запись- данный диск только для чтения
#define LANDISK_ANS_NOT_EXISTS 0x0010 // нет данного образа - неверный путь до файла образа или директории


Для расчета CRC используется ф-я
[attachmentid=10855]


Стратегия работы
1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN)
при запросе на открытие надо указать блок параметров (landisk_reqest_status_t)
в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t
2. далее можно посылать команды чтения
3. на данный момент поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE
4. В конце работы желательно (но не обязательно) послать команды закрытия дисков.

Ограничения:
1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время)
2. не более 10ти "висящих" соединений на IP.


ps: актуальную версию смотрите тут https://forum.maxiol.com/index.php?s=&showtopic=5632&view=findpost&p=59531

SuperMax
19.01.2025, 18:08
Программирование для AZБК (https://forum.maxiol.com/index.php?showtopic=5617)

В связи с возникающими вопросами об использовании возможностей AZБК была создана вот эта тема:
Программирование для AZБК (https://forum.maxiol.com/index.php?showtopic=5617)

нашел немного времени и восстановил стенд для записи видео с VGA и обновил видео с примерами
Работа с расширенной графикой напрямую - 256ти цветные видеорежимы: работа с регистрами сдвига (скрола) (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58449)
в этой теме я выложил перепакованное качественно видео с примерами работы с графикой напрямую.

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

https://www.youtube.com/watch?v=302X33HZP8s

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

https://www.youtube.com/watch?v=3yyNwyNJ2A8

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

https://www.youtube.com/watch?v=c129EnGw5_A


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

https://www.youtube.com/watch?v=qklXrmmx8mw

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

https://www.youtube.com/watch?v=GI7IZwhudHg

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

https://www.youtube.com/watch?v=EKcauDV2vX4

№7. Сделаем тоже что мы делали с помощью блиттера ранее - см пример (4. Копирование спрайта с восстановлением фона (команды 11 21 и 42)
далее по таймеру будем крутить рулон по горизонтали и вертикали). Визуально шарик движется поверх фона, технически у нас фон на нижнем слое, а шарик на верхнем. Перемещение шарика сделано при помощи регистров скролла по вертикали и по горизонтали. Это хороший пример оптимизации. Теперь мы еще добавим эффект вращения шарика - переключая страницы памяти. Каждый кадр (60fps ) - новое движения шарика и новая фаза его поворота.

https://www.youtube.com/watch?v=uSRcMzKGsIk

SuperMax
20.01.2025, 11:19
Программирование для AZБК (https://forum.maxiol.com/index.php?showtopic=5617)

Сейчас рассмотрим примеры использования блиттера:
Работа с блиттером (https://forum.maxiol.com/index.php?s=&showtopic=5617&view=findpost&p=58282)

в этой теме я выложил перепакованное качественно видео с примерами работы с графикой напрямую.

№0.Заполнение константой - команда 0.
заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы. Каждый прямоугольник рисуется во время гашения экрана (по VSYNC ). Скорость вывода прямоугольников соответствует частоте кадров - 60Hz.


https://www.youtube.com/watch?v=UZeg4Y7PJXk

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


https://www.youtube.com/watch?v=5jJV1t22PxQ

№2. Копирование спрайта c наложением по SRC - команда 21.
производится копирование спрайта хранящегося линейно в позицию в экране с наложением. Наложение идет только по контуру самого спрайта. Коррекция палитры не проводилась, соответственно изображение не такое красивое как могло бы быть. В дальнейших примерах это будет исправлено и показано как это делать.


https://www.youtube.com/watch?v=l9CGig1xeuo


№3. Копирование спрайта безусловное, с анимацией и движением (команды 0 и 11)
сначала тут идет отчистка экрана при помощи ручного запуска блиттера, затем по таймеру VSYNC идет отрисовка спрайта.


https://www.youtube.com/watch?v=nCDjwCS_fcw

№4. Копирование спрайта с восстановлением фона - выполняется пакет команд 11 21 и 42:
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик. Тут уже заметна реальная скорость блиттера - 3я команда по отрисовке немного не успевает выполнится за время гашения экрана и в верхних строках экрана шарик отрисован не весь - он еще не успел отрисоваться.


https://www.youtube.com/watch?v=iz5KS_uauXU

№5. Подкладывание "под фон" (команды 11 33 и 42). Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Пример интересен простотой создания красивого эффекта и возможностью использовать иной код прозрачности.
(напомню - код прозрачности в схеме наложения слоев экрана всегда 0. )


https://www.youtube.com/watch?v=QQiRVQRLySs

№6. Подкладывание под фон (команды 11 33 и 42) + вращение. Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Вращение реализуется переключением спрайта который "подкладывается".


https://www.youtube.com/watch?v=iF1aCJYMdOY


№7. Подкладывание под фон (команды 11 33 и 42) + дрожание экрана - горизонтальный и вертикальные скроллинги. Это усложнение примера 4, тут тоже
сначала фон сохраняется в память, затем отрисовывается шарик, в следющей итерации фон восстанавливается, вычисляется новая позиция шарика, с нее сохраняется фон в память и отрисовывается шарик.
Отличие в математике наложения - тут один из кодов цвета фона объявлен как прозрачный и шарик накладывается только на него, остальные коды являются непрозрачными и наложения спрайта не происходит. Эффект дрожжания экрана реализуется при помощи регистров вертикального и горизонтального скроллинга.


https://www.youtube.com/watch?v=m8WZivzx5lE

№8 Заполнение константой - команда 0, выжимаем максимальную скорость!
Это усложнение примера 0 -заполнение экрана разноцветными прямоугольниками - проверка работы команды копирования константы; Основное отличие от примера 0 команды блиттера выполняются не по кадровому таймеру, а в ручном конвеерном запуске. Как следствие получаем максимальную скорость вывода прямоугольников.



https://www.youtube.com/watch?v=5ieA__Z5HRw

№9 Применение команды 51 - подкладывание под фон (команды 11 33 и 42) + 51ая команда при столкновении с границами экрана. 51ая команда это заполнение константой по контуру спрайта, удобно для отображения столкновений или попаданий в какой-либо объект. В старых играх часто попадание так отмечалось.


https://www.youtube.com/watch?v=CTr25IZp7y0

№10. Подкладывание под фон (команды 11 33 и 42), но с применением координаты Y. Это технический пример использования в команде не адресного смещения, а координатного.


https://www.youtube.com/watch?v=ka6pziq8F6Q

SuperMax
22.01.2025, 16:26
Сделал сайт
AZБК официальный сайт (https://azbk.maxiol.com/)

SuperMax
11.02.2025, 13:07
После начала разработки контроллеров AZ встал вопрос о написании и оформлении документации, за не имением лучшего было принято решение оформлять всё на форуме https://forum.maxiol.com/index.php?showforum=121

С точки зрения удобства это неплохой вариант, хоть и версия IPB у меня без полноценного WYSIWYG-редактора, часть оформления понимает, но не все.

Соответственно я давно хотел найти какой-то нормальный WIKI-движок, но который бы был удобен в работе: иначе говоря, чтобы процесс оформления документации в нем был как в обычном офисе - без всяких мерзких разметок, тегов и прочей гадости (я пробовал движок WikiMedia - жуть, можно умереть прежде чем что-то оформишь нормально).

И вот в очередной раз я решил обратить внимание на решение на яве - XWIKI и на прошлой неделе разобрался с ее установкой на мою систему.
Он нормально работает с Oracle, живет в контейнере томката, без проблем пробрасывается через апач.

Редактор - полноценный WYSIWYG, картинки/файлы/таблицы итд можно вставлять просто из буфера по CRTL+C/V. Очень удобно в работе.

Вот начал писать документацию - к примеру:

https://azwiki.maxiol.com/xwiki/bin/view/API%20%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D 0%BB%D0%B5%D1%80%D0%BE%D0%B2%20AZ/

AZWIKI Контроллеры AZ® для компьютеров на базе PDP-11 (https://azwiki.maxiol.com/)

SuperMax
27.03.2025, 13:41
Прошивка 00018

Прошивка содержит множество исправлений и является финальной кумулятивной версией 17й прошивки


Исправления
- IMA ADPCM;
- работа с образами RT11;
- стартовая процедура, теперь при нарушении стартовой последовательности (зависании на первом шаге к примеру), срабатывает авторестарт;
- SETUP теперь не затирает секцию LOGO;
- улучшена работа HOF и Landisk

В прошивке изменилось все - надо перепрошить/перезалить
- ПЛИС
- STM32
- ROM



Прошивка
https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=59775

И теперь можно играть в Dangerous Dave in the Haunted Mansion
качать тут
https://hof.maxiol.com/top/10

после регистрации, в самом дейве можно войти в сеть для регистрации рекордов и ачивок!

SuperMax
23.05.2025, 21:52
Прошивка 00019

Удален OPL2
Ускорен блиттер

https://forum.maxiol.com/index.php?s=&showtopic=5553&view=findpost&p=59949

ускорение блиттера получилось вполне заметное
18ая
https://pic.maxiol.com/thumbs2/1748026263.3232235615.18.jpg (https://pic.maxiol.com/?v=1748026263.3232235615.18.jpg&dp=2)

19ая
https://pic.maxiol.com/thumbs2/1748026280.3232235615.19.jpg (https://pic.maxiol.com/?v=1748026280.3232235615.19.jpg&dp=2)