PDA

Просмотр полной версии : Эмуляция ПЗУ с помощью МК



research
16.02.2012, 15:44
Подозреваю, что тема - баян. Но, поверхностный поиск не показал готового решения.
Заказал плату пентагона, а искать ПЗУшку с УФ, ровно как и паять программатор достаточно лениво.
Есть ли готовое решение на какой-нибудь AVR ATMEGA?

Подозреваю, что для реализации достаточно 1 кирпича + AVR поддерживают Self programming, т.е. прошивку можно шить на ходу. Да и сам AVR шьется элементарно.

Да и платку-переходник заказать в том же резоните не проблема, ровно как и отутюжить.

Titus
16.02.2012, 15:48
Теоретически, можно, если микруха многоножка. Только на AVR вряд ли скорости хватит для работы в виде ПЗУ на частоте 3.5Мгц.

CodeMaster
16.02.2012, 15:56
Да и платку-переходник заказать в том же резоните не проблема

Цена будет равняться стоимости готового программатора.


ровно как и паять программатор достаточно лениво

У вас там в Питере спектрумистов, куда ни плюнь, найди того кто зашьёт ПЗУ.

research
16.02.2012, 16:15
CodeMaster само ПЗУ надо искать, и время тратить.

Titus в теории, за 5-7 тактов уж байт-то из таблицы можно выбрать. Другое дело, что я не в курсе как там дело с таймингами.
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц.

Titus
16.02.2012, 16:18
Titus в теории, за 5-7 тактов уж байт-то из таблицы можно выбрать. Другое дело, что я не в курсе как там дело с таймингами.
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц.
Я тоже не в курсе.
Но, на сколько помню, AVR - это 16 мипсов. Имхо, этого может оказаться маловато.

skyther
16.02.2012, 16:28
Тогда уж статическое ОЗУ и мк для начальной заливки.

CodeMaster
16.02.2012, 16:32
Тогда уж статическое ОЗУ и мк для начальной заливки.

Ещё чуть-чуть и Пентагон уже не нужен будет ;-)

skyther
16.02.2012, 16:40
а вообще флеш можно и на первом ленине шить на горячую...

research
16.02.2012, 16:44
Я тоже не в курсе.
Но, на сколько помню, AVR - это 16 мипсов. Имхо, этого может оказаться маловато.

20mips та же атмега164. Другое дело, найти экземпляр с достаточным количеством Flash.

---------- Post added at 16:44 ---------- Previous post was at 16:42 ----------


Ещё чуть-чуть и Пентагон уже не нужен будет ;-)

ну, ... уменя еще самый первый радио 86рк лежит, который был заброшен в 12 лет на прошивке ПЗУ... так было бы удобно иметь кирпич заменяющий 573 серию :)

ZEK
16.02.2012, 16:57
20mips та же атмега164
+ буфер на шину данных что который по OE=0 будет открываться, и 164 не хватит, надо код AVR где то хранить, места пустого как бы найти можно, но проблема в том что AVR код надо будет в начале адресного пространства.

research
16.02.2012, 16:59
мега может до 30мА тянуть на выход, и до 150мА в совокупности, не уж-то одним камнем не обойтись?

CodeMaster
16.02.2012, 17:01
который был заброшен в 12 лет на прошивке ПЗУ...

За 12 лет многое изменилось.


иметь кирпич заменяющий 573 серию

Он называется флеш, например W29EE512 И программатор есть флешер (вроде даже работает)

Но отговаривать не буду, может и правда сделаешь ;-) Только делай так: первым стартует ATMega, она пишет код ПЗУ в нулевую страницу ОЗУ, блокирует её на запись и снимает резет с ЦПУ. Что бы не искать ёмкую ATMega, используй SPI-флеш с современных материнок (например W25X80туда можно поместить 64 прошивки ПЗУ). Скорость ATMega будет совсем не критична, главное достаточное кол-во выводов. Мне это для другого надо, но вдруг ты сделаешь ;-)

ZEK
16.02.2012, 17:09
мега может до 30мА тянуть на выход, и до 150мА в совокупности, не уж-то одним камнем не обойтись?
проблема в том что надо очень быстро реагировать на OE, что бы не создавать коллизий на шине данных

---------- Post added at 16:09 ---------- Previous post was at 16:07 ----------


и снимает резет с ЦПУ
не reset а dmareq, при reset у проца не все ноги в 3 состоянии

research
16.02.2012, 17:21
Но отговаривать не буду, может и правда сделаешь ;-) Только делай так: первым стартует ATMega, она пишет код ПЗУ в нулевую страницу ОЗУ, блокирует её на запись и снимает резет с ЦПУ. Что бы не искать ёмкую ATMega, используй SPI-флеш с современных материнок (например W25X80туда можно поместить 64 прошивки ПЗУ). Скорость ATMega будет совсем не критична, главное достаточное кол-во выводов.

