TS-Conf F.A.Q.

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

Postby VBI » Wed, 13.01.2016 10:27:14

ну так
; задаем адрес где лежат спрайты ($8000, это то же самое что 0000, потому что дма видит только смещение внутри 16к страницы)
это оно и есть.
ты из паги в пагу пересылаешь, а не из абсолютного адреса
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Wed, 13.01.2016 10:40:28

VBI wrote:ты из паги в пагу пересылаешь, а не из абсолютного адреса

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

Postby VBI » Wed, 13.01.2016 10:48:54

смотри, для дма не используются старшие 2 бита в адресе.
т.е. адрес всегда дма видит как 00хх хххх хххх хххх

ну и ей что 4000, что 8000, что 0000, что с000 - всё 0000
другое дело - номер паги.
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Wed, 13.01.2016 11:21:20

У тебя если #4000 лежит в паге #05 то просто для дма вбиваешь пагу 5 и все,адрес #4000=#8000=#c000=#0000 ,то-есть пересыл в пагу 5 по этим адресам = #4000,старший не учитывается как будто для дма страница одна размером #3fff.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby g0blinish » Wed, 13.01.2016 11:27:43

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

Postby TS-Labs » Wed, 13.01.2016 12:05:43

У тебя в голове каша из адреса з80 и физического адреса.
Еще раз (пишу просто так, не надеясь на взаимность и понимание):

0. Физическая память (4 мегабайта), условно разбита на паги по 16 килобайт.

1. Z80
Работает с адресами в диапазоне 64кБ. Этот диапазон разбит на 4 окна по 16кБ.
Какая пага физической памяти видна в каждом окне задают регистры Рage0..3.

2. DMA
Работает с физическим адресом в диапазоне 4МБ (22 бит), ибо не ограничена, как проц в 64кБ.

3. Графика, спрайты
Тоже работают с физическими адресами, старшие биты адреса задаются в соответствующих регистрах паг (SGPage, TxGPage etc).
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby AndyD » Wed, 13.01.2016 12:35:22

Адрес задаешь в регистрах источник (DMASH #1BAF и DMASL #1AAF) + пага где это находится (DMASX #1CAF), так же и приемник куда кидаешь DMADL #1DAF DMADH #1EAF DMADX #1FAF страницы переключать не надо,не нужно их включать для зетника ,переслал данные,потом для з80 включил страницу куда переслал ,а там уже все есть.

Вопрос про прерывания,VBI ответил так:ты можешь вызвать свой код сразу по завершению пересылки дма. это и будет прерыванием.
если у нас включен бит обработки прерывания от дма - то по завершению пересылки будет вызван обработчик, всё
а если этот бит выключен - то обработчик не вызывается :)
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby g0blinish » Sat, 16.01.2016 19:17:51

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

Postby VBI » Sun, 17.01.2016 11:47:06

а чем отличается чистка памяти от чистки экрана?
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Sun, 17.01.2016 12:44:15

VBI wrote:а чем отличается чистка памяти от чистки экрана?


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

Postby psb » Sun, 17.01.2016 13:17:06

VBI wrote:а чем отличается чистка памяти от чистки экрана?

тем что память не рисуется, а экран рисуется:)
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby AndyD » Sun, 17.01.2016 13:28:35

g0blinish смотри у тебя в памяти лежит картинка начинается со страницы указанной VPage и идет по порядку,для 16цветной картинки 360х288=103680/2=51840 50кБайт/16кб = 4 страницы,вот и чисти от VPage до VPage+4,256цветные также но в 2раза больше страниц надо пройтись.
А там же строка 512,тогда 512х288 =4.5 страницы ,5 страниц в цикле.
Просто разница (просто памяти) и VPage,в том ,что VPage всегда должна начинаться с четной страницы основной памяти ,8 для 16цветов и четной 16 для 256цветов ,вроде так.
Last edited by AndyD on Sun, 17.01.2016 13:45:46, edited 2 times in total.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby g0blinish » Sun, 17.01.2016 13:29:29

Да это я знаю, с дма не выходит. Обойдусь 320х240 штоле.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby AndyD » Sun, 17.01.2016 14:36:43

ld bc,#13af
ld a,#10
out (c),a
xor a
ld hl,#c000
ld (hl),a
inc l
ld (hl),a
ld b,32
loop push bc
ld hl,clear512
call copyDMA
xor a
ld (qqw+1),a
ld a,(dst0+1)
add a,#02
ld (dst0+1),a
pop bc
djnz loop
ld b,5 ;количество страниц
loop1 push bc
ld hl,clear16
call copyDMA
ld a,(vpage1+1)
inc a
ld (vpage1+1),a
pop bc
djnz loop1
ret
copyDMA ld bc,#27AF
DMA_busy in (c)
jp m,DMA_busy
;ld c,#AF
.m1 ld b,(hl)
inc hl
inc b
ret z ; JR z,dma_stats
outi
JP .m1
clear512 db #1a,0
src0 db #1b,0
vpage0 db #1c,#10
qqw db #1d,2
dst0 db #1e,0
vpage1 db #1f,#10
dl db #26,#FF ;512байт
bl db #28,#0 ;сколько блоков 512
db #27,%00000001 ;RAM (Src) is copied to RAM (Dst)
db #ff

