Просмотр полной версии : Аппаратная запись в память Спека
Беру произвольный 48к спек с системной шиной.
Хочу через системный разьем подключить ардуину и писать в память спека нужные мне данные. Для начала в область экрана.
Как это можно сделать?
Я так понимаю нужно юзать контакты A0-A16? Но у ардуины нет столько ног. Что делать? А еще ведь D0-D7 нужно использовать?
newart, тормозится процессор по BUSRQ. Ожидается BUSACK. После этого по идее процессор остановлен, шина в нашем распоряжении. Точнее, в распоряжении видеоконтроллера. Как сделать так, чтобы доступ к памяти со стороны твоего устройства и видеоконтроллера не пересекался я хз :(
newart, нужно организовать, т.н. ПДП (DMA). Почитай про ноги Z80 /busrq, /busac в DataSheet.
Как сделать так, чтобы доступ к памяти со стороны твоего устройства и видеоконтроллера не пересекался я хз
Да пусть пересекается. К чему это приведет?
---------- 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.
Мне бы чего попроще. Потери данных при записи не страшны.
Да пусть пересекается. К чему это приведет?
ну, например видеоконтроллер будет читать данные из озу а ты одновременно попытаешься туда чего записать.
У меня нет задачи 100 fps видео крутить
у тебя есть задача очень четко влезть в цикл 280нс, причем фик с ним с одним циклом, тебе фазу терять нельзя будет и на wait реагировать, не потянет
---------- Post added at 12:54 ---------- Previous post was at 12:45 ----------
более реально сэмулировать каке нить пзу на 128/256 бай, что бы там был загрузчик, который себя переписывает в память и уже исполняясь из памяти через порт читал данные, да и то хитро надо будет делать, порциями по 128/256 байт читать, потом пауза что бы мега в подготовила следующую табличку в памяти 256 итд, запускать процесс по сбросу, причем в цикле пока мега отдает 256 байт она ничем заняться не сможет, прерывания все вырубить надо будет и крутиться в цикле из 4-5 команд
ну, например видеоконтроллер будет читать данные из озу а ты одновременно попытаешься туда чего записать.
И? Чем черевато? Глитчем? Так это только плюс.
И? Чем черевато?
тем что некоторые байтики записаны не будут, а если в компе еще и приоритет wr пред rd то может быть что получится ситуация что два выхода будут на одной шине, что есть гут, либо будет писать куда нить отфонаря
тем что некоторые байтики записаны не будут, а если в компе еще и приоритет wr пред rd то может быть что получится ситуация что два выхода будут на одной шине, что есть гут, либо будет писать куда нить отфонаря
Это не страшно.
---------- Post added at 14:16 ---------- Previous post was at 14:16 ----------
Целостность данных меня не волнует.
Это не страшно.
так бы и обозвал тему, "как спалить произвольный спектрум при помощи ардуины через системный разъем"
CodeMaster
05.08.2013, 14:44
Целостность данных меня не волнует.
Вячеслав делает дему с аппаратными спецэффектами...
Вячеслав делает дему с аппаратными спецэффектами...
тогда ему надо решить сначала задачи
1. Определить по сигналам с шины к чему подключен (хотя бы логику арбитра памяти)
2. Для клонов с остановом клока ему еще надо будет определить в каком состоянии видеогенератор тру спектрумов
Это аппаратно напряжно, а софтово на 16-20мгц меге - маловероятно
CodeMaster
05.08.2013, 15:02
тогда ему надо решить сначала задачи
Это только мои догадки, другого практического применения сего изврата я пока не увидел. Хотя с другой стороны, если это дема, то она может наладить связь с мегой и рулить её движениями. Либо это задумывается чисто "аппаратная" дема :-/
тогда только под наши безвейтовые клоны, там арбитр памяти в некоторых рамках подстраивается под то что творит проц или кто за него
research
05.08.2013, 16:07
1) хм.. можно обыграть ардуину как "пзу" и стеком с нее "читать", например.
Я обдумывал замену атмегой ПЗУ, т.к. РФки искать и шить запарно. В теории с геморроем, но должно получиться.
2) DMA мутить трудозатратно, но не невыполнимо, у 128к 2 экрана, и пока видеоконтроллер дрючит основной экран, можно гадить в теневой.
3) Самый халявный вариант, таки INI. 2/3 экрана 64000 тактов. еще на музычку останется.
4) выдрать из панельки зетник, воткнуть вместо него ардуину :) Она станет процом, а остальное будет видеть как набор периферии. Будет Sky Net
я не шарю сильно, но проц же не знает, какая там логика в компах, он же тупо выставляет на шину адрес + сигнал записи в память по своей временной диаграмме. почему не захватив шину делать так же? или логика в спеке сильно заточена под времянки проца и даже +-1 такт все сломает?
research
05.08.2013, 17:19
Проц надо вовремя тормознуть, тогда он не будет долбиться в память.
В память будет долбиться видеоконтроллер и схема регенерации, т.к. обновление экрана со скоростью 50Гц никто не отменял, а ОЗУ - динамическое.
Мегу, в идеале, тактировать от спековского генератора 14МГц, чтобы фазы совпадали и были кратными. Но ардуина тут плохой помощник, у него свой генератор.
почему не захватив шину делать так же? или логика в спеке сильно заточена под времянки проца и даже +-1 такт все сломает?
даже полтакта
DMA мутить трудозатратно, но не невыполнимо, у 128к 2 экрана, и пока видеоконтроллер дрючит основной экран, можно гадить в теневой.
ключевой момент что шина данных одна на 2 экрана, процессор, регистры защелки памяти итд и пофик какой экран выводится
---------- Post added at 16:36 ---------- Previous post was at 16:35 ----------
Проц надо вовремя тормознуть, тогда он не будет долбиться в память.
в резинках проц тормозят остановом клока, по определенным фазам луны улы
В клонах с прозрачных доступом проца к памяти ула подстраивается под проц, а не подстраивает проц под себя, поэтому и писал про безвейтовые компы, но фазу RAS/ всеравно надо, по ней переключаются фазы проц/ула
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
Есть еще мысль как-то связать два спектрума между собой. Что-бы нормальная работа каких то программ порождала нойз на втором спектруме.
Ардуина во всем это безпределе не главный элемент, можно и без нее.
Окончательно раcпугал железячников. :)
newart, берешь ZSMC (http://zx-pk.ru/showthread.php?t=10952) и программишь под свои нужды, что правда не под фирменный спек, а под Pent/KAY и пр... а так твои условия выполняются - устройство рисует на экране с помощью ПДП.
В клонах с прозрачных доступом проца к памяти ула подстраивается под проц, а не подстраивает проц под себя, поэтому и писал про безвейтовые компы, но фазу RAS/ всеравно надо, по ней переключаются фазы проц/ула
Еще бы знать клоны спека с прозрачным доступом :)
В основном, отечественные спекки построены по синхронной модели, т.е. никто не под кого не подстраивается. Все четко разделено на фазы с четкими времянками. Даже использование вайта укладывается в ту же модель без проблем.
По сути можно и на Атмеге подстроится под необходимый спек. Нужно только синхронно выдавать сигналы чтения и записи. Для начала можно подстроится по импульсу M1, который длится 2 такта - т.е. определить когда приходят клоки на проц. Настраиваешь таймер меги на те же клоки. И все операции записи и чтения, т.е. выставление на шину данных и адресов синхронизировать по тому таймеру. Ну и анализ вайта и на всякий случай тоже необходим. Как это сделать программно, другой вопрос. И кстати на запись данных ориентируйся на 3 такта Z80 как минимум, тогда ты точно попадешь в память. 2 такта для синхронных машин - слишком муторно, нужна синхронизация еще и по фазам видео/проц, в простонародии H1
По сути можно и на Атмеге подстроится под необходимый спек. Нужно только синхронно выдавать сигналы чтения и записи. Для начала можно подстроится по импульсу M1, который длится 2 такта - т.е. определить когда приходят клоки на проц. Настраиваешь таймер меги на те же клоки. И все операции записи и чтения, т.е. выставление на шину данных и адресов синхронизировать по тому таймеру. Ну и анализ вайта и на всякий случай тоже необходим. Как это сделать программно, другой вопрос. И кстати на запись данных ориентируйся на 3 такта Z80 как минимум, тогда ты точно попадешь в память. 2 такта для синхронных машин - слишком муторно, нужна синхронизация еще и по фазам видео/проц, в простонародии H1
Из этого всего следует что самый простой вариант это вообще отключить Z80?
Если он тебе там не нужен, то можно просто вытащить из панельки. А если нужен, то рули захватом шины.
Только в первом случае тебе придется самому пытаться определить фазу клоков, а во втором. Сначала смортишь как работает проц по дергиваниям M1 а затем его просто блокируешь захватом шины.
Ток задача изначально была - произвольный спек, а резинки это останов клока
И таймер даже если подстроит то всеравно траблы будут, фазы разползуться, проц наверное стоит оставить, периодически отпускать его от захвата шины и подстаивать фазу, в общем гемор еще тот
И таймер даже если подстроит то всеравно траблы будут, фазы разползуться, проц наверное стоит оставить, периодически отпускать его от захвата шины и подстаивать фазу, в общем гемор еще тот
Ну автор вроде сложностей не боится :)
На самом деле, нет ничего проще.
Необходимо только взять клок хоста, чтоб не генерить в схему рандомные глитчи.
Клоков может быть 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. Делать это синхронно с его клоком.
Беру произвольный 48к спек с системной шиной.
Хочу через системный разьем подключить ардуину...
Зачем тебе это тормозилово с микроскопической памятью? Поставь хотя бы PIC32 (http://nedocon.com/store/ncpu32/)...
Ну давайте уже поставим Allwinner A10 (для нищебродов подойдет и 8-ядерный p8x32a - Parallax Propeller - за 5 баксов)
8-ядерный p8x32a - Parallax Propeller - за 5 баксов)
Что то смутно я представляю, зачем такое чудо создано. В чем прикол 8 ядер при мизерной памяти ROM и ОЗУ
Прикол вероятно в том, что есть вагон мелких тасок, которые тот же зетник выполняет, бегая как *****й веник по подпрограммам и интам, и которые можно раздать ядрам, которые весьма универсальны, чтоб быть чем угодно и выполнять быстро что угодно. ВНЕЗАПНО, так же устроены шейдыры в современных видеокартах. Наверное, им бы следовало вместо 200 ядер повесить один пентиум. Надо им сказать.
Памяти у них совсем не мало - по 2 кило на литсо.
Ну давайте уже поставим Allwinner A10 (для нищебродов подойдет и 8-ядерный p8x32a - Parallax Propeller - за 5 баксов)
A10 в DIP-копусе нету, а пропеллер слишком особенный - для него даже на нормальных сях не покодишь...
Ой, когда это спектрумщиков останавливали такие мелочи... :)
Памяти у них совсем не мало - по 2 кило на литсо.
Ну и что это дает, если всего памяти на всех 32кб.
А скока надо?
Мне трудно сказать, я лично с этим микроконтроллером не сталкивался но 32 кб на 8 ядер явно маловато будет. :)
Вот, к примеру, что бы он мог делать в спектруме?
А что ему делать в спектруме?.. (чешу репу)
А propos, что ему делать:
http://www.findthatfile.com/search-2920911-hMP4/video-download-lft-turbulence-h264-capture-720x576-mp4.htm
http://www.findthatfile.com/search-2920911-hMP4/video-download-lft-turbulence-h264-capture-720x576-mp4.htm
Как то не верится что эта фигня в 32кб вертится.
А то, что эта (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
А то, что эта (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
Честно сказать, не верится. Но автор видимо гениален, раз на микроконтроллерах такое вытворяет.
Сорцы некоторых демок доступны на сайте автора, остальные видимо буду доступны со временем.
---------- 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 байт памяти.
Сорцы некоторых демок доступны на сайте автора, остальные видимо буду доступны со временем.
---------- 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 :)
Дада :) КОЕ - типичный скандинав ))
Hacker VBI
07.08.2013, 22:14
Этот Линус ещё и 4 канала звука генерит в процессе...
8,5 кб, говоришь?
Чо "я говорю". Возьми да прочитай спецификацию МК.
На самом деле, у атмела очень некислая архитектура. Инструкции в основном 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 регенерируется видеоконтроллером во время прорисовки картинки.
Смотрите на схему любого клона с одним полем памяти, как раскиданы видеоадреса на мультиплексорах.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot