Просмотр полной версии : DataGear: с чем и как его едят?
Максагор
01.12.2016, 02:03
Приветствую, народ!
Интересует такое интересное устройство как DMA-контроллер DataGear:
http://speccy.info/DataGear
http://velesoft.speccy.cz/data-gear.htm
http://speccy.info/w/images/6/6d/DataGear_Board.jpg
На форуме здесь в разных ветках обсуждения упоминание о нем то тут, то там проскакивало, но какой-то "генеральной" темы по его обсуждению я не нашел. Что на мой взгляд, несправедливо. Ведь, по крайней мере, на первый взгляд, это устройство обладает неоспоримыми преимуществами:
1. Компактно. Очень компактно и предельно просто - две "большие микросхемы-сороконожки" - сам проц и DMA-контроллер, а также 1-2 микросхемы мелкой логики. Т.е. можно спаять буквально "на коленке проводками".
2. Подключается практически к каждому спектруму - по крайней мере к тем, где проц в виде форм-фактора "сороконожка по 20 ног в два ряда" и не намертво припаян к плате (тут увы - пользователям Пентевы, где проц - маленький квадратик, припаянный к материнке, но других исключений пока не знаю) - ибо плата просто вставляется в панельку из-под Z80.
3. При такой простоте и малых размерах позволяет кидать массивы данных в/из порта или перекидывать по памяти со скорость 4 (максимум 8) тактов на байт. А это открывает широчайшие возможности по оперированию графикой, резко убыстряет скорость обмена с винтом и т.д.
Возникает вопрос: почему этот давно уже созданный девайс не нашел у нас (на буржуинские страны говорить не буду - не знаю) до сих пор широкого применения? Ведь был же прецедент с Turbo Sound (FM), который точно также вставляется в панельку из-под AY - девайс быстро приобрел известность - начали под него писать софт, музыку. Пошли с ним конкурсы на демопати и т.д. Что мешает пойти устройству "в народ"? Может быть есть какие-то неучтенные мной подводные камни?
И еще вопрос с точки зрения программиста: может быть тут есть те, кто изучая схему разобрался, а может кто-то и "пощупал" сей девайс собственноручно:
Что делает карточка (перекидывает быстро-быстро массивы данных по памяти и в порты) - понятно. Изучая схему, я понял, что управляется она через порт #0B (а где-то тут на форуме были упоминания и про порт #6B, но на схеме я его не углядел, ну да ладно). Я просто не понял, как именно, используя DataGear, запустить его работу. Например, я хочу перекинуть 6912 байт из верхов памяти в экран аналогично тому, как я это ранее делал через LDIR.
Если раньше это все выглядело как:
LD HL,откуда
LD DE,#4000
LD BC,6912
LDIR
То кто мне подскажет, как будет выглядеть аналогичная по результату процедура при использовании DMA DataGear?
Аналогично с портами. Например, я хочу считать сектор с IDE-винта. Сейчас это так (утрированно):
LD BC, #00nn (конкретный порт IDE, предположим, что все IDE-регистры уже установлены и команда на чтение также послана)
INIR
INIR
И теперь кто мне подскажет, как по аналогии это будет выглядеть при чтении посредством DataGear?
Ну и последний вопрос к железячникам: есть желающие сие устройство производить, учитывая, что по ссылкам есть все нужные PCB-файлы для запуска в серию?
CodeMaster
01.12.2016, 11:07
Ну и последний вопрос к железячникам: есть желающие сие устройство производить, учитывая, что по ссылкам есть все нужные PCB-файлы для запуска в серию?
ИМХО, MV1971 произведёт всё что угодно в "промышленных" масштабах, лишь бы был спрос.
Максагор
01.12.2016, 14:00
ИМХО, MV1971 произведёт всё что угодно в "промышленных" масштабах, лишь бы был спрос.
Вот предлагаю всем сюда заглядывающим юзерам реального железа обсудить вопрос: а оно нам надо?
P.S. отдельно повторяю вопрос о том, как это все работает с точки зрения программиста? - тут у меня неясности.
Вот предлагаю всем сюда заглядывающим юзерам реального железа обсудить вопрос: а оно нам надо?
P.S. отдельно повторяю вопрос о том, как это все работает с точки зрения программиста? - тут у меня неясности.
Как бы это устройство не на каждый комп налезет, вернее если использовать мультиколор, так как в основоном имеющиеся демо расчитаны на трансфер
в 4 такта (2 такта на чтение и 2 такта на запись) и не все компы смогут это осилисть из за несовпадения фаз записи в память без артифактов
Напомню что минимально коректное число тактов для клоков совпадающих с RAS/ - это 3 такта. Тоесть при любой ситуации в память запишутся данные.
Я на Фениксе пробовал, вот мультиколор там и не пошел.
А больше 4 тактов мультиколор развалится.
Кроме того у чипа нет ввода RESET. Иными словами, если трансфер не завершен, то шина не освободится никогда и даже если нажать на кнопку сброс компьютера. Поможет только выключение питания. Тоесть эту схему надо дорабатывать на предмет отсоединения сисналов захвата шины при сбросе, чтобы процессор смог проинициализировать систему.
Если работать с портами, то вполне модет сгодится и вроде на сайте Велесофта есть Easy HDD.
Кроме того там же есть примеры вывода мультиколора (Multitech) c сырцами.
Вот к примеру один из них:
org 0CB20h
MLT_Viewer_Init:
di
ld hl,0FE00h
ld de,0FE01h
ld bc,100h
ld (hl),0CBh ; '╦'
ldir
ld a,0FEh ; '■'
ld i,a
im 2
ld de,4000h
ld hl,0CE00h
ld bc,1800h
ldir
ei
MLT_Viewer_Loop:
halt
xor a
in a,(0FEh)
cpl
and 1Fh
jr z,MLT_Viewer_Loop
ld a,3Fh
ld i,a
im 1
ret
org 0CBCBh
MLT_Viewer_Interrupt:
push af
push bc
push de
push hl
push ix
ld d,1Dh
ld e,0E6h
push de
ld hl,5800h
push hl
ld hl,MLT_Viewer_Data_0
ld b,14h
ld c,6Bh
otir
ld hl,5820h
ld de,0E700h
ld b,17h
loc_0_CBEB:
push bc
ld (MLT_Viewer_Addr_Src),de
ld (MLT_Viewer_Addr_Dest),hl
push hl
ld hl,MLT_Viewer_Data_1
ld b,9
otir
pop hl
inc d
push de
ld de,20h ; ' '
add hl,de
pop de
pop bc
djnz loc_0_CBEB
ld hl,MLT_Viewer_Data_2
ld b,6
otir
ld b,0C6h ; '╞'
MLT_Viewer_Delay:
djnz MLT_Viewer_Delay
ld bc,206Bh
ld hl,87B3h ;команды Enable DMA + Force Ready
ld de,0CF0Dh ;команда Load
ld a,b
ld xl,18h
out (c),e
out (6Bh),a
MLT_Viewer_Loop_Line:
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
add a,b
out (c),e
out (6Bh),a
out (c),d
out (c),l
out (c),h
xor a
ld e,b
ld d,a
pop hl
add hl,de
pop de
inc e
push de
push hl
ld a,0ADh ; 'н'
out (6Bh),a
out (c),l
out (c),h
ld a,20h ; ' '
out (c),d
out (6Bh),a
out (c),e
ld hl,87B3h ;команды Enable DMA + Force Ready
ld de,0CF0Dh ;команда Load
dec xl
jr nz,MLT_Viewer_Loop_Line
pop hl
pop de
pop ix
pop hl
pop de
pop bc
pop af
ei
ret
MLT_Viewer_Data_0:
db 0C3h ;команда RESET DMA
db 0C7h ;команда Reset Port A Timing
db 0CBh ;команда Reset Port B Timing
;--- WR0 Control Bytes -----
db 7Dh ;настраиваем командный регистр (трансфер A->B)
db 0 ;адрес памяти младший байт
db 0E6h ;адрес памяти старший байт
db 1Fh ;число байт для пересылки младший байт
db 0 ;число байт для пересылки старший байт
;--- WR1 Control Bytes -----
db 54h ;настраиваем командный регистр (трансфер A <- память)
db 2 ;количество циклов на передачу
;--- WR2 Control Bytes -----
db 50h ;настраиваем командный регистр (трансфер B -> память)
db 2 ;количество циклов на передачу
;--- WR3 Control Bytes -----
db 0C0h ;настраиваем командный регистр (Enable DMA)
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
db 0 ;адрес памяти младший байт
db 58h ;адрес памяти старший байт
;--- WR5 Control Bytes -----
db 82h ;настраиваем командный регистр (без WAIT)
db 0CFh ;команда Load
db 0B3h ;команда Force Ready
db 87h ;команда Enable DMA
MLT_Viewer_Data_1:
;--- WR0 Control Bytes -----
db 1Dh ;настраиваем командный регистр (трансфер A->B)
MLT_Viewer_Addr_Src:
dw 0
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
MLT_Viewer_Addr_Dest:
dw 0 ;адрес памяти
db 0CFh ;команда Load
db 0B3h ;команда Force Ready
db 87h ;команда Enable DMA
MLT_Viewer_Data_2:
;--- WR0 Control Bytes -----
db 1Dh ;настраиваем командный регистр (трансфер A->B)
dw 0E600h ;адрес памяти
;--- WR4 Control Bytes -----
db 0ADh ;настраиваем командный регистр (адрес куда будет трансфер)
dw 5800h
.end
Необходимости вроде как не видно в этой железяке.
Прилепить, "чтоб було"?
Максагор
01.12.2016, 17:47
и не все компы смогут это осилисть из за несовпадения фаз записи в память без артифактов
Вот на одном клоне идет, на другом нет. Чем один клон должен отличаться от другого для получения таких разных результатов?
Я на Фениксе пробовал, вот мультиколор там и не пошел.
Как в Фениксе устроена работа с ОЗУ, что получилось именно так? Есть информация по другим отечественным "теплоламповым" клонам - ATM1,2,2+, Профи, KAY, Scorp, Пентагон? С каким из этих клонов может возникнуть проблема и почему? Кто может прокомментировать?
Кроме того у чипа нет ввода RESET. Иными словами, если трансфер не завершен, то шина не освободится никогда и даже если нажать на кнопку сброс компьютера. Поможет только выключение питания. Тоесть эту схему надо дорабатывать на предмет отсоединения сисналов захвата шины при сбросе, чтобы процессор смог проинициализировать систему.
Хммм. Да, это важно.
Я так понимаю, это как раз доработанная схема, где можно блокировать поступление питания через закорачивание штырьков (повесить из на кнопку ресета)?
Хммм. Да, это важно.
Я так понимаю, это как раз доработанная схема, где можно блокировать поступление питания через закорачивание штырьков (повесить из на кнопку ресета)?
Джампер там нужен для выбора порта 0Bh или 6Bh. Там даже написано об этом -> If JP1 is connect, then port 107(#6B) is used.
Так что это не поможет. Нужно ставить что то мультиплексора.
Собственно сорцы галки же есть
DATAGEAR
CHIP datagear gal16v8
A5=1 NC1=2 A4=3 A3=4 A2=5 A1=6 A0=7 M1=8 IORQ=9 GND=10
WAIT=11 BUSRQ=12 DMACS=13 BUSAK=14 NC2=15 LED=16 JP1=17 A7=18 A6=19 VCC=20
EQUATIONS
/DMACS = A0*A1*/A2*A3*/A4*A5*A6*/A7*M1*/IORQ*BUSRQ*/JP1
+ A0*A1*/A2*A3*/A4*/A5*/A6*/A7*M1*/IORQ*BUSRQ*JP1
+ /BUSRQ*/WAIT
/LED = /BUSAK
+ A0*A1*/A2*A3*/A4*A5*A6*/A7*M1*/IORQ*BUSRQ*/JP1
+ A0*A1*/A2*A3*/A4*/A5*/A6*/A7*M1*/IORQ*BUSRQ*JP1
Как в Фениксе устроена работа с ОЗУ, что получилось именно так? Есть информация по другим отечественным "теплоламповым" клонам - ATM1,2,2+, Профи, KAY, Scorp, Пентагон? С каким из этих клонов может возникнуть проблема и почему? Кто может прокомментировать?
В Фениксе клоки процессора идут в фазе с сигналом RAS/, а значит для стабильной работы нужно 3 такта для обращения к памяти. В этом случае память гарантированно запишется или считается.
Тоесть по логике такое не пройдет во всех компах с таким построением. В Пентагоне насколько я помню клоки процессора находятся в той же фазе что и CAS/, то по идее ему 2 тактов должно хватить.
Если судить по сайту велесофта и там упоминается Пентагон, то вроде как работает. Я лично не проверял. Нет Пятногона.
Для работы с портами в принципе хватит любого клона, так как допустим 3 такта на чтение из памяти и 2 такта запись в порт в итоге 5 тактов. Это по любому быстрее чем команда OUT :)
- - - Добавлено - - -
Необходимости вроде как не видно в этой железяке.
Прилепить, "чтоб було"?
И это говорит хвостатый который собрал 6 миникомпов, необходимость которых тоже крайне сомнительна. ;)
Самый главный вопрос, что с доставаемостью Z80 DMA? Зашел, посмотрел на Ali, вроде как не совсем пусто, но и изобилия нет - несколько предложений. Есть риск, что в ближайшее время совсем исчезнут и перейдут в разряд эксклюзива.
Самый главный вопрос, что с доставаемостью Z80 DMA? Зашел, посмотрел на Ali, вроде как не совсем пусто, но и изобилия нет - несколько предложений. Есть риск, что в ближайшее время совсем исчезнут и перейдут в разряд эксклюзива.
У меня валялась упаковка.
На сколько помню 1 Мише отсылал, 1 Евгению, еще несколько штук есть, если очень надо.
8 Мгц есть тут
https://ru.utsource.net/search.aspx?keyWords=Z84C10&page=1
на ибеях надоть искать не 84c10/8410, а z80 DMA, полно.
Извините за офф, а где-то можно в одном месте почитать, про растактовки на разных версиях 48/128k, cas и прочие там регенерации? Спасибо.
Интересная штуковина, кстати. Спасибо, что обратили внимание. Эдакая слабая замена видеопроцессору, но лучше чем вручную пушить экраны. Возможно даже приобрету себе.
По-поводу DMA, я вот ещё на что обратил внимание, когда читал про дисковый контроллер в +3. Во втором же абзаце даташита написано следующее: "Hand-shaking signals are provided in the uPD765A/B
which make DMA operation easy to incorporate with the aid of an external DMA controller chip, such as the uPD8257."
Это же можно почти Коммодор сделать! :) Весь вопрос в том какой "кровью".
VELESOFT
03.12.2016, 01:58
Приветствую, народ!
Интересует такое интересное устройство как DMA-контроллер DataGear:
http://speccy.info/DataGear
http://velesoft.speccy.cz/data-gear.htm
http://speccy.info/w/images/6/6d/DataGear_Board.jpg
On my webpage is old version of DATA-GEAR. Here is more info:
http://oldcomp.cz/viewtopic.php?f=65&t=2657
NMOS Z80DMA chip not contain reset feature, CMOS Z80DMA chip support reset feature on pin M1.
NMOS Z80DMA chip not contain reset feature, CMOS Z80DMA chip support reset feature on pin M1.
Ну хотя бы теперь знаем у каких есть аппаратный reset, а у каких нет.
Максагор
03.12.2016, 19:28
On my webpage is old version of DATA-GEAR. Here is more info:
Be sure to update your site and the scheme!
VELESOFT, do I understand correctly - it will not work with the +3 machines in the current implementation, isn't it? Only with 128k/+2 Grey models? Why I'm asking is because on SML site seller has declared: "DMA interface for ZX Spectrum 128+2 GREY only. Not working with +3 and +2A/B black."
sergio78
03.12.2016, 20:18
И что, прямо так будут софт под этот DMA писать? Я вот сомневаюсь сразу, и думаю что это очередная железка которую только спаять можно, потому что раньше её ещё не паял. Машины времени нет, а сэра Синклера именно тогда, в те года пиннать нужно на установку этого DMA контроллера, так как он чего то зажал его ставить в свой ZX. А сейчас уже поздно, потому что после выпущенной и отлаженной платы, будет только -Уфф, я сделяль!
Максагор
03.12.2016, 21:58
И что, прямо так будут софт под этот DMA писать? Я вот сомневаюсь сразу, и думаю что это очередная железка которую только спаять можно, потому что раньше её ещё не паял. Машины времени нет, а сэра Синклера именно тогда, в те года пиннать нужно на установку этого DMA контроллера, так как он чего то зажал его ставить в свой ZX. А сейчас уже поздно, потому что после выпущенной и отлаженной платы, будет только -Уфф, я сделяль!
Ну как сказать... Пишут же люди поддержку для GS, TSFM и т.д. Почему оони не будут поддерживать и этот прибамбас? тут ведь дело как раз в том, что девайс шибко простой и компактный. Именно поэтому имеет шанс на внедрение - только надо разобраться с упомянутыми проблемами из-за разных подходов к выборке памяти на разных клонах - если у большинства наших машин девайс запустится - то надо, ИМХО, попробовать внедрить. Если нет, то забудем.
Кстати, это я про поддержку в демках в качестве графическоо ускорителя. А если при работе с портами - тогда и не надо широкой поддержки - достаточно написать драйвера по работе с IDE под системы и софт, где такая работа есть TASiS, iS-DOS, CP/M, ERS, WDC и буквально несколько других. И уже будет большой прогресс...
sergio78
04.12.2016, 13:49
Ну как сказать... Пишут же люди поддержку для GS, TSFM и т.д. Почему оони не будут поддерживать и этот прибамбас? тут ведь дело как раз в том, что девайс шибко простой и компактный. Именно поэтому имеет шанс на внедрение - только надо разобраться с упомянутыми проблемами из-за разных подходов к выборке памяти на разных клонах - если у большинства наших машин девайс запустится - то надо, ИМХО, попробовать внедрить. Если нет, то забудем.
Кстати, это я про поддержку в демках в качестве графическоо ускорителя. А если при работе с портами - тогда и не надо широкой поддержки - достаточно написать драйвера по работе с IDE под системы и софт, где такая работа есть TASiS, iS-DOS, CP/M, ERS, WDC и буквально несколько других. И уже будет большой прогресс... вот как раз и не пишут, почти что. Доделок, к старым играм тоже очень мало. У нас вообще почти каждый второй и композитор офигительный, диджей, и стратег гениальный с планировщиком и дизайнером вместе. А как игру написать, целиком и полностью, так сразу программистов почти никого нету. вот по этому все примочки, вандервафли и доработки вроде чудо-видеокарт, к оригинальному спектруму, навсегда останутся в мечтах только их изготовителей. потому что всё эти устремления в итоге только сделал и на полку положил, ну может быть кому то другому страждущему через барахолку загнал, как коллекционное ретро изделие. Кстате сайт сегодня почти не открывается, Ддосят что ли его?
Я так понял, теоретически этот DMA перекидывает данные всего в полтора раза быстрее, чем оптимизированная программа для Z80. Но с учётом того, что его придётся прерывать для регенерации памяти, реальная скорость получится такая же, если не медленнее... Ну и какой тогда смысл в нём???
DenisGrachev
05.12.2016, 06:28
Я так понял, теоретически этот DMA перекидывает данные всего в полтора раза быстрее, чем оптимизированная программа для Z80. Но с учётом того, что его придётся прерывать для регенерации памяти, реальная скорость получится такая же, если не медленнее... Ну и какой тогда смысл в нём???
Будет быстрее, ибо пока DMA кидает байтики z80 может ещё что-нибудь полезное делать :)
Будет быстрее, ибо пока DMA кидает байтики z80 может ещё что-нибудь полезное делать :)
Это каким образом Z80 может заниматься своими делами. Шина данных и адресов то одна, так что он курит в сторонке пока DMA трудится :)
Я так понял, теоретически этот DMA перекидывает данные всего в полтора раза быстрее, чем оптимизированная программа для Z80.
Видимо ты читал через строку тут. Какие в 1,5 раза. В идеале трансфер DMA делает за 4 такта. И за сколько Z80 делает?
Ну и какой тогда смысл в нём???
Max. speed of data transfer on ZX128+ is 17.3 kB(17727 bytes) / frame = 865.6 kB(886350 bytes) / second
вообще память-память не особо практично,туда бы немо хдд прикрутить уже есть http://speccy.info/MB02%2BIDE
http://www.truppel-online.de/Fotos/Seite.html
Может я не правило понял скорость память-память 2 MB/s ?
DMA FUNCTIONAL DESCRIPTION
Features
• Single Highly Versatile Channel
• Dual Port Address Generation with Incrementing, Decrementing, or
Fixed Address in Both Ports
• Buffered Address and Block-Length Registers
• 64 Kbyte Maximum Block Length
• 2.4 or 4 MHz Clock Rates (Z80 or Z80A DMA)
• 1.25 or 2 MB/s Data Rate (Z80 or Z80A DMA)
• Transfer, Search, or Transfer/Search Operations
• Bit-Maskable Byte Searching
• Sequential (Flow-Through) or Simultaneous (Flyby) Transfers
• Compatible with Z80 and Many Other CPUs
• Byte, Burst, and Continuous Modes
• Auto Restart Capability
• Variable Cycle Timing
• Wait-Line Cycle Extension
• Internally Modifiable Interrupt Vectors
• Programmable Interrupts on Ready, End-of-Block, Byte Match
• Hardware Priority Daisy-Chains for Bus Requests and Interrupts
• Periodic Pulse Generation for External Device
• 21 Writeable Control Registers
• Seven Readable Status Register
Programmable Force Ready Condition
• Programmable Active State for Ready Line
• Programmable DMA Enable
• Complete System Bus Mastering
• No External Logic Needed for Sequential Transfers in Z80
Environments
Если что то есть Z84C1008 = 8MHz
А так функционал достаточно большой
Классы эксплуатации
Для z80 ДМА есть три основных класса обслуживания, и двух классов каждый разбит на подклассы следующим образом:
• Перенос данных между любыми двумя ДМА порами:
– Последовательные переводы (проточный)
– Синхронный переводы (облета)
• Поиск для конкретных битов в байт на одного ДМА порта
• Комбинированные переводы и поиски между любыми двумя ДМА порты:
– Последовательный перевод/поиск
Синхронный перевод/поиск
Большинство DMA не управляют системной шиной таким же образом, что процессор контролирует его. Например, многие DMA не имеют простого интерфейс
к системной шине данных, а мультиплекс часть адрес памяти на шину данных, откуда она должна быть защелкиваются внешняя логика. Не самый DMA
генерировать все шины управления сигналы о том, что процессор генерирует, и, следовательно, они лишены какой-то степени управление драйвером, когда они работают.
Для z80 ДМА является уникальным среди 8-разрядных DMA, потому что он генерирует точно такие же шины управляющих сигналов для циклов чтения и записи в том,
что z80 ЦП, и также потому что он имеет точно такие же логические и электрические интерфейс для шины данных и адреса в качестве процессора.
Это означает, что другие компоненты системы не может различить разницу между z80 и ДМА процессора; управление этими устройствами полностью взаимозаменяемы.
Документ http://www.z80.info/zip/um0081.pdf
DenisGrachev
05.12.2016, 16:31
Это каким образом Z80 может заниматься своими делами. Шина данных и адресов то одна, так что он курит в сторонке пока DMA трудится :)
Видимо ты читал через строку тут. Какие в 1,5 раза. В идеале трансфер DMA делает за 4 такта. И за сколько Z80 делает?
Эх, так бы хотелось параллельности :)
По скорости, z80 память-память очень грубо 12 тактов на байт - DMA в 3 раза быстрее. Теоретически, на практике задержки медленной памяти еще :)
Тут подумалось, а DataGear сможет с прозрачным доступом к памяти?
Эх, так бы хотелось параллельности :) Ага, делаем двухядерный спектрум - одно ядро Z80, другое DMA, каждое обращается к памяти/портам через свой кеш с транзакциями :)
По скорости, z80 память-память очень грубо 12 тактов на байт - DMA в 3 раза быстрее Грю же, оптимизированная программа, а то, что вы пишете - это безо всякой оптимизации, тупой ldir. С оптимизацией где-то 6 будет. (читайте Абраша - развёртка циклов, стек...)
Тут подумалось, а DataGear сможет с прозрачным доступом к памяти? DMA на некоторое время заменяет собой процессор. Если оный был с ПДП, то и DMA будет с ПДП (при правильной схемотехнике, конечно...)
Грю же, оптимизированная программа, а то, что вы пишете - это безо всякой оптимизации, тупой ldir. С оптимизацией где-то 6 будет. (читайте Абраша - развёртка циклов, стек...)
Приведи пример как это за 6 тактов из памяти в память можно сварганить. Очень интересно и без посылов куда и где искать. Так сказать пример в студию.
Приведи пример как это за 6 тактов из памяти в память можно сварганить. За 6, наверное погорячился, но за 8 делают: http://zx-pk.ru/threads/22089-memcpy-bystraya-peresylka-dannykh.html?p=640541&viewfull=1#post640541
Но ведь не 12 же...
На WoS за 9 (https://www.worldofspectrum.org/forums/discussion/45321/redirect/p1)
DenisGrachev
06.12.2016, 03:39
За 6, наверное погорячился, но за 8 делают: http://zx-pk.ru/threads/22089-memcpy-bystraya-peresylka-dannykh.html?p=640541&viewfull=1#post640541
Но ведь не 12 же...
На WoS за 9 (https://www.worldofspectrum.org/forums/discussion/45321/redirect/p1)
Всё мимо, братюнь. Нет там ни 8 ни 9-ти :))) Увы, я даже ошибся, не 12, а 12.5 тактов на байт :) быстрее тока лдпуш 10.5, но это вывод данных, а не копирование кусков памяти. Остальное частные случаи повторяющихся данных и вещи часто бессмысленные на практике.
Для z80 ДМА есть три основных класса обслуживания, и двух классов каждый разбит на подклассы следующим образом:
• Перенос данных между любыми двумя ДМА порами:
– Последовательные переводы (проточный)
– Синхронный переводы (облета)... Лучше бы вы не переводили:)
sergio78
10.12.2016, 12:47
ну вот, всё и затихло прогнозируемо.
А что ты хотел, человек спросил что и как. Ему объяснили что и как.
Да и вообще все тут прогнозируемо, что теперь молчать.
sergio78
10.12.2016, 14:03
А что ты хотел, человек спросил что и как. Ему объяснили что и как.
Да и вообще все тут прогнозируемо, что теперь молчать.
не-не-не. Я просто прокапитанничал, и только. Самому молчать невтерпёж оказалось.
Заинтересовался этой штукой и в процессе изучения (тренировался на кошках),переделал демку (DMA DEMO LEVEL 2 by Busysoft) под TS-conf DMA.7248359011
так хоть на ютуб выложи, чтоб остальные ахнули, как круто на TS-конфе смотрится и ломанулись заказы делать :)
Кто знает, какие-нибудь эмуляторы поддерживают DataGear?
Максагор
11.12.2016, 20:00
ну вот, всё и затихло прогнозируемо.
Да нет. Я просто по итогам дискуссии в личке запросил VELESOFTа модернизированную схему DataGear, учитывающую сигнал RS. Пока ответа нет - вот, жду... В зависимости от наличия схемы, возможно, будет прорабатываться вопрос целесообразности внедрения сабжа в новую разрабатываемую сейчас Zorel'ом версии платы ATM-turbo 2+
Да нет. Я просто по итогам дискуссии в личке запросил VELESOFTа модернизированную схему DataGear, учитывающую сигнал RS. Пока ответа нет - вот, жду... В зависимости от наличия схемы, возможно, будет прорабатываться вопрос целесообразности внедрения сабжа в новую разрабатываемую сейчас Zorel'ом версии платы ATM-turbo 2+
По логике, чтобы не зависеть от NMOS или CMOS микрухи DMA, нужно мультипликсировать сигналы захвата шины. И по сбросу принудительно освобождать их, чтобы процессор смог реанимировать систему.
- - - Добавлено - - -
Заинтересовался этой штукой и в процессе изучения (тренировался на кошках),переделал демку (DMA DEMO LEVEL 2 by Busysoft) под TS-conf DMA.
Только речь идет скорее всего про DMA TS конфы, а не живой микрухе DMA. А это совсем другой подход, чистой воды читерство. :)
Только речь идет скорее всего про DMA TS конфы, а не живой микрухе DMA. А это совсем другой подход, чистой воды читерство.
Mick ,так я так и сказал ,под TS dma ,т.к. другого дма у меня нет.А в чем читество?демка интересная,почему бы ее в живую не посмотреть,да и поучиться у Busysoft.
я там перезалил,Sergey78 заметил мой костыль,пришлось доделать.
Mick ,так я так и сказал ,под TS dma ,т.к. другого дма у меня нет.А в чем читество?демка интересная,почему бы ее в живую не посмотреть,да и поучиться у Busysoft.
я там перезалил,Sergey78 заметил мой костыль,пришлось доделать.
Я просто уточнил. Да и про читерство я сказал с иронией :)
Понятное дело, что под TS конфу глупо ставить реальный камень, который больше будет тормозом чем ускорителем.
под TS конфу глупо ставить реальный камень, который больше будет тормозом чем ускорителем.
2 дма работающие в паралель,такого небыло еще ни в одном клоне,только ни кому это не нужно,на ревизиях EVO "В" зетник диповый ,туда можно воткнуть сей девайс,на С паять придется.
так хоть на ютуб выложи, чтоб остальные ахнули, как круто на TS-конфе смотрится и ломанулись заказы делать :)
На +2
https://www.youtube.com/watch?v=eiD45DRGtuI&t=185s
]
И теперь кто мне подскажет, как по аналогии это будет выглядеть при чтении посредством DataGear?
в даташите есть все,но нет примеров
так в двух словах,
чтобы переслать блок данных из памяти в память шлем в порт DMA #0B по порядку такую кучку байтиков
db 0xc3 ;R6-RESET DMA
db 0xc7 ;R6-RESET PORT A Timing
db 0xcb ;R6-SET PORT B Timing same as PORT A
db 0x7d ;R0-Transfer mode
dw 0x00 ;R0-Port A, Start address откуда 2 байта например #C000
dw wdth ;R0-Block length длинна блока 2 байта,например #1800
db 0x54 ;R1-Port A address incremented, variable timing
db 0x02 ;R1-Cycle length 2T
db 0x50 ;R2-Port B address incremented, variable timing
db 0x02 ;R2-Cycle length 2T
db 0xad ;R4-Continuous mode
dw 0x00 ;R4-Port B, Start address Куда кидаем данные ,например #4000
db 0x8a ;R5-Stop on end of block, RDY active high
db 0xcf ;R6-Load
db 0xb3 ;R6-Force Ready
db 0x87 ;R6-Enable DMA команда старт,после неё врубается дма ,а проц отключается.
Симпатишно, главное чтоб было что на ней смотреть, как правильно написали. Тогда и заказать можно будет.
Максагор
12.12.2016, 21:58
По логике, чтобы не зависеть от NMOS или CMOS микрухи DMA, нужно мультипликсировать сигналы захвата шины. И по сбросу принудительно освобождать их, чтобы процессор смог реанимировать систему.
Пример схемы можешь привести?
Пример схемы можешь привести?
Попробую нацарапать.
- - - Добавлено - - -
Поразмышлял немного и вот о чем думаю.
По сути принудительное отлючение сигналов BUSACK/ и BUSRQ/ от DMA в момент сброса ничего не даст кроме того, что проц сможет работать.
Сам DMA не сможет откликнутся пока не закончится операции трансфера. У него вход выбора кристалла совмещен с входом WAIT и разделяется доступ к ним по сигналу BUSRQ/.
Тоесть, когда DMA выставил на BUSRQ/ = 0, то на этом входе он ждет сигнал WAIT, а не CS. Тоесть в этот момент к нему не достучаться.
Получается, что действительным способом для сброса DMA может служить только отключение питания. Иными словами похоже в момент сброса DMA надо немного обесточить.
Вроде как то так, но могу конечно ошибаться.
- - - Добавлено - - -
С другой стороны в даташите написано, что сигнал WAIT начинает обрабоатываться после того как процессор уведомит по BUSACK, что шину освободил.
Chip Enable and Wait (input, active Low). Normally, this functions only as
a CE line, but it can also be programmed to serve as aWAIT function. As a
CE line from the CPU, this pin becomes active when IORQ is active and
the I/O port address (up to 16 bits) on the system address bus is the DMA’s
address, thereby allowing control bytes to be written from the CPU to the
DMA. As a WAIT line from memory or I/O devices, after the DMA has
received a bus acknowledge (BUSACK) from the CPU, this pin causes wait
states to be inserted in the DMA’s operation cycles, thereby slowing the
DMA to a speed that matches the memory or I/O device. The Applications
chapter contains a description of how the CE and WAIT inputs can be
multiplexed by the CPU’s BUSACK line.
Тогда может если оторвать все таки BUSACK и BUSRQ от DMA, то вполне можем и достучаться.
Это короче надо пробовать :)
Попробую нацарапать.
- - - Добавлено - - -
Тогда может если оторвать все таки BUSACK и BUSRQ от DMA, то вполне можем и достучаться.
Это короче надо пробовать :)
http://maben.homeip.net/static/S100/zilog/z80/Z80%20Microcomputer%20System%20SGS.pdf
Еще вот так
Modes of Operation
The DMA may be programmed for one of three modes of
operation. (See Command Register 2B.)
• Byte at a time. control is returned to the CPU after each
one-byte cycle
• Burst: operation continues as long as the DMA's RDY
input is active, indicating that the relevant port is ready
Control returns to the CPU when RDY is inactive or at
end of block or a match if so programmed
• Continuous: the entire Search and/or Transfer ofa block
of data is completed before cont rol is returned to CPU
Totem, оверквотинг! Зачем два раза подряд повторять одно и то же???
Totem, оверквотинг! Зачем два раза подряд повторять одно и то же???
Что я упустил, не доглядел?
Избыточное цитирование - вы заставляете нас два раза подряд читать одно и то же! Зачем вы это делаете? Не цените наше время???
Избыточное цитирование - вы заставляете нас два раза подряд читать одно и то же! Зачем вы это делаете? Не цените наше время???
а все ,понял, "эксюми муа" как говорят у нас в деревне.
в регистре 2С задается, СЕ only, CE/WAIT,
в регистре 2С задается, СЕ only, CE/WAIT,
А если не задать, надо ориентироваться на случай от дурака. ;)
А если не задать, надо ориентироваться на случай от дурака. ;)
pin RESET есть в plcc корпусе :)
Максагор
13.12.2016, 21:35
pin RESET есть в plcc корпусе
Ну значит при реальном производстве надо будет брать этот чип. Осталось понять, насколько он редкая или распространенная птица...
Редкая, редкая. 10$ за штуку с доставкой
собственно мне не понятно, что даст RESET?
освобождать шину в burst ?
собственно мне не понятно, что даст RESET?
освобождать шину в burst ?
DMA должен по ресету освобождать шину, чтобы проц смог стартовать.
А можно глупый вопрос? А эту DMA никак нельзя подключить к разъему расширения спектрума? Или там каких-то выводов не хватает?
А можно глупый вопрос? А эту DMA никак нельзя подключить к разъему расширения спектрума? Или там каких-то выводов не хватает?
Можно, у меня в Профкарте так и сделано. На шине Nemo Bus он висит. Единственно что надо учитывать так это чтобы туда выходил сигнал клоков процессора.
Спасибо за ответ!
И еще вопрос вдогонку - а для фирменного 48к тоже можно? Там ula притормаживает проц, по схеме не понять что на zx-bus приходит.
Спасибо за ответ!
И еще вопрос вдогонку - а для фирменного 48к тоже можно? Там ula притормаживает проц, по схеме не понять что на zx-bus приходит.
Насколько я понял, изначально DMA применили в плате MB02+ а уж потом Велесофт сделал свою версию.
Так вот MB02+ предназначалась как раз для шины расширения. На 48к вроде все сигналы есть для этого.
там на видео ,что выше выкладывали видно 1 проводок в спек идет,наверно клок,плата в zx bus воткнута.
DMA должен по ресету освобождать шину, чтобы проц смог стартовать.
Когда возникает такая ситуация?
http://velesoft.speccy.cz/other/zx_bus_video.png
Судя по таблице, clock присутствует во всех вариантах zx-bus.
Когда возникает такая ситуация?
Когда комп зависает после неудачной работы c DMA.
Когда комп зависает после неудачной работы c DMA.
в Gear пин RDY висит на "плюсе", если он задан в регистре active hight, то в некоторых режимах шину не освободит получается?
Еще и в mem-to-mem можно "игнорить" pin сказав в регистр force ready
Еще не осилил весь документ, но в таком случае транзюк, сигнал reset и корпус логики? по питанию дергать.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot