TS-Conf F.A.Q.

Документация, FAQ-и

Postby VBI » Mon, 18.01.2016 19:46:36

Если у нас колво линий заливки больше 255, то: выполняем заливку 255раз, и потом:
Не меняем значения источников и приёмников, там уже лежат финальные значения после передачи - мы Уже в нужном месте и нужной паге
Апдейтим колво линий и опять запуск передачи.
Заливка стартует ровно с того места где закончилась.
Это же юзаем для любых передач больших обьёмов, когда колво транзакций больше 255
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Mon, 18.01.2016 21:47:33

VBI wrote:сколько длина одной линии заливки

То есть,если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320),так?
И заливаться будет 320+ пропуск до новой строки и так весь блок 512,если в DMANum=0.Вот этот момент не понятен,как произвольное кол-во лить.
Спасибо.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby VBI » Mon, 18.01.2016 22:11:32

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 точки сразу

спрашивай, буду рад таки пояснить
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby VBI » Mon, 18.01.2016 22:25:59

смотри.
нужно нарисовать квадрат, залитый цветом 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
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby VBI » Mon, 18.01.2016 22:33:29

так как обычно мы сразу имеем бинарные данные графы, то они расположены последовательно, а не так как они юзаются при выводе
из-за этого юзаем DMA_DALGN дабы правильно выровнять их передачу в память
но если ты сразу юзаешь картинку в 512 по ширине, то слать можно просто так, прямо DMA_RAM и всё, чётко всё передалось. прям как лдир ;)
для простой передачи блоков данных - просто DMA_RAM и всё.
и не забывай, что:
1. паги переключатся автоматически
2. последние, уже обновленные железом после передачи, номера адреса и паги остаются в портах, можно просто продолжать пересылку буквально отправляя новое количество "строк" и способ передачи в DMANUM и DMACTR
DMALEN не поменяется
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Mon, 18.01.2016 22:59:29

VBI wrote:DMALEN = 320/2 в режиме 256ц, и DMALEN= 320/4 в режиме 16ц

То есть мы просто шлем одну строку в порте DMALEN= 320/2(/4) или 360/2(/4) за транзакцию и указываем количество транзакций в DMANum,а за один цикл дма максимум 256 строк,288 за 2 подхода дма ,правильно понял?.
Cпасибо, надо на 1ю страничку закрепить.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby VBI » Mon, 18.01.2016 23:25:17

AndyD, именно.
именно так

288 = 1 отправка 255 раз (строк), вторая - 288-255
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Mon, 18.01.2016 23:43:13

:beer:
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby VBI » Mon, 18.01.2016 23:59:52

супер :agree:
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby TS-Labs » Tue, 19.01.2016 04:40:29

VBI wrote:поэтому наша длина /2

...минус 1. Т.е. для экранки 320х240 256с задать 320/2-1=159.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Tue, 19.01.2016 04:52:36

VBI wrote:Если у нас колво линий заливки больше 255, то: выполняем заливку 255раз, и потом:

Вылетаем на православный инт (который мы предварительно включили) и запускаем новую транзакцию. А не пинаем хуи в цикле ожидания, как сделали бы жители Вилабаджо.
AndyD wrote:То есть,если установлен этот бит D_ALGN,то в DMALen будет длинна строки(например320),так?

D_ALGN - режим выравнивания адреса приемника. После каждого бурста адрес увеличивается на 256 (A_SZ = 0) или на 512 (A_SZ = 1) байт, от того значения, которое было в нем до бурста.
DMALen - размер бурста в словах 16-бит, задавать на 1 меньше, чем нужное количество, т.е. 0=2 байта.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby g0blinish » Tue, 19.01.2016 06:49:53

Использую вот это:
Code: Select all
 ld bc,SysConfig
 ld a,6
 out (c),a
 inc b
 ld a,%00001110
 out (c),a

чтобы подключать странички с Page0. Это безопасно вообще?
понятно, что im2 и вектор $0038 неуместен.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby TS-Labs » Tue, 19.01.2016 08:39:04

Небезопасно ходить в центре Рязани с ЛГБТ-флагом. А все остальное безопасно.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby g0blinish » Tue, 19.01.2016 08:54:50

т.е. Page0 всегда можно заюзать? как хорошо!
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby TS-Labs » Tue, 19.01.2016 09:04:32

Ежли с умом.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby g0blinish » Tue, 19.01.2016 09:09:29

Зайди в чятик штоле, я тебе применение ума покажю.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Thu, 11.02.2016 14:27:21

pal - в текстовом формате поллитрушечка
https://infinit.io/_/39CRJ7B
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Thu, 26.05.2016 08:58:09

кстати, вскочил вопрос: а при строчных прерываниях переключение VPage будет работать?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Thu, 26.05.2016 09:01:45

будет. на следующей строке
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Fri, 27.05.2016 12:21:15

а в палитру можно писать?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Fri, 27.05.2016 13:11:18

а что помешает?
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Fri, 27.05.2016 13:59:48

VBI wrote:а что помешает?

отвечать ответом на ответ?
бля, пропустил кратность 16ти для паг :facepalm:
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Fri, 27.05.2016 14:59:16

короч главное успеть. по ходу на следующей линии появится в твоей палитре ужо
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Fri, 27.05.2016 15:53:51

т.е. можно открыть CRAM и писать в него данные?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Fri, 27.05.2016 16:38:18

g0blinish, смотри, упрощённо:
тсу работает в одной строке. оно парсит и строит следующую линию экрана.
всё что ты сделаешь - повлияет со следующей строки. предыдущие не обновятся новой палитрой, мы будем видеть старые цвета в тот момент

правка - всё что ты сделаешь с палитрой - повлияет на этой и последующих строках. thanks to Buyan! :agree:
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

PreviousNext

Return to Manuals

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x