С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я пока поглядываю сюда: http://www.z80.info/z80ins.txt
Но тут разбито на машинные циклы по 4 такта.
Что можно почитать, чтобы узнать как устроен внутри машинный цикл Z80?
Лелею надежду, что на чтение из ПЗУ есть больше 1 такта. Чтобы успеть успеть выставить адрес, переключить порт данных из 3го состояния и тп.
Как читается ПЗУ? по фронту, по спаду, или как еще?
Z80 User manual: http://www.zilog.com/docs/z80/um0080.pdf Стр. 12-14.
Blade, спасибо, очень ценная инфа!
Как я понимаю, при чтении опкода процессор схватывает данные по фронту третьего такта. И у нас по факту чуть меньше 2х тактов Z80, или, допустим, 10 тактов AVR.
Так понимаю, что аналогичная картина при чтении и записи из/в память.
Жалко спека нет, тянет проверить что и как Хоть на 16К "ПЗУ"
А что мешает делать захват шин и грузить в ОЗУ что надо? Ну и уже обсуждалось, правда немного с другими отклонениями.
Если Z80 пашет на 3.5МГц, то я думаю, что 16МГц АТМега128 успеет. По идее, никаких прерываний не надо, все в цикле и код будет что-то типа:
В примере все условно, но думаю и так понятно. Единственное условие для нормальной работы правильное формирование сигнала CS, с обязательной привязкой к MREQ. Полярность при этом пофигу - она нормально корректируется программно (ждать 0 или 1 - не принципиально же?). Возможно, что цикл можно оптимизировать, но есть несколько условий, например, адрес действителен только после активации CS (для этого и нужна привязка к MREQ, к тому же, этот сигнал является самым раним сигналом начала транзакции). Думаю, идея понятна?Код:.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 ;
ну, я бы кусок кода немого по иному реализовал, но общий смысл такой же.
надо еще успеть выход данных из 3го состояния вывести, а потом снова загнать.
выше озвучивал мысль,что можно не опрашивать постоянно ногу выбора кристалла ПЗУ, а повесить изменение ноги на прерывание. Хотя... по потреблению и т.п. ,думаю, что мы ничего не отыграем, но в случае довеска на МК еще каких-нибудь функций, типа чтения с SD, то могли бы.
вощем, по случаю, заажу МК, или поищу из того, что доступно. На руках только DSPIC33/128К.
В них хранение данных организовано через пень, с потерей 33% либо 50%. Но греют душу 40mips, а цена такая же, как у AVR - 6-7 баксов. Правда, надо смотреть как дело с толерантностью по 5 вольтам...
Последний раз редактировалось research; 19.02.2012 в 03:32.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)