TS-Conf F.A.Q.
Re: TS-Conf F.A.Q.
Если у нас колво линий заливки больше 255, то: выполняем заливку 255раз, и потом:
Не меняем значения источников и приёмников, там уже лежат финальные значения после передачи - мы Уже в нужном месте и нужной паге
Апдейтим колво линий и опять запуск передачи.
Заливка стартует ровно с того места где закончилась.
Это же юзаем для любых передач больших обьёмов, когда колво транзакций больше 255
Не меняем значения источников и приёмников, там уже лежат финальные значения после передачи - мы Уже в нужном месте и нужной паге
Апдейтим колво линий и опять запуск передачи.
Заливка стартует ровно с того места где закончилась.
Это же юзаем для любых передач больших обьёмов, когда колво транзакций больше 255
Re: TS-Conf F.A.Q.
VBI писал(а):сколько длина одной линии заливки
То есть,если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320),так?
И заливаться будет 320+ пропуск до новой строки и так весь блок 512,если в DMANum=0.Вот этот момент не понятен,как произвольное кол-во лить.
Спасибо.
Re: TS-Conf F.A.Q.
AndyD, давай с самого начала
дма у нас представляет такой лдир, который выполняется железом
для того что бы запустить любую передачу, нам нужно указать - откуда мы будем слать, страница
куда мы будем слать, страница
сколько байт за одну пересылку, и тут учтём что сразу передаётся по 2 байта, поэтому даже значение 0 будет передавать 2 байта.
соответственно - значение 255 - передаст за раз 512 байт
кроме того, этих пересылок у нас есть пачка. конкретно их число мы задаём в порте - сколько раз пересылок сделать.
и есть порт управления. который говорит о том, КАК слать.
т.е. - стоит ли после каждой пересылки переходить на начальный адрес, увеличивая старший байт? это D_ALGN или S_ALGN.
тут мы получаем возможность пересылать данные формируя из проследовательного набора данных, например, изображение на экране
как это происходит?
мы указываем длинну одной пересылки равной ширине экрана, устанавливаем бит D_ALGN - который говорит о том, что нужно увеличить старший байт приёмника после каждой пересылки на 1.
а если юзается бит A_SZ, который управляет собсно этим ххх_ALGN - то мы указываем КАК именно увеличивать - на 1 или на 2, в зависимости от того что хотим получить
дело в том, что это создано для пересылки не только данных, но и графики. для режима 16ц нам нужно увеличивать следующий адрес получателя на 1, а для 256 - на 2.
т.е. таким макаром мы сразу отлично отображаем в память правильно созданную картину из последовательных бинарных данных
это нужно: для тайлов/спрайтов/граф.изображений
как только мы отправили этот набор битов A_SZ,ххх_ALGN и прочие режимы типа DMA_RAM - в порт, железо уже отправляет первые 2 байта. и проц свободен
ЗЫ: если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320). И заливаться будет 320+ пропуск до новой строки и так весь блок 512,если в DMANum=0
D_ALGN нужен для обновления старшего байта адреса ПРИЁМНИКА на 1/2 в зависимости от состояния A_SZ. и как только пройдёт очередная отсылка, старший адрес будет увеличен.
например: #C000 > #C100 >#C200 ... #fe00 > #ff00> #c000 >#c100 и дальше, уже в новой странице, по количеству в порте DMANUM
а длинна передачи задаём в порте DMALEN, и не забываем что за раз передаётся 2 байта. т.ё. 320 точек - это DMALEN = 320/2 в режиме 256ц, и DMALEN= 320/4 в режиме 16ц , так как один байт в этом режиме - 2 точки сразу
спрашивай, буду рад таки пояснить
дма у нас представляет такой лдир, который выполняется железом
для того что бы запустить любую передачу, нам нужно указать - откуда мы будем слать, страница
куда мы будем слать, страница
сколько байт за одну пересылку, и тут учтём что сразу передаётся по 2 байта, поэтому даже значение 0 будет передавать 2 байта.
соответственно - значение 255 - передаст за раз 512 байт
кроме того, этих пересылок у нас есть пачка. конкретно их число мы задаём в порте - сколько раз пересылок сделать.
и есть порт управления. который говорит о том, КАК слать.
т.е. - стоит ли после каждой пересылки переходить на начальный адрес, увеличивая старший байт? это D_ALGN или S_ALGN.
тут мы получаем возможность пересылать данные формируя из проследовательного набора данных, например, изображение на экране
как это происходит?
мы указываем длинну одной пересылки равной ширине экрана, устанавливаем бит D_ALGN - который говорит о том, что нужно увеличить старший байт приёмника после каждой пересылки на 1.
а если юзается бит A_SZ, который управляет собсно этим ххх_ALGN - то мы указываем КАК именно увеличивать - на 1 или на 2, в зависимости от того что хотим получить
дело в том, что это создано для пересылки не только данных, но и графики. для режима 16ц нам нужно увеличивать следующий адрес получателя на 1, а для 256 - на 2.
т.е. таким макаром мы сразу отлично отображаем в память правильно созданную картину из последовательных бинарных данных
это нужно: для тайлов/спрайтов/граф.изображений
как только мы отправили этот набор битов A_SZ,ххх_ALGN и прочие режимы типа DMA_RAM - в порт, железо уже отправляет первые 2 байта. и проц свободен
ЗЫ: если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320). И заливаться будет 320+ пропуск до новой строки и так весь блок 512,если в DMANum=0
D_ALGN нужен для обновления старшего байта адреса ПРИЁМНИКА на 1/2 в зависимости от состояния A_SZ. и как только пройдёт очередная отсылка, старший адрес будет увеличен.
например: #C000 > #C100 >#C200 ... #fe00 > #ff00> #c000 >#c100 и дальше, уже в новой странице, по количеству в порте DMANUM
а длинна передачи задаём в порте DMALEN, и не забываем что за раз передаётся 2 байта. т.ё. 320 точек - это DMALEN = 320/2 в режиме 256ц, и DMALEN= 320/4 в режиме 16ц , так как один байт в этом режиме - 2 точки сразу
спрашивай, буду рад таки пояснить
Re: TS-Conf F.A.Q.
смотри.
нужно нарисовать квадрат, залитый цветом 1. с позиции #c020, ширина 64, высота 200, какой-то номер паги типа #40, 16 цветов
мы берём DMA_FILL + DMA_DALGN
в позицию #c020 паги #40 засылаем #1111
в источник и приёмник шлём #c020 и пагу #40
в DMALEN шлём длину строки - 64/4 - это у нас 64 строки делённое на 2 байта одной засылки и делим на 2 потому что одна точка - пол байта. /4 в результате
в DMANUM шлём сколько будет таких строк - 200
и потом - DMA_FILL + DMA_DALGN.
DMA_FILL говорит о том что будут копироваться одни и те-же данные
DMA_DALGN говорит о том, что после каждой пересылки железке НУЖНО ВОСТТАНОВИТЬ СТАРЫЙ АДРЕС, но к старшему байту добавить 1, что даст нам переход на новую строку в режиме 16ц
если бы мы юзали 256ц, то нужно включить бит DMA_ASZ , который укажет что НОВАЯ СТРОКА НА 2 НИЖЕ. ибо экран так устроен
и как только ты отправил в DMACTR значения битов DMA_FILL + DMA_DALGN, начинается пересылка, сразу
железо отправляет, проц свободен, генери что нужно, открывай любые паги, делай что угодно кроме новой пересылки.
нужна пересылка - ожидай обновление DMASTATUS
нужно нарисовать квадрат, залитый цветом 1. с позиции #c020, ширина 64, высота 200, какой-то номер паги типа #40, 16 цветов
мы берём DMA_FILL + DMA_DALGN
в позицию #c020 паги #40 засылаем #1111
в источник и приёмник шлём #c020 и пагу #40
в DMALEN шлём длину строки - 64/4 - это у нас 64 строки делённое на 2 байта одной засылки и делим на 2 потому что одна точка - пол байта. /4 в результате
в DMANUM шлём сколько будет таких строк - 200
и потом - DMA_FILL + DMA_DALGN.
DMA_FILL говорит о том что будут копироваться одни и те-же данные
DMA_DALGN говорит о том, что после каждой пересылки железке НУЖНО ВОСТТАНОВИТЬ СТАРЫЙ АДРЕС, но к старшему байту добавить 1, что даст нам переход на новую строку в режиме 16ц
если бы мы юзали 256ц, то нужно включить бит DMA_ASZ , который укажет что НОВАЯ СТРОКА НА 2 НИЖЕ. ибо экран так устроен
и как только ты отправил в DMACTR значения битов DMA_FILL + DMA_DALGN, начинается пересылка, сразу
железо отправляет, проц свободен, генери что нужно, открывай любые паги, делай что угодно кроме новой пересылки.
нужна пересылка - ожидай обновление DMASTATUS
Re: TS-Conf F.A.Q.
так как обычно мы сразу имеем бинарные данные графы, то они расположены последовательно, а не так как они юзаются при выводе
из-за этого юзаем DMA_DALGN дабы правильно выровнять их передачу в память
но если ты сразу юзаешь картинку в 512 по ширине, то слать можно просто так, прямо DMA_RAM и всё, чётко всё передалось. прям как лдир
для простой передачи блоков данных - просто DMA_RAM и всё.
и не забывай, что:
1. паги переключатся автоматически
2. последние, уже обновленные железом после передачи, номера адреса и паги остаются в портах, можно просто продолжать пересылку буквально отправляя новое количество "строк" и способ передачи в DMANUM и DMACTR
DMALEN не поменяется
из-за этого юзаем DMA_DALGN дабы правильно выровнять их передачу в память
но если ты сразу юзаешь картинку в 512 по ширине, то слать можно просто так, прямо DMA_RAM и всё, чётко всё передалось. прям как лдир