для этого надо а) теневую раму иметь, б) потребуются больше сигналов, чем те, что идут на ПЗУ. На вскидку, получается очередная прослойка между Z80 и платой пентагона.

SPI Flash чем программировать? у меня только тупенький AVR910 и PICkit3

---------- Post added at 17:21 ---------- Previous post was at 17:19 ----------


проблема в том что надо очень быстро реагировать на OE, что бы не создавать коллизий на шине данных

ОЕ что за нога? по идее, у меги есть ноги безусловных прерываний. можно на прерывание повесить out z80,R16 . главное R16 успеть наполнить содержимым.

research
16.02.2012, 17:33
Быстренько нашел atmega644. есть DIP40, есть smd64
64К флэш. Остальное можно и с SD подкачать, или USB. Зачем еще всякие SPI и I2C...

CodeMaster
16.02.2012, 17:33
для этого надо а) теневую раму иметь,

Этот кусок ОЗУ всё-равно без дела висит


б) потребуются больше сигналов, чем те, что идут на ПЗУ. На вскидку, получается очередная прослойка между Z80 и платой пентагона.

Чуток побольше, можно и заМГТФить


SPI Flash чем программировать?

http://monitor.net.ru/forum/files/spiflashshemscv4_784_705.jpg

skyther
16.02.2012, 17:49
или USB
оно что, всё время к пц воткнуто будет?

ZEK
16.02.2012, 17:50
ОЕ что за нога?
сигнал разрешающий ПЗУ выставлять данные на шину (при OE=1 или CS=1 шинад данных пзу должна быть в состоянии высокого импенданса). Без буфера надо будет еще переключать шину данных в/из Z состояния (переключать направление порта). Caro именно таким способом сделал безвейтовый (на 3.5мгц Z80) контролер клавиатуры на AVR 20Мгц, за счет буфера.

research
16.02.2012, 17:57
мде, песчинка обрастает кучей подробностей.

CodeMaster
16.02.2012, 17:57
оно что, всё время к пц воткнуто будет?

А чего, зато без программатора ;-)

Дмитрий
16.02.2012, 17:59
atmega644. есть DIP40, есть smd64
64ногого не узрел, но 44х ногий стоит уж дюже дорого, дешевле собрать флешер и купить пару 29ХХХ флешек.

research
16.02.2012, 18:05
дык в 64к влезет все, что надо. остальное с SD прочитать можно. Самое дорогое в SD- разъем, карточку до гига на помойке можно найти.

---------- Post added at 18:05 ---------- Previous post was at 18:02 ----------


64ногого не узрел, но 44х ногий стоит уж дюже дорого, дешевле собрать флешер и купить пару 29ХХХ флешек.

7 баксов не дешего, но приемлемо.
можно задуматься от кортекс-3, но тот, сцобака, 3.3В, это значит ставить буферы.

Titus
16.02.2012, 18:06
можно задуматься от кортекс-3, но тот, сцобака, 3.3В, это значит ставить буферы.
5в толерантен вроде.

CodeMaster
16.02.2012, 18:13
можно задуматься от кортекс-3

О! 32 bits MCU, может готовый пентагон уже купить?

research
16.02.2012, 21:05
я не очень верю в готовые пентагоны. самый лучший МГТФ - распаянный своими руками. к тому же, покусился на SL1.4 чтобы поменьше допиливать, и поменьше прошивать.
В заначке вроде есть пара ВГшек и AY найду...

zst
16.02.2012, 21:16
Тогда уж статическое ОЗУ и мк для начальной заливки.
Лучше заливка при необходимости новых прошивок во FLASH с помощью мк (http://zx.pk.ru/showthread.php?t=3947). При этом компьютер дорабатывать не придется. И схема подключения мк к FLASH проще.

Идея загрузки в статическое ОЗУ c SD тоже хорошая, но труднее сделать.
Я тоже одно время хотел загружать прошивку из ATMEGA128. Основная прошивка размером до 64 Кбайт прямо из мк. Если надо еще, то другие с SD.

Лучше все-таки эмуляция ПЗУ с помощью FLASH, предварительно настроенной с помощью мк.

research
16.02.2012, 22:46
Хотелось сделать все в 1 доступный чип

Orionsoft
17.02.2012, 02:03
не забываем про 27W512 с возможностью эл.стирания .

research
17.02.2012, 17:38
Только ее не купить даже в digikey
А AVRку если напрячься, можно купить и в магазине.

solegstar
17.02.2012, 17:44
не забываем про 27W512 с возможностью эл.стирания .

ну правильно видимо так - W27C512 от Winbond...

CodeMaster
17.02.2012, 17:57
W27C512 от Winbond...

Я предлагал уже W29EE512, её проще найти, но тут религиозные ограничения на использование ПЗУ.

research
17.02.2012, 18:26
Я пока поглядываю сюда: http://www.z80.info/z80ins.txt
Но тут разбито на машинные циклы по 4 такта.
Что можно почитать, чтобы узнать как устроен внутри машинный цикл Z80?

Лелею надежду, что на чтение из ПЗУ есть больше 1 такта. Чтобы успеть успеть выставить адрес, переключить порт данных из 3го состояния и тп.

Как читается ПЗУ? по фронту, по спаду, или как еще?

Blade
17.02.2012, 19:32
Что можно почитать, чтобы узнать как устроен внутри машинный цикл Z80?

Z80 User manual: http://www.zilog.com/docs/z80/um0080.pdf Стр. 12-14.

research
17.02.2012, 21:28
Blade, спасибо, очень ценная инфа!

Как я понимаю, при чтении опкода процессор схватывает данные по фронту третьего такта. И у нас по факту чуть меньше 2х тактов Z80, или, допустим, 10 тактов AVR.
Так понимаю, что аналогичная картина при чтении и записи из/в память.
Жалко спека нет, тянет проверить что и как :) Хоть на 16К "ПЗУ"

