Вход

Просмотр полной версии : Аппаратная запись в память Спека



newart
05.08.2013, 11:51
Беру произвольный 48к спек с системной шиной.

Хочу через системный разьем подключить ардуину и писать в память спека нужные мне данные. Для начала в область экрана.

Как это можно сделать?

Я так понимаю нужно юзать контакты A0-A16? Но у ардуины нет столько ног. Что делать? А еще ведь D0-D7 нужно использовать?

BYTEMAN
05.08.2013, 12:21
newart, тормозится процессор по BUSRQ. Ожидается BUSACK. После этого по идее процессор остановлен, шина в нашем распоряжении. Точнее, в распоряжении видеоконтроллера. Как сделать так, чтобы доступ к памяти со стороны твоего устройства и видеоконтроллера не пересекался я хз :(

Дмитрий
05.08.2013, 12:21
newart, нужно организовать, т.н. ПДП (DMA). Почитай про ноги Z80 /busrq, /busac в DataSheet.

ZEK
05.08.2013, 13:22
Не потянет

newart
05.08.2013, 13:35
Как сделать так, чтобы доступ к памяти со стороны твоего устройства и видеоконтроллера не пересекался я хз
Да пусть пересекается. К чему это приведет?

---------- Post added at 13:34 ---------- Previous post was at 13:34 ----------


Не потянет
Что не потянет? У меня нет задачи 100 fps видео крутить.

---------- Post added at 13:35 ---------- Previous post was at 13:34 ----------


newart, нужно организовать, т.н. ПДП (DMA). Почитай про ноги Z80 /busrq, /busac в DataSheet.
Мне бы чего попроще. Потери данных при записи не страшны.

BYTEMAN
05.08.2013, 13:36
Да пусть пересекается. К чему это приведет?
ну, например видеоконтроллер будет читать данные из озу а ты одновременно попытаешься туда чего записать.

ZEK
05.08.2013, 13:54
У меня нет задачи 100 fps видео крутить
у тебя есть задача очень четко влезть в цикл 280нс, причем фик с ним с одним циклом, тебе фазу терять нельзя будет и на wait реагировать, не потянет

---------- Post added at 12:54 ---------- Previous post was at 12:45 ----------

более реально сэмулировать каке нить пзу на 128/256 бай, что бы там был загрузчик, который себя переписывает в память и уже исполняясь из памяти через порт читал данные, да и то хитро надо будет делать, порциями по 128/256 байт читать, потом пауза что бы мега в подготовила следующую табличку в памяти 256 итд, запускать процесс по сбросу, причем в цикле пока мега отдает 256 байт она ничем заняться не сможет, прерывания все вырубить надо будет и крутиться в цикле из 4-5 команд

newart
05.08.2013, 14:00
ну, например видеоконтроллер будет читать данные из озу а ты одновременно попытаешься туда чего записать.
И? Чем черевато? Глитчем? Так это только плюс.

ZEK
05.08.2013, 14:06
И? Чем черевато?
тем что некоторые байтики записаны не будут, а если в компе еще и приоритет wr пред rd то может быть что получится ситуация что два выхода будут на одной шине, что есть гут, либо будет писать куда нить отфонаря

newart
05.08.2013, 14:16
тем что некоторые байтики записаны не будут, а если в компе еще и приоритет wr пред rd то может быть что получится ситуация что два выхода будут на одной шине, что есть гут, либо будет писать куда нить отфонаря
Это не страшно.

---------- Post added at 14:16 ---------- Previous post was at 14:16 ----------

Целостность данных меня не волнует.

ZEK
05.08.2013, 14:43
Это не страшно.
так бы и обозвал тему, "как спалить произвольный спектрум при помощи ардуины через системный разъем"

CodeMaster
05.08.2013, 14:44
Целостность данных меня не волнует.

Вячеслав делает дему с аппаратными спецэффектами...

ZEK
05.08.2013, 14:50
Вячеслав делает дему с аппаратными спецэффектами...
тогда ему надо решить сначала задачи
1. Определить по сигналам с шины к чему подключен (хотя бы логику арбитра памяти)
2. Для клонов с остановом клока ему еще надо будет определить в каком состоянии видеогенератор тру спектрумов

Это аппаратно напряжно, а софтово на 16-20мгц меге - маловероятно

CodeMaster
05.08.2013, 15:02
тогда ему надо решить сначала задачи

Это только мои догадки, другого практического применения сего изврата я пока не увидел. Хотя с другой стороны, если это дема, то она может наладить связь с мегой и рулить её движениями. Либо это задумывается чисто "аппаратная" дема :-/

ZEK
05.08.2013, 15:07
тогда только под наши безвейтовые клоны, там арбитр памяти в некоторых рамках подстраивается под то что творит проц или кто за него

research
05.08.2013, 16:07
1) хм.. можно обыграть ардуину как "пзу" и стеком с нее "читать", например.
Я обдумывал замену атмегой ПЗУ, т.к. РФки искать и шить запарно. В теории с геморроем, но должно получиться.

2) DMA мутить трудозатратно, но не невыполнимо, у 128к 2 экрана, и пока видеоконтроллер дрючит основной экран, можно гадить в теневой.

3) Самый халявный вариант, таки INI. 2/3 экрана 64000 тактов. еще на музычку останется.

4) выдрать из панельки зетник, воткнуть вместо него ардуину :) Она станет процом, а остальное будет видеть как набор периферии. Будет Sky Net

psb
05.08.2013, 16:49
я не шарю сильно, но проц же не знает, какая там логика в компах, он же тупо выставляет на шину адрес + сигнал записи в память по своей временной диаграмме. почему не захватив шину делать так же? или логика в спеке сильно заточена под времянки проца и даже +-1 такт все сломает?

research
05.08.2013, 17:19
Проц надо вовремя тормознуть, тогда он не будет долбиться в память.
В память будет долбиться видеоконтроллер и схема регенерации, т.к. обновление экрана со скоростью 50Гц никто не отменял, а ОЗУ - динамическое.

Мегу, в идеале, тактировать от спековского генератора 14МГц, чтобы фазы совпадали и были кратными. Но ардуина тут плохой помощник, у него свой генератор.

ZEK
05.08.2013, 17:36
почему не захватив шину делать так же? или логика в спеке сильно заточена под времянки проца и даже +-1 такт все сломает?
даже полтакта


DMA мутить трудозатратно, но не невыполнимо, у 128к 2 экрана, и пока видеоконтроллер дрючит основной экран, можно гадить в теневой.
ключевой момент что шина данных одна на 2 экрана, процессор, регистры защелки памяти итд и пофик какой экран выводится

---------- Post added at 16:36 ---------- Previous post was at 16:35 ----------


Проц надо вовремя тормознуть, тогда он не будет долбиться в память.
в резинках проц тормозят остановом клока, по определенным фазам луны улы

В клонах с прозрачных доступом проца к памяти ула подстраивается под проц, а не подстраивает проц под себя, поэтому и писал про безвейтовые компы, но фазу RAS/ всеравно надо, по ней переключаются фазы проц/ула

newart
05.08.2013, 18:42
1) хм.. можно обыграть ардуину как "пзу" и стеком с нее "читать", например.
Нельзя.
Есть условие - спектрум используется как аналоговый девайс, то есть без программирования.

Процессор вообще можно было бы вырезать, но он в качестве генератора нойза может тоже оказаться интересным.

---------- Post added at 18:42 ---------- Previous post was at 18:35 ----------

Что-бы не порождать лишних загадок - делаю я нечто среднее между этим

http://www.youtube.com/watch?feature=player_detailpage&v=igdj6KrRGfQ&t=58

и

этим http://www.youtube.com/watch?feature=player_detailpage&v=BCzzgjdH0JU&t=60

Есть еще мысль как-то связать два спектрума между собой. Что-бы нормальная работа каких то программ порождала нойз на втором спектруме.

Ардуина во всем это безпределе не главный элемент, можно и без нее.

newart
05.08.2013, 23:09
Окончательно раcпугал железячников. :)

Дмитрий
05.08.2013, 23:41
newart, берешь ZSMC (http://zx-pk.ru/showthread.php?t=10952) и программишь под свои нужды, что правда не под фирменный спек, а под Pent/KAY и пр... а так твои условия выполняются - устройство рисует на экране с помощью ПДП.

Mick
06.08.2013, 08:47
В клонах с прозрачных доступом проца к памяти ула подстраивается под проц, а не подстраивает проц под себя, поэтому и писал про безвейтовые компы, но фазу RAS/ всеравно надо, по ней переключаются фазы проц/ула

Еще бы знать клоны спека с прозрачным доступом :)

В основном, отечественные спекки построены по синхронной модели, т.е. никто не под кого не подстраивается. Все четко разделено на фазы с четкими времянками. Даже использование вайта укладывается в ту же модель без проблем.

По сути можно и на Атмеге подстроится под необходимый спек. Нужно только синхронно выдавать сигналы чтения и записи. Для начала можно подстроится по импульсу M1, который длится 2 такта - т.е. определить когда приходят клоки на проц. Настраиваешь таймер меги на те же клоки. И все операции записи и чтения, т.е. выставление на шину данных и адресов синхронизировать по тому таймеру. Ну и анализ вайта и на всякий случай тоже необходим. Как это сделать программно, другой вопрос. И кстати на запись данных ориентируйся на 3 такта Z80 как минимум, тогда ты точно попадешь в память. 2 такта для синхронных машин - слишком муторно, нужна синхронизация еще и по фазам видео/проц, в простонародии H1

newart
06.08.2013, 16:09
По сути можно и на Атмеге подстроится под необходимый спек. Нужно только синхронно выдавать сигналы чтения и записи. Для начала можно подстроится по импульсу M1, который длится 2 такта - т.е. определить когда приходят клоки на проц. Настраиваешь таймер меги на те же клоки. И все операции записи и чтения, т.е. выставление на шину данных и адресов синхронизировать по тому таймеру. Ну и анализ вайта и на всякий случай тоже необходим. Как это сделать программно, другой вопрос. И кстати на запись данных ориентируйся на 3 такта Z80 как минимум, тогда ты точно попадешь в память. 2 такта для синхронных машин - слишком муторно, нужна синхронизация еще и по фазам видео/проц, в простонародии H1
Из этого всего следует что самый простой вариант это вообще отключить Z80?

Mick
06.08.2013, 16:12
Если он тебе там не нужен, то можно просто вытащить из панельки. А если нужен, то рули захватом шины.
Только в первом случае тебе придется самому пытаться определить фазу клоков, а во втором. Сначала смортишь как работает проц по дергиваниям M1 а затем его просто блокируешь захватом шины.

ZEK
06.08.2013, 16:43
Ток задача изначально была - произвольный спек, а резинки это останов клока

И таймер даже если подстроит то всеравно траблы будут, фазы разползуться, проц наверное стоит оставить, периодически отпускать его от захвата шины и подстаивать фазу, в общем гемор еще тот

Mick
06.08.2013, 16:58
И таймер даже если подстроит то всеравно траблы будут, фазы разползуться, проц наверное стоит оставить, периодически отпускать его от захвата шины и подстаивать фазу, в общем гемор еще тот

Ну автор вроде сложностей не боится :)

TSL
07.08.2013, 01:25
На самом деле, нет ничего проще.
Необходимо только взять клок хоста, чтоб не генерить в схему рандомные глитчи.
Клоков может быть 2:
1. Клок з80 на клок АВР. Который к тому же тормозится на резинках, а следовательно вообще не нужно переживать за тайминги, достаточно лишь повторять машциклы з80. Недостаток метода: слоупочная атмелка на 3.5МГц.
2. Клок 14МГц на клок АВР, клок з80 на ИО. 14МГц практически достается в любых клонах (кроме пентевы, но и там лечится одной перемычкой и патчем в конфу). В этом случае также нужно просто изображать циклы, но синхронизироваться с клоком/вейтом.
В общем, задача для первоклассника :)