для простой передачи блоков данных - просто DMA_RAM и всё.
и не забывай, что:
1. паги переключатся автоматически
2. последние, уже обновленные железом после передачи, номера адреса и паги остаются в портах, можно просто продолжать пересылку буквально отправляя новое количество "строк" и способ передачи в DMANUM и DMACTR
DMALEN не поменяется
Re: TS-Conf F.A.Q.
VBI писал(а):DMALEN = 320/2 в режиме 256ц, и DMALEN= 320/4 в режиме 16ц
То есть мы просто шлем одну строку в порте DMALEN= 320/2(/4) или 360/2(/4) за транзакцию и указываем количество транзакций в DMANum,а за один цикл дма максимум 256 строк,288 за 2 подхода дма ,правильно понял?.
Cпасибо, надо на 1ю страничку закрепить.
Re: TS-Conf F.A.Q.
AndyD, именно.
именно так
288 = 1 отправка 255 раз (строк), вторая - 288-255
именно так
288 = 1 отправка 255 раз (строк), вторая - 288-255
Re: TS-Conf F.A.Q.
супер 

Re: TS-Conf F.A.Q.
VBI писал(а):поэтому наша длина /2
...минус 1. Т.е. для экранки 320х240 256с задать 320/2-1=159.
Re: TS-Conf F.A.Q.
VBI писал(а):Если у нас колво линий заливки больше 255, то: выполняем заливку 255раз, и потом:
Вылетаем на православный инт (который мы предварительно включили) и запускаем новую транзакцию. А не пинаем хуи в цикле ожидания, как сделали бы жители Вилабаджо.
AndyD писал(а):То есть,если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320),так?
D_ALGN - режим выравнивания адреса приемника. После каждого бурста адрес увеличивается на 256 (A_SZ = 0) или на 512 (A_SZ = 1) байт, от того значения, которое было в нем до бурста.
DMALen - размер бурста в словах 16-бит, задавать на 1 меньше, чем нужное количество, т.е. 0=2 байта.
Re: TS-Conf F.A.Q.
Использую вот это:
чтобы подключать странички с Page0. Это безопасно вообще?
понятно, что im2 и вектор $0038 неуместен.
Код: Выделить всё
ld bc,SysConfig
ld a,6
out (c),a
inc b
ld a,%00001110
out (c),a
чтобы подключать странички с Page0. Это безопасно вообще?
понятно, что im2 и вектор $0038 неуместен.
[x] No Screenshot
Re: TS-Conf F.A.Q.
Небезопасно ходить в центре Рязани с ЛГБТ-флагом. А все остальное безопасно.
Re: TS-Conf F.A.Q.
Ежли с умом.
Re: TS-Conf F.A.Q.
pal - в текстовом формате поллитрушечка
https://infinit.io/_/39CRJ7B
https://infinit.io/_/39CRJ7B
Re: TS-Conf F.A.Q.
кстати, вскочил вопрос: а при строчных прерываниях переключение VPage будет работать?
[x] No Screenshot
Re: TS-Conf F.A.Q.
будет. на следующей строке
Re: TS-Conf F.A.Q.
а что помешает?
Re: TS-Conf F.A.Q.
VBI писал(а):а что помешает?
отвечать ответом на ответ?
бля, пропустил кратность 16ти для паг

[x] No Screenshot
Re: TS-Conf F.A.Q.
короч главное успеть. по ходу на следующей линии появится в твоей палитре ужо
Re: TS-Conf F.A.Q.
g0blinish, смотри, упрощённо:
тсу работает в одной строке. оно парсит и строит следующую линию экрана.
всё что ты сделаешь - повлияет со следующей строки. предыдущие не обновятся новой палитрой, мы будем видеть старые цвета в тот момент
правка - всё что ты сделаешь с палитрой - повлияет на этой и последующих строках. thanks to Buyan!
тсу работает в одной строке. оно парсит и строит следующую линию экрана.
всё что ты сделаешь - повлияет со следующей строки. предыдущие не обновятся новой палитрой, мы будем видеть старые цвета в тот момент
правка - всё что ты сделаешь с палитрой - повлияет на этой и последующих строках. thanks to Buyan!