clear16 db #1a,0
db #1b,0
vpage0 db #1c,#10
db #1d,0
db #1e,0
vpage1 db #1f,#10
dl db #26,#FF ;512байт
bl db #28,#20 ;сколько блоков 512
db #27,%00000001 ;RAM (Src) is copied to RAM (Dst)
db #ff

Вот накидал говнокод,тоже ждал когда гуру свое оптимизированное покажут.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby VBI » Sun, 17.01.2016 15:41:27

AndyD, сильно жестоко. дма сама переключает страницы при транзакциях.
http://hype.retroscene.org/blog/dev/180.html

Очистка (заливка) экрана:
Code: Select all
   
      ld bc,PAGE3
      ld a,Vid_page
      out (c),a
      ld hl,0      ;00 - цвет, заданный в палитре
      ld (#c000),hl
      ld hl,fill_screen
      jp set_ports

fill_screen   defb #1a,0   ;
      defb #1b,0   ;
      defb #1c,Vid_page   ;
      defb #1d,0   ;
      defb #1e,0   ;
      defb #1f,Vid_page   ;

      defb #28,200   ;
      defb #26,#ff   ;
      defb #27,%00000100    ; DMA_FILL
      db #ff


для 360х288 в fill_screen меняем
Code: Select all
      defb #28,288-1   ;
      defb #26,360/2   ;
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Sun, 17.01.2016 16:03:18

Так это только для обнуления 2х байт в начале VPage или вообще просто памяти что надо очистить,кстати после вызова дма есть кучка тактов пока дма работает.
RAM (Dst) is filled with word from RAM (Src) а это заменяет тот мой бред для смещения дест и сорс :ura:
Last edited by AndyD on Sun, 17.01.2016 17:28:10, edited 1 time in total.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby Koshi » Sun, 17.01.2016 16:16:25

копипаста из вц:
NFO text :
GROB
;i: D - buffer start page
    E - buffer end page

        EI:HALT
        LD BC,PW4:OUT D
        LD HL,0,(#C000),HL ;чем заполняем (вообще сурц. можно иметь любой (произвольный), ибо пользуем dma fill)
        LD BC,DMASL:OUT L ;\
        LD B,DMASH[:OUT H ;-младшие 14 бит сурца
        LD B,DMASX[:OUT D ;номер паги сурца

        LD B,DMADL[:OUT L ;\
        LD B,DMADH[:OUT H ;-младшие 14 бит деста
        LD B,DMADX[:OUT D ;номер паги деста

        LD B,DMA_N[,A,255:OUT A
        LD B,DMA_T[,A,31:OUT A ;16кб fill (32*512 байт ([31+1]*256 слов))

BOB     LD B,DMA_C[,A,%00000100:OUT A ;девайс %100 - RAM (Dst) is filled with word from RAM (Src)
        LD B,STS[:INF:JP M,$-2 ;ожидание дма транзакции
        INC D:LD A,D:CP E:JR C,BOB ;заполняем паги, пока не дошли до конца буфера (экранки)
        RET
;-------
PW0     EQU #10AF
PW1     EQU #11AF
PW2     EQU #12AF
PW4     EQU #13AF

DMASL   EQU #1AAF
DMASH   EQU #1BAF
DMASX   EQU #1CAF
DMADL   EQU #1DAF
DMADH   EQU #1EAF
DMADX   EQU #1FAF

DMA_T   EQU #28AF;0=1, 255=256
DMA_N   EQU #26AF;255=512
DMA_C   EQU #27AF;RW 1 - - - 0 0 1
STS     EQU #27AF
MGN Group
User avatar
Koshi
 
Posts: 299
Joined: Thu, 26.07.2012 16:41:52

Postby TS-Labs » Mon, 18.01.2016 00:56:06

Да, на всякий случай напомню, что чистить надо прямоугольное окно экранки, а не ВСЕ паги целиком.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby g0blinish » Mon, 18.01.2016 06:09:29

TS-Labs wrote:а, на всякий случай напомню, что чистить надо прямоугольное окно экранки, а не ВСЕ паги целиком.

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

Postby TS-Labs » Mon, 18.01.2016 13:43:34

Размер бурста в ширину экранки, выравнивание под режим 256/512.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby VBI » Mon, 18.01.2016 16:09:18

любой (произвольный) GROB :lol:
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Mon, 18.01.2016 16:33:36

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

Postby AndyD » Mon, 18.01.2016 16:49:16

Не,ну они издеваются :crazy:
Нет чтоб объяснить по человечески ,специально делают,что бы ты не успел к конкурсу,бояться :badtease:
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby g0blinish » Mon, 18.01.2016 17:26:13

AndyD wrote:Нет чтоб объяснить по человечески ,специально делают,что бы ты не успел к конкурсу,бояться


это ты зря. я с Вовкиной помощью три прода вывалил:)
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Mon, 18.01.2016 19:42:12

Клёвый зощенко)
Народ, ну просто же всё
Заливаем память двумя байтами - словом.
Указываем адрес и пагу, а потом - сколько длина одной линии заливки (льёт сразу 2байта за раз, поэтому наша длина /2), и сколько таких линий всего. То что будет задействовано несколько паг сразу - не беда, дма сама перейдёт на следующую
Еще стоит учесть биты выравнивания. Т.е.задача сводится к отрисовке прямоугольника произвольного размера одним цветом.
Last edited by VBI on Mon, 18.01.2016 19:49:43, edited 1 time in total.
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

x