---------- Post added at 00:25 ---------- Previous post was at 00:22 ----------

В сумме: атмелка ОБЯЗАНА делать 2 вещи:
1. Повторять машциклы з80.
2. Делать это синхронно с его клоком.

Shaos
07.08.2013, 07:16
Беру произвольный 48к спек с системной шиной.

Хочу через системный разьем подключить ардуину...

Зачем тебе это тормозилово с микроскопической памятью? Поставь хотя бы PIC32 (http://nedocon.com/store/ncpu32/)...

TSL
07.08.2013, 07:23
Ну давайте уже поставим Allwinner A10 (для нищебродов подойдет и 8-ядерный p8x32a - Parallax Propeller - за 5 баксов)

Mick
07.08.2013, 08:57
8-ядерный p8x32a - Parallax Propeller - за 5 баксов)

Что то смутно я представляю, зачем такое чудо создано. В чем прикол 8 ядер при мизерной памяти ROM и ОЗУ

TSL
07.08.2013, 09:34
Прикол вероятно в том, что есть вагон мелких тасок, которые тот же зетник выполняет, бегая как *****й веник по подпрограммам и интам, и которые можно раздать ядрам, которые весьма универсальны, чтоб быть чем угодно и выполнять быстро что угодно. ВНЕЗАПНО, так же устроены шейдыры в современных видеокартах. Наверное, им бы следовало вместо 200 ядер повесить один пентиум. Надо им сказать.
Памяти у них совсем не мало - по 2 кило на литсо.

Shaos
07.08.2013, 09:37
Ну давайте уже поставим Allwinner A10 (для нищебродов подойдет и 8-ядерный p8x32a - Parallax Propeller - за 5 баксов)

A10 в DIP-копусе нету, а пропеллер слишком особенный - для него даже на нормальных сях не покодишь...

TSL
07.08.2013, 09:38
Ой, когда это спектрумщиков останавливали такие мелочи... :)

Mick
07.08.2013, 10:01
Памяти у них совсем не мало - по 2 кило на литсо.

Ну и что это дает, если всего памяти на всех 32кб.

TSL
07.08.2013, 10:02
А скока надо?

Mick
07.08.2013, 10:09
А скока надо?

Мне трудно сказать, я лично с этим микроконтроллером не сталкивался но 32 кб на 8 ядер явно маловато будет. :)

Вот, к примеру, что бы он мог делать в спектруме?

TSL
07.08.2013, 10:10
А что ему делать в спектруме?.. (чешу репу)
А propos, что ему делать:
http://www.findthatfile.com/search-2920911-hMP4/video-download-lft-turbulence-h264-capture-720x576-mp4.htm

Mick
07.08.2013, 20:38
http://www.findthatfile.com/search-2920911-hMP4/video-download-lft-turbulence-h264-capture-720x576-mp4.htm

Как то не верится что эта фигня в 32кб вертится.

