Просмотр полной версии : Эмуляция ПЗУ с помощью МК
research
16.02.2012, 15:44
Подозреваю, что тема - баян. Но, поверхностный поиск не показал готового решения.
Заказал плату пентагона, а искать ПЗУшку с УФ, ровно как и паять программатор достаточно лениво.
Есть ли готовое решение на какой-нибудь AVR ATMEGA?
Подозреваю, что для реализации достаточно 1 кирпича + AVR поддерживают Self programming, т.е. прошивку можно шить на ходу. Да и сам AVR шьется элементарно.
Да и платку-переходник заказать в том же резоните не проблема, ровно как и отутюжить.
Теоретически, можно, если микруха многоножка. Только на AVR вряд ли скорости хватит для работы в виде ПЗУ на частоте 3.5Мгц.
CodeMaster
16.02.2012, 15:56
Да и платку-переходник заказать в том же резоните не проблема
Цена будет равняться стоимости готового программатора.
ровно как и паять программатор достаточно лениво
У вас там в Питере спектрумистов, куда ни плюнь, найди того кто зашьёт ПЗУ.
research
16.02.2012, 16:15
CodeMaster само ПЗУ надо искать, и время тратить.
Titus в теории, за 5-7 тактов уж байт-то из таблицы можно выбрать. Другое дело, что я не в курсе как там дело с таймингами.
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц.
Titus в теории, за 5-7 тактов уж байт-то из таблицы можно выбрать. Другое дело, что я не в курсе как там дело с таймингами.
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц.
Я тоже не в курсе.
Но, на сколько помню, AVR - это 16 мипсов. Имхо, этого может оказаться маловато.
Тогда уж статическое ОЗУ и мк для начальной заливки.
CodeMaster
16.02.2012, 16:32
Тогда уж статическое ОЗУ и мк для начальной заливки.
Ещё чуть-чуть и Пентагон уже не нужен будет ;-)
а вообще флеш можно и на первом ленине шить на горячую...
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 серию :)
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 будет совсем не критична, главное достаточное кол-во выводов. Мне это для другого надо, но вдруг ты сделаешь ;-)
мега может до 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
или USB
оно что, всё время к пц воткнуто будет?
ОЕ что за нога?
сигнал разрешающий ПЗУ выставлять данные на шину (при OE=1 или CS=1 шинад данных пзу должна быть в состоянии высокого импенданса). Без буфера надо будет еще переключать шину данных в/из Z состояния (переключать направление порта). Caro именно таким способом сделал безвейтовый (на 3.5мгц Z80) контролер клавиатуры на AVR 20Мгц, за счет буфера.
research
16.02.2012, 17:57
мде, песчинка обрастает кучей подробностей.
CodeMaster
16.02.2012, 17:57
оно что, всё время к пц воткнуто будет?
А чего, зато без программатора ;-)
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В, это значит ставить буферы.
можно задуматься от кортекс-3, но тот, сцобака, 3.3В, это значит ставить буферы.
5в толерантен вроде.
CodeMaster
16.02.2012, 18:13
можно задуматься от кортекс-3
О! 32 bits MCU, может готовый пентагон уже купить?
research
16.02.2012, 21:05
я не очень верю в готовые пентагоны. самый лучший МГТФ - распаянный своими руками. к тому же, покусился на SL1.4 чтобы поменьше допиливать, и поменьше прошивать.
В заначке вроде есть пара ВГшек и AY найду...
Тогда уж статическое ОЗУ и мк для начальной заливки.
Лучше заливка при необходимости новых прошивок во 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го состояния и тп.
Как читается ПЗУ? по фронту, по спаду, или как еще?
Что можно почитать, чтобы узнать как устроен внутри машинный цикл 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.
Подозреваю, что тема - баян. Но, поверхностный поиск не показал готового решения.
Заказал плату пентагона, а искать ПЗУшку с УФ, ровно как и паять программатор достаточно лениво.
Есть ли готовое решение на какой-нибудь AVR ATMEGA?
Подозреваю, что для реализации достаточно 1 кирпича + AVR поддерживают Self programming, т.е. прошивку можно шить на ходу. Да и сам AVR шьется элементарно.
Да и платку-переходник заказать в том же резоните не проблема, ровно как и отутюжить.
Странная у вас тема. То вам лениво паять программатор и нужно готовое решение на AVR. Вам перложили готовое решение на AVR - программатор FLASHER. При этом его можно спаять на макетке.
Но вам не лениво разрабатывать с нуля аналог на более дорогом AVR. Дело, наверно, не в лени. А вам нужно именно на AVR, даже если это будет труднее и дороже.
research
19.02.2012, 14:52
zst
к программатору прилагается ПЗУ и обвес. я предпологаю обойтись в один камень, и печатку стилизованную под 28 ногий DIP. На марке МК свет клином не сошелся, просто доступно, производительно и толерантно к 5В, с необходимым объемом памяти как раз некоторые модели AVR.
HardWareMan, мде, достаточно печально. ну да ладно.
Что до спектрумистов, их реальное число было выяснено в год моего последнего участия в цц
ЦЦ - не Мекка, присутствие там не обязательно.
research
20.02.2012, 23:04
Для тех, у кого проблемы со зрением, повторяю, речь шла об участии, а не присутствии.
А кто мешает сделать на плис с 5В выходами? В такты точно уложитесь, из обвязки только конф. пзу и стаб. питания.
Купить нельзя? Так закажите.
ArtemKuchin
09.04.2012, 10:10
Прочел ответы, вроде не нашел того, что сейчас напишу.
В Z80 есть линия WAIT, она как раз используется для того, что процессор жда тормозную память (см раздел Controlling Memory speed стр 30 в даташите на Z80).
Ну так что мешает выставить эту линию и формировать ответ за запрос CPU довольно долго?
Мне кажется должно сработать.
HardWareMan
09.04.2012, 15:09
Это все верно, но как быть с программами, которые чувствительны к скорости работы процессора?
ArtemKuchin
10.04.2012, 00:25
Ну тогда МК и к нему SRAM чип на кэш.
В МК или в отдельной флэшке можно хранить ром, причем можно даже зажать.
При включени я перелить в срам и пусть оттуда работает.
Зачем огород? Тут от задачи зависит, наличие МК позволяет модифицировать ром или выбирать из пачки. Разумеется, все это можно и на плис (fpga или cpld) сделать, но, например, мне будет в 10 раз проще и быстрее это сделать на мк, так как опыт есть.
По деньгам считать надо, что дешевле МК (с нормальной память 32-64К для хранения ROM) + SRAM ан 16К или SRAM+FLASH+CPLD/FPGA. Мне кажется с МК дешевле выйдет.
HardWareMan
10.04.2012, 06:54
Ну тогда МК и к нему SRAM чип на кэш.
В МК или в отдельной флэшке можно хранить ром, причем можно даже зажать.
Мы говорим не о том, что мало места или ПЗУ контроллера медленное (оно то как раз нормальное, даже в той же атмега128). Мы говорим о том, что цикл обращения к памяти процессором слишком короткий, чтобы обычный AVR на стандартной скорости (8МГц а может и 16МГц) не успеет схавать два байта адреса и выплеснуть данные. Можно, конечно, сделать всякие ухищрения, типа адреса из порта грузить сразу в Z, но все равно это минимум 4 команды (чтение двух адресов, чтение байта из ПЗУ и выдача на порт), а еще есть 4 такта на вход в прерывание. Можно конечно крутиться в цикле, ожидая обращения, но это сократит до 1 такта на вход.
С другой стороны, с Z80 может быть проще, т.к. его MREQ встает гораздо раньше.
ArtemKuchin
10.04.2012, 10:28
Ну вот я предлагаю не мучаться, а выгружать ROM в SRAM и пусть Z80 работает с SRAM напрямую, тогда все будет шустро. По деньгам это не должно быть дорогою. Только не уверен что удасться прямо так напрямую подключить, какая-то обвязка нужна будет.
HardWareMan
10.04.2012, 14:35
Для этого нужно подключить SRAM напрямую на шину Z80, захватить его шины, залить что надо туда контроллером, и потом отпустить Z80. Тут я уже говорил: http://zx.pk.ru/showpost.php?p=363525&postcount=38
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot