Лишним не будет, готовые wav из игр переносить )
- - - Добавлено - - -
Супер! ))
Вау, можно будет потоковое инет-радио сделать для БК ))
Вид для печати
это вопрос ресурсов
те плис таки не резиновая
я несколько про другоеЦитата:
Супер! ))
Вау, можно будет потоковое инет-радио сделать для БК ))
а именно про чтение потока с диска и его воспроизведение
с минимальным использованием оперативки
(на тот случай если она будет занята чем-то другим)
но если говорить о возможности интернет радио то да, я думаю это тоже возможно
Доброго дня! Если будет собранный, куплю 1 компл. У меня есть поле где развернуться.
скоро будет
мониторьте тему https://zx-pk.com/forum/viewtopic.php?f=7&t=17903
вот написал потоковый плеер - те проигрывает IMA ADPCM 44100 stereo 16bit
вот тут
Работа с IMA ADPCM на AZ БК
- кодировщик в IMA ADPCM
- два плеера
все с исходниками
Демонстрация плеера в работе
https://www.youtube.com/watch?v=T2fXu0iFmFk
- - - Добавлено - - -
Прошивка 00007
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556
2. реализовано ручное переключение видеорежима (циклическое 1-2-3-4) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!
также режимы можно переключать через регистр 177230
младшие 2 бита - видеорежим (точнее интерпретация легаси-видеорежимов)
0 - монохром 512х256
1 - 4 цвета 256х256
2 - 16 цветов 128х256
3 - 256 цветов 64х256
3. Реализовано отображение информации в консоли контроллера дисковой подсистемы и сети - переключается по АР2+РУС
соответственно выделена страница памяти под консоль
4. сделан маппер памяти + разделение по сегментам:
- область перехвата - те копия станиц оперативки
- область эмуляции ROM - выделил 256КБ под всякие ПЗУ которые будут подключаться как в эмуляторе из меню
- и вся остальная память
перехват запросов SMK сделан, но не включен
4. полный вывод VGA уже из SDRAM, переключение страниц
[пока без новых режимов, но они уже заложены в архитектуру]
5. Добавлен альтернативный легаси-режим который позволяет отображать любой участок памяти на экран
включение - 15й бит регистра 177230 в 1
регистр 177232 - номер страницы памяти, кратный 4м - те с дискретностью 16кБ
6. перехват переключения палитр БК11М
- доступ к памяти палитр с шины, чтение+запись
исправлены ошибки перехвата при обращении к нечетным адресам
7. Генератор псевдослучайных чисел - технически это LFSR длиной 128бит, младшие 16 в регистре доступном программно.
сдвиг идет с частотой 130MHz как следствие полностью новое слово доступно будет каждый процессорный такт
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х битный
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 пойдут напрямую на микшер отдельным каналом
должны отвечать регистры
SOUND
177160-177170
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
маппер памяти
177300-350
загрузчик
177000
177550 - генератор псевдослучайных чисел
После reset машина стартует автоматически и загружается со первого образа в ini-файле
В архиве обновленное AZBOOT.ROM - не забудьте обновить
AZBK_00007.hex без изменений относительно 5й версии, те надо обновить только прошивку ПЛИС
Контроллер AZ BK: Прошивка 00007
Прикрутил AY
сделал автоопределние AY или ковокс
сейчас делаю турбосаунд с прямым мапированием регистров в адресное пространство
дабы можно было читать-писать из любого регистра AY напрямую
Прошивка 00008
жирным новое в прошивке
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556
2. реализовано ручное переключение видеорежима (циклическое 1-2-3-4) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!
также режимы можно переключать через регистр 177230
младшие 2 бита - видеорежим (точнее интерпретация легаси-видеорежимов)
0 - монохром 512х256
1 - 4 цвета 256х256
2 - 16 цветов 128х256
3 - 256 цветов 64х256
3. Реализовано отображение информации в консоли контроллера дисковой подсистемы и сети - переключается по АР2+РУС
соответственно выделена страница памяти под консоль
4. сделан маппер памяти + разделение по сегментам:
- область перехвата - те копия станиц оперативки
- область эмуляции ROM - выделил 256КБ под всякие ПЗУ которые будут подключаться как в эмуляторе из меню
- и вся остальная память
перехват запросов SMK сделан, но не включен
4. полный вывод VGA уже из SDRAM, переключение страниц
[пока без новых режимов, но они уже заложены в архитектуру]
5. Добавлен альтернативный легаси-режим который позволяет отображать любой участок памяти на экран
включение - 15й бит регистра 177230 в 1
регистр 177232 - номер страницы памяти, кратный 4м - те с дискретностью 16кБ
6. перехват переключения палитр БК11М
- доступ к памяти палитр с шины, чтение+запись
исправлены ошибки перехвата при обращении к нечетным адресам
7. Генератор псевдослучайных чисел - технически это LFSR длиной 128бит, младшие 16 в регистре доступном программно.
сдвиг идет с частотой 130MHz как следствие полностью новое слово доступно будет каждый процессорный такт
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х битный
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
должны отвечать регистры
SOUND
177160-177170
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
маппер памяти
177300-350
загрузчик
177000
177550 - генератор псевдослучайных чисел
После reset машина стартует автоматически и загружается со первого образа в ini-файле
Контроллер AZ BK: Прошивка 00008
Записал видео - демонстрация работы AY на контроллере AZ БК
https://www.youtube.com/watch?v=kSIcQYemdzo
По заявкам телезрителей родилась новая версия расширенных видеорежимов
первая версия со строчным управлением мне кажется слишком сложной и не дающей никаких преимуществ
итак проект такой
177230 - регистр управления
177232 - регистр номера страницы начала отображения
177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
3;2 - растяжение по горизонтали - те количество повторов у точки
5;4 - длина строки в словах
7;6 - количество повторов строк
теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов
растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128
длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов
количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192
типовые видеорежимы (значение восьмеричные)
211 - 256х256х4цвета
201 - 512х256х2цвета
регистр 177232 - адрес страницы начала отображения
кратность адреса - в размер страницы
те если размер экрана 16кБ
тогда надо писать адреса с шагом в 4 (размер страницы 4кБ)
(промежуточные значения игнорируются - отбрасываются)
для 512х384х16 цветов с 128словами в строке общий размер экрана получается 98304байт
но тк кратность у нас только по степеням двойки то размер кратности страницы будет 128кБ
--------
думал на счет параметра "длина строки в словах"
в принципе его можно убрать совсем
Абсолютно не годится. Аппаратного вертикального скроллинга нет, горизонтального нет, экономии скорости процессора за счёт более компактного предстваления тех строк, где не нужно высокое пространственное и цветовое разрешение -- тоже нет.
По сути, это вырождение до контроллера для показа статических картинок. Это даже хуже, чем экран оригинальной БК.
а вот такие заявки телезрителей - простой экран разного размера
вообще, вертикальный скролинг для режимов 256 строк будет, для режимов 768/384/192 нет
заложить горизонтальный скролинг была мысль, и тут как раз может пригодится более длинный изначальный буфер строки (он всегда 256 слов)
но вот понимания кому это надо, увы нет
идея со строками никуда не делась, просто никому она не нужна в практическом смсыле
Ну как кому? Игро- и демописателям, даже если он и сами пока этого не осознают.
Например, рулонный скроллинг, если его возможно реализовать, будет полезен просто как старая, хорошо знакомая фича.
А вот скроллинг путём смещения окна отображения на заданное смещение, может имитировать вертикально-горизонтальный скроллинг, когда на экран плавно (ну это как смещение задаётся, попиксельно или побайтно) будет заезжать заранее подготовленное отображение вне экрана.
вот это отсутствие осознания и тормозит процесс!
мне бы четкое ТЗ - было бы проще
будет.Цитата:
Например, рулонный скроллинг, если его возможно реализовать, будет полезен просто как старая, хорошо знакомая фича.
мне это тоже кажется интересным, но надо понимать, что с точки зрения программирования это не будет таким простым как сейчас с плоским последовательным экраномЦитата:
А вот скроллинг путём смещения окна отображения на заданное смещение, может имитировать вертикально-горизонтальный скроллинг, когда на экран плавно (ну это как смещение задаётся, попиксельно или побайтно) будет заезжать заранее подготовленное отображение вне экрана.
Странно, почему? Ведь задание начального адреса по идее не зависит от того, сколько данных будет прочитано дальше.
Времени сейчас нет даже на детальную аргументацию на форуме. Нам надо до НГ сдаться.
Поэтому просто приведу пример:
https://www.youtube.com/watch?v=ZyTQa5eqj9g
Используется аппаратный двумерный скроллинг на EGA (а он там есть, причём попиксельный по обеим координатам!), плюс использование защёлок чтения видеопамяти в качестве простенького блиттера. 40+ fps на 8 МГц 286.
вопрос в том как завернуть в "рулон"
те если у нас 256 строк то мы крутим байт и "конец всегда сходится с началом"
а как делать если строк не кратно степени двойки ?
вообщем сдавай проект и пиши поэму ибо ибо я пока не понимаю как это сделатьЦитата:
Времени сейчас нет даже на детальную аргументацию на форуме. Нам надо до НГ сдаться.
Поэтому просто приведу пример:
https://www.youtube.com/watch?v=ZyTQa5eqj9g
Используется аппаратный двумерный скроллинг на EGA (а он там есть, причём попиксельный по обеим координатам!),
плюс использование защёлок чтения видеопамяти в качестве простенького блиттера. 40+ fps на 8 МГц 286.
Главное, чтобы они были, эти писатели =) Под любое новое железо или фичу нужен софт, а с нуля он не возьмётся.
Можно завести доп. счётчик внутри схемы и считать им строки, а по достижении нужного числа сбрасывать основной в исходное состояние, но я бы развил идею. Памяти в AZ всё равно в разы больше, чем осилит процессор БК (речь пока о нём), так почему бы не мапить - или как оно правильно называется - кусочек памяти из большого массива? Начало отображения задаётся регистром, и поскольку регистры 16-разрядные, можно и размер массива сделать куда больше, чем видимая экранная область. Очень удобно как раз для скроллов в демках и играх. Надеюсь, суть понятно изложил.
Принц и стражники могут заходить за колонны, которые их при этом закрывают. Стоят за "пилами", поверх них выскакивают шипы из земли. Это все передний план. Но все эти персонажи и сами закрывают собой фон. В итоге три слоя на экране.
https://www.youtube.com/watch?v=7RCRc3mX8VE
достал из закромов 10-ку с мягкой клавой
да, сходу не взлетело
немного поправил стартовое ПЗУ и 10ка завелась
VGA перехват тоже пока 10-ку не кушает
те надо добавить корректное определение 10ки внутри перехвата
но принципиально 10ка работает с AZ
соответственно вопрос - поддержка 10ки уже нужна или можно отложить в беклог ?
Сделал поддержку БК-0010-01
проверено на БК-0010-01 с пленкой
игрушки от 10ки запускаются
андос грузится
единственное, включается 15ая палитра от 11М
это пока не учтено, но записано в беклог
исправленное ПЗУ и готовый образ карты тут
https://forum.maxiol.com/index.php?s...ndpost&p=56213
Родил новую версию - скролинг вертикальный работает
177230 - регистр управления
177232 - регистр номера страницы начала отображения
177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах
теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов
длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов
растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128
количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192
длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позводит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном
типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)
регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти
Сделал
UART (RS-232 EIA-232 COM ком-порт)
адреса стандартные
177560 - регистр статуса приемника
177562 - регистр управления + регистр принятых данных
177564 - регистр статуса передатчика
177566 - регистр данных на передачу
177560 - регистр статуса приемника
бит 6 - флаг наличия данных: единица означает наличие принятых данных в регистре 177562
после чтения 177562 - флаг будет сброшен
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177562
- по чтению - младший байт содержит принятые данные
- по записи - слово определяющее скорость, подробности ниже
177564 - регистр статуса передачика
бит 6 - флаг успешной передачи данных: единица означает что байт из регистра 177566 успешно передан в линию
после записи в 177566 - флаг будет сброшен тк начнется передача
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177566 - регистр данных на передачу, используется младший байт, доступен на чтение и запись
после записи начинается передача в линию
подробности тут
Контроллер AZ BK: UART
Прошивка 00009
жирным новое (или измененное) в прошивке
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556
2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!
3. Реализовано отображение информации в консоли контроллера дисковой подсистемы и сети - переключается по АР2+РУС
соответственно выделена страница памяти под консоль
4. сделан маппер памяти + разделение по сегментам:
- область перехвата - те копия станиц оперативки
- область эмуляции ROM - выделил 256КБ под всякие ПЗУ которые будут подключаться как в эмуляторе из меню
- и вся остальная память
перехват запросов SMK сделан, но не включен
4. полный вывод VGA уже из SDRAM, переключение страниц
[пока без новых режимов, но они уже заложены в архитектуру]
5. Переделано
6. перехват переключения палитр БК11М
- доступ к памяти палитр с шины, чтение+запись
исправлены ошибки перехвата при обращении к нечетным адресам
7. Генератор псевдослучайных чисел - технически это LFSR длиной 128бит, младшие 16 в регистре доступном программно.
сдвиг идет с частотой 130MHz как следствие полностью новое слово доступно будет каждый процессорный такт
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х битный
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
адреса стандартные
177560 - регистр статуса приемника
177562 - регистр управления + регистр принятых данных
177564 - регистр статуса передатчика
177566 - регистр данных на передачу
177560 - регистр статуса приемника
бит 7 - флаг наличия данных: единица означает наличие принятых данных в регистре 177562
после чтения 177562 - флаг будет сброшен
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177562
- по чтению - младший байт содержит принятые данные
- по записи - слово определяющее скорость, подробности ниже
дефолтное значение 32346(8) что соответствует стандартной скорости в 9600бод
177564 - регистр статуса передачика
бит 7 - флаг успешной передачи данных: единица означает что байт из регистра 177566 успешно передан в линию
после записи в 177566 - флаг будет сброшен тк начнется передача
регистр доступен на чтение
запись игнорируется, ошибки не взывает
177566 - регистр данных на передачу, используется младший байт, доступен на чтение и запись
после записи начинается передача в линию
Слово определяющее скорость - доступно только по записи
детальное описание UART в AZБК
14. Сделан конструктор видеорежимов
177230 - регистр управления
177232 - регистр номера страницы начала отображения
177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах
теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов
длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов
растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128
количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192
длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном
типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)
регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти
Важно! видеорежимы в состоянии "beta" те я не провел полного тестирования
должны отвечать регистры
SOUND
177160-177170
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
маппер памяти
177300-350
загрузчик
177000
177550 - генератор псевдослучайных чисел
177560-177566 - UART
После reset машина стартует автоматически и загружается со первого образа в ini-файле
В архиве обновленное AZBOOT.ROM - не забудьте обновить
также утилита VGAMON.SAV для RT11 которая переключает в режим mono 512x256
AZBK_00009.hex без изменений относительно 5й версии, те надо обновить только прошивку ПЛИС
Контроллер AZ BK: Прошивка 00009
Провел большую переработку проекта
разделил клоки на 130MHz и 65MHz
теперь большая часть проекта работает на 65MHz, на 130MHz осталась только оперативка - SDRAM
следствие переработки - теперь доступны новые горизонты и к примеру добавление 2xAY и вчера, благодаря оперативности Kuvo испытания 2хAY прошли успешно!
Документация тут
https://forum.maxiol.com/index.php?s...ndpost&p=55703
Готовлю релиз прошивки. может что-то еще добавится.
Раз уж под них отдельные регистры - может, сделать их и на чтение? Или это уже сделано?
Потому что в БК стандартный способ работы с AY (177714) не подразумевает чтение данных, а было бы хорошо.
Например, всякие там анализаторы-музыкалки, работающие, в основном, по читаемым из AY данным (ну, на Спектруме).
Ничто не мешает выполнить SWAB и заниматься арифметикой =) Ну и работать потом либо со старшим байтом, либо опять SWAB.
Либо обнулить старший байт и получить восьмибитное значение, что еще проще.
Это если прога знает, где буфер (сама же и готовит его). Сторонняя прога, работающая с готовым модулем, понятия о нем не имеет.
Вот почему на Спектруме и брали значения громкостей и пр. напрямую из AY после вызова плеера. Которых может быть несколько разных.
То есть читается их них то, что туда пишут? Тогда отлично =)
Прошивка 00010
жирным новое (или измененное) в прошивке
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556
2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!
3. Реализовано отображение информации в консоли контроллера дисковой подсистемы и сети - переключается по АР2+РУС
соответственно выделена страница памяти под консоль
4. сделан маппер памяти + разделение по сегментам:
- область перехвата - те копия станиц оперативки
- область эмуляции ROM - выделил 256КБ под всякие ПЗУ которые будут подключаться как в эмуляторе из меню
- и вся остальная память
перехват запросов SMK сделан, но не включен
4. полный вывод VGA уже из SDRAM, переключение страниц
[пока без новых режимов, но они уже заложены в архитектуру]
5. Переделано
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 - регистр номера страницы начала отображения
177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах
теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов
длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов
растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128
количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192
длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном
типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)
регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти
Важно! видеорежимы в состоянии "beta" те я не провел полного тестирования
15. Добавлена эмуляция 2xAY
сложение каналов по форумуле
R=A1+A2+B1+B2
L=C1+C2+B1+B2
Прямая доступность регистров на шине, а именно доступны байтовые регистры
177172 - адрес AY1
177173 - данные AY1
177174 - адрес AY2
177175 - данные AY2
должны отвечать регистры
SOUND
177160-177174
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
маппер памяти
177300-350
загрузчик
177000
177550 - генератор псевдослучайных чисел
177560-177566 - UART
Контроллер AZ BK: Прошивка 00010
Итак, благодаря помощи GRF, я разобрался с особенностями SMK в плане отключения окна 1. [все изначально было сделано правильно кроме этого хака]
Теперь на AZБК запускается Принц, но потребуется новая прошивка ПЛИС и доработка.
Подробнее тут
https://forum.maxiol.com/index.php?showtopic=5593
Вопрос теперь - чем заняться дальше ?
в беклоге есть следующие задачи
1. сделать переход в аварийный режим в случае ошибки с конфигом
аварийный режим
- помигает светодиодом - код ошибки
- включит сеть
- добавит запись в лог ошибок старта
2. Часы с календарем, питание от 2032
3. Синхронизация часов через Internet
4. Энергонезависимая память для сохранения настроек звука, конфигурации
5. таймер с прерыванием 50/60Гц втч и для работы AY на БК-0010
6. КНГМД - дабы можно было работать с дискетами
7. поддержка образов FAT12 в WEBDAV
8. поддержка образов микродос в WEBDAV
9. поддержка образов CSIDOS в WEBDAV
10. OPL2
11. эмуляция HDD
Прошивка 00011
жирным новое (или измененное) в прошивке
функционал:
1. палитры, сделано расширение функционала механизма палитр
подробнее https://forum.maxiol.com/index.php?showtopic=5556
2. реализовано ручное переключение видеорежима (циклическое 1-2) по сочетанию AR2+KT
те можно спокойно переключать его в зависимости от программы не напрягаясь!
3. Реализовано отображение информации в консоли контроллера дисковой подсистемы и сети - переключается по АР2+РУС
соответственно выделена страница памяти под консоль
4. сделан маппер памяти + разделение по сегментам:
- область перехвата - те копия станиц оперативки
- область эмуляции ROM - выделил 256КБ под всякие ПЗУ которые будут подключаться как в эмуляторе из меню
- и вся остальная память
- перехват запросов SMK сделан и работает - все запросы к нему управлению режимами через 177130 транслируются в запросы к AZ-менеджеру памяти.
- добавлена возможность хака с отключением окна 1 со 100'000 до 137'777. Более подробно описано тут.
- добавлен RPLY для служебных страниц (с 40 по 77ую включительно)
эти страницы будут иметь специальное назначение и будут использоваться для работы AZБК контроллера; использовать для иных целей кроме указанных в документации запрещено
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 - регистр номера страницы начала отображения
177230, далее пойдут биты с описанием
1;0 - режим цветовой интерпретации
4;3 - длина строки в словах
7;6 - растяжение по горизонтали - те количество повторов у точки
10;9 - количество повторов строк
15;12 - длина рулона в словах
теперь подробно
режим цветовой интерпретации, значение от 0 до 3
0 - 1 бит на цвет - 2 цвета
1 - 2 бита на цвет - 4 цвета
2 - 4 бита на цвет - 16 цветов
3 - 8 бит на цвет - 256 цветов
длина строки в словах
0 - 32 слова
1 - 64
2 - 128
3 - 256
это значение должно соответствовать вашему режиму - иначе будут повторы или пропуски данных
расчет прост - к примеру мы выбрали 512х384х16 цветов
считаем 512точек х 4 бита = 2048бит /16 = 128 слов
растяжение по горизонтали - те количество повторов у точки
0 - х1 - те 1024 точки в строке
1 - х2 - 512
2 - х3 - 256
3 - х4 - 128
количество повторов строк
0 - х1 - 768 строк
1 - х2 - 384
2 - х3 - 256
3 - х4 - 192
длина рулона в словах
0 6144
1 8192
2 12288
3 16384
4 24576
5 32768
6 49152
7 65536
8 98304
9 131072
10 196608
11 262144
длина дает информацию контроллеру для корректной работы вертикального скролинга
и важный момент - длина рулона может быть БОЛЬШЕ чем экран
иначе говоря можно объявить экран в 32кБ (к примеру 256х256х16цветов )
а рулон выбрать в 64кБ, что позволит осуществлять формирование того что выйдет на экран ЗА его пределами ДО его вывода рулоном
типовые видеорежимы (значение восьмеричные)
012201 - 256х256х4цвета (экран 16кБ)
012100 - 512х256х2цвета (экран 16кБ)
032212 - 256х256х16цветов (экран 32кБ)
регистр 177232 - адрес страницы начала отображения
те можно начинать отображение с любой страницы в памяти
Важно! видеорежимы в состоянии "beta" те я не провел полного тестирования
15. Добавлена эмуляция 2xAY
сложение каналов по форумуле
R=A1+A2+B1+B2
L=C1+C2+B1+B2
Прямая доступность регистров на шине, а именно доступны байтовые регистры
177172 - адрес AY1
177173 - данные AY1
177174 - адрес AY2
177175 - данные AY2
Теперь работают программы использующие менеджер памяти СМК. К примеру Принц Персии.
Косметические правки кода и звукового модуля.
должны отвечать регистры
SOUND
177160-177174
177200-177212
AZ
177220-177226
дебаг
177100-177106
регистры палитр - уже можно экспериментировать
177230 - видеорежимы
177232 - номер легаси страницы
177234 - адрес ячейки палитры [9бит]
177236 - значение палитры [15бит]
маппер памяти
177300-350
загрузчик
177000
177550 - генератор псевдослучайных чисел
177560-177566 - UART
После reset машина стартует автоматически и загружается со первого образа в ini-файле
В архиве обновленное
AZBOOT.ROM - не забудьте обновить!
AZ377.ROM - не забудьте обновить !
AZBK_00011.hex без изменений относительно 5й версии, те надо обновить только прошивку ПЛИС
Прошивка
Контроллер AZ BK: Прошивка 00011
Формирование ТЗ на часы
задача вроде простая, но есть множество ньюансов
Вводная:
итак, в моем стеке TCP/IP есть относительно точное время в unix-формате
относительно точное тк во время работы с шиной БК приходится отключать таймер 1000Гц который дает отсчеты времени для внутренних часов TCP/IP стека;
также в моем стеке есть NTP-клиент который может получать время с NTP-сервера
также в самом STM32 есть автономные аппаратные часы которые могут работать и от батарейки тоже
[я не разбирался с ними ибо мне всегда хватало часов которые в стеке, он достаточно точны если не отключать таймер]
Формируется такая идея:
часть 1
1. выделяется служебная страница памяти - 4кБ
2. 1 раз в минуту, туда стек пишет точное время в самых разных форматах - те можно сделать кучу разных вариантов на любой вкус
3. для получения этого точного времени стек обновляет данные с NTP-сервера и/или пользуется часами в STM32
соответственно далее уже дело за программистами которые воспользуются этими данными
те надо подключить страницу в какое-то окно, считать данные и вернуть как было. все просто.
давайте определим нужные форматы времени.
часть 2
так как штатный таймер в БК обладает ограниченными возможностями и явно не хватает таймера типа SysTick я сделаю его аналог в виде регистров
1. регистр с клоком 1кГц, максимальное значение 1000. доступен только на чтение, сбрасывается по halt
2. 32х разрядный регистр с клоком 1сек, доступен только на чтение, сбрасывается по halt
Форматы времени в служебной странице:
1. Unix - те количество секунд, прошедших с полуночи 1 января 1970 года;
2. FAT время - для ANDOS
Время и дата
Двухбайтовая отметка даты имеет следующий формат:
биты 0–4 — день месяца, допускаются значения 1–31;
биты 5–8 — месяц года, допускаются значения 1–12;
биты 9–15 — год, считая от 1980 года («эпоха MS-DOS»), возможны значения от 0 до 127 включительно, то есть 1980–2107 годы.
Двухбайтовая отметка времени имеет следующий формат:
биты 0–4 — счётчик секунд (по две), допустимы значения 0–29, то есть 0–58 секунд;
биты 5–10 — минуты, допустимы значения 0–59;
биты 11–15 — часы, допустимы значения 0–23.
предлагайте
все обсуждаемо тк это проект ТЗ по часам. но сразу скажу, что делать полные часы в виде регистров - тупо жалко ресурсов ПЛИС.
Обсудили с GRF проект системы ускорения графики
сформировалось понимание, что работа с фоном и пересечениями занимает много времени и отнимает много ресурсов
соответственно рождается такая простая и понятная штука, по сути это "типа блиттер"
1. у нас три страницы с картинками
пусть первая - это нижний фон
вторая - двигающиеся герои, факелы монстры и прочее
третья - верхний фон который перекрывает объекты под ним - к пример колонна или дерево, за которое можно "зайти"
2. видеосистема складывает все три страницы
наивысший приоритет - верхний фон, те если там не =0 то идет перекрытие
далее вторая страница
и уже в самую последнюю очередь - нижний фон который перекрывает любой [не нулевого цвета] объект на странице выше
значение =0 это прозрачный цвет
3. получается наиболее удобный видеорежим 256х256 и байт на цвет
это будет удобно с точки зрения движения спрайтов - те сдвиг на байт это сдвиг на точку
Прикинул сколько потребуется времени на это - всего 312пикселей в худшем сценарии ожидания доступа к SDRAM
иначе говоря укладываемся!
начал делать....
upd 2022-06-17 - cделал
https://forum.maxiol.com/index.php?s...ndpost&p=56550