HardWareMan
18.02.2012, 10:17
А что мешает делать захват шин и грузить в ОЗУ (http://zx.pk.ru/showthread.php?p=363525#post363525) что надо? Ну и уже обсуждалось (http://zx.pk.ru/showthread.php?t=15921), правда немного с другими отклонениями.

CodeMaster
18.02.2012, 10:38
А что мешает делать захват шин и грузить в ОЗУ что надо?

Уже предлагал


для этого надо а) теневую раму иметь, б) потребуются больше сигналов, чем те, что идут на ПЗУ. На вскидку, получается очередная прослойка между Z80 и платой пентагона.

Если обобщить, то он хочет ПЗУ, которое можно запрограмировать AVR910 или PICkit3

HardWareMan
18.02.2012, 12:25
Если Z80 пашет на 3.5МГц, то я думаю, что 16МГц АТМега128 успеет. По идее, никаких прерываний не надо, все в цикле и код будет что-то типа:

.def Const00 = r16
.def ConstFF = r17
.def DataReg = r18

* * *

ldi Const00,#$00
ldi ConstFF,#$FF
Loop: sbic PIND,0 ; CS
rjmp Loop ;
in ZL,PINB ; ADL
in ZH,PINC ; ADH
elpm DataReg,Z ;
out PORTA,DataReg ;
Wait0: sbic PIND,1 ; OE
rjmp Wait0 ;
out DDRA,ConstFF ;
Wait1: sbis PIND,1 ;
rjmp Wait1 ;
out DDRA,Const00 ;
rjmp Loop ;
В примере все условно, но думаю и так понятно. Единственное условие для нормальной работы правильное формирование сигнала CS, с обязательной привязкой к MREQ. Полярность при этом пофигу - она нормально корректируется программно (ждать 0 или 1 - не принципиально же?). Возможно, что цикл можно оптимизировать, но есть несколько условий, например, адрес действителен только после активации CS (для этого и нужна привязка к MREQ, к тому же, этот сигнал является самым раним сигналом начала транзакции). Думаю, идея понятна?

research
18.02.2012, 19:38
ну, я бы кусок кода немого по иному реализовал, но общий смысл такой же.
надо еще успеть выход данных из 3го состояния вывести, а потом снова загнать.

HardWareMan
18.02.2012, 22:33
ну, я бы кусок кода немого по иному реализовал, но общий смысл такой же. надо еще успеть выход данных из 3го состояния вывести, а потом снова загнать.
В примере присутствуют команды управления направлением порта данных. ;)

research
19.02.2012, 02:38
выше озвучивал мысль,что можно не опрашивать постоянно ногу выбора кристалла ПЗУ, а повесить изменение ноги на прерывание. Хотя... по потреблению и т.п. ,думаю, что мы ничего не отыграем, но в случае довеска на МК еще каких-нибудь функций, типа чтения с SD, то могли бы.

вощем, по случаю, заажу МК, или поищу из того, что доступно. На руках только DSPIC33/128К.
В них хранение данных организовано через пень, с потерей 33% либо 50%. Но греют душу 40mips, а цена такая же, как у AVR - 6-7 баксов. Правда, надо смотреть как дело с толерантностью по 5 вольтам...

HardWareMan
19.02.2012, 11:18
выше озвучивал мысль,что можно не опрашивать постоянно ногу выбора кристалла ПЗУ, а повесить изменение ноги на прерывание.
Плохая идея. Когда мы на недопц пытались малой кровью сделать эмулятор ВВ55, чтобы заменить клавиатуру у Специалиста, мы достаточно точно рассчитывали тайминги. Получается, что ВМ80 на 2МГц слишком шустр, т.к. AVR требуется 4 такта на вход в прерывание. Только PIC с Parallel Slave Port может успеть. Либо лепить порт на дискретах/CPLD.

zst
19.02.2012, 11:38
Подозреваю, что тема - баян. Но, поверхностный поиск не показал готового решения.
Заказал плату пентагона, а искать ПЗУшку с УФ, ровно как и паять программатор достаточно лениво.
Есть ли готовое решение на какой-нибудь AVR ATMEGA?

Подозреваю, что для реализации достаточно 1 кирпича + AVR поддерживают Self programming, т.е. прошивку можно шить на ходу. Да и сам AVR шьется элементарно.

Да и платку-переходник заказать в том же резоните не проблема, ровно как и отутюжить.
Странная у вас тема. То вам лениво паять программатор и нужно готовое решение на AVR. Вам перложили готовое решение на AVR - программатор FLASHER. При этом его можно спаять на макетке.

Но вам не лениво разрабатывать с нуля аналог на более дорогом AVR. Дело, наверно, не в лени. А вам нужно именно на AVR, даже если это будет труднее и дороже.

research
19.02.2012, 14:52
zst
к программатору прилагается ПЗУ и обвес. я предпологаю обойтись в один камень, и печатку стилизованную под 28 ногий DIP. На марке МК свет клином не сошелся, просто доступно, производительно и толерантно к 5В, с необходимым объемом памяти как раз некоторые модели AVR.


HardWareMan, мде, достаточно печально. ну да ладно.

Ewgeny7
20.02.2012, 11:44
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц
ЦЦ - не Мекка, присутствие там не обязательно.

research
20.02.2012, 23:04
Для тех, у кого проблемы со зрением, повторяю, речь шла об участии, а не присутствии.

skyther
21.02.2012, 00:35
А кто мешает сделать на плис с 5В выходами? В такты точно уложитесь, из обвязки только конф. пзу и стаб. питания.
Купить нельзя? Так закажите.

ArtemKuchin
09.04.2012, 09:10
Прочел ответы, вроде не нашел того, что сейчас напишу.

В Z80 есть линия WAIT, она как раз используется для того, что процессор жда тормозную память (см раздел Controlling Memory speed стр 30 в даташите на Z80).

Ну так что мешает выставить эту линию и формировать ответ за запрос CPU довольно долго?

Мне кажется должно сработать.

HardWareMan
09.04.2012, 14:09
Это все верно, но как быть с программами, которые чувствительны к скорости работы процессора?

ArtemKuchin
09.04.2012, 23:25
Ну тогда МК и к нему SRAM чип на кэш.
В МК или в отдельной флэшке можно хранить ром, причем можно даже зажать.
При включени я перелить в срам и пусть оттуда работает.
Зачем огород? Тут от задачи зависит, наличие МК позволяет модифицировать ром или выбирать из пачки. Разумеется, все это можно и на плис (fpga или cpld) сделать, но, например, мне будет в 10 раз проще и быстрее это сделать на мк, так как опыт есть.
По деньгам считать надо, что дешевле МК (с нормальной память 32-64К для хранения ROM) + SRAM ан 16К или SRAM+FLASH+CPLD/FPGA. Мне кажется с МК дешевле выйдет.

HardWareMan
10.04.2012, 05:54
Ну тогда МК и к нему SRAM чип на кэш.
В МК или в отдельной флэшке можно хранить ром, причем можно даже зажать.
Мы говорим не о том, что мало места или ПЗУ контроллера медленное (оно то как раз нормальное, даже в той же атмега128). Мы говорим о том, что цикл обращения к памяти процессором слишком короткий, чтобы обычный AVR на стандартной скорости (8МГц а может и 16МГц) не успеет схавать два байта адреса и выплеснуть данные. Можно, конечно, сделать всякие ухищрения, типа адреса из порта грузить сразу в Z, но все равно это минимум 4 команды (чтение двух адресов, чтение байта из ПЗУ и выдача на порт), а еще есть 4 такта на вход в прерывание. Можно конечно крутиться в цикле, ожидая обращения, но это сократит до 1 такта на вход.
С другой стороны, с Z80 может быть проще, т.к. его MREQ встает гораздо раньше.

ArtemKuchin
10.04.2012, 09:28
Ну вот я предлагаю не мучаться, а выгружать ROM в SRAM и пусть Z80 работает с SRAM напрямую, тогда все будет шустро. По деньгам это не должно быть дорогою. Только не уверен что удасться прямо так напрямую подключить, какая-то обвязка нужна будет.

HardWareMan
10.04.2012, 13:35
Для этого нужно подключить SRAM напрямую на шину Z80, захватить его шины, залить что надо туда контроллером, и потом отпустить Z80. Тут я уже говорил: http://zx.pk.ru/showpost.php?p=363525&postcount=38