TSL
07.08.2013, 20:44
А то, что эта (http://www.youtube.com/watch?v=V9UdENDpXzw) фигня крутится в ПЗУ 8кБ и ОЗУ 512 байт и программно генерит на лапах ПАЛ-видео (4.43МГц, квадратурная модуляция) - верится? :)

---------- Post added at 19:44 ---------- Previous post was at 19:40 ----------

Извините, ошибся, вот где ПАЛ: http://www.youtube.com/watch?v=sFCxV5PsusQ

Mick
07.08.2013, 20:54
А то, что эта (http://www.youtube.com/watch?v=V9UdENDpXzw) фигня крутится в ПЗУ 8кБ и ОЗУ 512 байт и программно генерит на лапах ПАЛ-видео (4.43МГц, квадратурная модуляция) - верится? :)

---------- Post added at 19:44 ---------- Previous post was at 19:40 ----------

Извините, ошибся, вот где ПАЛ: http://www.youtube.com/watch?v=sFCxV5PsusQ

Честно сказать, не верится. Но автор видимо гениален, раз на микроконтроллерах такое вытворяет.

TSL
07.08.2013, 21:00
Сорцы некоторых демок доступны на сайте автора, остальные видимо буду доступны со временем.

---------- Post added at 19:57 ---------- Previous post was at 19:57 ----------

Craft и Phasor я лично запускал на картонке у себя дома.

---------- Post added at 20:00 ---------- Previous post was at 19:57 ----------

Еще добавлю, что многие девайсы (например хаб для GPRS модема, который обеспечивает опрос и2ц слейвов и передает инфу на сервак через оный модем) прекрасно умещаются у меня в ту же атмегу8, с 512 байт памяти.

Mick
07.08.2013, 21:03
Сорцы некоторых демок доступны на сайте автора, остальные видимо буду доступны со временем.

---------- Post added at 19:57 ---------- Previous post was at 19:57 ----------

Craft и Phasor я лично запускал на картонке у себя дома.

---------- Post added at 20:00 ---------- Previous post was at 19:57 ----------

Еще добавлю, что многие девайсы (например хаб для GPRS модема, который обеспечивает опрос и2ц слейвов и передает инфу на сервак через оный модем) прекрасно умещаются у меня в ту же атмегу8, с 512 байт памяти.


Старею, признатся удивили. А тот автор чем то на KOE похож, ему бы бородку - точняком бы был KOE :)

TSL
07.08.2013, 21:42
Дада :) КОЕ - типичный скандинав ))

Hacker VBI
07.08.2013, 22:14
Этот Линус ещё и 4 канала звука генерит в процессе...
8,5 кб, говоришь?

TSL
07.08.2013, 23:43
Чо "я говорю". Возьми да прочитай спецификацию МК.
На самом деле, у атмела очень некислая архитектура. Инструкции в основном 1-тактовые, куча прерываний. Ему и париться особо не надо: повесил 15625Гц ИНТ, на нем программирует ШИМы для выходов. На других ИНТ-ах висят видео-стробы.
Я сам выводил с атмеги128 на ВГА картинку вполне годного качества.

---------- Post added at 22:43 ---------- Previous post was at 22:40 ----------

А вот пропеллер как раз отличается от атмела в том плане, что каждое ядро можно оформить отдельным интерфесом. Конкретный пример: в моем проекте мне нужно 3 интерфейса I2C. У атмела НЕТ таких авр8. Выпить йаду. А на пропеллере - реализация и2ц занимает (на глаз) байт 300. Так что 2кБ памяти на ядро - это неслыханная роскошь. Я так думаю 512 бы хватило за глаза.

USERHOME
30.06.2014, 01:23
Беру произвольный 48к спек с системной шиной.

Хочу через системный разьем подключить ардуину и писать в память спека нужные мне данные. Для начала в область экрана.



Я делал на АП6 ИР23 захват с 128 Пентагона на 48 Ленинград передачу любого байта памяти. На 48 Ленинграде на бейсике писал мини прогу по обслуживанию портов ввода вывода. Пару строчек буквально....

Правильно написали про Z-состояние Z-80 BUSRQ/ в первую очередь нужно перевести Z-80 в "третье" состояние

(... у меня так пауза сделана, железно работает... например играешь..играешь и телефон позвонил... тумблер щёлк и стоп-машина.

Только у меня после передачи очередного байта портилась ячейка памяти из-за циклов регенерации, нужно предусмотреть останов отправки следующего байта на время регенерации ... скорее как мне кажется по сигналу типа RFSH/ от схемы ULA ведь в этот момент идёт железная регенерация от ULA-схемы компьютера.

Скорее придётся Ардуину с ПЛИСом скрестить для уменьшения кол-ва корпусов.
А так можно управлять вместо Z-80 ША и ШД и ШУ....

Но можно и с извратом TAP модуль с ардуины в спек ... или через параллельный порт связать два устройства

Только в спеке ПЗУ поправить на автозагрузку с чего угодно


Вот по этой схеме делал сам себе (в схеме есть неточности и она загружается мелкой)

Здесь Картинка поболее размером/ Скачать (https://app.box.com/s/0s4ytaxh2vl5cx3tt93k)


http://zx-pk.ru/attachment.php?attachmentid=48590&stc=1&d=1404077935

USERHOME
30.06.2014, 01:54
Я сам выводил с атмеги128 на ВГА картинку вполне годного качества.

Вот до этого я не дошёл ещё.... в планах есть желание освоить, но мозг не доходит пока

AlexFantasy
10.07.2014, 22:13
Я так понимаю нужно юзать контакты A0-A16?
A0...A15 :) т.е. 16 адресов а не 17

Barmaley_m
28.09.2014, 11:37
Во-первых я предлагаю определиться с терминологией.

Запись в память через системный разъем, минуя проц - это называется "прямой доступ к памяти", он же DMA. Поэтому, как бы ни было реализовано то, что хочет автор - это будет DMA.

Во-вторых, в начале 90х в Харькове известным железячником V.M.G. был изобретен девайс "Диджитайзер", то есть плата видеозахвата. Она в реальном времени отправляла в экранную область оцифровку изображения, поступавшего на плату по видеовходу. Можно откопать схему этого устройства (оно было реализовано на рассыпухе) и покурить, как там что сделано.

В-третьих, проц действительно лучше всего останавливать сигналом BUSRQ. Можно вообще посадить BUSRQ на землю, тогда проц все время будет остановлен, и шина будет в нашем распоряжении.

Чтобы управлять доступом в память, нужно генерировать следующие сигналы: адресная шина (A0-A15), шина данных (D0-D7), шина управления: MREQ, RD, WR. Итого 27 сигналов минимум. Некоторые из них (A15, A16, BUSRQ) можно посадить на постоянный уровень, так как они не изменяются. Если ног микроконтроллера не хватает для управления остальными - можно организовать мультиплексирование адреса и данных на одной шине, как это сделано, например, в 8051. Использовать регистры типа ИР22, ИР23, ИР27.

Что касается разрешения конфликтов между устройством на шине Z80 и видеоконтроллером - то лучше для простоты начать с безвейтовых клонов: Пентагон, Орель БК-08. Такие клоны гарантируют цикл доступа в память при обращении процессора без задержек, по крайней мере, каждые два такта процессора. Потренировавшись на таких клонах, можно перейти к оригинальному синклеру или клонам с вейтами.

Если необходимо синхронизироваться со схемой спека, и есть доступ только к 3.5МГц на системном разъеме - то для повышения частоты можно использовать ФАПЧ (PLL). Многие микроконтроллеры имеют встроенный ФАПЧ для умножения частоты, например, dsPIC33. Правда, надо обязательно смотреть датащит на предмет минимальной и максимальной входной частоты ФАПЧ, иначе умножить не получится.

А вообще, для данной задачи, в синхронизации нет особой необходимости. Следует выдерживать "консервативные" длительности импульсов обращения к памяти, с запасом, чтобы сработало при любых фазовых соотношениях тактовой частоты спектрума и микроконтроллера. Иногда будет возникать метастабильность, и схема будет глючить, но это будет происходить не так уж часто, а автор сказал, что сбои ему не критичны.

Jimmy Falcon
30.09.2014, 03:12
Чтобы управлять доступом в память, нужно генерировать следующие сигналы: адресная шина (A0-A15), шина данных (D0-D7), шина управления: MREQ, RD, WR.


Ещё на IORQ надо "1" подать.



А вообще, для данной задачи, в синхронизации нет особой необходимости.


А с регенерацией DRAM как быть?

doorsfan
30.09.2014, 18:25
DRAM регенерируется видеоконтроллером во время прорисовки картинки.
Смотрите на схему любого клона с одним полем памяти, как раскиданы видеоадреса на мультиплексорах.